Naftali Tishby

168 papers A* 23A 13B 14Misc 5Journal 74Unranked 38
YearRankTypeTitle / Venue / Authors
2023 J jnl
CoRR
Stas Tiomkin, Ilya Nemenman, Daniel Polani, Naftali Tishby
2022 J jnl
PLoS Comput. Biol.
Nadav Amir, Naftali Tishby, Israel Nelken
2021 B conf
ISIT
Shlomi Agmon, Etam Benger, Or Ordentlich, Naftali Tishby
2021 J jnl
CoRR
Shlomi Agmon, Etam Benger, Or Ordentlich, Naftali Tishby
2021 J jnl
CoRR
Hagai Rappeport, Irit Levin Reisman, Naftali Tishby, Nathalie Q. Balaban
2020 B conf
CogSci
Ron M. Hecht, Ariel Telpaz, Gila Kamhi, Omer Tsimhoni, Aharon Bar-Hillel, Naftali Tishby
2020 J jnl
Entropy
Amichai Painsky, Meir Feder, Naftali Tishby
2020 J jnl
PLoS Comput. Biol.
Hadar Levi-Aharoni, Oren Shriki, Naftali Tishby
2020 J jnl
CoRR
Zoe Piran, Ravid Shwartz-Ziv, Naftali Tishby
2020 J jnl
PLoS Comput. Biol.
Nadav Amir, Reut Suliman-Lavie, Maayan Tal, Sagiv Shifman, Naftali Tishby, Israel Nelken
2019 J jnl
Top. Cogn. Sci.
Noga Zaslavsky, Charles Kemp, Naftali Tishby, Terry Regier
2019 B conf
CogSci
Noga Zaslavsky, Charles Kemp, Naftali Tishby, Terry Regier
2019 B conf
CogSci
Noga Zaslavsky, Karee Garvin, Charles Kemp, Naftali Tishby, Terry Regier
2019 J jnl
IEEE Trans. Hum. Mach. Syst.
Ron M. Hecht, Aharon Bar-Hillel, Ariel Telpaz, Omer Tsimhoni, Naftali Tishby
2019 Misc conf
ICASSP
Ron M. Hecht, Ariel Telpaz, Gila Kamhi, Aharon Bar-Hillel, Naftali Tishby
2019 B conf
CogSci
Noga Zaslavsky, Terry Regier, Naftali Tishby, Charles Kemp
2019 J jnl
CoRR
Noga Zaslavsky, Terry Regier, Naftali Tishby, Charles Kemp
2018 J jnl
CoRR
Amichai Painsky, Meir Feder, Naftali Tishby
2018 B conf
CogSci
Noga Zaslavsky, Charles Kemp, Naftali Tishby, Terry Regier
2018 J jnl
CoRR
Noga Zaslavsky, Charles Kemp, Naftali Tishby, Terry Regier
2018 J jnl
Proc. Natl. Acad. Sci. USA
Noga Zaslavsky, Charles Kemp, Terry Regier, Naftali Tishby
2018 J jnl
CoRR
Noga Zaslavsky, Charles Kemp, Terry Regier, Naftali Tishby
2018 B conf
CogSci
Noga Zaslavsky, Charles Kemp, Terry Regier, Naftali Tishby
2017 J jnl
CoRR
Michal Moshkovitz, Naftali Tishby
2017 J jnl
CoRR
Stas Tiomkin, Naftali Tishby
2017 J jnl
CoRR
Stas Tiomkin, Daniel Polani, Naftali Tishby
2017 J jnl
PLoS Comput. Biol.
Siwei Wang, Alexander Borst, Noga Zaslavsky, Naftali Tishby, Idan Segev
2017 J jnl
CoRR
Amichai Painsky, Naftali Tishby
2017 J jnl
J. Mach. Learn. Res.
Amichai Painsky, Naftali Tishby
2017 J jnl
CoRR
Michal Moshkovitz, Naftali Tishby
2017 J jnl
CoRR
Ravid Shwartz-Ziv, Naftali Tishby
2016 J jnl
CoRR
Nadav Amir, Israel Nelken, Naftali Tishby
2016 J jnl
CoRR
Pedro A. Ortega, Naftali Tishby
2016 J jnl
CoRR
Roy Fox, Naftali Tishby
2016 J jnl
CoRR
Roy Fox, Naftali Tishby
2016 conf
CDC
Roy Fox, Naftali Tishby
2016 conf
CDC
Roy Fox, Naftali Tishby
2016 J jnl
CoRR
Roy Fox, Michal Moshkovitz, Naftali Tishby
2016 A conf
UAI
Roy Fox, Ari Pakman, Naftali Tishby
2016 J jnl
PLoS Comput. Biol.
Jonathan Rubin, Nachum Ulanovsky, Israel Nelken, Naftali Tishby
2015 A conf
INTERSPEECH
Ron M. Hecht, Aharon Bar-Hillel, Stas Tiomkin, Hadar Levi, Omer Tsimhoni, Naftali Tishby
2015 J jnl
CoRR
Naftali Tishby, Noga Zaslavsky
2015 B conf
ITW
Naftali Tishby, Noga Zaslavsky
2015 J jnl
CoRR
Roy Fox, Ari Pakman, Naftali Tishby
2015 J jnl
CoRR
Pedro A. Ortega, Daniel A. Braun, Justin Dyer, Kee-Eung Kim, Naftali Tishby
2015 J jnl
CoRR
Roy Fox, Naftali Tishby
2015 conf
CDC
Nadav Amir, Stas Tiomkin, Naftali Tishby
2014 B conf
ISIT
Michal Moshkovitz, Naftali Tishby
2014 A* conf
ICRA
Pedro A. Ortega, Daniel A. Braun, Naftali Tishby
2013 J jnl
J. Mach. Learn. Res.
Sivan Sabato, Nathan Srebro, Naftali Tishby
2013 J jnl
IEEE Trans. Speech Audio Process.
Ron M. Hecht, Elad Noor, Gil Dobry, Yaniv Zigel, Aharon Bar-Hillel, Naftali Tishby
2013 J jnl
CoRR
Nir Friedman, Ori Mosenzon, Noam Slonim, Naftali Tishby
2012 A* conf
ICML
Roy Fox, Naftali Tishby
2012 J jnl
CoRR
Sivan Sabato, Nati Srebro, Naftali Tishby
2012 J jnl
J. Mach. Learn. Res.
Sivan Sabato, Naftali Tishby
2012 J jnl
CoRR
Amir Globerson, Gal Chechik, Naftali Tishby
2012 J jnl
CoRR
Amir Globerson, Naftali Tishby
2011 J jnl
Comput. Vis. Image Underst.
Simone Calderara, Uri Heinemann, Andrea Prati, Rita Cucchiara, Naftali Tishby
2011 J jnl
CoRR
Sivan Sabato, Naftali Tishby
2011 A conf
AISTATS
Ohad Shamir, Naftali Tishby
2010 J jnl
Theor. Comput. Sci.
Ohad Shamir, Sivan Sabato, Naftali Tishby
2010 J jnl
J. Mach. Learn. Res.
Yevgeny Seldin, Naftali Tishby
2010 A conf
AISTATS
Sivan Sabato, Nathan Srebro, Naftali Tishby
2010 J jnl
Mach. Learn.
Ohad Shamir, Naftali Tishby
2010 J jnl
CoRR
Sivan Sabato, Nathan Srebro, Naftali Tishby
2010 conf
NIPS
Sivan Sabato, Nathan Srebro, Naftali Tishby
2009 A* conf
COLT
Sivan Sabato, Naftali Tishby
2009 A conf
INTERSPEECH
Ron M. Hecht, Omer Hezroni, Amit Manna, Gil Dobry, Yaniv Zigel, Naftali Tishby
2009 A conf
AISTATS
Yevgeny Seldin, Naftali Tishby
2009 A conf
INTERSPEECH
Ron M. Hecht, Elad Noor, Naftali Tishby
2009 J jnl
Proc. Natl. Acad. Sci. USA
Amir Globerson, Eran Stark, Eilon Vaadia, Naftali Tishby
2008 Misc conf
ISAIM
Naftali Tishby
2008 J jnl
J. Mach. Learn. Res.
Eyal Krupka, Naftali Tishby
2008 B conf
ALT
Ohad Shamir, Sivan Sabato, Naftali Tishby
2008 A* conf
COLT
Ohad Shamir, Naftali Tishby
2008 A* conf
ICML
Yevgeny Seldin, Naftali Tishby
2008 conf
NIPS
Ohad Shamir, Naftali Tishby
2007 conf
NIPS
Ohad Shamir, Naftali Tishby
2007 J jnl
J. Mach. Learn. Res.
Amir Globerson, Gal Chechik, Fernando Pereira, Naftali Tishby
2007 A conf
AISTATS
Eyal Krupka, Naftali Tishby
2007 J jnl
Nucleic Acids Res.
Hani Neuvirth, Uri Heinemann, David Birnbaum, Naftali Tishby, Gideon Schreiber
2007 B conf
ISIT
Peter Harremoës, Naftali Tishby
2006 B conf
ISIT
William Bialek, Robert R. de Ruyter van Steveninck, Naftali Tishby
2006 A* conf
AAAI
Amir Globerson, Gal Chechik, Fernando Pereira, Naftali Tishby
2006 conf
NIPS
Yevgeny Seldin, Noam Slonim, Naftali Tishby
2006 ch.
Feature Extraction
Ran Gilad-Bachrach, Amir Navot, Naftali Tishby
2006 J jnl
Neural Comput.
Noam Slonim, Nir Friedman, Naftali Tishby
2005 A conf
INTERSPEECH
Ron M. Hecht, Naftali Tishby
2005 conf
NIPS
Eyal Krupka, Naftali Tishby
2005 J jnl
J. Mach. Learn. Res.
Gal Chechik, Amir Globerson, Naftali Tishby, Yair Weiss
2005 conf
SLSFS
Amir Navot, Ran Gilad-Bachrach, Yiftah Navot, Naftali Tishby
2005 conf
NIPS
Amir Navot, Lavi Shpigelman, Naftali Tishby, Eilon Vaadia
2005 conf
NIPS
Ran Gilad-Bachrach, Amir Navot, Naftali Tishby
2004 A* conf
COLT
Ran Gilad-Bachrach, Amir Navot, Naftali Tishby
2004 J jnl
J. Comput. Biol.
Gill Bejerano, Nir Friedman, Naftali Tishby
2004 conf
NIPS
Amir Globerson, Gal Chechik, Fernando C. N. Pereira, Naftali Tishby
2004 A* conf
ICML
Ran Gilad-Bachrach, Amir Navot, Naftali Tishby
2004 J jnl
Proc. Natl. Acad. Sci. USA
Rivka Adar, Yaakov Benenson, Gregory Linshiz, Amit Rosner, Naftali Tishby, Ehud Shapiro
2004 A conf
UAI
Amir Globerson, Naftali Tishby
2003 A* conf
COLT
Ran Gilad-Bachrach, Amir Navot, Naftali Tishby
2003 J jnl
EURASIP J. Adv. Signal Process.
Noam Slonim, Gill Bejerano, Shai Fine, Naftali Tishby
2003 J jnl
J. Mach. Learn. Res.
Ron Bekkerman, Ran El-Yaniv, Naftali Tishby, Yoad Winter
2003 B conf
ALT
Naftali Tishby
2003 B conf
Discovery Science
Naftali Tishby
2003 conf
NIPS
Gal Chechik, Amir Globerson, Naftali Tishby, Yair Weiss
2003 A conf
UAI
Amir Globerson, Gal Chechik, Naftali Tishby
2003 J jnl
J. Mach. Learn. Res.
Amir Globerson, Naftali Tishby
2002 J jnl
Mach. Learn.
Shlomo Dubnov, Ran El-Yaniv, Yoram Gdalyahu, Elad Schneidman, Naftali Tishby, Golan Yona
2002 A* conf
ICML
Noam Slonim, Gill Bejerano, Shai Fine, Naftali Tishby
2002 conf
NIPS
Gal Chechik, Naftali Tishby
2002 conf
NIPS
Koby Crammer, Ran Gilad-Bachrach, Amir Navot, Naftali Tishby
2002 conf
AAAI/IAAI
Amir Globerson, Naftali Tishby
2002 A* conf
ICML
Amir Globerson, Naftali Tishby
2002 A* conf
SIGIR
Noam Slonim, Nir Friedman, Naftali Tishby
2001 conf
NIPS
Noam Slonim, Nir Friedman, Naftali Tishby
2001 conf
NIPS
Gal Chechik, Amir Globerson, Michael J. Anderson, Eric D. Young, Israel Nelken, Naftali Tishby
2001 J jnl
Bioinform.
Gill Bejerano, Yevgeny Seldin, Hanah Margalit, Naftali Tishby
2001 A conf
UAI
Nir Friedman, Ori Mosenzon, Noam Slonim, Naftali Tishby
2001 A* conf
SIGIR
Ron Bekkerman, Ran El-Yaniv, Yoad Winter, Naftali Tishby
2001 J jnl
Neural Comput.
William Bialek, Ilya Nemenman, Naftali Tishby
2001 J jnl
Neural Comput.
Itay Gat, Naftali Tishby
2001 A* conf
ICML
Yevgeny Seldin, Gill Bejerano, Naftali Tishby
2000 conf
NIPS
Naftali Tishby, Noam Slonim
2000 A* conf
SIGIR
Noam Slonim, Naftali Tishby
2000 J jnl
CoRR
William Bialek, Ilya Nemenman, Naftali Tishby
2000 A* conf
COLT
Shahar Mendelson, Naftali Tishby
2000 conf
NIPS
Gal Chechik, Naftali Tishby
2000 J jnl
CoRR
Naftali Tishby, Fernando C. N. Pereira, William Bialek
2000 conf
NIPS
Elad Schneidman, Naama Brenner, Naftali Tishby, Robert R. de Ruyter van Steveninck, William Bialek
1999 conf
NIPS
Noam Slonim, Naftali Tishby
1999 conf
NIPS
Elad Schneidman, Idan Segev, Naftali Tishby
1998 A conf
ISMB
Golan Yona, Nathan Linial, Naftali Tishby, Michal Linial
1998 conf
NIPS
Dmitry Rinberg, Hanan Davidowitz, Naftali Tishby
1998 J jnl
J. Comput. Syst. Sci.
Dana Ron, Yoram Singer, Naftali Tishby
1998 conf
NIPS
Itay Gat, Naftali Tishby
1998 J jnl
Mach. Learn.
Shai Fine, Yoram Singer, Naftali Tishby
1998 conf
WebDB
Catriel Beeri, Gershon Elber, Tova Milo, Yehoshua Sagiv, Oded Shmueli, Naftali Tishby, Yakov A. Kogan, David Konopnicki, Pini Mogilevski, Noam Slonim
1997 conf
NIPS
Ran El-Yaniv, Shai Fine, Naftali Tishby
1997 Misc conf
ICASSP
Shlomo Dubnov, Naftali Tishby
1997 J jnl
Mach. Learn.
Yoav Freund, H. Sebastian Seung, Eli Shamir, Naftali Tishby
1996 J jnl
CoRR
Fernando C. N. Pereira, Yoram Singer, Naftali Tishby
1996 conf
ICMC
Shlomo Dubnov, Naftali Tishby, Dalia Cohen
1996 J jnl
Mach. Learn.
David Haussler, Michael J. Kearns, H. Sebastian Seung, Naftali Tishby
1996 J jnl
Mach. Learn.
Dana Ron, Yoram Singer, Naftali Tishby
1995 conf
VLC@ACL
Fernando Pereira, Yoram Singer, Naftali Tishby
1995 conf
ICMC
Shlomo Dubnov, Naftali Tishby
1995 A* conf
COLT
Dana Ron, Yoram Singer, Naftali Tishby
1994 conf
ICPR (3)
Shlomo Dubnov, Naftali Tishby
1994 J jnl
Comput. Speech Lang.
Naftali Tishby, Allen L. Gorin
1994 J jnl
CoRR
Fernando C. N. Pereira, Naftali Tishby, Lillian Lee
1994 J jnl
Biol. Cybern.
Yoram Singer, Naftali Tishby
1994 A* conf
COLT
Dana Ron, Yoram Singer, Naftali Tishby
1994 A* conf
COLT
David Haussler, H. Sebastian Seung, Michael J. Kearns, Naftali Tishby
1994 conf
ECCV (1)
Daphna Weinshall, Michael Werman, Naftali Tishby
1994 conf
Theoretical Foundations of Computer Vision
Daphna Weinshall, Michael Werman, Naftali Tishby
1993 conf
NIPS
Yoram Singer, Naftali Tishby
1993 A* conf
ACL
Fernando C. N. Pereira, Naftali Tishby, Lillian Lee
1993 A* conf
CVPR
Yoram Singer, Naftali Tishby
1993 conf
NIPS
Dana Ron, Yoram Singer, Naftali Tishby
1993 conf
NIPS
Scott Kirkpatrick, Géza Györgyi, Naftali Tishby, Lidror Troyansky
1992 conf
NIPS
Yoav Freund, H. Sebastian Seung, Eli Shamir, Naftali Tishby
1992 conf
NIPS
Itay Gat, Naftali Tishby
1991 A* conf
COLT
H. Sebastian Seung, Haim Sompolinsky, Naftali Tishby
1990 Misc conf
ICASSP
Naftali Tishby
1990 J jnl
Proc. IEEE
Esther Levin, Naftali Tishby, Sara A. Solla
1989 A* conf
COLT
Esther Levin, Naftali Tishby, Sara A. Solla
1988 Misc conf
ICASSP
Naftali Tishby
1988 J jnl
Neural Networks
Naftali Tishby
tests/conftest.py
← Index tests/conftest.py python
"""
Pytest configuration and shared fixtures for REDB unit tests.
"""
import os
import sys
import pytest
import logging
import tempfile
import hashlib
from unittest.mock import Mock, MagicMock, patch
from pathlib import Path

