Vidhyashree Nagaraju

18 papers A 1C 1Journal 11Unranked 5
YearRankTypeTitle / Venue / Authors
2026 J jnl
Qual. Reliab. Eng. Int.
Fatemeh Salboukh, Priscila Silva, Vidhyashree Nagaraju, Lance Fiondella
2024 conf
ICAA
Karen da Mata, Zakaria Faddi, Priscila Silva, Vidhyashree Nagaraju, Susmita Ghosh, Gökhan Kul, Lance Fiondella
2024 J jnl
CoRR
Shadow Pritchard, Bhaskar Mitra, Vidhyashree Nagaraju
2022 J jnl
SoftwareX
Jacob Aubertine, Kenan Chen, Vidhyashree Nagaraju, Lance Fiondella
2022 conf
HCI (5)
Vidhyashree Nagaraju, Shadow Pritchard, Lance Fiondella
2022 conf
ICSE (NIER)
Shadow Pritchard, Vidhyashree Nagaraju, Lance Fiondella
2022 J jnl
CoRR
Shadow Pritchard, Vidhyashree Nagaraju, Lance Fiondella
2022 C conf
ICMLA
Timothy Flavin, Thomas Steiner, John Reaves, Julian Abhari, Zoe Delap, Bhaskar Mitra, Vidhyashree Nagaraju
2022 J jnl
Ann. Oper. Res.
Joshua Steakelum, Jacob Aubertine, Kenan Chen, Vidhyashree Nagaraju, Lance Fiondella
2022 conf
HCI (37)
A. Shubha Rao, K. Mahantesh, Vidhyashree Nagaraju
2020 A conf
ISSRE
Maskura Nafreen, Melanie Luperon, Lance Fiondella, Vidhyashree Nagaraju, Ying Shi, Thierry Wandji
2020 J jnl
J. Syst. Softw.
Vidhyashree Nagaraju, Chathuri L. Jayasinghe, Lance Fiondella
2019 J jnl
Softw. Test. Verification Reliab.
Vidhyashree Nagaraju, Lance Fiondella, Thierry Wandji
2019 J jnl
SoftwareX
Vidhyashree Nagaraju, Venkateswaran Shekar, Joshua Steakelum, Melanie Luperon, Ying Shi, Lance Fiondella
2018 conf
ISSRE Workshops
Vidhyashree Nagaraju
2017 J jnl
IEEE Trans. Reliab.
Bentolhoda Jafary, Vidhyashree Nagaraju, Lance Fiondella
2017 J jnl
IEEE Trans. Reliab.
Vidhyashree Nagaraju, Lance Fiondella, Panlop Zeephongsekul, Chathuri L. Jayasinghe, Thierry Wandji
2016 J jnl
IEEE Trans. Reliab.
Panlop Zeephongsekul, Chathuri L. Jayasinghe, Lance Fiondella, Vidhyashree Nagaraju
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