Skip to main content

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 code
  • python/: Python package, pybind11 bindings, and packaged resources
  • patches/: upstream minichem patch set
  • tests/: C++ and Python validation

The build flow is:

  1. Fetch upstream mini_chem with CMake.
  2. Apply the same mini_ch_i_dlsode.f90 patch used by canoe.
  3. Link the patched Fortran implementation into a thin C shim.
  4. Wrap that shim in a Torch-based C++ API.
  5. 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 True
  • torch_cuda_available True
  • device_count 2 on this machine
  • finite output tensors on both cuda:0 and cuda:1
  • max_abs_diff_between_gpu0_gpu1 0.0 for 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:

  1. Download the SDK tarball from the NVIDIA HPC SDK download page.
  2. Extract the archive.
  3. Run the installer.
  4. Add the compiler bin directory to PATH.

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 example 25.3.
  • nvaccelinfo is NVIDIA's recommended check that the driver and GPU-facing toolchain are visible.
  • The default /opt installation path usually requires sudo.

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

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

pyminichem-0.1.2-cp313-cp313-manylinux_2_27_x86_64.whl (10.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64

pyminichem-0.1.2-cp313-cp313-macosx_15_0_arm64.whl (6.0 MB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

pyminichem-0.1.2-cp312-cp312-manylinux_2_27_x86_64.whl (10.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64

pyminichem-0.1.2-cp312-cp312-macosx_15_0_arm64.whl (6.0 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

pyminichem-0.1.2-cp311-cp311-manylinux_2_27_x86_64.whl (10.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64

pyminichem-0.1.2-cp311-cp311-macosx_15_0_arm64.whl (6.0 MB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

pyminichem-0.1.2-cp310-cp310-manylinux_2_27_x86_64.whl (10.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64

pyminichem-0.1.2-cp310-cp310-macosx_15_0_arm64.whl (6.0 MB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

File details

Details for the file pyminichem-0.1.2-cp313-cp313-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for pyminichem-0.1.2-cp313-cp313-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 118e38354cff1811669a45164155136f66284a9b0c6139d71f4353b3c25f867c
MD5 86f219a73a37a32d16480e7e1ae726b6
BLAKE2b-256 644c65bd7f73fe841c52c542a01843923d263de021debe1ab256b99604c4173b

See more details on using hashes here.

File details

Details for the file pyminichem-0.1.2-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pyminichem-0.1.2-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 a8b4b096acf60f41965378397723d54723fb8b646ed7f262dadeee76b2246bc7
MD5 ff1b43e97ca83c17ecbfc7e7ac64b892
BLAKE2b-256 bd0d00fd9e9ac11d39a361af574efe921618536c4de1c2b81204e6d4999c2048

See more details on using hashes here.

File details

Details for the file pyminichem-0.1.2-cp312-cp312-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for pyminichem-0.1.2-cp312-cp312-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 6f9cbde7e9b575e8718857dce1294ef43062c4baaa11fc6457c7fb77056a12db
MD5 1488c1aceff74bcbda871c0c8a813092
BLAKE2b-256 f7f049346a7f6932c3d18f1c5c5d2df29e5a26d7272bb166814797bdd6b555b0

See more details on using hashes here.

File details

Details for the file pyminichem-0.1.2-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pyminichem-0.1.2-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 7612339e9541067f7cbc93d52c48e87752b764e4b943b9d25e3fa3bdb6230c33
MD5 cb1a7146df309d11527b6a260d196246
BLAKE2b-256 43cb543b8fe3e2bf8b82804e0cafb85422eaef584dedbfddce93179ec72c08d4

See more details on using hashes here.

File details

Details for the file pyminichem-0.1.2-cp311-cp311-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for pyminichem-0.1.2-cp311-cp311-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 edd27aa734e9d76f238506a865da8d570b459f11b6dbfbaa37df8f3ed8ff70db
MD5 f3665a8f3272ba61f8bfb2427409fd99
BLAKE2b-256 02c8c4c843bde3a41a31e18625c7e4c820ebea3762e907325e16db65e4f646ad

See more details on using hashes here.

File details

Details for the file pyminichem-0.1.2-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pyminichem-0.1.2-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 d1d7d4f4b25470d36ebdef6e1e7cb4809a49f9b8531745287a6cca6602ca1dd2
MD5 c58c6fbc2fc3ac1766b52bbf8030e633
BLAKE2b-256 bbe44cd08c8b7848373ca10ff8df0fcbf2a77882b22c35fd0af1bac015c88c51

See more details on using hashes here.

File details

Details for the file pyminichem-0.1.2-cp310-cp310-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for pyminichem-0.1.2-cp310-cp310-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 d13cfd2a15763f6065974a444d36910aa401e5f0b7f876b97fdbd0c8c8ceba75
MD5 1f7c39836e374acaa81cb652ed9326f7
BLAKE2b-256 542ca5be7bbe704994a7c1c1d45f0dfc1f66d89335b2adcaad7758f8674a9601

See more details on using hashes here.

File details

Details for the file pyminichem-0.1.2-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pyminichem-0.1.2-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 99f16f5a0ee919818d6a4ac16c9f2c4255527023cb9a158372687318e8db4132
MD5 3c64a58c1494a3b388324db793f69bad
BLAKE2b-256 20654fc7f5a65d1dcd4da261967bba807050cb892cfb0ebd7013470927368169

See more details on using hashes here.

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