Mangala Gowri Nanda

25 papers A* 1A 11Misc 2Journal 3Unranked 8
YearRankTypeTitle / Venue / Authors
2016 conf
ISEC
Mangala Gowri Nanda, S. Arun-Kumar
2013 A conf
OOPSLA
Suparna Bhattacharya, Kanchi Gopinath, Mangala Gowri Nanda
2011 conf
OOPSLA Companion
V. Krishna Nandivada, Mangala Gowri Nanda, Pankaj Dhoolia, Diptikalyan Saha, Anjan Nandy, Anup Ghosh
2011 conf
SIGSOFT FSE
Diptikalyan Saha, Mangala Gowri Nanda, Pankaj Dhoolia, V. Krishna Nandivada, Vibha Sinha, Satish Chandra
2011 A conf
ECOOP
Suparna Bhattacharya, Mangala Gowri Nanda, Kanchi Gopinath, Manish Gupta
2010 A conf
ICST
Mijung Kim, Saurabh Sinha, Carsten Görg, Hina Shah, Mary Jean Harrold, Mangala Gowri Nanda
2010 A conf
BPM
Debdoot Mukherjee, Pankaj Dhoolia, Saurabh Sinha, Aubrey J. Rembert, Mangala Gowri Nanda
2010 conf
ICSE (2)
Mangala Gowri Nanda, Monika Gupta, Saurabh Sinha, Satish Chandra, David Schmidt, Pradeep Balachandran
2009 A* conf
ICSE
Mangala Gowri Nanda, Saurabh Sinha
2009 A conf
OOPSLA
Mangala Gowri Nanda, Senthil Mani, Vibha Singhal Sinha, Saurabh Sinha
2009 conf
OOPSLA Companion
Agastya Nanda, Mangala Gowri Nanda
2009 conf
OOPSLA Companion
Samvida Nanda, Soumya Ramasubramaniam, Sumana Ramasubramaniam, Agastya Nanda, Mangala Gowri Nanda
2008 A conf
ICSOC
Debdoot Mukherjee, Pankaj Jalote, Mangala Gowri Nanda
2008 A conf
ISSTA
Alexey Loginov, Eran Yahav, Satish Chandra, Stephen Fink, Noam Rinetzky, Mangala Gowri Nanda
2007 conf
IEEE SCW
Girish Chafle, Sunil Chandra, Neeran M. Karnik, Vijay Mann, Mangala Gowri Nanda
2006 J jnl
ACM Trans. Program. Lang. Syst.
Mangala Gowri Nanda, S. Ramesh
2005 A conf
OOPSLA
Mangala Gowri Nanda, Christian Grothoff, Satish Chandra
2005 A conf
ICWS
Girish Chafle, Sunil Chandra, Vijay Mann, Mangala Gowri Nanda
2004 conf
WWW (Alternate Track Papers & Posters)
Girish Chafle, Sunil Chandra, Vijay Mann, Mangala Gowri Nanda
2004 A conf
OOPSLA
Mangala Gowri Nanda, Satish Chandra, Vivek Sarkar
2004 J jnl
Int. J. Cooperative Inf. Syst.
Mangala Gowri Nanda, Neeran M. Karnik
2003 Misc conf
SAC
Mangala Gowri Nanda, S. Ramesh
2003 Misc conf
SAC
Mangala Gowri Nanda, Neeran M. Karnik
2000 A conf
ISSTA
Mangala Gowri Nanda, S. Ramesh
1999 J jnl
Softw. Pract. Exp.
Mangala Gowri Nanda, Purandar Bhaduri, Sundeep Oberoi, Amitabha Sanyal
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