Skip to main content

Compiled ODE/DDE integration, discrete maps, and chaos analysis for dynamical systems.

Project description

TSDynamics

Python CI Release Docs PyPI

Dynamical systems in Python: 149 built-in systems, compiled integration, and chaos analysis — with the simplest system-definition contract anywhere.

You write the math (one symbolic method); TSDynamics handles compilation, caching, integration, Lyapunov spectra, bifurcation diagrams, Poincaré sections, and even the documentation page for your system.

import tsdynamics as ts

lor = ts.Lorenz()
traj = lor.integrate(final_time=100.0, dt=0.01)
traj["x"]                              # named component access
lor.lyapunov_spectrum()                # → [0.91, ~0, -14.57]
ts.kaplan_yorke_dimension(_)           # → ~2.06

📖 Documentation: https://el3ssar.github.io/TSDynamics/


Highlights

  • Three families, one interface — ODEs (compiled via JiTCODE), delay-differential equations (JiTCDDE — including DDE Lyapunov spectra), and discrete maps (Numba). All implement one stepping protocol, so every analysis tool works on every system.
  • 149 built-in systems with literature parameters: Lorenz, Rössler, Chua, 21 Sprott flows, Mackey–Glass, Hénon, ... each with an auto-generated docs page showing its equations and attractor.
  • Compile once, sweep forever — parameters are runtime control values; changing them never recompiles. Compiled modules persist across sessions.
  • Composition — a PoincareMap of a flow is a discrete map, so orbit_diagram(PoincareMap(Rossler(), (1, 0.0)), "c", values) draws the bifurcation diagram of a flow with one line.
  • Analysis toolkit — orbit/bifurcation diagrams, Poincaré sections (root-refined), maximal Lyapunov exponent without Jacobians, Kaplan–Yorke dimension, fixed points with stability.
  • Experimental Rust backendintegrate(backend="diffsol") JIT-compiles your equations through LLVM and solves them with Rust kernels; no C compiler needed (pip install tsdynamics[diffsol]).

Install

pip install tsdynamics            # or: uv add tsdynamics

A C toolchain is required for the default compiled backends (build-essential + python3-dev on Debian/Ubuntu, xcode-select --install on macOS, MSVC Build Tools on Windows).

Optional extras: tsdynamics[plot] (matplotlib), tsdynamics[diffsol] (Rust solver backend).

Define your own system

import tsdynamics as ts

class MySystem(ts.ContinuousSystem):
    params = {"a": 0.2, "b": 0.2, "c": 5.7}
    dim = 3
    variables = ("x", "y", "z")            # optional niceties

    @staticmethod
    def _equations(y, t, *, a, b, c):
        x, yv, z = y(0), y(1), y(2)
        return (-yv - z, x + a * yv, b + z * (x - c))

That's the whole contract. The class auto-registers: the bulk test-suite sweeps it, and the docs build renders its equations (LaTeX, straight from the symbolics) and its attractor figure — zero extra steps. Delay systems use y(0, t - tau); maps implement _step/_jacobian (signature order is validated at import).

A taste of the analysis layer

import numpy as np
import tsdynamics as ts

# Bifurcation diagram of the logistic map
od = ts.orbit_diagram(ts.Logistic(), "r", np.linspace(2.5, 4.0, 600))
x, y = od.flat()

# Poincaré section of the Rössler attractor (root-refined crossings)
section = ts.poincare_section(ts.Rossler(), plane=(1, 0.0), steps=500)

# Fixed points of the Hénon map, with stability
ts.fixed_points(ts.Henon())
# [FixedPoint([-1.131354  -0.339406], unstable, ...),
#  FixedPoint([ 0.631354   0.189406], unstable, ...)]

# Maximal Lyapunov exponent, no Jacobian needed
ts.max_lyapunov(ts.Lorenz(ic=[1, 1, 1]), dt=0.05)    # ≈ 0.91

Development

git clone https://github.com/El3ssar/TSDynamics && cd TSDynamics
uv sync --group dev --group docs
uv run pytest -m "not slow" --no-cov     # fast tier
uv run pytest --no-cov                   # full local suite
TSD_DOCS_FIGURES=0 uv run mkdocs serve   # docs preview

Releases are automated: conventional-commit PR titles drive semantic-release on merge — see CONTRIBUTING.

License

MIT © Daniel Estevez

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tsdynamics-2.1.0.tar.gz (108.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tsdynamics-2.1.0-py3-none-any.whl (108.0 kB view details)

Uploaded Python 3

File details

Details for the file tsdynamics-2.1.0.tar.gz.

File metadata

  • Download URL: tsdynamics-2.1.0.tar.gz
  • Upload date:
  • Size: 108.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tsdynamics-2.1.0.tar.gz
Algorithm Hash digest
SHA256 1f0e8a8fa9d46bf5842ff744ea278ebbef85557a5e6d944f0f6c88f2c9c498a7
MD5 459d9953a570221d3cb6b7a9cb5d8e18
BLAKE2b-256 0369f46b992fc6ca8f0d15eb8ec04f6b892d53018311f208f3bd71a6ddd22d9a

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsdynamics-2.1.0.tar.gz:

Publisher: release.yml on El3ssar/TSDynamics

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tsdynamics-2.1.0-py3-none-any.whl.

File metadata

  • Download URL: tsdynamics-2.1.0-py3-none-any.whl
  • Upload date:
  • Size: 108.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tsdynamics-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ce500e6cbcdcba1b9d28c79125bf86e350fb8b53c9fab309c987c528253bf36c
MD5 9aa45d13b4f645a2d89c8628ed084608
BLAKE2b-256 61bb593b4d0b142bbdf0c1532b1fc2c2076119b013d8e0de7aed35ba56e6233a

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsdynamics-2.1.0-py3-none-any.whl:

Publisher: release.yml on El3ssar/TSDynamics

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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