Skip to main content

Hotpot banner

🥘 Hotpot (火锅)

A cheminformatics harness for coordination chemistry

HOTPOT — a Human- and LLM-Oriented Toolkit with chemical Priors for Open-ended cheminformatics Tasks.

In Hotpot, every ingredient is cookable. 什么都能涮 In data-driven chemistry, every problem is computable. 什么都能算

Hotpot presents chemistry through two equally important conceptual entry points: Molecule for molecular systems and Crystal for periodic systems. Molecule is the mature working interface today; Crystal defines an equal part of the long-term public model and remains under active development.

Hotpot is designed around four layers:

  1. a frontend that chemists can read and use directly;
  2. a structured CLI that language models and automation agents can call reliably;
  3. a silent cheminformatics layer that applies domain rules without burdening the caller with implementation details; and
  4. AI backends exposed as chemistry operations rather than training code.

The public documentation therefore focuses on observable behavior, scientific scope, and stable interfaces. Internal chemical decision policies and model implementation details are intentionally kept outside the user-facing API. The preceding project description is preserved as README.2026.md for historical reference; this document is the description of the current checkout.

Contents

Command-line interface

The CLI is the preferred interface for shell workflows, language-model tool use, and reproducible pipelines. Each command accepts --help; the chemistry commands also provide extended examples through --doc.

Command Purpose Typical output Detailed guide
hotpot mca Predict site-resolved methyl cation affinity (MCA) Atom table in kJ/mol MCA CLI
hotpot cbond Predict and construct metal–ligand coordination bonds Complex SMILES or ranked structures CBond CLI
hotpot ff Build or optimize 3D molecular structures and report quality Molecular structure file and optional JSON report Force-field CLI

MCA prediction

$ hotpot mca 'c1ccccc1CN' --device cpu
No.  Atom  MCA(kJ/mol)  is_Nuc_site
1    C     319.00       False
2    C     304.00       False
3    C     329.25       False
4    C     303.50       False
5    C     318.75       False
6    C     324.00       False
7    C     314.50       False
8    N     489.50       True

MCA is reported for every heavy atom. is_Nuc_site marks the sites selected by the supported nucleophilic-site definition.

Coordination-bond construction

$ hotpot cbond Eu \
    'O=C(N(C)CCC)C(C=C1)=NC2=C1C=CC3=C2N=C(C4=NC(C(C)(C)CCC5(C)C)=C5N=N4)C=C3' \
    --device cpu --bond-detail
CCCN(C1=[O][Eu@]23n4c1ccc1c4c4n3c(-[c]3n2nc2c(n3)C(C)(C)CCC2(C)C)ccc4cc1)C
Cbond Detail:
AtomIdx  Atom  Score
10       N     4.04834
17       N     7.02889
0        O     6.10205
32       N     4.98739
-- End --

This is the (CyMe4)Pyz-PrMe-DIPhen extractant used in Hotpot's coordination chemistry examples. The result is not a decorative single-bond demonstration: the model selects four donor atoms across a chemically complex ligand, constructs the Eu coordination graph, and reports the score associated with each selected metal–donor bond. The ligand may also be supplied as a molecular file. Use --all-structures when ranked alternative coordination structures are required. By default, the first coordination bond uses a raw-score threshold of -0.5; subsequent bonds use -0.125.

Force-field optimization

$ hotpot ff CC --epochs 1 --steps-per-epoch 20 --quality standard \
    --seed 2026 --report ethane.json -o ethane.mol2

This writes a parseable, hydrogen-complete 3D structure to ethane.mol2 and a machine-readable validation report to ethane.json. A successful report contains "status": "ok".

Commands compose through standard input and output, which makes the public surface convenient for both people and LLM-driven tools:

$ hotpot cbond Eu \
    'O=C(N(C)CCC)C(C=C1)=NC2=C1C=CC3=C2N=C(C4=NC(C(C)(C)CCC5(C)C)=C5N=N4)C=C3' \
    --device cpu \
    | hotpot ff - --input-format smi --epochs 1 --steps-per-epoch 20 \
        --quality off --seed 2026 -o eu-extractant.mol2

Installation

Hotpot supports Python 3.9–3.14 for its chemical kernel, search layer, and ONNX inference path. Python 3.10 or newer is recommended.

Install from PyPI

$ conda create -n hp python=3.11 pip -y
$ conda activate hp
$ python -m pip install --upgrade pip
$ python -m pip install hotpot-zzy

Install the current source

$ git clone https://github.com/Zhang-Zhiyuan-zzy/hotpot.git
$ cd hotpot
$ conda create -n hp python=3.11 pip -y
$ conda activate hp
$ python -m pip install --upgrade pip
$ python -m pip install -e .

