Haim Sompolinsky

61 papers A* 6Journal 41Unranked 13
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
Xu Pan, Ely Hahami, Jingxuan Fan, Ziqian Xie, Haim Sompolinsky
2025 J jnl
CoRR
Xu Pan, Ely Hahami, Zechen Zhang, Haim Sompolinsky
2025 J jnl
CoRR
Jiaqi Shang, Gabriel Kreiman, Haim Sompolinsky
2025 A* conf
ICLR
Zechen Zhang, Haim Sompolinsky
2024 J jnl
CoRR
Alexander van Meegen, Haim Sompolinsky
2024 A* conf
NeurIPS
Lorenzo Tiberi, Francesca Mignacco, Kazuki Irie, Haim Sompolinsky
2024 J jnl
CoRR
Lorenzo Tiberi, Francesca Mignacco, Kazuki Irie, Haim Sompolinsky
2024 J jnl
CoRR
Binxu Wang, Jiaqi Shang, Haim Sompolinsky
2024 J jnl
CoRR
Haozhe Shan, Qianyi Li, Haim Sompolinsky
2024 conf
CPAL
Michael Kuoch, Chi-Ning Chou, Nikhil Parthasarathy, Joel Dapello, James J. DiCarlo, Haim Sompolinsky, SueYeon Chung
2024 J jnl
CoRR
Zechen Zhang, Haim Sompolinsky
2024 J jnl
CoRR
David G. Clark, Haim Sompolinsky
2023 J jnl
CoRR
Yehonatan Avidan, Qianyi Li, Haim Sompolinsky
2023 J jnl
Neural Comput.
Naoki Hiratani, Haim Sompolinsky
2023 J jnl
CoRR
Michael Kuoch, Chi-Ning Chou, Nikhil Parthasarathy, Joel Dapello, James J. DiCarlo, Haim Sompolinsky, SueYeon Chung
2022 J jnl
CoRR
Weishun Zhong, Ben Sorscher, Daniel D. Lee, Haim Sompolinsky
2022 A* conf
NeurIPS
Weishun Zhong, Ben Sorscher, Daniel Lee, Haim Sompolinsky
2022 A* conf
NeurIPS
Qianyi Li, Haim Sompolinsky
2022 J jnl
CoRR
Qianyi Li, Haim Sompolinsky
2022 J jnl
CoRR
Naoki Hiratani, Haim Sompolinsky
2022 J jnl
CoRR
Uri Cohen, Haim Sompolinsky
2022 J jnl
PLoS Comput. Biol.
Yu Hu, Haim Sompolinsky
2020 J jnl
CoRR
Julia Steinberg, Madhu Advani, Haim Sompolinsky
2020 J jnl
Neural Networks
Madhu S. Advani, Andrew M. Saxe, Haim Sompolinsky
2020 J jnl
CoRR
Gadi Naveh, Oded Ben-David, Haim Sompolinsky, Zohar Ringel
2020 J jnl
CoRR
Qianyi Li, Haim Sompolinsky
2019 J jnl
PLoS Comput. Biol.
Julijana Gjorgjieva, Markus Meister, Haim Sompolinsky
2018 J jnl
PLoS Comput. Biol.
Itamar Daniel Landau, Haim Sompolinsky
2018 J jnl
Neural Comput.
SueYeon Chung, Uri Cohen, Haim Sompolinsky, Daniel D. Lee
2017 J jnl
CoRR
Ran Rubin, L. F. Abbott, Haim Sompolinsky
2017 J jnl
CoRR
SueYeon Chung, Daniel D. Lee, Haim Sompolinsky
2017 J jnl
CoRR
SueYeon Chung, Uri Cohen, Haim Sompolinsky, Daniel D. Lee
2017 conf
AAAI Spring Symposia
Jeremy Bernstein, Ishita Dasgupta, David Rolnick, Haim Sompolinsky
2016 conf
NIPS
Jonathan Kadmon, Haim Sompolinsky
2015 J jnl
CoRR
SueYeon Chung, Daniel D. Lee, Haim Sompolinsky
2015 J jnl
J. Cogn. Neurosci.
Ariel Furstenberg, Assaf Breska, Haim Sompolinsky, Leon Y. Deouell
2014 ch.
Encyclopedia of Computational Neuroscience
Robert Gütig, Haim Sompolinsky
2012 J jnl
Neural Comput.
Uri Rokni, Haim Sompolinsky
2011 conf
FET
Henry Markram, Karlheinz Meier, Thomas Lippert, Sten Grillner, Richard S. Frackowiak, Stanislas Dehaene, Alois C. Knoll, Haim Sompolinsky, Kris Verstreken, Javier DeFelipe, Seth Grant, Jean-Pierre Changeux, Alois Saria
2010 conf
NIPS
Kanaka Rajan, L. F. Abbott, Haim Sompolinsky
2010 conf
NIPS
Surya Ganguli, Haim Sompolinsky
2009 J jnl
Neural Comput.
Yoram Burak, Sam Lewallen, Haim Sompolinsky
2006 J jnl
Neural Comput.
Maoz Shamir, Haim Sompolinsky
2004 J jnl
Neural Comput.
Maoz Shamir, Haim Sompolinsky
2003 J jnl
Neural Comput.
Oren Shriki, David Hansel, Haim Sompolinsky
2001 conf
NIPS
Maoz Shamir, Haim Sompolinsky
2000 conf
NIPS
Oren Shriki, Haim Sompolinsky, Daniel D. Lee
1999 conf
NIPS
Daniel D. Lee, Uri Rokni, Haim Sompolinsky
1998 J jnl
Neural Comput.
Carl van Vreeswijk, Haim Sompolinsky
1998 conf
NIPS
Daniel D. Lee, Haim Sompolinsky
1998 conf
NIPS
Hyoungsoo Yoon, Haim Sompolinsky
1997 J jnl
J. Comput. Neurosci.
Rani Ben-Yishai, David Hansel, Haim Sompolinsky
1996 J jnl
J. Comput. Neurosci.
David Hansel, Haim Sompolinsky
1996 J jnl
Neural Comput.
Germán Mato, Haim Sompolinsky
1994 conf
NIPS
N. Barkai, H. Sebastian Seung, Haim Sompolinsky
1994 J jnl
Neural Comput.
Haim Sompolinsky, Michail Tsodyks
1993 conf
NIPS
Iris Ginzburg, Haim Sompolinsky
1993 J jnl
Neural Comput.
E. R. Grannan, D. Kleinfeld, Haim Sompolinsky
1992 J jnl
Int. J. Neural Syst.
Haim Sompolinsky, Michail Tsodyks
1992 A* conf
COLT
H. Sebastian Seung, Manfred Opper, Haim Sompolinsky
1991 A* conf
COLT
H. Sebastian Seung, Haim Sompolinsky, Naftali Tishby
tests/unit/test_decompile_utils.py
← Index tests/unit/test_decompile_utils.py python
"""Unit tests for decompiler utility modules:
- bninja/utils/hashes.py
- bninja/utils/json_encoder.py
- bninja/analysis/low_level_normalization.py
"""
import hashlib
import json
import pytest


