# Temp files
*.tmp
*.bak
*.log

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/

*.json
# ...except the results that ARE the record: a ratchet baseline says what
# performance and op counts were, and a benchmark result says what the engine
# cost on a given day.  Both have to be versioned with the code that produced
# them, or they sit on disk drifting from it with nothing to say how old they
# are -- which is exactly what happened to the two below.
!tests/perf_baseline.json
!tests/perop_op_baseline.json
!tests/taint_ir_perf_baseline.json
# ...and the artifact's committed results, which ARE the evidence a
# reviewer compares their run against.
!artifacts/ndss27/**/*.json
shadow.c
__init__.c
categories.c
ast_test.c
microtaint/instrumentation/ast.c
microtaint/instrumentation/cell.c
microtaint/emulator/hook_core.c

*.rej
*.orig
*.tar.*
# The reference runs ship their bulky evidence compressed, one archive per
# directory.  Those are committed on purpose, unlike the tarballs the setup
# scripts download.
!artifacts/ndss27/reference-runs/*/*.tar.xz

output/
stubs/

fix_*.py
patch_*.py
debug_*.py
*.patch
paper

bench.c
bench.elf
cellift.txt
build_maat.sh
debug*.py
input
plot_*.py
verify_patches.py
*demo*.py
sleigh-translate.py
bench_kernel.py
# Derived artifacts that kept showing up as untracked noise.
# Profiler dumps: regenerable, and cProfile output in particular is misleading
# for this codebase (it cannot see Cython cdef / C frames -- use perf).
*.prof
*.elf

# Baseline engines are third-party checkouts, not ours to vendor: Pin alone is
# ~600k lines and needs a licence accepted by hand.  setup_envs.sh fetches
# them; the repository must not carry them.
**/external/pin-*/
**/external/libdft64/
**/external/taintgrind/
# Vendored third-party engines for the RQ2 comparison (Pin, libdft64,
# TaintGrind).  Fetched by the artifact setup script, never committed.
artifacts/ndss27/*/external/

# The performance suite writes these; the baseline lives in the CI cache.
.bench_current.json
.bench_baseline.json
benchmark/taint_density/hookcost

# local backup of the agent memory dir (never tracked)
memory.bak/
*.code-workspace
*.zip
