ferrotherm 0.28.0

Thermodynamic computing in pure Rust: sparse energy-based models, chromatic block-Gibbs, parallel tempering, thermodynamic linear algebra, stochastic differentiable programs, a variational compiler onto device topologies, exact inference by variable elimination, planted instances with known optima, sampler certificates, and a first-class joules ledger. std-only, zero dependencies, wasm-clean, deterministic by seed.
Documentation
[build-system]
requires = ["setuptools>=68", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "ferrotherm"
version = "0.28.0"
description = "Thermodynamic computing in pure Rust, from Python: state a problem, get named values back"
readme = "README.md"
# 3.11, not 3.9. macOS ships 3.9.6 and nobody chooses it; declaring support for it meant claiming a
# floor CI never tested, on an interpreter the surrounding ecosystem has left behind -- jijmodeling
# needs >=3.11, amplify and ommx need >=3.10. This project surveyed those three ON 3.9 and recorded
# the versions pip could still resolve there as though they were current, which is how an outdated
# interpreter turns into a wrong competitive assessment. Tested on 3.11, 3.12 and 3.13.
requires-python = ">=3.11"
license = "MIT"
authors = [{ name = "Institute for Physical AI @ BMI" }]
keywords = ["ising", "boltzmann", "sampling", "optimisation", "thermodynamic-computing", "qubo"]
classifiers = [
    "Development Status :: 4 - Beta",
    "Intended Audience :: Science/Research",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Programming Language :: Rust",
    "Topic :: Scientific/Engineering :: Physics",
    "Topic :: Scientific/Engineering :: Mathematics",
]
# No runtime dependencies. The compiled library is bundled in the wheel; numpy is optional and only
# used by Sim.numpy(), which imports it lazily and says so if it is absent.
dependencies = []

[project.optional-dependencies]
test = ["pytest>=7"]

[project.urls]
Homepage = "https://energy.physicalai-bmi.org/thermo"
Source = "https://github.com/dcharlot-physicalai-bmi/ferrotherm"
Changelog = "https://github.com/dcharlot-physicalai-bmi/ferrotherm/blob/main/CHANGELOG.md"

[tool.setuptools]
packages = ["ferrotherm"]
# The compiled library rides in the package directory, which is the first place _candidates() looks
# after FERROTHERM_LIB. That is what makes `pip install ferrotherm` work with nothing else present.
package-data = { ferrotherm = ["*.so", "*.dylib", "*.dll"] }