# Add the project root to the path
sys.path.insert(0, str(Path(__file__).parent.parent))

# Test files directory
TEST_FILES_DIR = Path(__file__).parent.parent / "test_files"


# ============================================================================
# Logger Fixtures
# ============================================================================

@pytest.fixture
def mock_logger():
    """Create a mock logger for testing."""
    logger = Mock()
    logger.debug = Mock()
    logger.info = Mock()
    logger.warning = Mock()
    logger.error = Mock()
    return logger


@pytest.fixture
def real_logger():
    """Create a real logger for testing with debug output."""
    logger = logging.getLogger("test_logger")
    logger.setLevel(logging.DEBUG)
    if not logger.handlers:
        handler = logging.StreamHandler()
        handler.setLevel(logging.DEBUG)
        formatter = logging.Formatter('%(levelname)s - %(message)s')
        handler.setFormatter(formatter)
        logger.addHandler(handler)
    return logger


# ============================================================================
# Test Binary Files Fixtures
# ============================================================================

@pytest.fixture
def elf_binary_path():
    """Path to the ELF test binary."""
    path = TEST_FILES_DIR / "hello"
    if not path.exists():
        pytest.skip(f"Test file not found: {path}")
    return str(path)


@pytest.fixture
def elf_advanced_binary_path():
    """Path to the advanced ELF test binary."""
    path = TEST_FILES_DIR / "hello_advanced"
    if not path.exists():
        pytest.skip(f"Test file not found: {path}")
    return str(path)


