CARE: Catalysis Automated Reaction Evaluator
CARE (Catalytic Automated Reaction Evaluator) is a framework for the automated generation and manipulation of chemical reaction networks (CRNs) in heterogeneous catalysis. CARE is powered by ML-based energy evaluators (GAME-Net-UQ, FairChem, MACE, UPET, Orb, SevenNet) and includes multiscale kinetic functionalities enabling the quantification of catalytic activity for reactions containing thousands of elementary steps.
🪛 Installation
To install CARE with a specific Machine Learning Interatomic Potential (MLIP) evaluator, specify it as an extra dependency.
pip install "care-crn[mlip]"
Replace [mlip] with your desired evaluator. Supported models include:
fairchemv1 | fairchemv2 | mace | upet | orb | sevenn | gamenetuq
[!WARNING] Environment Isolation Because each ML model depends on highly specific backend versions (PyTorch, e3nn, ASE, etc.), you will likely need to create one distinct virtual environment for each ML evaluator you intend to use to avoid dependency conflicts.
[!NOTE] Automatic Julia Backend Setup CARE relies on a Julia backend for high-performance ODE integration during microkinetic simulations. No manual installation of Julia is required.
The first time you execute a simulation,
juliapkgwill automatically download a private, compatible version of Julia (if not present) and install the necessary dependencies defined insrc/care/juliapkg.jsoninto an isolated environment. This initial setup will take a few extra minutes to compile.
Developer Installation
Required disk space: ~6.5 GB (Python environment), ~4.3 GB (Julia+dependencies)
-
Clone the repo:
git clone git@github.com:LopezGroup-ICIQ/care.git cd care
-
Create environment:
conda create -n care_env python==3.12 conda activate care_env
-
Install care-crn in editable mode:
python3 -m pip install -e .[gamenetuq,mace,etc.]
💥 Usage
Network Generation
You can construct a reaction network blueprint using one of three primary methods:
- Reactants and Products: Define the start and end points using SMILES strings.
- Cutoffs: Define the maximum number of Carbon (
ncc) and Oxygen (noc) atoms allowed. - Chemical Space: Provide a specific list of target SMILES strings to explore (e.g., a specific decomposition network).
[!TIP] Supported Chemical Space CARE currently supports reaction networks with species containing CHONS + Halogens.
from care import ReactionNetwork
# Method 1: From explicit reactants and products (e.g., CO2 hydrogenation to Methanol)
crn = ReactionNetwork.from_species(reactants=["O=C=O", "[H][H]"], products=["CO", "O"])
# Method 2: From elemental network cutoffs (e.g., max 2 Carbons, 1 Oxygen)
crn = ReactionNetwork.from_cutoffs(ncc=2, noc=1)
# Method 3: From a predefined chemical space (e.g., Ethanol decomposition)
crn = ReactionNetwork.from_chemical_space(cs=["CCO"])
# Prints a quick summary (number of species, reactions, etc.)
print(crn)
# Returns a pandas DataFrame of the generated reactions
df_reactions = crn.get_reaction_table()
# Renders a visual graph of the reaction network
crn.plot()
Energy Evaluation
The range of catalyst materials on which CRNs can be evaluated depends on the training domain of the employed ML model.
[!NOTE] Available Evaluators A complete list of available ML evaluators (and their specific capabilities) can be found in the Evaluators README.
from care import Surface
from care.evaluators import MACEevaluator
# 1. Define the catalyst surface (e.g., Pt(110) from the Materials Project)
surface = Surface.from_mp("mp-2", mp_api_key="your_key", hkl="110", xy_repeat=2)
crn.add_catalyst(surface)
# 2. Initialize the ML evaluator (using GPU acceleration if available)
ml_evaluator = MACEevaluator(device="cuda", num_configs=3, max_steps=50, fmax=0.05)
# 3. Relax all adsorbed intermediates
for intermediate in crn.intermediates.values():
ml_evaluator(intermediate)
# 4. Perform Nudged Elastic Band (NEB) for transition state searches
for reaction in crn.reactions:
ml_evaluator(reaction, num_images=3)
# View the updated table containing the newly computed thermodynamics and barriers
crn.get_reaction_table()
Microkinetic Run
Once the CRN is energetically evaluated, microkinetic simulations enable you to quantify the performance of the catalyst. CARE automatically calculates apparent kinetics ($E_{app}$, $n_{app}$) and performs robust sensitivity analyses, including the Degree of Rate Control ($\chi_{RC}$) and Degree of Selectivity Control ($\chi_{SC}$).
from care.reactors import DifferentialPFR
# Initialize the reactor model
reactor = DifferentialPFR(crn)
# Define operating conditions
reactor.T = 473 # Temperature in K
reactor.P = 1e6 # Pressure in Pa
y0 = {"CO2": 0.2, "H2": 0.4, "Ar": 0.4} # Inlet gas molar fractions
cov0 = {"H": 0.9} # Initial surface coverages
# Execute the simulation (automatically delegates to the Julia backend)
mkm = reactor.run(iv=y0, cov0=cov0, eapp=True, napp=True, drc=True)
# View results directly in the terminal
print(mkm.get_performance_summary())
# Export comprehensive results to Excel
mkm.export("mkm_report.xlsx")
Run all together
You can run the entire pipeline (blueprint generation ➡ energy evaluation ➡ kinetic simulation) running the care_run script:
care_run -h # documentation
care_run -i input.toml -o output_name
This will generate a output_name folder with the generated reaction network and additional results from the kinetic simulation.
Examples of input .toml files can be found here.
📖 Tutorials
We currently provide two tutorials, available in the notebooks directory:
- CARE tutorial (run it on Google Colab by clicking the badge on top of the README)
- Adsorbate placement
✒️ License
The code is released under the MIT license.
📜 Reference
If you use CARE in your research, please cite the following paper and consider starring the repository.
Morandi, S., Loveday, O., Renningholtz, T. et al. An end-to-end framework for reactivity in heterogeneous catalysis. Nat. Chem. Eng. (2026). https://doi.org/10.1038/s44286-026-00361-8
@article{CARE,
title = {An End-to-End Framework for Reactivity in Heterogeneous Catalysis},
author = {Morandi, Santiago and Loveday, Oliver and Renningholtz, Tim and {Pablo-Garc{\'i}a}, Sergio and {Vargas-Hern{\'a}ndez}, Rodrigo A. and Seemakurthi, Ranga Rohit and Sanz Berman, Pol and {Garc{\'i}a-Muelas}, Rodrigo and {Aspuru-Guzik}, Al{\'a}n and L{\'o}pez, N{\'u}ria},
year = {2026},
journal = {Nature Chemical Engineering},
volume = {3},
number = {3},
pages = {169--180},
doi = {10.1038/s44286-026-00361-8},
}
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file care_crn-0.9.0.tar.gz.
File metadata
- Download URL: care_crn-0.9.0.tar.gz
- Upload date:
- Size: 1.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b901a2327f4f15cc417dbeeac25136962dcfb00e90d62cea95d226f9baf3098a
|
|
| MD5 |
9675b59855a93540383df6ffc944b91c
|
|
| BLAKE2b-256 |
22f5aa104909ae9eb8fa914d3052c031c6306c351c098ec39dca9f4616c9196a
|
Provenance
The following attestation bundles were made for care_crn-0.9.0.tar.gz:
Publisher:
publish-to-pypi.yml on LopezGroup-ICIQ/care
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
care_crn-0.9.0.tar.gz -
Subject digest:
b901a2327f4f15cc417dbeeac25136962dcfb00e90d62cea95d226f9baf3098a - Sigstore transparency entry: 2783610585
- Sigstore integration time:
-
Permalink:
LopezGroup-ICIQ/care@749b60a880815529d654862f47832bd12240023f -
Branch / Tag:
refs/tags/v0.9.0 - Owner: https://github.com/LopezGroup-ICIQ
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@749b60a880815529d654862f47832bd12240023f -
Trigger Event:
push
-
Statement type:
File details
Details for the file care_crn-0.9.0-py3-none-any.whl.
File metadata
- Download URL: care_crn-0.9.0-py3-none-any.whl
- Upload date:
- Size: 224.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf520a303cbee28b9c58d74489e12c0e034de5607462e9e5258a3054e98da2f8
|
|
| MD5 |
0800d8fe0e3fa5f4f2b6ba461a854878
|
|
| BLAKE2b-256 |
36d0de97b4bde61362763fd13b165e3766c8cdaa8789bac6044d17162d6a60ee
|
Provenance
The following attestation bundles were made for care_crn-0.9.0-py3-none-any.whl:
Publisher:
publish-to-pypi.yml on LopezGroup-ICIQ/care
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
care_crn-0.9.0-py3-none-any.whl -
Subject digest:
bf520a303cbee28b9c58d74489e12c0e034de5607462e9e5258a3054e98da2f8 - Sigstore transparency entry: 2783611033
- Sigstore integration time:
-
Permalink:
LopezGroup-ICIQ/care@749b60a880815529d654862f47832bd12240023f -
Branch / Tag:
refs/tags/v0.9.0 - Owner: https://github.com/LopezGroup-ICIQ
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@749b60a880815529d654862f47832bd12240023f -
Trigger Event:
push
-
Statement type: