Metadata-Version: 2.4
Name: gds-analysis
Version: 0.1.1
Summary: Dynamical analysis for GDS specifications — bridges gds-framework to gds-sim
Project-URL: Homepage, https://github.com/BlockScience/gds-core
Project-URL: Repository, https://github.com/BlockScience/gds-core
Project-URL: Documentation, https://blockscience.github.io/gds-core
Author-email: Rohan Mehta <rohan@block.science>
License-Expression: Apache-2.0
Keywords: analysis,controllability,gds-framework,generalized-dynamical-systems,reachability
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Scientific/Engineering :: Mathematics
Classifier: Typing :: Typed
Requires-Python: >=3.12
Requires-Dist: gds-framework>=0.2.3
Requires-Dist: gds-sim>=0.1.0
Provides-Extra: continuous
Requires-Dist: gds-continuous[scipy]>=0.1.0; extra == 'continuous'
Requires-Dist: numpy>=1.26; extra == 'continuous'
Description-Content-Type: text/markdown

# gds-analysis

Dynamical analysis for GDS specifications. Bridges `gds-framework` structural annotations to `gds-sim` runtime.

## Installation

```bash
uv add gds-analysis
```

## Quick Start

```python
from gds_analysis import spec_to_model, trajectory_distances
from gds_sim import Simulation

# Build a runnable model from a GDSSpec
model = spec_to_model(
    spec,
    policies={"Sensor": sensor_fn, "Controller": controller_fn},
    sufs={"Heater": heater_fn},
    initial_state={"Room.temperature": 18.0},
)

# Run simulation
sim = Simulation(model=model, timesteps=100)
results = sim.run()

# Compute distances using StateMetric annotations
distances = trajectory_distances(spec, results.to_list())
```