@pytest.fixture
def pe_binary_path():
    """Path to the PE test binary (.NET PE)."""
    path = TEST_FILES_DIR / "d8637bdbcfc9112fcb1f0167b398e771"
    if not path.exists():
        pytest.skip(f"Test file not found: {path}")
    return str(path)


@pytest.fixture
def elf_binary_content(elf_binary_path):
    """Read the ELF test binary content."""
    with open(elf_binary_path, "rb") as f:
        return f.read()


@pytest.fixture
def pe_binary_content(pe_binary_path):
    """Read the PE test binary content."""
    with open(pe_binary_path, "rb") as f:
        return f.read()


# ============================================================================
# Temporary Files Fixtures
# ============================================================================

@pytest.fixture
def temp_binary_file():
    """Create a temporary binary file for testing."""
    with tempfile.NamedTemporaryFile(delete=False, suffix=".bin") as f:
        # Write some test data
        f.write(b"\x7fELF" + b"\x00" * 100 + b"test data")
        temp_path = f.name

    yield temp_path

    # Cleanup
    if os.path.exists(temp_path):
        os.unlink(temp_path)


@pytest.fixture
def temp_text_file():
    """Create a temporary text file for testing."""
    with tempfile.NamedTemporaryFile(delete=False, suffix=".txt", mode="w") as f:
        f.write("This is a test file with some text content.")
        temp_path = f.name

    yield temp_path

    # Cleanup
    if os.path.exists(temp_path):
        os.unlink(temp_path)


