Skip to main content

Python bindings for MSH-QC quantum mechanics library

Project description

MSHQC - Multi-State High-Quality Calculations

License: MIT C++17 Python 3.10-3.13 PyPI version

MSHQC is a high-performance, open-source quantum chemistry library implementing modern electronic structure methods with seamless Python bindings. Designed for advanced research in physics and materials science, it focuses on both accuracy and extreme computational efficiency. The C++ core is heavily optimized, leveraging hardware-specific vectorization (AVX2/FMA) and Interprocedural Optimization (IPO/LTO) to maximize floating-point throughput.


🌟 Features

1. Self-Consistent Field (SCF)

  • Restricted, Unrestricted, and Restricted Open-shell Hartree-Fock (RHF, UHF, ROHF)
  • DIIS convergence acceleration
  • Cholesky Decomposition Variants (CD-RHF, CD-UHF, CD-ROHF)

2. Perturbation Theory (MPn)

  • Møller-Plesset MP2 & MP3 (Restricted and Unrestricted)
  • Orbital-Optimized MP2/MP3 (OMP2/OMP3)
  • Cholesky Decomposition Variants (CD-RMP2/3, CD-UMP2/3, CD-OMP2/3)

3. Multi-Configurational Methods (MCSCF)

  • Complete Active Space SCF (CASSCF) & State-Averaged CASSCF (SA-CASSCF)
  • Complete Active Space Perturbation Theory 2nd order (CASPT2)
  • Cholesky Decomposition Variants (CD-CASSCF, CD-SA-CASSCF)
  • Cholesky Decomposition Perturbation Theories (CD-CASPT2, CD-SA-CASPT2, CD-SA-CASPT3)

4. Advanced Tooling

  • Integral Transformations: Cholesky decomposition for ERI and Four-Index Transformations
  • Gradients: Analytical and numerical gradients, and geometry optimization
  • Properties: Natural orbitals, transition density matrices, and one-particle density matrices (OPDM)

🚀 The "Ultimate" Computational Engine & Dependencies

Under the hood, MSHQC bridges C++17 and Python using a deeply integrated scientific computing stack. The build system (CMakeLists.txt) strictly requires the following dependencies to handle massive out-of-core calculations and tensor operations:

  • Compiler: GCC 7+ or Clang 5+ (must support C++17, AVX2, FMA, and IPO/LTO)
  • CMake: Version 3.14 or higher
  • Python Binding: nanobind (lightweight, highly efficient C++/Python interface)
  • Multi-threading: OpenMP (native shared-memory parallelization)
  • Integral Engine: libcint (high-performance analytical electron repulsion integrals)
  • Tensor Contraction: TBLIS (fast tensor contraction avoiding explicit multidimensional array transposition)
  • Out-of-Core Data: HDF5 (C and C++ bindings required for massive tensor storage and ABI stability)
  • Linear Algebra (Templates): Eigen3 (modern heavily vectorized matrix operations)
  • BLAS Backend: BLIS (preferred) or OpenBLAS
  • LAPACK Backend: libflame (preferred) or standard LAPACK + LAPACKE (C interface)

📦 Installation

Option A: Install Pre-compiled Wheels via PyPI (Recommended)

MSHQC is continuously tested and deployed via GitHub Actions. Pre-compiled, manylinux-compatible wheels are available for Python 3.10 through 3.13.

pip install mshqc

Option B: Compiling from Source (Super-Turbo Mode)

For maximum performance, compile MSHQC locally to leverage -march=native optimizations for your specific CPU architecture. An isolated Conda environment is highly recommended to manage the complex C++ libraries.

1. Conda Environment Setup

Install the complete dependency stack via conda-forge:

# Create and activate environment
conda create -n mshqc_env python=3.12
conda activate mshqc_env

# Install critical C++ libraries and build tools
conda install -y -c conda-forge \
    cmake make compilers eigen pkg-config \
    "hdf5=1.14.3" pip libcint tblis liblapacke openblas

# Install Python-level build requirements
python -m pip install build wheel nanobind numpy scipy

2. Build and Install

Clone the repository and install it in editable mode. The CMake build system will automatically detect the Conda environment and link against the optimized C++ libraries.

