Isam Ishaq

14 papers B 1Misc 1Journal 6Unranked 6
YearRankTypeTitle / Venue / Authors
2023 conf
AIIoT
Emma Qumsiyeh, Isam Ishaq
2023 J jnl
J. Smart Cities Soc.
Daniel Voskergian, Isam Ishaq
2017 conf
TALE
Salaheddin Odeh, Omar Dhaher, Isam Ishaq, Manfred Manthey, Hanna Abdel Nour, Karl-Heinz Droge, Tarek Abu Leil, Kirsten Freimann
2016 conf
WF-IoT
Enri Dalipi, Floris Van Den Abeele, Isam Ishaq, Ingrid Moerman, Jeroen Hoebeke
2016 J jnl
Sensors
Isam Ishaq, Jeroen Hoebeke, Ingrid Moerman, Piet Demeester
2016 J jnl
Ad Hoc Networks
Isam Ishaq, Jeroen Hoebeke, Ingrid Moerman, Piet Demeester
2014 J jnl
Int. J. Web Grid Serv.
Isam Ishaq, Jeroen Hoebeke, Jen Rossey, Eli De Poorter, Ingrid Moerman, Piet Demeester
2014 J jnl
Sensors
Isam Ishaq, Jeroen Hoebeke, Floris Van Den Abeele, Jen Rossey, Ingrid Moerman, Piet Demeester
2013 Misc conf
SenSys
Floris Van Den Abeele, Jeroen Hoebeke, Isam Ishaq, Girum Teklemariam, Jen Rossey, Ingrid Moerman, Piet Demeester
2013 B conf
DCOSS
Isam Ishaq, Jeroen Hoebeke, Floris Van Den Abeele, Ingrid Moerman, Piet Demeester
2013 J jnl
J. Sens. Actuator Networks
Isam Ishaq, David Carels, Girum Teklemariam, Jeroen Hoebeke, Floris Van Den Abeele, Eli De Poorter, Ingrid Moerman, Piet Demeester
2012 conf
IMIS
Isam Ishaq, Jeroen Hoebeke, Jen Rossey, Eli De Poorter, Ingrid Moerman, Piet Demeester
2012 conf
GreenCom
Isam Ishaq, Jeroen Hoebeke, Ingrid Moerman, Piet Demeester
2012 conf
SCVT
Jeroen Hoebeke, David Carels, Isam Ishaq, Girum Ketema, Jen Rossey, Eli De Poorter, Ingrid Moerman, Piet Demeester
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