Caspar Ryan

36 papers A* 1B 2C 1Journal 9Unranked 22
YearRankTypeTitle / Venue / Authors
2017 conf
WISE (2)
Xuechao Yang, Xun Yi, Caspar Ryan, Ron G. van Schyndel, Fengling Han, Surya Nepal, Andy Song
2017 J jnl
IEEE Access
Kashif Hesham Khan, Caspar Ryan, Ermyas Abebe
2017 J jnl
J. Cloud Comput.
Philip C. Church, Harald Müller, Caspar Ryan, Spyridon V. Gogouvitis, Andrzej Goscinski, Zahir Tari
2017 J jnl
IEEE Access
Kashif Hesham Khan, Caspar Ryan, Ermyas Abebe
2017 J jnl
IEEE Trans. Ind. Informatics
Chaojie Li, Yan Xu, Xinghuo Yu, Caspar Ryan, Tingwen Huang
2017 ch.
Handbook of Big Data Technologies
Philip C. Church, Harald Müller, Caspar Ryan, Spyridon V. Gogouvitis, Andrzej M. Goscinski, Houssam Haitof, Zahir Tari
2015 conf
SmartCity
Philip C. Church, Harald Müller, Caspar Ryan, Spyridon V. Gogouvitis, Andrzej Goscinski, Houssam Haitof, Zahir Tari
2013 J jnl
J. Softw.
Mikhail Perepletchikov, Caspar Ryan, Zahir Tari
2012 J jnl
J. Syst. Softw.
Ermyas Abebe, Caspar Ryan
2011 J jnl
IEEE Trans. Software Eng.
Mikhail Perepletchikov, Caspar Ryan
2011 B conf
NCA
Ermyas Abebe, Caspar Ryan
2011 A* conf
PerCom
Norizam Katmon, Caspar Ryan
2011 B conf
NCA
Ermyas Abebe, Caspar Ryan
2010 J jnl
IEEE Trans. Serv. Comput.
Mikhail Perepletchikov, Caspar Ryan, Zahir Tari
2009 conf
OTM Conferences (1)
Ermyas Abebe, Caspar Ryan
2009 conf
ACSC
Hendrik Gani, Caspar Ryan
2009 conf
ICSOC/ServiceWave Workshops
Michele Mancioppi, Mikhail Perepletchikov, Caspar Ryan, Willem-Jan van den Heuvel, Mike P. Papazoglou
2008 J jnl
J. Softw.
Mikhail Perepletchikov, Caspar Ryan, Keith Frampton, Heinz W. Schmidt
2007 conf
ASWEC
Mikhail Perepletchikov, Caspar Ryan, Keith Frampton, Heinz W. Schmidt
2007 conf
QSIC
Mikhail Perepletchikov, Caspar Ryan, Keith Frampton
2007 conf
ACSC
Sandy Citro, Jim McGovern, Caspar Ryan
2007 conf
ASWEC
Mikhail Perepletchikov, Caspar Ryan, Keith Frampton, Zahir Tari
2007 conf
OTM Conferences (1)
Khoi Anh Phan, Peter Bertók, Andrew Fry, Caspar Ryan
2006 C conf
CollaborateCom
Sandy Citro, Jim McGovern, Caspar Ryan
2006 conf
OTM Workshops (1)
Sandy Citro, Jim McGovern, Caspar Ryan
2006 conf
ARM@Middleware
Hendrik Gani, Caspar Ryan, Pablo Rossi
2006 conf
OTM Workshops (1)
Mikhail Perepletchikov, Caspar Ryan, Keith Frampton
2005 conf
OTM Workshops
Gregory Craske, Caspar Ryan
2005 conf
QSIC
Sandy Citro, Jim McGovern, Caspar Ryan
2005 conf
OTM Workshops
Mikhail Perepletchikov, Caspar Ryan, Keith Frampton
2005 conf
OTM Conferences (1)
Pablo Rossi, Caspar Ryan
2005 conf
IEEE METRICS
Caspar Ryan, Pablo Rossi
2005 conf
ACSC
Caspar Ryan, Atish Gonsalves
2005 conf
OTM Workshops
Mikhail Perepletchikov, Caspar Ryan, Zahir Tari
2004 conf
CoopIS/DOA/ODBASE (2)
Caspar Ryan, Christopher Westhorpe
2003 conf
OTM Workshops
Caspar Ryan, Stephen Perry
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