Cesare Rollo

13 papers B 1Journal 10Unranked 2
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
Ivan Rossi, Flavio Sartori, Cesare Rollo, Giovanni Birolo, Piero Fariselli, Tiziana Sanavia
2025 J jnl
Comput. Biol. Medicine
Giovanni Birolo, Ivan Rossi, Flavio Sartori, Cesare Rollo, Piero Fariselli, Tiziana Sanavia
2025 J jnl
CoRR
Guido Barducci, Ivan Rossi, Francesco Codicè, Cesare Rollo, Valeria Repetto, Corrado Pancotti, Virginia Iannibelli, Tiziana Sanavia, Piero Fariselli
2025 J jnl
CoRR
Alessio Cristofoletto, Cesare Rollo, Giovanni Birolo, Piero Fariselli
2025 J jnl
CoRR
Isabella Caranzano, Corrado Pancotti, Cesare Rollo, Flavio Sartori, Pietro Liò, Piero Fariselli, Tiziana Sanavia
2025 J jnl
CoRR
Giovanni Birolo, Ivan Rossi, Flavio Sartori, Cesare Rollo, Tiziana Sanavia, Piero Fariselli
2025 J jnl
J. Cheminformatics
Francesco Codicè, Corrado Pancotti, Cesare Rollo, Yves Moreau, Piero Fariselli, Daniele Raimondi
2025 J jnl
Comput. Methods Programs Biomed.
Cesare Rollo, Corrado Pancotti, Flavio Sartori, Isabella Caranzano, Saverio D'Amico, Luciana Carota, Francesco Casadei, Giovanni Birolo, Luca Lanino, Elisabetta Sauta, Gianluca Asti, Alessandro Buizza, Mattia Delleani, Elena Zazzetti, Marilena Bicchieri, Giulia Maggioni, Pierre Fenaux, Uwe Platzbecker, Maria Diez-Campelo, Torsten Haferlach, Gastone C. Castellani, Matteo Giovanni Della Porta, Piero Fariselli, Tiziana Sanavia
2024 J jnl
Bioinform.
Corrado Pancotti, Cesare Rollo, Francesco Codicè, Giovanni Birolo, Piero Fariselli, Tiziana Sanavia
2024 J jnl
Comput. Biol. Medicine
Cesare Rollo, Corrado Pancotti, Giovanni Birolo, Ivan Rossi, Tiziana Sanavia, Piero Fariselli
2024 B conf
IEEE Big Data
Francesco Casadei, Luciana Carota, Gianluca Asti, Saverio D'Amico, Davide Piscia, Santiago Zazo, Patricia A. Apellániz, Juan Parras, Claudia Sala, Cesare Rollo, Nono S. C. Merleau, Piero Fariselli, Matteo Giovanni Della Porta, Tiziana Sanavia, Federico Álvarez García, Gastone C. Castellani, Enrico Giampieri
2022 conf
SocInfo
Cesare Rollo, Gianmarco De Francisci Morales, Corrado Monti, André Panisson
2022 conf
CLEF (Working Notes)
Corrado Pancotti, Giovanni Birolo, Tiziana Sanavia, Cesare Rollo, Piero Fariselli
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