Nan M. Jokerst

14 papers C 1Journal 4Unranked 9
YearRankTypeTitle / Venue / Authors
2018 conf
IEEE SENSORS
Aditi Dighe, Nan M. Jokerst
2016 conf
IEEE SENSORS
Ozlem Senlik, Callie Woods, Nan M. Jokerst
2009 J jnl
IEEE Trans. Biomed. Circuits Syst.
Nan M. Jokerst, Lin Luan, Sabarni Palit, Matthew Royal, Sulochana Dhar, Martin A. Brooke, Talmage Tyler
2005 conf
ISCAS (2)
Dae-Ik Kim, Mikkel A. Thomas, Jeffrey J. Lillie, Karla S. Dennis, Benita M. Comeau, Martin A. Brooke, Nan M. Jokerst, Stephen E. Ralph, Clifford L. Henderson
2005 conf
ISQED
Chung-Seok (Andy) Seo, Abhijit Chatterjee, Nan M. Jokerst
2004 conf
ACM Great Lakes Symposium on VLSI
Chung-Seok (Andy) Seo, Abhijit Chatterjee, Sang-Yeon Cho, Nan M. Jokerst
2004 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Sungyong Jung, Martin A. Brooke, Nan M. Jokerst, Jin Liu, Youngjoong Joo
2000 J jnl
IEEE Trans. Veh. Technol.
Abelardo López-Lagunas, Sek Meng Chai, Jeffrey Cross, Brent Buchanan, Lawrence A. Carastro, Shih-Cheng Wang, D. Scott Wills, Nan M. Jokerst, Martin A. Brooke, Mary Ann Ingram
2000 C conf
ISCAS
Youngjoong Joo, Martin A. Brooke, Nan M. Jokerst
1999 conf
ISCAS (1)
Jinsung Park, J. A. Tabler, Martin A. Brooke, Nan M. Jokerst, D. Scott Wills
1999 conf
ISCAS (1)
Jae J. Chang, Myunghee Lee, Sungyong Jung, Martin A. Brooke, Nan M. Jokerst, D. Scott Wills
1999 conf
ISCAS (6)
Lawrence A. Carastro, Ravi Poddar, Emily Moon, Martin A. Brooke, Nan M. Jokerst
1997 J jnl
J. Parallel Distributed Comput.
Phil May, Myunghee Lee, Scott T. Wilkinson, Olivier Vendier, Zhuang Ho, Steven W. Bond, D. Scott Wills, Martin A. Brooke, Nan M. Jokerst, April Brown
1995 conf
ARVLSI
Huy Cat, Myunghee Lee, Brent Buchanan, D. Scott Wills, Martin A. Brooke, Nan M. Jokerst
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