# dynamicslab/pysindy architecture

> Architecture diagram of the GitHub repository dynamicslab/pysindy, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dynamicslab/pysindy
- Repository: https://github.com/dynamicslab/pysindy

## Overview

PySINDy infers interpretable governing equations from measured time-series data. The main workflow is to provide trajectories to SINDy, estimate derivatives when needed, construct candidate features, and fit a sparse optimizer to identify a model; fitted models can then simulate future states. The graph preserves weak-form and implicit SINDy-PI approaches, alternative feature libraries and optimizers, and the array-axis support layer. Relationships are limited to the README and SOURCE INDEX references; unsampled subsystem internals are not asserted.

Main entry points: [`pysindy/_core.py`](https://github.com/dynamicslab/pysindy/blob/main/pysindy/_core.py) (SINDy models), [`pysindy/feature_library/base.py`](https://github.com/dynamicslab/pysindy/blob/main/pysindy/feature_library/base.py) (Library API), [`pysindy/optimizers/base.py`](https://github.com/dynamicslab/pysindy/blob/main/pysindy/optimizers/base.py) (Optimizer API), [`pysindy/differentiation/base.py`](https://github.com/dynamicslab/pysindy/blob/main/pysindy/differentiation/base.py) (Differentiation API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_modeling["Model fitting"]
  node_sindy["SINDy models<br/>[_core.py]"]
  node_weak["Weak SINDy<br/>[_weak.py]"]
  node_sindypi["SINDy-PI<br/>[_sindypi.py]"]
  node_deeptime["Deeptime adapters<br/>[deeptime.py]"]
end

subgraph group_derivatives["Differentiation"]
  node_diffbase["Differentiation API<br/>[base.py]"]
  node_finite["Finite differences"]
  node_smooth["Smoothed differences"]
  node_spectral["Spectral derivatives"]
  node_sindyderiv["SINDy derivative"]
end

subgraph group_features["Feature libraries"]
  node_libbase["Library API<br/>[base.py]"]
  node_polynomial["Polynomial features"]
  node_generalized["Composite features"]
  node_pde["PDE features<br/>[pde_library.py]"]
  node_weakpde["Weak PDE features"]
  node_otherlibs["Other libraries"]
end

subgraph group_sparsity["Sparse optimizers"]
  node_optbase["Optimizer API<br/>[base.py]"]
  node_stlsq["STLSQ<br/>[stlsq.py]"]
  node_sr3["SR3 variants<br/>[sr3.py]"]
  node_constrained["Constrained SR3"]
  node_trapping["Trapping SR3<br/>[trapping_sr3.py]"]
  node_otheropts["Other optimizers"]
end

subgraph group_support["Data support"]
  node_axes["Axis-aware arrays<br/>[_axes.py]"]
  node_utils["Numerical utilities<br/>[base.py]"]
  node_odes["Example systems<br/>[odes.py]"]
end

node_user(("Measurements"))

node_user -->|"provides trajectories"| node_sindy
node_sindy -->|"estimates derivatives"| node_diffbase
node_sindy -->|"builds features"| node_libbase
node_sindy -->|"fits coefficients"| node_optbase
node_sindy -->|"offers weak formulation"| node_weak
node_sindy -->|"offers implicit identification"| node_sindypi
node_sindy -->|"provides adapters"| node_deeptime
node_sindy -->|"simulates systems"| node_odes
node_finite -->|"implements"| node_diffbase
node_smooth -->|"extends"| node_finite
node_spectral -->|"implements"| node_diffbase
node_sindyderiv -->|"implements"| node_diffbase
node_polynomial -->|"implements"| node_libbase
node_generalized -->|"composes libraries"| node_libbase
node_pde -->|"implements"| node_libbase
node_weakpde -->|"implements"| node_libbase
node_weak -->|"uses PDE features"| node_weakpde
node_optbase -->|"specializes"| node_stlsq
node_optbase -->|"specializes"| node_sr3
node_constrained -->|"extends"| node_sr3
node_trapping -->|"uses constrained optimizer"| node_constrained
node_sindypi -->|"uses feature library"| node_libbase
node_sindypi -->|"uses optimizer"| node_optbase
node_diffbase -->|"wraps arrays"| node_axes
node_libbase -->|"tracks array axes"| node_axes
node_optbase -->|"uses numerical helpers"| node_utils
node_sindy -->|"uses utilities"| node_utils

click node_sindy "https://github.com/dynamicslab/pysindy/blob/main/pysindy/_core.py"
click node_weak "https://github.com/dynamicslab/pysindy/blob/main/pysindy/_weak.py"
click node_sindypi "https://github.com/dynamicslab/pysindy/blob/main/pysindy/_sindypi.py"
click node_deeptime "https://github.com/dynamicslab/pysindy/blob/main/pysindy/deeptime.py"
click node_diffbase "https://github.com/dynamicslab/pysindy/blob/main/pysindy/differentiation/base.py"
click node_finite "https://github.com/dynamicslab/pysindy/blob/main/pysindy/differentiation/finite_difference.py"
click node_smooth "https://github.com/dynamicslab/pysindy/blob/main/pysindy/differentiation/smoothed_finite_difference.py"
click node_spectral "https://github.com/dynamicslab/pysindy/blob/main/pysindy/differentiation/spectral_derivative.py"
click node_sindyderiv "https://github.com/dynamicslab/pysindy/blob/main/pysindy/differentiation/sindy_derivative.py"
click node_libbase "https://github.com/dynamicslab/pysindy/blob/main/pysindy/feature_library/base.py"
click node_polynomial "https://github.com/dynamicslab/pysindy/blob/main/pysindy/feature_library/polynomial_library.py"
click node_generalized "https://github.com/dynamicslab/pysindy/blob/main/pysindy/feature_library/generalized_library.py"
click node_pde "https://github.com/dynamicslab/pysindy/blob/main/pysindy/feature_library/pde_library.py"
click node_weakpde "https://github.com/dynamicslab/pysindy/blob/main/pysindy/feature_library/weak_pde_library.py"
click node_otherlibs "https://github.com/dynamicslab/pysindy/tree/main/pysindy/feature_library"
click node_optbase "https://github.com/dynamicslab/pysindy/blob/main/pysindy/optimizers/base.py"
click node_stlsq "https://github.com/dynamicslab/pysindy/blob/main/pysindy/optimizers/stlsq.py"
click node_sr3 "https://github.com/dynamicslab/pysindy/blob/main/pysindy/optimizers/sr3.py"
click node_constrained "https://github.com/dynamicslab/pysindy/blob/main/pysindy/optimizers/_constrained_sr3.py"
click node_trapping "https://github.com/dynamicslab/pysindy/blob/main/pysindy/optimizers/trapping_sr3.py"
click node_otheropts "https://github.com/dynamicslab/pysindy/tree/main/pysindy/optimizers"
click node_axes "https://github.com/dynamicslab/pysindy/blob/main/pysindy/utils/_axes.py"
click node_utils "https://github.com/dynamicslab/pysindy/blob/main/pysindy/utils/base.py"
click node_odes "https://github.com/dynamicslab/pysindy/blob/main/pysindy/utils/odes.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_sindy,node_weak,node_sindypi,node_deeptime toneBlue
class node_diffbase,node_finite,node_smooth,node_spectral,node_sindyderiv toneAmber
class node_libbase,node_polynomial,node_generalized,node_pde,node_weakpde,node_otherlibs toneMint
class node_optbase,node_stlsq,node_sr3,node_constrained,node_trapping,node_otheropts toneRose
class node_axes,node_utils,node_odes,node_user toneIndigo
```

## Components

### Model fitting

- [SINDy models](https://github.com/dynamicslab/pysindy/blob/main/pysindy/_core.py): `pysindy/_core.py`
- [Weak SINDy](https://github.com/dynamicslab/pysindy/blob/main/pysindy/_weak.py): `pysindy/_weak.py`
- [SINDy-PI](https://github.com/dynamicslab/pysindy/blob/main/pysindy/_sindypi.py): `pysindy/_sindypi.py`
- [Deeptime adapters](https://github.com/dynamicslab/pysindy/blob/main/pysindy/deeptime.py): `pysindy/deeptime.py`

### Differentiation

- [Differentiation API](https://github.com/dynamicslab/pysindy/blob/main/pysindy/differentiation/base.py): `pysindy/differentiation/base.py`
- [Finite differences](https://github.com/dynamicslab/pysindy/blob/main/pysindy/differentiation/finite_difference.py): `pysindy/differentiation/finite_difference.py`
- [Smoothed differences](https://github.com/dynamicslab/pysindy/blob/main/pysindy/differentiation/smoothed_finite_difference.py): `pysindy/differentiation/smoothed_finite_difference.py`
- [Spectral derivatives](https://github.com/dynamicslab/pysindy/blob/main/pysindy/differentiation/spectral_derivative.py): `pysindy/differentiation/spectral_derivative.py`
- [SINDy derivative](https://github.com/dynamicslab/pysindy/blob/main/pysindy/differentiation/sindy_derivative.py): `pysindy/differentiation/sindy_derivative.py`

### Feature libraries

- [Library API](https://github.com/dynamicslab/pysindy/blob/main/pysindy/feature_library/base.py): `pysindy/feature_library/base.py`
- [Polynomial features](https://github.com/dynamicslab/pysindy/blob/main/pysindy/feature_library/polynomial_library.py): `pysindy/feature_library/polynomial_library.py`
- [Composite features](https://github.com/dynamicslab/pysindy/blob/main/pysindy/feature_library/generalized_library.py): `pysindy/feature_library/generalized_library.py`
- [PDE features](https://github.com/dynamicslab/pysindy/blob/main/pysindy/feature_library/pde_library.py): `pysindy/feature_library/pde_library.py`
- [Weak PDE features](https://github.com/dynamicslab/pysindy/blob/main/pysindy/feature_library/weak_pde_library.py): `pysindy/feature_library/weak_pde_library.py`
- [Other libraries](https://github.com/dynamicslab/pysindy/tree/main/pysindy/feature_library): `pysindy/feature_library`

### Sparse optimizers

- [Optimizer API](https://github.com/dynamicslab/pysindy/blob/main/pysindy/optimizers/base.py): `pysindy/optimizers/base.py`
- [STLSQ](https://github.com/dynamicslab/pysindy/blob/main/pysindy/optimizers/stlsq.py): `pysindy/optimizers/stlsq.py`
- [SR3 variants](https://github.com/dynamicslab/pysindy/blob/main/pysindy/optimizers/sr3.py): `pysindy/optimizers/sr3.py`
- [Constrained SR3](https://github.com/dynamicslab/pysindy/blob/main/pysindy/optimizers/_constrained_sr3.py): `pysindy/optimizers/_constrained_sr3.py`
- [Trapping SR3](https://github.com/dynamicslab/pysindy/blob/main/pysindy/optimizers/trapping_sr3.py): `pysindy/optimizers/trapping_sr3.py`
- [Other optimizers](https://github.com/dynamicslab/pysindy/tree/main/pysindy/optimizers): `pysindy/optimizers`

### Data support

- [Axis-aware arrays](https://github.com/dynamicslab/pysindy/blob/main/pysindy/utils/_axes.py): `pysindy/utils/_axes.py`
- [Numerical utilities](https://github.com/dynamicslab/pysindy/blob/main/pysindy/utils/base.py): `pysindy/utils/base.py`
- [Example systems](https://github.com/dynamicslab/pysindy/blob/main/pysindy/utils/odes.py): `pysindy/utils/odes.py`

### Other components

- **Measurements**

## Connections

- Measurements → SINDy models: provides trajectories
- SINDy models → Differentiation API: estimates derivatives (evidence: `pysindy/_core.py`)
- SINDy models → Library API: builds features (evidence: `pysindy/_core.py`)
- SINDy models → Optimizer API: fits coefficients (evidence: `pysindy/_core.py`)
- SINDy models → Weak SINDy: offers weak formulation (evidence: `pysindy/__init__.py`)
- SINDy models → SINDy-PI: offers implicit identification (evidence: `pysindy/__init__.py`)
- SINDy models → Deeptime adapters: provides adapters (evidence: `pysindy/__init__.py`)
- SINDy models → Example systems: simulates systems (evidence: `pysindy/_core.py`)
- Finite differences → Differentiation API: implements (evidence: `pysindy/differentiation/finite_difference.py`)
- Smoothed differences → Finite differences: extends (evidence: `pysindy/differentiation/smoothed_finite_difference.py`)
- Spectral derivatives → Differentiation API: implements (evidence: `pysindy/differentiation/spectral_derivative.py`)
- SINDy derivative → Differentiation API: implements (evidence: `pysindy/differentiation/sindy_derivative.py`)
- Polynomial features → Library API: implements (evidence: `pysindy/feature_library/polynomial_library.py`)
- Composite features → Library API: composes libraries (evidence: `pysindy/feature_library/generalized_library.py`)
- PDE features → Library API: implements (evidence: `pysindy/feature_library/pde_library.py`)
- Weak PDE features → Library API: implements (evidence: `pysindy/feature_library/weak_pde_library.py`)
- Weak SINDy → Weak PDE features: uses PDE features (evidence: `pysindy/_weak.py`)
- Optimizer API → STLSQ: specializes (evidence: `pysindy/optimizers/stlsq.py`)
- Optimizer API → SR3 variants: specializes (evidence: `pysindy/optimizers/sr3.py`)
- Constrained SR3 → SR3 variants: extends (evidence: `pysindy/optimizers/_constrained_sr3.py`)
- Trapping SR3 → Constrained SR3: uses constrained optimizer (evidence: `pysindy/optimizers/trapping_sr3.py`)
- SINDy-PI → Library API: uses feature library (evidence: `pysindy/_sindypi.py`)
- SINDy-PI → Optimizer API: uses optimizer (evidence: `pysindy/_sindypi.py`)
- Differentiation API → Axis-aware arrays: wraps arrays (evidence: `pysindy/differentiation/base.py`)
- Library API → Axis-aware arrays: tracks array axes (evidence: `pysindy/feature_library/base.py`)
- Optimizer API → Numerical utilities: uses numerical helpers (evidence: `pysindy/optimizers/base.py`)
- SINDy models → Numerical utilities: uses utilities (evidence: `pysindy/_core.py`)
