# Ruff
.ruff_cache

# Mac
.DS_Store

# 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/
share/python-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/
.nox/
.coverage
.coverage.*
.cache
scripts/cache/
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/

# Translations
*.mo
*.pot

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

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
# docs/_build/

# PyBuilder
.pybuilder/
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
#   For a library or package, you might want to ignore these files since the code is
#   intended to run in multiple environments; otherwise, check them in:
# .python-version

# pipenv
#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
#   However, in case of collaboration, if having platform-specific dependencies or dependencies
#   having no cross-platform support, pipenv may install dependencies that don't work, or not
#   install all needed dependencies.
#Pipfile.lock

# uv
#   uv.lock is committed for reproducible CI builds.
#   Without it, the resolver picks latest versions which may be incompatible
#   (e.g., torchaudio 2.11 with torch 2.8).
# uv.lock

# pdm
#   Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
#   pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
#   in version control.
#   https://pdm.fming.dev/#use-with-ide
.pdm.toml

# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# 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/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

# PyCharm
#  JetBrains specific template is maintained in a separate JetBrains.gitignore that can
#  be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
#  and can be added to the global gitignore or merged into this file.  For a more nuclear
#  option (not recommended) you can uncomment the following to ignore the entire idea folder.
.idea/

# data folder
data/
# ...but the audio_analysis workflow ships checked-in package data (AudioSet
# category map, YAMNet class names) that must be tracked and wheel-included.
!src/senselab/audio/workflows/audio_analysis/data/
!src/senselab/audio/workflows/audio_analysis/data/**
# ...and the same for source_separation's FSD class map -- a bare `data/` pattern here
# would silently gitignore it exactly the way it once hid level_verdicts_baseline.json
# below, and load_fsd_class_map_document() would fail on any clone that isn't this host.
!src/senselab/audio/tasks/source_separation/data/
!src/senselab/audio/tasks/source_separation/data/**
# ...and the same for checked-in *test* data. `level_verdicts_baseline.json` is a measured artifact —
# the level-probe verdicts the guards in `level_probe_test.py` assert properties of — so a clone
# without it cannot run those six tests at all. They passed only on the machine that generated the
# file, and failed on every fresh clone (Engaging, CI) with the bare `data/` pattern above hiding why.
!src/tests/**/data/
!src/tests/**/data/**
# ...and the same for utils/tasks' fitted profiles (embedding_gap_significance.json): the bare
# `data/` pattern above silently gitignored it on first add, so `uv build` produced a wheel missing
# the file `_load_gap_significance_margin` reads, and a clone with no bundled profile would fall
# back to the undocumented in-code default instead of failing loudly.
!src/senselab/utils/tasks/data/
!src/senselab/utils/tasks/data/**
# pdoc documentation
docs/

# Speechbrain models
pretrained_models
src/tests/audio/tasks/pretrained_models/

# testmon
.testmondata
.testmondata-shm
.testmondata-wal
.qodo

# pose_estimation models
src/senselab/video/tasks/pose_estimation/models/

# tutorial files
tutorials/audio/tutorial_audio_files/
tutorials/video/tutorial_images/
tutorials/video/visualize/

# Run outputs. Content-addressable inputs are reproducible from the cache; the runs
# themselves are not source, and 142 MB of them were tracked while the default output
# directory was not — one convention, and it is "not in git".

# Nothing in artifacts/ is source. Every file under it is a regenerable output — run
# directories, the content-addressable cache, calibration profiles and probe results, all
# reproducible from the scripts that write them. Four per-directory rules used to sit here and
# each new output directory arrived untracked-by-accident or committed-by-accident depending on
# which was added first; 142 MB of run output was tracked while the default output directory was
# not. One rule, so the question never comes up again.
artifacts/

# SpeechBrain writes checkpoints into CWD from a `save_path` on an inner lobe's hparams.yaml,
# which the outer `savedir=` does not redirect. `dependencies.speechbrain_loading_cwd` now pins
# CWD to the senselab cache so this cannot recur; these directories were the residue from before
# that fix, and 3 GB of HuggingFace blobs had been committed.
wav2vec2_checkpoint/
wav2vec2_checkpoints/
pretrained_models/

# Tutorial output. `tutorials/video/pose_estimation.ipynb` writes these; running the notebook
# regenerates them, and a committed copy goes stale against the model that made it.
visualize/

# Build output.
dist/

# matplotlib's font cache — machine-local, and it was committed by accident once
.matplotlib/
