dyno.py
Dyno is a Python library for specifying, solving and simulating dynamic
macroeconomic models: stochastic DSGE models solved by first-order
perturbation, and deterministic perfect-foresight (transition) models solved
with a stacked-time Newton solver. Models are written in the human-readable
.dyno language (explicit time indices [t], [t-1], [t+1], steady-state
values [~]), or imported directly from Dynare .mod files. Dyno checks
steady states and Blanchard-Kahn conditions, computes impulse responses,
moments and simulations, renders model reports, and comes with Dyno Lab, a
JupyterLab extension for editing and solving models interactively.
Documentation: https://econforge.github.io/dyno.py/
Install
Dyno is distributed as a conda package on the econforge channel on
prefix.dev. With pixi, in a new or existing project:
pixi init my-project && cd my-project # skip for an existing project
pixi workspace channel add --prepend https://prefix.dev/econforge
pixi add dyno
--prepend gives the econforge channel priority over conda-forge, so you
get the latest Dyno release. For the graphical interface (Dyno Lab), also add
JupyterLab and the extension:
pixi add jupyterlab jupyterlab-dyno
pixi run jupyter lab
See the installation guide for optional components (such as the Dynare preprocessor).
Example
Write a model in neo.dyno:
α <- 0.36
β <- 0.99
δ <- 0.025
ρ <- 0.95
γ <- 2.0
z[~] <- 0.0
k[~] <- ((1/β - (1-δ)) / α)**(1 / (α-1))
y[~] <- k[~]^α
i[~] <- δ * k[~]
c[~] <- y[~] - i[~]
z[t] = ρ * z[t-1] + e_z[t]
y[t] = exp(z[t]) * k[t-1]^α
k[t] = (1-δ) * k[t-1] + i[t]
c[t] = y[t] - i[t]
β * (c[t+1]/c[t])^(-γ) * (α * y[t+1]/k[t] + 1 - δ) = 1
e_z[t] <- N(0.01)
Then solve it and compute impulse responses:
from dyno import DynoModel
model = DynoModel("neo.dyno")
model.check() # raises if the steady state is wrong
solution = model.solve() # first-order perturbation
irfs = solution.irfs(type="deviation", T=40)
print(irfs["e_z"][["y", "c", "k", "i"]].head())
solution.plot(type="deviation") # interactive chart in Jupyter
Dynare files work the same way: DynoModel("model.mod").
Contributing
Contributors work from a clone of this repository. The sections below, and the Develop Dyno page of the documentation, describe the development setup.
Setup
Using pixi (production and development environment)
pixi can be installed on a *nix system using the following command:
curl -fsSL https://pixi.sh/install.sh | sh
For interactive modeling, Dyno features a JupyterLab extension (jupyterlab_dyno / Dyno Lab):
pixi run -e dev jupyter lab
For development (including documentation and unit tests), pixi provides a set of pre-configured tasks.
Model representation explorer (dev tool)
To visualize how the library currently imports and renders every example model (across backends, strict options, and text/HTML/Markdown output), run:
pixi run -e solara explorer
This is a maintainer/contributor tool for tracking the library's progress across its example models — it is not meant for developing or calibrating your own models; use Dyno Lab (above) for that. See the documentation for details.
To build and serve documentation locally with zensical:
pixi run -e dev docs
To run unit and coverage tests:
pixi run test
pixi run cov
Finally, types can be checked with mypy:
pixi run typecheck
Metadata
Release files for dynopy 0.1.13
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dynopy-0.1.13.tar.gz | 258.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dynopy-0.1.13-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 538.3 kB
Release files / dynopy-0.1.13.tar.gz
| Download URL | dynopy-0.1.13.tar.gz |
|---|---|
| Size | 258.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1f46c4e40588ab15369aa1a6ab2dcc2187c70f8ebc39b8de23e4a1350380ccbe
|
|
BLAKE2b-256 checksum How to use checksums |
04d12570b310dbf1d1ab4970dc22ae227650fcbbbaf0112174fc6d6ff41adabe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.
Transparency logRelease files / dynopy-0.1.13-py3-none-any.whl
| Download URL | dynopy-0.1.13-py3-none-any.whl |
|---|---|
| Size | 279.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
974dac38626edf15b3fe5c002ee1a86336384bb93b3f13c12317ef211be37748
|
|
BLAKE2b-256 checksum How to use checksums |
50442a238a956b0c1d8706f1ae24d137dec408b0efe6fd52953537a58ff19255
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.
Transparency log