@pytest.fixture
def temp_pe_like_file():
    """Create a temporary file with PE-like header for testing."""
    with tempfile.NamedTemporaryFile(delete=False, suffix=".exe") as f:
        # MZ header
        f.write(b"MZ" + b"\x00" * 58)
        # e_lfanew pointing to PE header at offset 64
        f.write(b"\x40\x00\x00\x00")
        # PE signature at offset 64
        f.write(b"PE\x00\x00")
        # Minimal COFF header (20 bytes)
        f.write(b"\x4c\x01")  # Machine (i386)
        f.write(b"\x01\x00")  # NumberOfSections
        f.write(b"\x00" * 16)  # Rest of COFF header
        temp_path = f.name

    yield temp_path

    # Cleanup
    if os.path.exists(temp_path):
        os.unlink(temp_path)


# ============================================================================
# Mock Exporter Fixtures
# ============================================================================

@pytest.fixture
def mock_print_exporter(mock_logger):
    """Create a mock PrintExporter."""
    from redb.extractors.database_exporters import PrintExporter
    exporter = PrintExporter(mock_logger, "test_index")
    return exporter


@pytest.fixture
def mock_elasticsearch_exporter(mock_logger):
    """Create a mock ElasticsearchExporter with mocked client."""
    with patch('redb.settings.get_elasticsearch_client') as mock_client:
        mock_client.return_value = Mock()
        from redb.extractors.database_exporters import ElasticsearchExporter
        exporter = ElasticsearchExporter(mock_logger, "test_index")
        return exporter


