PyAutoFit is a Python probabilistic programming language for model fitting and Bayesian inference.
pip install -e ".[dev]"python -m pytest test_autofit/
python -m pytest test_autofit/non_linear/
python -m pytest test_autofit/mapper/NUMBA_CACHE_DIR=/tmp/numba_cache MPLCONFIGDIR=/tmp/matplotlib python -m pytest test_autofit/- Non-linear searches (
non_linear/search/): MCMC (emcee), nested sampling (dynesty, nautilus), MLE (LBFGS, BFGS, drawer) - Model composition (
mapper/):af.Model,af.Collection, prior distributions - Analysis (
non_linear/analysis/): baseaf.Analysisclass withlog_likelihood_function - Aggregator (
aggregator/): results aggregation across runs - Database (
database/): SQLAlchemy backend for results storage - Graphical models (
graphical/): expectation propagation
- All files must use Unix line endings (LF)
- Format with
black autofit/
- Read the issue description and any linked plan.
- Identify affected files and write your changes.
- Run the full test suite:
python -m pytest test_autofit/ - Ensure all tests pass before opening a PR.
- If changing public API, note the change in your PR description — downstream packages (PyAutoArray, PyAutoGalaxy, PyAutoLens) and workspaces may need updates.
NEVER perform these operations on any repo with a remote:
git initin a directory already tracked by gitrm -rf .git && git init- Commit with subject "Initial commit", "Fresh start", "Start fresh", "Reset for AI workflow", or any equivalent message on a branch with a remote
git push --forcetomain(or any branch tracked asorigin/HEAD)git filter-repo/git filter-branchon shared branchesgit rebase -irewriting commits already pushed to a shared branch
If the working tree needs a clean state, the only correct sequence is:
git fetch origin
git reset --hard origin/main
git clean -fd
This applies equally to humans, local Claude Code, cloud Claude agents, Codex, and any other agent. The "Initial commit — fresh start for AI workflow" pattern that appeared independently on origin and local for three workspace repos is exactly what this rule prevents — it costs ~40 commits of redundant local work every time it happens.