git clone https://github.com/syahrulhidayat/mshqc.git
cd mshqc

# Compile and install the Python bindings
pip install -e .

💻 Quick Start (Anti-Crash Configuration)

⚠️ CRITICAL WARNING: MSHQC and scientific libraries like numpy both utilize multithreaded BLAS backends (e.g., OpenBLAS). To prevent catastrophic CPU thread collisions or segmentation faults, you must configure thread limits at the OS level before importing any libraries.

import os

# 1. Lock thread counts BEFORE importing to prevent OpenBLAS collisions
os.environ["OMP_NUM_THREADS"] = "4"
os.environ["OPENBLAS_NUM_THREADS"] = "1"
os.environ["MKL_NUM_THREADS"] = "1"
os.environ["TBLIS_ARCH"] = "x86_64"

# 2. Import MSHQC FIRST
import mshqc

# 3. Import other scientific libraries
import numpy as np

# Set up your calculation parameters
print(f"MSHQC Version: {mshqc.__version__}")

🛠️ Development & CI/CD

This project utilizes GitHub Actions for continuous integration. Upon pushing to specified branches or tagging releases, the pipeline automatically:

  1. Compiles the C++ core with Universal HPC optimizations (-O3 -mavx2 -mfma)
  2. Generates Python bindings via nanobind
  3. Repairs Linux binaries using auditwheel to ensure cross-platform ABI compatibility
  4. Deploys the wheels directly to PyPI and the public-facing repository

🐛 Bug Reports & Contributions

If you encounter any issues, compilation errors, or have feature requests, please report them on the Issue Tracker. Code contributions, bug fixes, and documentation improvements are highly appreciated.


📄 License & Author

  • Author: Muhamad Syahrul Hidayat
  • License: This project is licensed under the MIT License. See the LICENSE file for details.

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.

mshqc-1.0.0.dev96-cp313-cp313-manylinux_2_39_x86_64.whl (70.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.39+ x86-64

mshqc-1.0.0.dev96-cp312-cp312-manylinux_2_39_x86_64.whl (70.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

mshqc-1.0.0.dev96-cp311-cp311-manylinux_2_39_x86_64.whl (70.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.39+ x86-64

mshqc-1.0.0.dev96-cp310-cp310-manylinux_2_39_x86_64.whl (70.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.39+ x86-64

File details

Details for the file mshqc-1.0.0.dev96-cp313-cp313-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for mshqc-1.0.0.dev96-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 c8a2c70f91df75442be472f8c61fdbf65996f8d8f3b77b026338cfd6c9bbd840
MD5 df9217ab792fc01e63d290125586b080
BLAKE2b-256 266a0681d71c0e85f1e129d6918256d2f12caf42aed334201c953754f3ee6162

See more details on using hashes here.

File details

Details for the file mshqc-1.0.0.dev96-cp312-cp312-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for mshqc-1.0.0.dev96-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 cdfcb5d0117cff16faa089d399f9df772fa4b6c02ed50000991383de92b43f63
MD5 8d0e6f2e379b71f5518ce5e2e8382866
BLAKE2b-256 502ab50e07a9ef3c565e7deb2314b34ad1ff149c7a3c791b15e3a644821e5e26

See more details on using hashes here.

File details

Details for the file mshqc-1.0.0.dev96-cp311-cp311-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for mshqc-1.0.0.dev96-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 5adc44359063ab14270c38c6bfa045f204bcb12fad4431cf0afe454eb939c126
MD5 a172ee8765f4220c62d0295d879dc2bc
BLAKE2b-256 4d9405e269e73a4817217431cb9d91de18ef1161b046a718df2b06be22cfefbf

See more details on using hashes here.

File details

Details for the file mshqc-1.0.0.dev96-cp310-cp310-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for mshqc-1.0.0.dev96-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 29b79b7f3d3262143fe0df01f1d009bda702692bc825b33cdaa0bced0be2d99b
MD5 71992293e9673b283b7517ef370d3d89
BLAKE2b-256 dfb67c2ef70fa558a49eaa29af5189ca01fb4b777010f92a3e498683ccfbcc86

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