Victor Martinez

11 papers Journal 5Unranked 6
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
Victor Martinez, Armando Angrisani, Ekaterina Pankovets, Omar Fawzi, Daniel Stilck França
2023 J jnl
CoRR
Manuel Lagunas, Brayan Impata, Victor Martinez, Virginia Fernandez, Christos Georgakis, Sofia Braun, Felipe Bertrand
2022 J jnl
CoRR
Victor Martinez, Guilhaume Leroy-Meline
2021 conf
CACIC
Victor Martinez, Laura Lanzarini, Franco Ronchetti
2020 J jnl
Remote. Sens.
Ricardo Torres, Yuri Artioli, Vassilis Kitidis, Stefano Ciavatta, Manuel Ruiz-Villarreal, Jamie D. Shutler, Luca Polimene, Victor Martinez, Claire Widdicombe, E. Malcolm S. Woodward, Timothy J. Smyth, James R. Fishwick, Gavin H. Tilstone
2014 conf
CCE
Fernando Guerrero, Victor Martinez, Octavio García, Daniel Librado Martinez-Vazquez
2013 conf
CLEF (Working Notes)
Lucia Hervas, Victor Martinez, Irene Sanchez, Alberto Díaz
2013 conf
CLEF (Working Notes)
Lucia Hervas, Victor Martinez, Irene Sanchez, Alberto Díaz
2012 J jnl
Expert Syst. Appl.
José A. Mocholí, Victor Martinez, Javier Jaén Martínez, Alejandro Catalá
2012 conf
SBSC
Vaninha Vieira, Adriano Fialho, Victor Martinez, Jailson Brito, Lincoln Brito, Adolfo Duran
2012 conf
CHI Extended Abstracts
Oscar Daniel Camarena Gomez, Rodrigo Juarez Armenta, Hugo Huipet, Victor Martinez
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