Skip to main content

Syntropy

Python 3.9+ License: MIT Documentation Tests

Syntropy is a Python library for multivariate information-theoretic analysis of discrete and continuous data. It provides efficient implementations of information measures ranging from basic quantities like entropy and mutual information to modern constructs like the partial information decomposition, O-information, and information rates for time series.

The goal of Syntropy is to be the "Networkx" of information theory. In the same that Networkx made network science available to scientists across disciplines, Syntropy aims to make information theory equally accessible.

Features

  • Multiple estimators: Discrete (with corrections), Gaussian, KNN (Kraskov), neural (normalizing flow), and mixed discrete/continuous estimators
  • Pointwise measures: Access local/pointwise values, not just expected values
  • Higher-order information: Total correlation, dual total correlation, O-information, S-information
  • Information decomposition: Discrete and continuous partial information decomposition (PID), partial entropy decomposition (PED), generalized information decomposition (GID), and more. Multiple redundancy functions for each class.
  • Time series: Information rates, Lempel-Ziv complexity, sample entropy.
  • Consistent API: Same interface across all estimator types

Installation

pip install syntropyx

Then import as:

import syntropy

[!IMPORTANT] The package is syntropyx on PyPI because syntropy was already taken. The x is just a workaround—the actual library is called Syntropy.

For development:

git clone https://github.com/thosvarley/syntropy.git
cd syntropy
pip install -e ".[dev]"

Quick Start

Discrete Distributions

Discrete estimators work with probability distributions represented as dictionaries:

from syntropy.discrete import mutual_information, o_information

# XOR distribution: pure synergy
xor = {
    (0, 0, 0): 0.25,
    (0, 1, 1): 0.25,
    (1, 0, 1): 0.25,
    (1, 1, 0): 0.25,
}

# Mutual information between inputs (0,1) and output (2)
ptw, mi = mutual_information(idxs_x=(0, 1), idxs_y=(2,), joint_distribution=xor)
print(f"I(X0,X1 ; X2) = {mi:.3f} bits")  # 1.0 bit

# O-information (negative = synergy-dominated)
ptw, omega = o_information(joint_distribution=xor)
print(f"Omega = {omega:.3f} bits")  # -1.0 bit

Gaussian Estimator

For continuous data with approximately Gaussian distributions:

import numpy as np
from syntropy.gaussian import mutual_information, total_correlation

# Generate correlated Gaussian data
n = 10_000
x = np.random.randn(n)
y = 0.8 * x + 0.6 * np.random.randn(n)
z = 0.5 * x + 0.866 * np.random.randn(n)
data = np.vstack([x, y, z])

cov = np.cov(data)
mi = mutual_information(idxs_x=(0,), idxs_y=(1,), cov=cov)
tc = total_correlation(idxs=(0, 1, 2), cov=cov)

print(f"I(X ; Y) = {mi:.3f} nats")
print(f"TC(X, Y, Z) = {tc:.3f} nats")

KNN Estimator (Kraskov)

Non-parametric estimation for continuous data:

import numpy as np
from syntropy.knn import mutual_information

# Non-linear relationship
n = 5_000
x = np.random.randn(n)
y = x**2 + 0.5 * np.random.randn(n)
data = np.vstack([x, y])

ptw, mi = mutual_information(idxs_x=(0,), idxs_y=(1,), data=data, k=5)
print(f"I(X ; Y) = {mi:.3f} nats")

Neural Estimator

For complex, high-dimensional distributions using normalizing flows:

import torch
from syntropy.neural import mutual_information

# Generate data (samples x features format)
n = 10_000
x = torch.randn(n)
y = 0.7 * x + 0.714 * torch.randn(n)
data = torch.stack([x, y], dim=1)

ptw, mi = mutual_information(idxs_x=(0,), idxs_y=(1,), data=data, verbose=True)
print(f"I(X ; Y) = {mi:.3f} nats")

Mixed Discrete-Continuous

For mutual information between discrete and continuous variables:

import numpy as np
from syntropy.mixed import mutual_information

n = 10_000
continuous = np.random.randn(1, n)
discrete = (continuous > 0).astype(int)

ptw, mi = mutual_information(discrete_vars=discrete, continuous_vars=continuous)
print(f"I(discrete ; continuous) = {mi:.3f} nats")

# The continuous entropies can be estimated with a Gaussian (default) or a
# KNN estimator. The KNN option recovers the true mutual information when the
# continuous marginal is non-Gaussian:
ptw, mi = mutual_information(
    discrete_vars=discrete,
    continuous_vars=continuous,
    continuous_estimator="knn",
    k=5,
)

Available Measures

Measure Discrete Gaussian KNN Neural Mixed
Entropy x x x x x
Conditional Ent. x x x x x
Mutual Information x x x x x
Conditional MI x x x x
KL Divergence x x x
Total Correlation x x x x
Dual Total Correlation x x x x
O-Information x x x x
S-Information x x x x
Co-Information x x
TSE Complexity x x
Partial Info. Decomp. x x
Partial Entropy Decomp. x x
Generalized Info. Decomp. x x
Integrated ($\Phi$) Info. Decomp. x x
Information Rates x x x
Connected Information x
$\alpha$-Synergy Decomp. x
I_dep Decomp. x

Optimizations and Utilities

Syntropy also includes a number of optimization algorithms.

  • Finding optimally-synergistic submatrices from a covariance matrix (as done by Varley, Pope et al., 2023).
  • Finding the maximum-entropy discrete distribution consistent with k-order marginals (as done in the DIT package).

In the utils.py files, you can also find a number of utility functions for interacting with discrete and continuous probability distributions.

Documentation

Full documentation is available at syntropy.readthedocs.io.

Testing

pytest tests/

Citation

If you use Syntropy in your research, please cite:

@software{syntropy,
  author = {Varley, Thomas F.},
  title = {Syntropy: Multivariate Information Theory for Python},
  url = {https://github.com/thosvarley/syntropy},
}

License

MIT License. See LICENSE for details.

Metadata

Release files for syntropyx 0.0.2

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

Source distribution (sdist)

Source distribution for syntropyx 0.0.2
File Size Uploaded
syntropyx-0.0.2.tar.gz 844.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for syntropyx 0.0.2
File Interpreter ABI Platform
syntropyx-0.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 968.5 kB

Release files / syntropyx-0.0.2.tar.gz

Download URL syntropyx-0.0.2.tar.gz
Size 844.4 kB
Tags Source
SHA-256 checksum
How to use checksums
ba5f295432164007eecf176f2c59852f8eb05cd872d2aaa7dd50f023f8b869bd
BLAKE2b-256 checksum
How to use checksums
f084156519303407afa55478f027a04be81a7a6d30bf581818eb42a5eb30fb07
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 7, 2026.

Transparency log

Release files / syntropyx-0.0.2-py3-none-any.whl

Download URL syntropyx-0.0.2-py3-none-any.whl
Size 124.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cbb3eb5343497b6e9bfee4e3cfdb65c598eb5dc0e863cbdb8c1e9f1acf1b4e89
BLAKE2b-256 checksum
How to use checksums
e4e0ec26c46b89092b6bf3fab73993394f16030d2cb30b47b525d4cea3b1ecd1
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 7, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.0.2 This release

2 release files

0.0.1

2 release files

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