Victoria E. Howle

15 papers Journal 13Unranked 1
YearRankTypeTitle / Venue / Authors
2022 J jnl
CoRR
Michael R. Clines, Victoria E. Howle, Katharine R. Long
2021 J jnl
SIAM J. Sci. Comput.
Md. Masud Rana, Victoria E. Howle, Katharine Long, Ashley Meek, William Milestone
2020 J jnl
CoRR
Md. Masud Rana, Victoria E. Howle, Katharine Long, Ashley Meek, William Milestone
2020 J jnl
J. Comput. Appl. Math.
Eugenio Aulisa, Giorgio Bornia, Victoria E. Howle, Guoyi Ke
2018 J jnl
Appl. Math. Lett.
Guoyi Ke, Eugenio Aulisa, Geoffrey Dillon, Victoria E. Howle
2017 J jnl
Numer. Linear Algebra Appl.
Guoyi Ke, Eugenio Aulisa, Giorgio Bornia, Victoria E. Howle
2013 J jnl
SIAM J. Sci. Comput.
Victoria E. Howle, Robert C. Kirby, Geoffrey Dillon
2012 J jnl
Numer. Linear Algebra Appl.
Victoria E. Howle, Robert C. Kirby
2012 J jnl
Sci. Program.
Victoria E. Howle, Robert C. Kirby, Kevin Long, Brian Brennan, Kimberly Kennedy
2009 conf
ICCS (1)
Suzanne M. Shontz, Victoria E. Howle, Patricia D. Hough
2008 J jnl
J. Comput. Phys.
Howard C. Elman, Victoria E. Howle, John N. Shadid, Robert Shuttleworth, Ray Tuminaro
2007 J jnl
SIAM J. Sci. Comput.
Howard C. Elman, Victoria E. Howle, John N. Shadid, David J. Silvester, Ray S. Tuminaro
2006 J jnl
SIAM J. Sci. Comput.
Howard C. Elman, Victoria E. Howle, John N. Shadid, Robert Shuttleworth, Ray S. Tuminaro
2006 ch.
Parallel Processing for Scientific Computing
Patricia D. Hough, Victoria E. Howle
2005 J jnl
SIAM J. Matrix Anal. Appl.
Victoria E. Howle, Stephen A. Vavasis
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