The source tree can contain interfaces newer than the latest PyPI release.

Install with Docker

Build the Conda-based Hotpot image from the repository root. The image build installs Hotpot and its compiled extensions, then checks the installed package before completing:

$ docker build --build-arg PYTHON_VERSION=3.13 \
    --tag hotpot-test:py313-conda \
    --file docker/test/Dockerfile .

Run a Hotpot command in the isolated environment:

$ docker run --rm hotpot-test:py313-conda hotpot --help

Running the image without an additional command executes the complete test and coverage suite:

$ docker run --rm hotpot-test:py313-conda

Python 3.9 through 3.14 images and host-source test containers can also be managed with the repository scripts. See the Docker guide for version selection, interactive use, and image export.

Optional dependency profiles

Extra Installation Scope
pymol python -m pip install 'hotpot-zzy[pymol]' NumPy profile compatible with PyMOL 3.1; PyMOL itself is not installed
optimize python -m pip install 'hotpot-zzy[optimize]' Classical optimization and machine-learning workflows
datasets python -m pip install 'hotpot-zzy[datasets]' Dataset download, HDF5, and PyG support
complexformer python -m pip install 'hotpot-zzy[complexformer]' ComplexFormer training and LoRA dependencies
onnx-export python -m pip install 'hotpot-zzy[onnx-export]' ONNX export and inspection tools
dev python -m pip install -e '.[dev]' Tests, linting, coverage, and package builds

PyMOL 3.1 requires numpy>=1.26.4,<2. Use the pymol profile in an isolated environment if PyMOL is required.

ONNX inference uses CPU by default and automatically selects an available GPU provider. GPU users must install an onnxruntime-gpu build compatible with the machine's CUDA and cuDNN libraries; the newest runtime is not necessarily compatible with every installed CUDA version.

Python interface

The Python API expresses the same operations through native chemical objects.

Site-resolved MCA

from hotpot import read_mol
from hotpot.calculator import mca

mol = read_mol("c1ccccc1CN")
mca(mol, device="cpu")
for atom, value in mol.mca_sites.items():
    print(atom.label, f"{value:.2f}")
N7 489.50

atom.mca is a read-only result. Accessing it before prediction raises an error that directs the caller to the calculator.

Molecular objects, rings, and aromaticity

import hotpot as hp

mol = hp.read_mol("c1ccccc1O")
print(len(mol.atoms))
print([len(ring.atoms) for ring in mol.rings])
print([ring.is_aromatic for ring in mol.rings])
7
[6]
[True]

Hotpot exposes molecular rings and performs aromaticity perception. More detail about graph-level ring APIs is available in the graph package guide.

Interoperability

import hotpot as hp

mol = hp.read_mol("CCN")
print(len(hp.to_hotpot_mol(mol.to_rdmol()).atoms))
print(len(hp.to_hotpot_mol(mol.to_obmol()).atoms))
3
3

to_hotpot_mol is the shared conversion entry point for Hotpot, RDKit, and Open Babel molecular objects.

Thermodynamic and graph representations

import hotpot as hp

mol = hp.read_mol("c1ccc(O)cc1", "smi")
thermo = mol.get_thermo(temp=298.15, pressure=101325)
print(thermo.Tc)
print(thermo.Psat)
694.2
80.20201686
import hotpot as hp

phenol = hp.read_mol("c1ccc(O)cc1", "smi").graph_spectral()
benzoic_acid = hp.read_mol("c1ccccc1C(=O)O", "smi").graph_spectral()
reordered_phenol = hp.read_mol("c1ccccc1O", "smi").graph_spectral()

print(phenol.vectors.shape)
print(benzoic_acid.vectors.shape)
print(phenol | benzoic_acid)
print(phenol | reordered_phenol)
(6, 13)
(6, 15)
0.907590226292854
1.0

Chemistry capabilities

Native chemical objects

  • Molecule, Atom, Bond, and Ring represent molecular structure and expose chemistry-oriented operations.
  • Crystal is the co-equal periodic-system concept in Hotpot's public model; its mature workflow remains on the roadmap.
  • Common molecular formats can be read and written through a single object model.

Search and SMARTS

Hotpot provides a NetworkX-based SMARTS and substructure search system while preserving metal-aware matching. See the SMARTS guide for its public syntax and examples.

Molecular assembly

The assembly API supports fragment joining and ring-based construction. RingWedge is part of the public interface for explicitly describing a ring wedge used in assembly. See the assembly guide.

AI-backed chemistry