@pytest.fixture
def mock_clickhouse_exporter(mock_logger):
    """Create a mock ClickHouseExporter with mocked client."""
    with patch('redb.settings.create_clickhouse_client') as mock_client:
        mock_client.return_value = Mock()
        from redb.extractors.database_exporters import ClickHouseExporter
        exporter = ClickHouseExporter(mock_logger, "test_index", client=Mock())
        return exporter


# ============================================================================
# Mock Settings Fixtures
# ============================================================================

@pytest.fixture
def mock_settings():
    """Mock the redb.settings module."""
    with patch.multiple(
        'redb.settings',
        ELASTIC_BINARIES_COLLECTION="test_collection",
        get_elasticsearch_client=Mock(return_value=Mock()),
        create_clickhouse_client=Mock(return_value=Mock()),
    ):
        yield


# ============================================================================
# Hash Fixtures
# ============================================================================

@pytest.fixture
def known_hashes(elf_binary_content):
    """Compute known hashes for the ELF test binary."""
    return {
        'md5': hashlib.md5(elf_binary_content).hexdigest(),
        'sha1': hashlib.sha1(elf_binary_content).hexdigest(),
        'sha256': hashlib.sha256(elf_binary_content).hexdigest(),
    }


@pytest.fixture
def pe_known_hashes(pe_binary_content):
    """Compute known hashes for the PE test binary."""
    return {
        'md5': hashlib.md5(pe_binary_content).hexdigest(),
        'sha1': hashlib.sha1(pe_binary_content).hexdigest(),
        'sha256': hashlib.sha256(pe_binary_content).hexdigest(),
    }


