# 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/
wheelhouse/
*.egg-info/
.installed.cfg
*.egg

# Environments: one list, not a second block naming part of it again.
# Git takes the union either way, so what a second block costs is a reader
# who finds two answers to one question.
# `.venv*/` and `venv*/`, not the bare names alone: a suffix makes a
# different name, and `UV_PROJECT_ENVIRONMENT=.venv-3.10 uv run --python
# 3.10 --no-cache pytest` -- CONTRIBUTING.md's other-interpreter run, kept
# from replacing the default environment -- creates one. Nothing downstream
# catches it: uv writes a `.gitignore` holding `*` inside the environment,
# so `git status` is clean, while hatchling reads this file alone and ships
# the directory in the sdist, where `bin/python` is a link to an absolute
# path that `pyroma` refuses to extract. The trailing slash keeps each
# wildcard to directories, which is why the bare `.venv` stays below it:
# that literal is what covers a non-directory of the name, and dropping
# it for the wildcard alone would leave one no longer ignored.
.env
.venv
.venv*/
env/
venv*/
ENV/
env.bak/

# 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.*
# the coverage job's three runs -- one per linkage, plus the flagged
# build's own -- named with COVERAGE_FILE so that none overwrites
# another: combine consumes all three, so what these cover is a run
# that stopped before that step
coverage-data-static
coverage-data-dynamic
coverage-data-zkp
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# no .python-version here: uv reads that file to choose the interpreter,
# and it is tracked, pyproject.toml's requires-python being the other half
# of the pair

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/

# vscode: the workspace files are tracked, and the rest of what the editor
# writes there is not. The directory itself cannot be the pattern -- git does
# not descend into an excluded directory, so a negation under `.vscode/` never
# matches -- which is why this excludes the contents and re-admits two names
.vscode/*
!.vscode/settings.json
!.vscode/extensions.json

# PyCharm
.idea/

# MACOS
.DS_Store
btclib.prof

_site/
.sass-cache/
Gemfile.lock
~*.docx

**/_btclib_secp256k1.*
# ... but the hand-written type stub of the extension is source
!stubs/_btclib_secp256k1.pyi
*.o
*.dll
*.so
*.dylib

.pytest_cache/
# ruff drops a .gitignore of its own inside .ruff_cache: that only hides
# the cache once ruff has created it, and says nothing to a tree where
# the directory does not exist yet
.ruff_cache/
