Skip to main content

ferrotherm

Thermodynamic computing from Python: state a problem, get named values back.

The physics is open and old — Ising (1925), Glauber dynamics (1963), Gibbs sampling (Geman & Geman 1984) — and a "thermodynamic sampling unit" accelerates exactly these loops. This package binds the ferrotherm Rust library through its C ABI: the solver is zero-dependency Rust, deterministic by seed, verified against exact physics.

pip install ferrotherm

State a problem in the vocabulary of the problem

Not a QUBO matrix. Variables have names and domains, constraints say what they mean, and the answer comes back keyed by the names you used.

import ferrotherm as ft

p = ft.Problem()
a = p.categorical("a", 3)
b = p.categorical("b", 3)
p.not_equal(a, b)
p.maximize(3 * a.is_(1) + 4 * b.is_(2))

ans = p.solve(tries=32)
print(ans.values)      # {'a': 1, 'b': 2}
print(ans.feasible)    # True

A constraint can be soft — a price rather than a wall — and the answer reports what it cost:

import ferrotherm as ft

p = ft.Problem()
x = p.categorical("x", 3)
y = p.categorical("y", 3)
p.not_equal(x, y, soft=2.0)     # breaking this costs 2.0 x amount squared
ans = p.solve(tries=32)
print(ans.soft_cost, ans.violated)

Or sample the physics directly

import ferrotherm as ft

s = ft.lattice2d(64, 1.0, beta=0.6)   # a magnet below critical temperature
s.sweep(2000)
print(f"|M| = {abs(s.magnetization):.4f}")        # 0.9736
print(f"Onsager = {ft.onsager(0.6):.4f}")         # 0.9736 — the closed form, matched to 4 dp

That second line is the check that matters: Onsager's 1944 closed form for the infinite 2D lattice, and a 64x64 sampler reproducing it to four decimals. The size is not decoration — 16x16 over 500 sweeps gives 0.898 against 0.974, because a small lattice sampled briefly is not the thermodynamic limit. Verify against exact physics before opinions.

ft.ring, ft.z1_grid, ft.frustrated and ft.wishart build the other standard graphs, and ft.Model takes an explicit edge list when you want to write the couplings yourself.

Every run carries its joules

The ledger is not an appendix. A sampler counts the work it did and prices it at Z1-class device figures, so the energy question is answerable rather than rhetorical. Note what is being priced: the modelled device, not the CPU this ran on.

import ferrotherm as ft

s = ft.lattice2d(64, 1.0, beta=0.6)
s.sweep(2000)
print(f"{s.node_updates} node updates -> {s.joules:.2e} J")

The library it binds

This package carries no solver of its own — it loads the shared library and calls it. In order:

  1. FERROTHERM_LIB, if you set it. An explicit path always wins.
  2. The copy shipped in the wheel.
  3. target/release/ of a checkout, for developing against a local build.

ft.library_path() tells you which one answered.

Apache-2.0. Source, the Rust crate and eight other bindings: https://github.com/dcharlot-physicalai-bmi/ferrotherm. From the Institute for Physical AI @ BMI.

Metadata

Release files for ferrotherm 0.23.0

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

Built distributions (wheels)

Table of built distributions (wheels) for ferrotherm 0.23.0
File Interpreter ABI Platform
ferrotherm-0.23.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
ferrotherm-0.23.0-py3-none-manylinux_2_28_x86_64.whl Python 3 none Linux glibc 2.28+ x86-64 Details
ferrotherm-0.23.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details

Total release size: 998.7 kB

Release files / ferrotherm-0.23.0-py3-none-win_amd64.whl

Download URL ferrotherm-0.23.0-py3-none-win_amd64.whl
Size 261.3 kB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
91bf039aa0e59bda3ce5b7b6b6286cf9a08359e347750e812fad7617134c18a8
BLAKE2b-256 checksum
How to use checksums
81b7093b1d5a1eeadeeda5a7fb95b10c6d810e5778ba229805d62555341b55f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 26, 2026.

Transparency log

Release files / ferrotherm-0.23.0-py3-none-manylinux_2_28_x86_64.whl

Download URL ferrotherm-0.23.0-py3-none-manylinux_2_28_x86_64.whl
Size 394.4 kB
Tags Linux glibc 2.28+ x86-64 Python 3
SHA-256 checksum
How to use checksums
cfed27d8c28b027a84d2d1742aacb778306e93e92c4b36ffd210558a2b6d4275
BLAKE2b-256 checksum
How to use checksums
13e94076142769c642a8dc612c32eb9935f3a2f2a2d7dca37af30897d8840c09
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 26, 2026.

Transparency log

Release files / ferrotherm-0.23.0-py3-none-macosx_11_0_arm64.whl

Download URL ferrotherm-0.23.0-py3-none-macosx_11_0_arm64.whl
Size 343.1 kB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
db2eafc9b6c41ddb9f9d3589dbe210ba1757715caeb8e0a7a2da4b5fbafb8a51
BLAKE2b-256 checksum
How to use checksums
9ecd7e7342729159c27cc94d0b609569709fdb7fb16bd5b83bc6db2337542d00
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 26, 2026.

Transparency log

Release history Release notifications | RSS feed

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