# ============================================================================
# Sample Data Fixtures
# ============================================================================

@pytest.fixture
def sample_binary_data():
    """Sample binary data for entropy and hash testing."""
    return b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" * 16


@pytest.fixture
def high_entropy_data():
    """High entropy random-like data for testing."""
    import random
    random.seed(42)  # Reproducible
    return bytes(random.randint(0, 255) for _ in range(256))


@pytest.fixture
def low_entropy_data():
    """Low entropy repetitive data for testing."""
    return b"\x00" * 256


# ============================================================================
# PE Object Fixtures
# ============================================================================

@pytest.fixture
def pe_object(pe_binary_path):
    """Create a pefile PE object for testing."""
    import pefile
    try:
        pe = pefile.PE(pe_binary_path)
        yield pe
        pe.close()
    except Exception as e:
        pytest.skip(f"Failed to parse PE file: {e}")


# ============================================================================
# ELF Object Fixtures
# ============================================================================

@pytest.fixture
def elf_object(elf_binary_path):
    """Create an ELFFile object for testing."""
    from elftools.elf.elffile import ELFFile
    try:
        with open(elf_binary_path, 'rb') as f:
            elf = ELFFile(f)
            # We need to keep the file open for ELFFile to work
            yield elf
    except Exception as e:
        pytest.skip(f"Failed to parse ELF file: {e}")


# ============================================================================
# Dataclass Fixtures
# ============================================================================

@pytest.fixture
def sample_hash_dataclass():
    """Create a sample Hash dataclass."""
    from redb.models.dataclasses import Hash
    return Hash(
        md5="d41d8cd98f00b204e9800998ecf8427e",
        sha1="da39a3ee5e6b4b0d3255bfef95601890afd80709",
        sha256="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
    )


@pytest.fixture
def sample_hashes_dataclass():
    """Create a sample Hashes dataclass."""
    from redb.models.dataclasses import Hashes
    return Hashes(
        md5="d41d8cd98f00b204e9800998ecf8427e",
        sha1="da39a3ee5e6b4b0d3255bfef95601890afd80709",
        sha256="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
        ssdeep_hash="3::",
        tlsh_hash=""
    )


@pytest.fixture
def sample_basic_properties():
    """Create a sample BasicProperties dataclass."""
    from redb.models.dataclasses import BasicProperties
    return BasicProperties(
        filename="test.exe",
        sample_name="test.exe",
        filesize=1024,
        filetype="PE32 executable",
        filetype_mime="application/x-dosexec",
        filetype_magika="pebin",
        file_entropy=6.5
    )


# ============================================================================
# Utility Functions for Tests
# ============================================================================

def compute_entropy(data):
    """Compute entropy of data for verification in tests."""
    import math
    from collections import Counter

    if not data:
        return 0.0

    if isinstance(data, str):
        counts = Counter(data)
        frequencies = (i / len(data) for i in counts.values())
        return -sum(f * math.log(f, 2) for f in frequencies)
    else:
        occurrences = Counter(bytearray(data))
        entropy = 0
        for x in occurrences.values():
            p_x = float(x) / len(data)
            entropy -= p_x * math.log(p_x, 2)
        return entropy


# Make the function available as a fixture
@pytest.fixture
def entropy_calculator():
    """Return the entropy calculation function."""
    return compute_entropy


# ============================================================================
# Skip Markers
# ============================================================================

# Mark tests that require external tools
requires_die = pytest.mark.skipif(
    not os.path.exists("/usr/bin/diec") and not os.path.exists("/usr/local/bin/diec"),
    reason="Detect It Easy (diec) not installed"
)

requires_capa = pytest.mark.skipif(
    not os.path.exists("/usr/bin/capa") and not os.path.exists("/usr/local/bin/capa"),
    reason="capa not installed"
)

requires_floss = pytest.mark.skipif(
    not os.path.exists("/usr/bin/floss") and not os.path.exists("/usr/local/bin/floss"),
    reason="floss not installed"
)