Habib Hajimolahoseini

19 papers Misc 1Journal 14Unranked 4
YearRankTypeTitle / Venue / Authors
2024 conf
ENLSP
Habib Hajimolahoseini, Walid Ahmed, Shuangyue Wen, Yang Liu
2024 J jnl
CoRR
Habib Hajimolahoseini, Walid Ahmed, Austin Wen, Yang Liu
2024 conf
ENLSP
Habib Hajimolahoseini, Walid Ahmed, Shuangyue Wen, Yang Liu
2024 J jnl
CoRR
Habib Hajimolahoseini, Walid Ahmed, Austin Wen, Yang Liu
2024 J jnl
CoRR
Habib Hajimolahoseini, Mohammad Hassanpour, Foozhan Ataiefard, Boxing Chen, Yang Liu
2024 J jnl
CoRR
Foozhan Ataiefard, Walid Ahmed, Habib Hajimolahoseini, Saina Asani, Farnoosh Javadi, Mohammad Hassanpour, Omar Mohamed Awad, Austin Wen, Kangling Liu, Yang Liu
2023 J jnl
CoRR
Farnoosh Javadi, Walid Ahmed, Habib Hajimolahoseini, Foozhan Ataiefard, Mohammad Hassanpour, Saina Asani, Austin Wen, Omar Mohamed Awad, Kangling Liu, Yang Liu
2023 J jnl
CoRR
Omar Mohamed Awad, Habib Hajimolahoseini, Michael Lim, Gurpreet Gosal, Walid Ahmed, Yang Liu, Gordon Deng
2023 J jnl
CoRR
Walid Ahmed, Habib Hajimolahoseini, Austin Wen, Yang Liu
2023 J jnl
CoRR
Habib Hajimolahoseini, Omar Mohamed Awad, Walid Ahmed, Austin Wen, Saina Asani, Mohammad Hassanpour, Farnoosh Javadi, Mehdi Ahmadi, Foozhan Ataiefard, Kangling Liu, Yang Liu
2023 J jnl
CoRR
Habib Hajimolahoseini, Walid Ahmed, Yang Liu
2021 J jnl
CoRR
Tianda Li, Yassir El Mesbahi, Ivan Kobyzev, Ahmad Rashid, Atif Mahmud, Nithin Anchuri, Habib Hajimolahoseini, Yang Liu, Mehdi Rezagholizadeh
2019 conf
Canadian AI
Habib Hajimolahoseini, Damian P. Redfearn, Andrew Krahn
2018 Misc conf
ICASSP
Habib Hajimolahoseini, Javad Hashemi, Damian P. Redfearn
2018 J jnl
Artif. Intell. Medicine
Habib Hajimolahoseini, Javad Hashemi, Saeed Gazor, Damian P. Redfearn
2016 conf
CCECE
Habib Hajimolahoseini, Saeed Gazor, Rassoul Amirfattahi
2016 J jnl
IEEE ACM Trans. Audio Speech Lang. Process.
Habib Hajimolahoseini, Rassoul Amirfattahi, Saeed Gazor, Hamid Soltanian-Zadeh
2015 J jnl
IET Signal Process.
Habib Hajimolahoseini, Rassoul Amirfattahi, Hamid Soltanian-Zadeh, Saeed Gazor
2014 J jnl
IET Comput. Vis.
Habib Hajimolahoseini, Rassoul Amirfattahi, Hamid Soltanian-Zadeh
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