Metadata-Version: 2.4
Name: asim
Version: 25.11.5
Summary: Automatic simulation system powered by neural networks
Keywords: simulation
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: torch>=2.8.0
Requires-Dist: lightning>=2.5.5
Provides-Extra: dev
Requires-Dist: matplotlib; extra == "dev"
Dynamic: license-file

# Automatic simulation system powered by neural networks

## Installation

```bash
pip install asim
```

## What is asim

- Physical field modeling with automatic constraint enforcement
- Flexible data grouping and normalization
- Built-in support for recurrent architectures
- Export/import of trained models

## Using asim

```python
import matplotlib.pyplot as plt
from asim.dataset import PhysicalDataManage, Ts, Fi, Fo, DummyDatasets
from asim.model import PhysicalFieldModel
from asim.simulator import PhysicalSimulator
from asim.optimizer import ContinuousOptimizer

# 1. Define data and structure
df = DummyDatasets.basic_boiler(size=1000)  # pd.read_csv("demo.csv")
cols = [
    Ts(label="ts"),
    Fi(group="boiler", label="power1", min=0.0, union="kw", control=True),
    Fi(group="boiler", label="power2", min=0.0, union="kw", control=True),
    Fo(group="boiler", label="load", min=0.0, union="t", loop=True),
]
dm = PhysicalDataManage(df, columns=cols, batch_size=64)

# 2. Select the model, define the parameters, train and save
fm = PhysicalFieldModel(dm, lr=0.003)
fm.fit(epochs=100)
fm.export("demo.sim.onnx")

# 3. Use a simulator to simulate the operation
sim = PhysicalSimulator("demo.sim.onnx", dm=dm)
sim_res = sim.steps(dm.df[100:300], y0={"boiler": [200.0]})
for group, (x1, y1, y2) in sim_res.items():
    plt.figure(figsize=(15, 3))
    plt.plot(y1, lw=2, ls="-")
    plt.plot(y2, c="red", lw=2, ls="--")
    plt.show()

# 4. RL
opt = ContinuousOptimizer(sim=sim, dm=dm)
opt.fit(epochs=100)
opt.export("demo.opt.onnx")
```