The inference capabilities include site-resolved MCA and metal–ligand coordination-bond prediction. Versioned weights are downloaded from the public Hotpot model repository on first use, pinned to an immutable revision, cached locally, and verified by SHA-256. They can also be installed before an offline run:

$ hotpot models install --all

Users do not need the training implementation to call the stable chemistry-facing interfaces.

Geometry and force-field validation

Geometry provides mathematical measurements and spatial relationships; force-field code decides how those facts affect a chemical workflow. Public geometry concepts and relation functions are documented in the geometry package guide.

The public force-field validation interface can assess a structure independently of the optimizer that produced it:

import hotpot as hp
from hotpot.cheminfo import forcefields as ff

mol = hp.read_mol("CC")
mol.build3d(
    forcefield="UFF",
    epochs=1,
    steps_per_epoch=20,
    quality_level="standard",
    seed=2026,
)
report = ff.evaluate_structure_acceptance(mol, level="standard")
print(report.passed)
True

This common report makes native Open Babel, native RDKit, Hotpot, or external optimization results comparable under the same public geometry-quality gate.

Validation evidence

Ligand and Am–ligand benchmark

Four independently launched workflows were evaluated on the same 187 isolated ligands and the same 182 CBond-eligible Am–ligand complexes. Hotpot uses its default FAST convergence policy. Times are median construction-plus-optimize durations among completed workflows in a 16-worker run; CBond inference, serialization, rendering, and any external post-validation are excluded. Hotpot optimize_complex uses internal acceptance checks to select its route; their cost therefore remains inside its reported duration.

Workflow Ligand geometry pass Ligand median time Am–ligand geometry pass Am–ligand median time
RDKit 186/187 (99.5%) 0.314 s 30/182 (16.5%) 0.457 s
Open Babel 181/187 (96.8%) 1.159 s 162/182 (89.0%) 2.134 s
Hotpot obWrappers (FAST) 183/187 (97.9%) 1.759 s 164/182 (90.1%) 2.919 s
Hotpot optimize_complex 182/187 (97.3%) 3.372 s 182/182 (100.0%) 3.732 s

Ligand and Am coordination-complex geometry and efficiency comparison

The independent launch commands and evidence files are documented with the benchmark:

For Am–ligand complexes, Hotpot optimize_complex accepted 164 native FAST results directly and sent 18 rejected candidates through the complete complex workflow. All four convergence policies remain selectable through the Python API and hotpot ff --convergence-level; automatic fallback does not silently upgrade the caller's selected policy to STRICT.

The same 187 extractant ligands were submitted to Hotpot's automatic complex workflow with Am: native FAST optimization first, followed by the complete complex workflow only when the preliminary structure was rejected. Hotpot inferred at least one Am–donor coordination bond for 182/187 inputs; 5/187 inputs produced no Am CBond. All 182/182 optimized outputs passed the current generic geometry gate; this does not establish that every coordination environment is chemically definitive.

The galleries use explicit hydrogens and a white-background, orthographic, Materials Studio-inspired ball-and-stick style. Each structure is viewed along the maximum principal moment axis of its mass-weighted inertia tensor.

Am coordination complexes constructed from CBond-positive extractants

CBond-positive inputs. Each panel shows the workflow-selected final structure.

Extractant ligands without an inferred Am coordination bond

Inputs for which no Am CBond was inferred. These are visualization-only 3D ligand structures, not Am complexes.

The path-free gallery evidence records the exhaustive case partition, structure and report hashes, explicit-H and Am counts, rendering status, principal moments, and image hashes.

Scientific boundaries

  • MCA values are model predictions in kJ/mol and are not Mayr nucleophilicity parameters.
  • Ranked CBond path probabilities are model-relative weights, not calibrated experimental probabilities.
  • A force-field quality pass means that the configured structural checks passed; it does not prove that the global minimum, oxidation state, ligand field, or experimentally dominant conformer is correct.
  • Macroscopic observables generally describe ensembles and environments. A single optimized molecular structure should not be treated as a complete thermodynamic or experimental model.

References

If Hotpot contributes to published work, please cite the application paper relevant to the workflow:

  1. Z. Zhang, D. Yang, Y. Que, Y. Wu and C. Liu, “Coordination-informed machine learning enables virtual screening of phenanthroline ligands by predicting Am/Eu binding preferences,” Chemical Communications, 62 (2026), 17426–17430. https://doi.org/10.1039/D6CC03919G

Roadmap

  • Mature Crystal workflows for periodic structures.
  • A stable Molecule.descriptors interface.
  • Automatic fine-tuning of compatible models from private molecular datasets, with an explicit user-controlled workflow.
  • Molecule-aware experimental optimization across mixed chemical and process variables.
  • AI-assisted molecular generation and conditional design.
  • Oxidation-state perception for coordination systems.

