Torch-based Python bindings for the minichem Fortran chemistry solver.
Project description
pyminichem
pyminichem is a standalone Python package and Torch-based C++ wrapper around
the Fortran mini_chem code base. The repository follows the same broad layout
used by pydisort, pyharp, and kintera:
src/: native C, C++, and wrapper codepython/: Python package, pybind11 bindings, and packaged resourcespatches/: upstream minichem patch settests/: C++ and Python validation
The build flow is:
- Fetch upstream
mini_chemwith CMake. - Apply the same
mini_ch_i_dlsode.f90patch used bycanoe. - Link the patched Fortran implementation into a thin C shim.
- Wrap that shim in a Torch-based C++ API.
- Expose the C++ API to Python with pybind11.
Build
CPU build
Use the default GNU toolchain for the CPU-only path:
cmake -S . -B build-cpu -DBUILD_TESTS=ON
cmake --build build-cpu -j
ctest --test-dir build-cpu -R '^test_minichem.release$' --output-on-failure
If you want the editable Python package to use the CPU build, copy the native library into the package locations and reinstall:
cp build-cpu/lib/libpyminichem_release.so build/lib/libpyminichem_release.so
cp build-cpu/lib/libpyminichem_release.so python/lib/libpyminichem_release.so
python -m pip install -e .
CUDA/OpenACC build with NVHPC
The working CUDA path in this repo uses the NVIDIA HPC SDK toolchain:
cmake -S . -B build-nvhpc \
-DBUILD_TESTS=OFF \
-DCUDA=ON \
-DCMAKE_C_COMPILER=nvc \
-DCMAKE_CXX_COMPILER=nvc++ \
-DCMAKE_Fortran_COMPILER=nvfortran
cmake --build build-nvhpc -j
To make the editable Python package use the NVHPC/CUDA build:
cp build-nvhpc/lib/libpyminichem_release.so build/lib/libpyminichem_release.so
cp build-nvhpc/lib/libpyminichem_release.so python/lib/libpyminichem_release.so
python -m pip install -e .
Test
Python tests
After installing the editable package:
pytest tests
GPU smoke test
Run the live CUDA test from a directory outside the repo root, so Python imports
the editable package instead of treating the top-level pyminichem/ repo
directory as a namespace package:
cd /tmp
python - <<'PY'
import torch
import pyminichem
print('cuda_enabled', pyminichem.cuda_enabled())
print('torch_cuda_available', torch.cuda.is_available())
print('device_count', torch.cuda.device_count())
base_vmr = torch.tensor(
[[0.0, 0.9975, 0.001074, 0.0, 0.0, 0.0, 0.0, 0.00059024, 0.0, 0.00014159, 0.0, 0.0]],
dtype=torch.float64,
)
outputs = []
for dev in [0, 1]:
device = f'cuda:{dev}'
mc = pyminichem.MiniChem()
mc.initialize()
temp = torch.tensor([1500.0], dtype=torch.float64, device=device)
pres = torch.tensor([1.0e5], dtype=torch.float64, device=device)
vmr = base_vmr.to(device)
out = mc.forward(temp, pres, vmr, 60.0)
torch.cuda.synchronize(dev)
out_cpu = out.detach().cpu()
outputs.append(out_cpu)
print('device', dev, 'out_device', out.device, 'shape', tuple(out.shape))
print('finite', bool(torch.isfinite(out).all().item()), 'sum', float(out_cpu.sum().item()))
if len(outputs) == 2:
diff = (outputs[0] - outputs[1]).abs().max().item()
print('max_abs_diff_between_gpu0_gpu1', diff)
PY
Expected behavior for the current working NVHPC build:
cuda_enabled Truetorch_cuda_available Truedevice_count 2on this machine- finite output tensors on both
cuda:0andcuda:1 max_abs_diff_between_gpu0_gpu1 0.0for the smoke test above
NVIDIA HPC SDK
For the CUDA/OpenACC build, install the NVIDIA HPC SDK from NVIDIA's official Linux x86_64 packages:
- Download the SDK tarball from the NVIDIA HPC SDK download page.
- Extract the archive.
- Run the installer.
- Add the compiler
bindirectory toPATH.
Official references:
- OpenACC getting started guide:
https://docs.nvidia.com/hpc-sdk/archive/25.3/compilers/openacc-gs/index.html - NVIDIA HPC SDK download page:
https://developer.nvidia.com/hpc-sdk
Typical installation flow:
wget <official-nvhpc-tarball-url>
tar -xpf nvhpc_<version>_Linux_x86_64_cuda_multi.tar.gz
cd nvhpc_<version>_Linux_x86_64_cuda_multi
sudo ./install
The default install location is typically:
/opt/nvidia/hpc_sdk/Linux_x86_64/<version>/compilers/bin
Add the compilers to your shell environment:
export NVHPC=/opt/nvidia/hpc_sdk
export PATH=$NVHPC/Linux_x86_64/<version>/compilers/bin:$PATH
Verify the installation with:
nvfortran --version
nvc++ --version
nvaccelinfo
Notes:
- Replace
<version>with the installed SDK version, for example25.3. nvaccelinfois NVIDIA's recommended check that the driver and GPU-facing toolchain are visible.- The default
/optinstallation path usually requiressudo.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
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 pyminichem-0.1.0-cp313-cp313-manylinux_2_27_x86_64.whl.
File metadata
- Download URL: pyminichem-0.1.0-cp313-cp313-manylinux_2_27_x86_64.whl
- Upload date:
- Size: 10.5 MB
- Tags: CPython 3.13, manylinux: glibc 2.27+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d8fc2f2c36b8b591ee222468e586fdefae6237d8aa41d23b44a589a229e4763f
|
|
| MD5 |
910e6d32389499c2ce6deb31ee9351b1
|
|
| BLAKE2b-256 |
95d6c04c488168f09f2e10b09ca307434f594074e1bae0da4685d1d24f10f317
|
File details
Details for the file pyminichem-0.1.0-cp313-cp313-macosx_15_0_arm64.whl.
File metadata
- Download URL: pyminichem-0.1.0-cp313-cp313-macosx_15_0_arm64.whl
- Upload date:
- Size: 5.9 MB
- Tags: CPython 3.13, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9496996e994246205a997e9e571e6959584644b939e21b16d6b9bc36837d18c0
|
|
| MD5 |
46a7f3157f79bb0e0b32b5428e2d0fbb
|
|
| BLAKE2b-256 |
901f43afee424d32e4e7d46d776647d0ed1be955a788630163c45d23aba22022
|
File details
Details for the file pyminichem-0.1.0-cp312-cp312-manylinux_2_27_x86_64.whl.
File metadata
- Download URL: pyminichem-0.1.0-cp312-cp312-manylinux_2_27_x86_64.whl
- Upload date:
- Size: 10.5 MB
- Tags: CPython 3.12, manylinux: glibc 2.27+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad1185b6e5cf23ffa3bbc2bbd669c3d4226e89895df6f41d0b11e7fe1b498cda
|
|
| MD5 |
b6a77f134828ebf3a19ce78737f1d933
|
|
| BLAKE2b-256 |
007625bb0c4fcd6a74eabcdee08c11f939b583d860fe2dec650cc2e346e9eedd
|
File details
Details for the file pyminichem-0.1.0-cp312-cp312-macosx_15_0_arm64.whl.
File metadata
- Download URL: pyminichem-0.1.0-cp312-cp312-macosx_15_0_arm64.whl
- Upload date:
- Size: 5.9 MB
- Tags: CPython 3.12, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e21f618ee3a07537d4844d3770d7444f59e5da231e5a01db12faed8f94ef467
|
|
| MD5 |
f136adeea391bdaffdb2c78d3e961e99
|
|
| BLAKE2b-256 |
e5b14c2a811f6b6168479367fd7f381235e3dfe5737b1b92de0926eec090c4ce
|
File details
Details for the file pyminichem-0.1.0-cp311-cp311-manylinux_2_27_x86_64.whl.
File metadata
- Download URL: pyminichem-0.1.0-cp311-cp311-manylinux_2_27_x86_64.whl
- Upload date:
- Size: 10.5 MB
- Tags: CPython 3.11, manylinux: glibc 2.27+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c625f393860bd92590e9dc1dcd5ae004503f606777471083d7421253a1ea69a7
|
|
| MD5 |
6eb9dbbecbe4aa45cfc0961ac9669d47
|
|
| BLAKE2b-256 |
85edd3cb06ffe2d309f35aed5fc78123404feaec8f94f6a6cec9fbe277c4e258
|
File details
Details for the file pyminichem-0.1.0-cp311-cp311-macosx_15_0_arm64.whl.
File metadata
- Download URL: pyminichem-0.1.0-cp311-cp311-macosx_15_0_arm64.whl
- Upload date:
- Size: 5.9 MB
- Tags: CPython 3.11, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6206cfbae0ff5d9c10254f9329e472f491cd213671309ed177dc0dc10e0a5f22
|
|
| MD5 |
02d83821533490810a84bd69366c2f94
|
|
| BLAKE2b-256 |
6edce804655aaf84295f9b6b34bf7abd414e3bea647011e56fb025b54bac57d3
|
File details
Details for the file pyminichem-0.1.0-cp310-cp310-manylinux_2_27_x86_64.whl.
File metadata
- Download URL: pyminichem-0.1.0-cp310-cp310-manylinux_2_27_x86_64.whl
- Upload date:
- Size: 10.5 MB
- Tags: CPython 3.10, manylinux: glibc 2.27+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
50601a02872eea8cdfaae7d72de3c5353870db894072c6086ad0f715e3471a6c
|
|
| MD5 |
02e56ee6e18936c0725564d03e8333e9
|
|
| BLAKE2b-256 |
1926bf6f767e8b58a01f90582385368d03851b183cfc0a566be63ae090876d08
|
File details
Details for the file pyminichem-0.1.0-cp310-cp310-macosx_15_0_arm64.whl.
File metadata
- Download URL: pyminichem-0.1.0-cp310-cp310-macosx_15_0_arm64.whl
- Upload date:
- Size: 5.9 MB
- Tags: CPython 3.10, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db543ed9d8c00326c2f722ce9e48e9e785a40a7261c911af83b11ffb5006affa
|
|
| MD5 |
ef2299bb8811b4305c1c01f7ed053485
|
|
| BLAKE2b-256 |
3046bdd330d388c25cc2a909bfc47d9ec5ed63f2e284cb42d9c608e2910d958b
|