Oleg Alexander

19 papers A 1C 1Journal 3Unranked 14
YearRankTypeTitle / Venue / Authors
2016 conf
CASA
Dan Casas, Andrew W. Feng, Oleg Alexander, Graham Fyffe, Paul E. Debevec, Ryosuke Ichikari, Hao Li, Kyle Olszewski, Evan A. Suma, Ari Shapiro
2016 conf
CVPR Workshops
Andrew Jones, Koki Nagano, Jay Busch, Xueming Yu, Hsuan-Yueh Peng, Joseph Barreto, Oleg Alexander, Mark T. Bolas, Paul E. Debevec, Jonas Unger
2015 conf
SIGGRAPH Emerging Technologies
Andrew Jones, Jonas Unger, Koki Nagano, Jay Busch, Xueming Yu, Hsuan-Yueh Peng, Oleg Alexander, Mark T. Bolas, Paul E. Debevec
2015 conf
SIGGRAPH Talks
Dan Casas, Oleg Alexander, Andrew W. Feng, Graham Fyffe, Ryosuke Ichikari, Paul E. Debevec, Ruizhe Wang, Evan A. Suma, Ari Shapiro
2015 C conf
ICIDS
David R. Traum, Andrew Jones, Kia Hays, Heather Maio, Oleg Alexander, Ron Artstein, Paul E. Debevec, Alesia Gainer, Kallirroi Georgila, Kathleen Haase, Karen Jungblut, Anton Leuski, Stephen Smith, William R. Swartout
2015 conf
I3D
Dan Casas, Oleg Alexander, Andrew W. Feng, Graham Fyffe, Ryosuke Ichikari, Paul E. Debevec, Ruizhe Wang, Evan A. Suma, Ari Shapiro
2015 J jnl
ACM Trans. Graph.
Koki Nagano, Graham Fyffe, Oleg Alexander, Jernej Barbic, Hao Li, Abhijeet Ghosh, Paul E. Debevec
2014 conf
SIGGRAPH Talks
Andrew Jones, Jonas Unger, Koki Nagano, Jay Busch, Xueming Yu, Hsuan-Yueh Peng, Oleg Alexander, Paul E. Debevec
2014 conf
SIGGRAPH Courses
Javier von der Pahlen, Jorge Jimenez, Etienne Danvoye, Paul E. Debevec, Graham Fyffe, Oleg Alexander
2014 J jnl
ACM Trans. Graph.
Graham Fyffe, Andrew Jones, Oleg Alexander, Ryosuke Ichikari, Paul E. Debevec
2014 conf
SIGGRAPH Talks
Koki Nagano, Oleg Alexander, Jernej Barbic, Hao Li, Paul E. Debevec
2014 A conf
IUI
Ron Artstein, David R. Traum, Oleg Alexander, Anton Leuski, Andrew Jones, Kallirroi Georgila, Paul E. Debevec, William R. Swartout, Heather Maio, Stephen Smith
2013 conf
SIGGRAPH Posters
Oleg Alexander, Graham Fyffe, Jay Busch, Xueming Yu, Ryosuke Ichikari, Andrew Jones, Paul E. Debevec, Jorge Jimenez, Etienne Danvoye, Bernardo Antionazzi, Mike Eheler, Zybnek Kysela, Javier von der Pahlen
2013 conf
SIGGRAPH Talks
Graham Fyffe, Andrew Jones, Oleg Alexander, Ryosuke Ichikari, Paul Graham, Koki Nagano, Jay Busch, Paul E. Debevec
2013 conf
SIGGRAPH Posters
Ryosuke Ichikari, Oleg Alexander, Paul E. Debevec
2011 conf
Symposium on Computer Animation
Cyrus A. Wilson, Oleg Alexander, Borom Tunwattanapong, Pieter Peers, Abhijeet Ghosh, Jay Busch, Arno Hartholt, Paul E. Debevec
2011 conf
SIGGRAPH Talks
Cyrus A. Wilson, Oleg Alexander, Borom Tunwattanapong, Pieter Peers, Abhijeet Ghosh, Jay Busch, Arno Hartholt, Paul E. Debevec
2010 J jnl
IEEE Computer Graphics and Applications
Oleg Alexander, Mike Rogers, William Lambeth, Jen-Yuan Chiang, Wan-Chun Ma, Chuan-Chang Wang, Paul E. Debevec
2009 conf
SIGGRAPH Courses
Oleg Alexander, Mike Rogers, William Lambeth, Matt Jen-Yuan Chiang, Paul E. Debevec
redb/extractors/decompiler/bninja/similarity/minhashcustom.py
← Index redb/extractors/decompiler/bninja/similarity/minhashcustom.py python
import numpy as np
import mmh3