Roadmap entries are design intentions rather than currently supported APIs.

Development

README examples are executable regression tests. Run them with:

$ python -m pytest -q tests/readme

The benchmark launchers and evidence aggregation command are listed in the coordination-complex benchmark guide.

The complete test suite and coverage shortcut is:

$ ./tests/run_coverage.sh

License

Hotpot is released under the MIT License.

Metadata

Release files for hotpot-zzy 0.5.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hotpot-zzy 0.5.4.0
File Size Uploaded
hotpot_zzy-0.5.4.0.tar.gz 876.2 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for hotpot-zzy 0.5.4.0
File
hotpot_zzy-0.5.4.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
hotpot_zzy-0.5.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
hotpot_zzy-0.5.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
hotpot_zzy-0.5.4.0-cp311-cp311-manylinux_2_31_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.31+ x86-64 Details
hotpot_zzy-0.5.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
hotpot_zzy-0.5.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
hotpot_zzy-0.5.4.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details

Total release size: 18.9 MB

Release files / hotpot_zzy-0.5.4.0.tar.gz

Download URL hotpot_zzy-0.5.4.0.tar.gz
Size 876.2 kB
Tags Source
SHA-256 checksum
How to use checksums
28abebb0f1e3f3a6d5c21f963c0aba5e107193b9cd94040d87547c4bbce61a04
BLAKE2b-256 checksum
How to use checksums
87ac193bcd8146e919a70354c88a45079cac501b6d2eacc912b37cb745d9f98b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.16

Release files / hotpot_zzy-0.5.4.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL hotpot_zzy-0.5.4.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 2.6 MB
Tags CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
29db46d69ea5d66e25524f65e021ea99d3450b8e8a8e3410fa89c8708d763332
BLAKE2b-256 checksum
How to use checksums
29d0430131d628d7d3f3b933214755765a315e67c312fb1d5af856b79fe223db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.16

Release files / hotpot_zzy-0.5.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL hotpot_zzy-0.5.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 2.6 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
3f047701304e27b46206996e6857c222a2eda12c095a0fc54f7e131b4f9e6950
BLAKE2b-256 checksum
How to use checksums
5642d9b5f4416e2bf7a220c44694e15612be04090378e9886b6faa3e4380b507
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.16

Release files / hotpot_zzy-0.5.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL hotpot_zzy-0.5.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 2.6 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
23f39aa258b6440df22b4342dbf06cd0f2a4d143b7b3284cdf7b3eb46b4b635b
BLAKE2b-256 checksum
How to use checksums
5a3ecc287193c15c2c264d55a58bb6adf6cfafd3422e2a37b284016e15f1c1bd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.16

Release files / hotpot_zzy-0.5.4.0-cp311-cp311-manylinux_2_31_x86_64.whl

Download URL hotpot_zzy-0.5.4.0-cp311-cp311-manylinux_2_31_x86_64.whl
Size 2.4 MB
Tags CPython 3.11 Linux glibc 2.31+ x86-64
SHA-256 checksum
How to use checksums
646c9285280557b600c36206bab5f92c3159968ea6d002183492faca646ee31f
BLAKE2b-256 checksum
How to use checksums
eb6fed8aea219561b604c2b5c8c54b49efb25661b0e72b4329a94522dd857d25
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.16

Release files / hotpot_zzy-0.5.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL hotpot_zzy-0.5.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 2.6 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
20b75ec52c971d0dd103b343dcf8a5e2c425f2b46f27a6f468af7b809fbef762
BLAKE2b-256 checksum
How to use checksums
66f39692cfcff2db1505391cf35200531b2fecd78007be040e05d91cfa51cb60
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.16

Release files / hotpot_zzy-0.5.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL hotpot_zzy-0.5.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 2.6 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
fad3eb3de8ed83e46500fff211639ca7d9e1724aed5d5103ac2ff1abacea9274
BLAKE2b-256 checksum
How to use checksums
74416ef3ef06ba1d07ba8044214e2ff6b9835181830233527c48e3fdff4d43e0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.16

Release files / hotpot_zzy-0.5.4.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL hotpot_zzy-0.5.4.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 2.6 MB
Tags CPython 3.9 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
5f5e23db9f251ecb010e06b4215b8eab1a80b29f5244a0425cdacaefae91a190
BLAKE2b-256 checksum
How to use checksums
e39a4f809b1e2a92753b72d1bb1f8ba879b43bf1ee367d7dcbadc77f18ec2d89
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.16
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page