iitx
Integrated Information Theory, accelerated in JAX. ⚡
iitx computes integrated information — φ_s, big Φ, and the full cause-effect structure
of IIT 3.0 and 4.0 — for any finite discrete dynamical system given as a transition
probability matrix. It reproduces the reference implementation
PyPhi's numbers on the canonical examples, and does
three things PyPhi cannot:
- Parallelize within a system 🚀 — candidate systems, mechanisms, purviews, partitions, and cuts are batched tensor work on CPU, GPU, or TPU, not Python loops.
- Batch across systems 📦 — every analysis is a pure function of
(system, state)that composes withjax.vmap: ten thousand systems are one call. - Differentiate 🎯 — the IIT 4.0 pipeline is differentiable with respect to the system's dynamics, almost everywhere and with exact subgradients: gradient ascent on integrated information itself.
Overview
- General. Binary or multi-valued units, uniform or heterogeneous alphabets,
deterministic or stochastic dynamics. Coarse-graining and black-boxing are pure
System → Systemtransforms, so macro-level systems feed the unchanged pipeline. - Faithful. PyPhi (pinned) is the frozen test oracle: the regression suite compares
values against generated golden fixtures for both theory versions, including
non-binary systems, and every deliberate divergence is a documented finding
(
docs/notes/oracle-findings.md), never a silent patch. - Honest about exactness. Everything is exact; the IIT 3.0 earth mover's distances
are host linear programs (so 3.0 jits and vmaps but refuses
gradloudly), while the IIT 4.0 intrinsic-difference pipeline is pure tensor algebra end to end.
Getting started
import jax
import jax.numpy as jnp
from iitx.measures import iit4
from iitx.system import System
# The standard 3-unit example (OR, COPY, XOR), as a state-by-node TPM.
tpm = jnp.asarray(
[
[0.0, 0.0, 0.0],
[0.0, 0.0, 1.0],
[1.0, 0.0, 1.0],
[1.0, 0.0, 0.0],
[1.0, 1.0, 0.0],
[1.0, 1.0, 1.0],
[1.0, 1.0, 1.0],
[1.0, 1.0, 0.0],
]
)
system = System.from_state_by_node(tpm)
state = jnp.asarray([1, 0, 0])
# System integrated information and the full Φ-structure.
analysis = iit4.system_phi(system, state)
structure = iit4.phi_structure(system, state)
print(analysis.phi, structure.big_phi) # 0.415... and 1.0
# Batch over all 8 states of the system in one call.
states = jnp.stack([jnp.asarray([s >> i & 1 for i in range(3)]) for s in range(8)])
batched = jax.vmap(iit4.system_phi, in_axes=(None, 0))(system, states)
# Differentiate φ_s with respect to the dynamics.
gradient = jax.grad(
lambda tpm: iit4.system_phi(System(tpm, system.shape, system.cm), state).signed_phi
)(system.tpm)
Installation
uv pip install git+https://github.com/maxencefaldor/iitx.git
Requires Python ≥ 3.14. Dependencies: jax, numpy, and POT (the exact
earth-mover's-distance backend for IIT 3.0).
Examples
| Notebook | What it shows |
|---|---|
| Getting started | Systems, φ_s, Φ-structures, IIT 3.0, batching, non-binary units, macro levels |
| Ascending Φ | Gradient ascent on integrated information itself — to our knowledge a first — with structure emerging along the way |
Design
The design documents are part of the repository: docs/design.md (the core
abstractions and why), docs/generality.md (the PyPhi-vs-iitx capability table), and
docs/glossary.md (one vocabulary, used identically in code and papers). Everything
learned the hard way lives in docs/notes/.
Citing iitx
Citation information will accompany the first release.
Contributing
Contributions are welcome — see CONTRIBUTING. Start from the design documents; the tests define correctness.
License
Metadata
Release files for iitx 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| iitx-0.1.0.tar.gz | 501.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| iitx-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 552.6 kB
Release files / iitx-0.1.0.tar.gz
| Download URL | iitx-0.1.0.tar.gz |
|---|---|
| Size | 501.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4fb1c4c2bc0acec147b0c3c0c95965fea2ed76d61ac88909a2b37a43a3e55b0a
|
|
BLAKE2b-256 checksum How to use checksums |
67ecbf65c1da95827f2165e41be0ecdc07dc7d2127fe7b6e21b2059162c6e5c0
|
| 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 25, 2026.
Transparency logRelease files / iitx-0.1.0-py3-none-any.whl
| Download URL | iitx-0.1.0-py3-none-any.whl |
|---|---|
| Size | 50.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fedd2eb3e70e58b165645ae908f3b7935394b39853ef2d0a007a1a8dae2092d6
|
|
BLAKE2b-256 checksum How to use checksums |
959ece3042518851c0f71f4e88a48e26eb53475da062ad56b9898ccd808b3dd0
|
| 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 25, 2026.
Transparency log