Skip to main content

Reaction-pathway explorer for catalyst surfaces with ML interatomic potentials: reaction networks, NEB barriers, and cross-model uncertainty.

Project description

catpath

CI PyPI Python License: GPL v3

Reaction-pathway explorer for catalyst surfaces, driven by ML interatomic potentials. Give it an environment (a metal surface), a substrate, and a target; it builds the reaction network, relaxes every intermediate, finds the barriers with climbing-image NEB, and reports energies with honest uncertainty — pooled across random seeds and across ML potentials.

  • Reaction networks — curated templates or rule-based autodetection of intermediates (network: auto).
  • Pluggable ML potentialsmace, chgnet, fairchem (UMA), grace, or auto (best installed). emt is a dependency-free dev backend.
  • Barriers — climbing-image NEB with automatic retry on non-convergence.
  • Cross-model comparison — run the same network under several potentials and box-plot where they agree and disagree (intermediates, barriers, and which transition state is the true rate-limiting "highest point").
  • Reproducible — every run writes a provenance snapshot; unstable results are flagged low-confidence rather than reported as precise numbers.

Cross-model comparison of intermediate formation energies

NO→NH₃ on Pd: formation energies of every intermediate under MACE, CHGNet, and UMA — the models agree on NO activation but diverge on deep hydrogenation.

Install

pip install catpath

The default emt backend is pure numpy/ASE (no torch, no GPU) and runs the whole pipeline anywhere — great for trying it out and for CI. For real numbers, add exactly one ML backend (their dependencies conflict, so one per environment):

pip install "catpath[mace]"      # MACE-MP-0 universal potential (GPU)
pip install "catpath[chgnet]"    # CHGNet (CPU-friendly)
pip install "catpath[fairchem]"  # Meta FAIRChem / UMA (adsorbates on metals)
pip install "catpath[grace]"     # GRACE foundation models

Quickstart

# whole pipeline (all seeds) on the dependency-free EMT backend:
catpath run examples/no_to_no3_pd.yaml

# let the intermediates be discovered automatically, on a real ML potential:
catpath run examples/auto_ammonia.yaml --backend auto

Outputs land in runs/<name>/:

File Contents
graph_thumbs.png reaction energy-profile with active-site structure thumbnails
graph_network.png node/DAG view of the network (red = low-confidence)
energy_map.png substrate × intermediate heatmap; ★ = rate-limiting state
results.json nodes, edges, barriers, mean ± spread, warnings
methods.md a deterministic methods paragraph for your write-up
config.snapshot.yaml provenance snapshot for exact reproduction

Compare several ML potentials

Because the backends can't share an environment, run states / barriers in each one's env, then compare the JSONs:

catpath states   my.yaml --backend chgnet   --out s_chgnet.json
catpath states   my.yaml --backend fairchem --out s_uma.json
catpath compare  --states s_*.json --out intermediates.png     # box plot per state

catpath barriers my.yaml --backend chgnet   --out b_chgnet.json
catpath compare  --states b_*.json --out barriers.png          # Ea, rate-limiting ringed
catpath compare  --states b_*.json --heights s_*.json --out ts_heights.png

State energies are referenced to per-element gas-phase chemical potentials computed in each potential, so composition-changing states are comparable across models. See examples/README.md for the full set of commands.

CLI

catpath run <cfg>            # all seeds in-process + outputs
catpath states <cfg>         # relax states only (no NEB) -> per-model JSON
catpath barriers <cfg>       # NEB for every step -> per-model JSON
catpath compare --states ... # box plots (states or barriers, auto-detected)
catpath multi <cfg>          # several substrates -> union energy map
catpath sweep <cfg> --elements Pd,Pt,Cu   # same network across surfaces

Everything is one YAML file — see docs/CONFIG.md for every field, and docs/USAGE.md for extension points.

Development

uv sync --extra dev
uv run ruff check src tests
uv run pytest

Contributing

Issues and PRs welcome — see CONTRIBUTING.md. Maintained by Reto Stamm.

Acknowledgements

catpath was requested by Muhammad Umer, whose help shaping what it should do got the project off the ground.

Built with Claude (Anthropic) via Claude Code, with research assistance from Perplexity.

License

GPL-3.0-or-later. Built on ASE (LGPL) and RDKit (BSD).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

catpath-0.1.0.tar.gz (499.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

catpath-0.1.0-py3-none-any.whl (68.1 kB view details)

Uploaded Python 3

File details

Details for the file catpath-0.1.0.tar.gz.

File metadata

  • Download URL: catpath-0.1.0.tar.gz
  • Upload date:
  • Size: 499.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for catpath-0.1.0.tar.gz
Algorithm Hash digest
SHA256 46787381fea9712984a28caf0171ac6ed937311a74c06a22ae452b9c4c1b976d
MD5 48087c0068f3ef95038221fcc2af4741
BLAKE2b-256 1949e4e85df521481e6b44708103db8ba4889b56ce16270273990bb2b865188e

See more details on using hashes here.

Provenance

The following attestation bundles were made for catpath-0.1.0.tar.gz:

Publisher: workflow.yml on retospect/catpath

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file catpath-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: catpath-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 68.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for catpath-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8fdd7c23d7797bedcf1929b417d1560ff91f7ac3ac2c8acb5b88e89077f83318
MD5 54c03d499f7edcf47c8ba0a8cb361c6c
BLAKE2b-256 83c3011dc3bd1717a43e2c0f4e4d6aa6dc7679d173adee91ddefbd363831fea5

See more details on using hashes here.

Provenance

The following attestation bundles were made for catpath-0.1.0-py3-none-any.whl:

Publisher: workflow.yml on retospect/catpath

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page