# ============================================================================
# 1a. hashes.py
# ============================================================================

from redb.extractors.decompiler.bninja.utils.hashes import (
    calculate_md5,
    calculate_sha256,
    calculate_tlsh,
)


class TestCalculateMD5:
    def test_calculate_md5_known_value(self):
        expected = hashlib.md5(b"test").hexdigest()
        assert calculate_md5("test") == expected

    def test_calculate_md5_empty(self):
        expected = hashlib.md5(b"").hexdigest()
        assert calculate_md5("") == expected


class TestCalculateSHA256:
    def test_calculate_sha256_known_value(self):
        expected = hashlib.sha256(b"hello world").hexdigest()
        assert calculate_sha256("hello world") == expected

    def test_calculate_sha256_empty_string(self):
        result = calculate_sha256("")
        assert len(result) == 64
        assert all(c in "0123456789abcdef" for c in result)


class TestCalculateTLSH:
    def test_calculate_tlsh_long_data(self):
        # TLSH requires >= 50 bytes
        data = "A" * 100
        result = calculate_tlsh(data)
        assert result is not None
        assert isinstance(result, str)

    def test_calculate_tlsh_short_data(self):
        data = "A" * 10
        result = calculate_tlsh(data)
        assert result is None

    def test_calculate_tlsh_deterministic(self):
        data = "x" * 200
        assert calculate_tlsh(data) == calculate_tlsh(data)



# ============================================================================
# 1b. json_encoder.py
# ============================================================================

from redb.extractors.decompiler.bninja.utils.json_encoder import BinaryNinjaEncoder


class TestBinaryNinjaEncoder:
    def test_encode_value_confidence_object(self):
        obj = type("VC", (), {"value": 42, "confidence": 255})()
        result = json.dumps(obj, cls=BinaryNinjaEncoder)
        assert json.loads(result) == 42

    def test_encode_str_fallback(self):
        obj = type("Obj", (), {"__str__": lambda self: "custom_repr"})()
        result = json.dumps(obj, cls=BinaryNinjaEncoder)
        assert json.loads(result) == "custom_repr"

    def test_encode_normal_types(self):
        data = {"a": 1, "b": [2, 3], "c": "hello"}
        result = json.dumps(data, cls=BinaryNinjaEncoder)
        assert json.loads(result) == data

    def test_encode_set_via_str(self):
        # Python sets have __str__, so BinaryNinjaEncoder converts them
        # to their string repr instead of raising TypeError.
        result = json.dumps(set([1, 2, 3]), cls=BinaryNinjaEncoder)
        parsed = json.loads(result)
        assert isinstance(parsed, str)
        assert "1" in parsed


# ============================================================================
# 1c. low_level_normalization.py
# ============================================================================

from redb.extractors.decompiler.bninja.analysis.low_level_normalization import (
    LowLevelNormalization,
)


class MockIL:
    """Mock IL node for normalization tests."""
    def __init__(self, operation, operands=None):
        self.operation = operation
        self.operands = operands or []


class TestLowLevelNormalization:
    def setup_method(self):
        self.normalizer = LowLevelNormalization()

    def test_normalize_single_instruction(self):
        node = MockIL(operation=5)
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [5]

    def test_normalize_nested_operands(self):
        child1 = MockIL(operation=10)
        child2 = MockIL(operation=20)
        root = MockIL(operation=1, operands=[child1, child2])
        result = self.normalizer.normalize_instruction_all_levels(root)
        assert result == [1, 10, 20]

    def test_normalize_empty_operands(self):
        node = MockIL(operation=42, operands=[])
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [42]

    def test_normalize_list_operands(self):
        # Simulates phi-node style list operands
        inner = MockIL(operation=99)
        node = MockIL(operation=7, operands=[[inner]])
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [7, 99]

    def test_normalize_none_input(self):
        result = self.normalizer.normalize_instruction_all_levels(None)
        assert result == []