James R. Irons

15 papers C 8Journal 7
YearRankTypeTitle / Venue / Authors
2016 J jnl
Int. J. Digit. Earth
Adam Lewis, Leo Lymburner, Matthew B. J. Purss, Brendan P. Brooke, Benjamin J. K. Evans, Alex Ip, Arnold G. Dekker, James R. Irons, Stuart Minchin, Norman Mueller, Simon Oliver, Dale O. Roberts, Barbara Ryan, Medhavy Thankappan, Robert Woodcock, Lesley Wyborn
2015 J jnl
Remote. Sens.
Dennis C. Reuter, Cathleen M. Richardson, Fernando A. Pellerano, James R. Irons, Richard G. Allen, Martha C. Anderson, Murzy D. Jhabvala, Allen W. Lunsford, Matthew Montanaro, Ramsey L. Smith, Zelalem Tesfaye, Kurtis J. Thome
2012 C conf
IGARSS
Brian L. Markham, Edward J. Knight, Brent Canova, Eric Donley, Geir Kvaran, Kenton Lee, Julia A. Barsi, Jeffrey A. Pedelty, Philip W. Dabney, James R. Irons
2010 C conf
IGARSS
Dennis Reuter, Cathy Richardson, James R. Irons, Rick Allen, Martha C. Anderson, Jason Budinoff, Gordon Casto, Craig Coltharp, Paul Finneran, Betsy Forsbacka, Taylor Hale, Tom Jennings, Murzy Jhabvala, Allen Lunsford, Greg Magnuson, Rick Mills, Tony Morse, Veronica Otero, Scott Rohrbach, Ramsey Smith, Terry Sullivan, Zelalem Tesfaye, Kurtis J. Thome, Glenn Unger, Paul Whitehouse
2007 C conf
IGARSS
James R. Irons, Jeanine E. Murphy-Morris
2004 J jnl
IEEE Trans. Geosci. Remote. Sens.
Brian L. Markham, James C. Storey, Melba M. Crawford, David G. Goodenough, James R. Irons
2004 J jnl
IEEE Trans. Geosci. Remote. Sens.
Brian L. Markham, James C. Storey, Darrel L. Williams, James R. Irons
2004 C conf
IGARSS
James R. Irons, William R. Ochs
2003 C conf
IGARSS
James R. Irons, Nicholas J. Speciale, J. Douglas McCuistion, Jeffrey G. Masek, Brian L. Markham, James C. Storey, Donald E. Lencioni, Robert E. Ryan
2003 C conf
IGARSS
J. Douglas McCuistion, Charles D. Wende, James R. Irons
2003 C conf
IGARSS
Darrel L. Williams, James R. Irons, Samuel Goward, Jeffrey G. Masek
2002 C conf
IGARSS
Eric C. Brown de Colstoun, Michael H. Story, Craig Thompson, Timothy G. Smith, James R. Irons
1996 J jnl
IEEE Trans. Geosci. Remote. Sens.
Zhi-Jian Li, Adrian K. Fung, Saibun Tjuatja, Daniel P. Gibbs, Christopher L. Betty, James R. Irons
1992 J jnl
IEEE Trans. Geosci. Remote. Sens.
James R. Irons, Gaylon S. Campbell, John M. Norman, David W. Graham, William M. Kovalick
1991 J jnl
IEEE Trans. Geosci. Remote. Sens.
James R. Irons, Kenneth Jon Ranson, Darrel L. Williams, Richard R. Irish, Frederick G. Huegel
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