class MinHashCustom:
    """
    DTO for an actual MinHash
    <minhash>: a binary sequence of packed int8/32 values
    <minhash_int>: the equivalent representation of <minhash> but as list of int8/32
    """

    _HASH_MAX = 0xFFFFFFFF
    _MINHASH_BITS = 32

    def getSignatureEntrySize(self):
        return 1 if self.MINHASH_BITS <= 8 else 4

    def __init__(self, function_addr=None, minhash_bytes=None, minhash_signature=None, minhash_bits=32):
        self.minhash = b""
        self.minhash_int = []
        if minhash_bits:
            self._MINHASH_BITS = minhash_bits
        if minhash_bytes and minhash_signature:
            raise ValueError("Can use only one keyword argument")
        if minhash_bytes:
            if self._MINHASH_BITS <= 8:
                minhash_signature = np.frombuffer(minhash_bytes, dtype=np.uint8)
            else:
                minhash_signature = np.frombuffer(minhash_bytes, dtype=np.uint32)
            self.setMinHash(minhash_signature)
        elif minhash_signature:
            self.setMinHash(minhash_signature)

        self.shingler_composition = {}
        self.function_addr = function_addr

    def hasMinHash(self):
        return len(self.minhash) > 0

    def getMinHash(self):
        return self.minhash

    def getMinHashInt(self):
        return self.minhash_int

    def setMinHash(self, minhash_signature):
        self.minhash_int = [i % 2 ** self._MINHASH_BITS for i in minhash_signature]
        if self._MINHASH_BITS <= 8:
            self.minhash = np.array(self.minhash_int, dtype=np.uint8).tobytes()
        else:
            self.minhash = np.array(self.minhash_int, dtype=np.uint32).tobytes()

    def getComposition(self):
        return self.shingler_composition

    def scoreAgainst(self, other):
        return self.calculateMinHashScore(self.minhash, other.minhash, minhash_bits=self._MINHASH_BITS)

    @staticmethod
    def getHashMax():
        return MinHashCustom._HASH_MAX

    @staticmethod
    def hashData(data, seed) -> int:
        if isinstance(data, (str, bytes, bytearray)):
            return mmh3.hash(data, seed) & MinHashCustom._HASH_MAX
        elif isinstance(data, (list, tuple)):
            to_hash = "|".join(str(elem) for elem in data)
            return mmh3.hash(to_hash, seed) & MinHashCustom._HASH_MAX
        else:
            raise NotImplementedError(
                f"Type not supported for hashData: {type(data).__name__}"
            )

    @staticmethod
    def calculateMinHashScore(first, second, minhash_bits=32):
        if minhash_bits <= 8:
            first_np = np.frombuffer(first, dtype=np.uint8)
            second_np = np.frombuffer(second, dtype=np.uint8)
        else:
            first_np = np.frombuffer(first, dtype=np.uint32)
            second_np = np.frombuffer(second, dtype=np.uint32)
        return 100.0 * sum(first_np == second_np) / len(first_np)

    @staticmethod
    def calculateMinHashIntScore(first, second):
        score = 0
        num_hashes = len(first)
        if num_hashes:
            for index, part in enumerate(first):
                score += 1 if part == second[index] else 0
            return 100.0 * score / num_hashes
        return 0.0

    @property
    def MINHASH_BITS(self):
        return self._MINHASH_BITS