Skip to main content

Zero-warmup Rust-engine ODE/DDE/SDE integration, discrete maps, and chaos analysis for dynamical systems.

Project description

TSDynamics

Python CI Release Docs PyPI codecov

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

You write the math (one symbolic method); TSDynamics lowers it to a native Rust engine and handles 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, delay-differential equations (including DDE Lyapunov spectra), and discrete maps, all running on the same native Rust engine. 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.
  • Native engine, zero warmup — equations lower to a Rust engine (an SSA-tape interpreter, with a Cranelift JIT alongside) in-process; parameters are runtime control values, so changing them is free and there is no compile step or cache.
  • 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.

Install

pip install tsdynamics            # or: uv add tsdynamics

A prebuilt abi3 wheel (manylinux / musllinux / macOS / Windows) bundles the native Rust engine, so no Rust toolchain and no C compiler are needed to install or run. Building from the sdist needs a Rust toolchain (the build backend is maturin).

Optional extra: tsdynamics[plot] (matplotlib).

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), n=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-4.1.0.tar.gz (656.8 kB view details)

Uploaded Source

Built Distributions

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

tsdynamics-4.1.0-cp312-abi3-win_amd64.whl (2.3 MB view details)

Uploaded CPython 3.12+Windows x86-64

tsdynamics-4.1.0-cp312-abi3-musllinux_1_2_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.12+musllinux: musl 1.2+ x86-64

tsdynamics-4.1.0-cp312-abi3-musllinux_1_2_aarch64.whl (2.3 MB view details)

Uploaded CPython 3.12+musllinux: musl 1.2+ ARM64

tsdynamics-4.1.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.17+ x86-64

tsdynamics-4.1.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.1 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.17+ ARM64

tsdynamics-4.1.0-cp312-abi3-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

tsdynamics-4.1.0-cp312-abi3-macosx_10_12_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.12+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for tsdynamics-4.1.0.tar.gz
Algorithm Hash digest
SHA256 8d4f6dacaf8d3f8b74b0d48c524a979dab8b8c4be87817130d1ed3a1166da69a
MD5 abc07ee0f2d4c2ad05637ef276ced814
BLAKE2b-256 27c3732868871389148873b022a0730e20184dd156952c38cc5bfbaf8d4815fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsdynamics-4.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-4.1.0-cp312-abi3-win_amd64.whl.

File metadata

  • Download URL: tsdynamics-4.1.0-cp312-abi3-win_amd64.whl
  • Upload date:
  • Size: 2.3 MB
  • Tags: CPython 3.12+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for tsdynamics-4.1.0-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 cf8e41bee46270f2a93b592eb6f1fdb3fe438d8425dc066608ebcdc309b2fd92
MD5 363296d74b9eb51c3befb890ef249890
BLAKE2b-256 ece404e39e50caa0f6fa9d57176eb00cde3982a0baa6a8da17fbdb0d1165831e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsdynamics-4.1.0-cp312-abi3-win_amd64.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.

File details

Details for the file tsdynamics-4.1.0-cp312-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for tsdynamics-4.1.0-cp312-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 272c8dcc67310298885b0a59019efd0534dffc272af3c1daaa9f3792e94c60f4
MD5 d9df983fbd895bebb0df7b02a7820d33
BLAKE2b-256 e1bdebeb0cf9c3c3df2b9b6e09c1382289a77ee847ab85f41c82e978c71dad8f

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsdynamics-4.1.0-cp312-abi3-musllinux_1_2_x86_64.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.

File details

Details for the file tsdynamics-4.1.0-cp312-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for tsdynamics-4.1.0-cp312-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a270e4feb0a177d1535c9f991e5622618bccd8cf5a67436e4e630fb8cba4d571
MD5 df58925be2ff7cb9b2f601cdf55d62f0
BLAKE2b-256 d35655e0aaadcc4d2b691faa2356b0af534c13ab0ae94f4fc8cbac6091c0683b

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsdynamics-4.1.0-cp312-abi3-musllinux_1_2_aarch64.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.

File details

Details for the file tsdynamics-4.1.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tsdynamics-4.1.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 271acff0fad7063468e6582c215d6d91db1d0c59f18935696833c491f15be367
MD5 38f61666600078d191e7fe887a7b8e0c
BLAKE2b-256 1948641ce8768252bc2676c2b0f6794c8d595ff9c96570bd96fff546832f9ab0

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsdynamics-4.1.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.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.

File details

Details for the file tsdynamics-4.1.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for tsdynamics-4.1.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b9790d5f7065d7a197c029d803e66c5c096687f2cc7a5e1b8893fd7941dafef7
MD5 654d7459ccb1714cfc15af0960ddf771
BLAKE2b-256 b6d4dbb85de858eddab4e4f615fd6bb6485efda371f138aa69e4fc8fd4dcd607

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsdynamics-4.1.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.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.

File details

Details for the file tsdynamics-4.1.0-cp312-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tsdynamics-4.1.0-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1d6f087d79ab1c0b3e74e2e6976e79286ef196aceab50c4b26186276f6373e21
MD5 324a40227ab381c920c59960f74189f2
BLAKE2b-256 6d14c011fd21cc6dfc4ea38dacd37b2a8e03a95ac2169938fbb06ef8a3161f74

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsdynamics-4.1.0-cp312-abi3-macosx_11_0_arm64.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.

File details

Details for the file tsdynamics-4.1.0-cp312-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for tsdynamics-4.1.0-cp312-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6fa1d9fe5e0e298f9d63d7dbda0c0af3b934bf26942d7336ee1d2a9670c9c219
MD5 6eb2b51f8d0f21a7ae9e8bc4a3c01a1b
BLAKE2b-256 a39f25b70aa27601296b146f3738833e6e02c57e6f091343503ce3dda6f0463a

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsdynamics-4.1.0-cp312-abi3-macosx_10_12_x86_64.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