Impulso
Bayesian Vector Autoregression (VAR) in Python.
We currently have some availability for consulting on how Bayesian modelling, vector autoregressions, and impulso can be integrated into your team's macroeconomic and financial forecasting work. If this sounds relevant, book an introductory call. These calls are for consulting inquiries only. For technical usage questions and free community support, please use GitHub Issues and the documentation.
Overview
impulso provides a modern, Pythonic interface for Bayesian Vector Autoregression modeling. Built on PyMC, it enables full posterior inference for VAR models with informative priors, structural identification, impulse response analysis, and forecast error variance decomposition.
Core Pipeline
The library follows an immutable, type-safe pipeline:
VARData → VAR.fit() → FittedVAR → .set_identification_strategy() → IdentifiedVAR
VARData: Validated time series data (endogenous/exogenous variables + DatetimeIndex)VAR: Model specification (lags, priors, exogenous variables)FittedVAR: Reduced-form posterior estimates with forecasting capabilitiesIdentifiedVAR: Structural VAR with impulse responses, FEVD, and historical decomposition
Key Features
- Full Bayesian inference via PyMC (NUTS sampling, automatic diagnostics)
- Minnesota priors for regularization in high-dimensional VARs, with cross-lag scaling by relative variable scale (ADR-0015)
- Per-variable innovation priors: Override the innovation scale prior for individual variables
- Flexible identification schemes: Recursive (Cholesky), sign restrictions
- Forecasting: Point forecasts, credible intervals, and scenario analysis
- Impulse response functions (IRFs) with uncertainty quantification
- Forecast error variance decomposition (FEVD)
- Historical decomposition of variables into structural shocks
- Dynamic multipliers: Response of endogenous variables to exogenous (VARX) drivers
- Embeddable VARs: Build a VAR inside an existing PyMC model with
VAR.build_in_model, with symbolic observed data or latent endogenous series generated in the model under a stationarity constraint, then wrap the posterior withFittedVAR.from_posterior(see ADR-0016) - Extensible protocols: Plug in custom priors, samplers, and identification schemes
- Type-safe: Frozen Pydantic models with full type hints
Installation
pip install impulso
Or with uv:
uv pip install impulso
Faster sampling with nutpie
For significantly faster NUTS sampling, install with the optional nutpie backend:
pip install "impulso[nutpie]"
Or with uv:
uv add impulso --extra nutpie
When nutpie is installed, it is used automatically as the default sampler. You can also select the backend explicitly:
from impulso.samplers import NUTSSampler
sampler = NUTSSampler(nuts_sampler="nutpie") # or "pymc"
fitted = var.fit(data, sampler=sampler)
Quick Start
import pandas as pd
from impulso import VARData, VAR
# Load your time series data
df = pd.read_csv("data.csv", index_col="date", parse_dates=True)
# Create validated VAR data
data = VARData.from_df(df, endog_vars=["gdp", "inflation", "interest_rate"])
# Specify and fit a VAR(4) model with Minnesota prior
var = VAR(lags=4, prior="minnesota")
fitted = var.fit(data)
# Generate forecasts
forecast = fitted.forecast(steps=12)
forecast.plot()
# Structural identification and impulse responses
identified = fitted.set_identification_strategy("cholesky")
irf = identified.impulse_response(steps=20)
irf.plot()
# Forecast error variance decomposition
fevd = identified.fevd(steps=20)
fevd.plot()
Documentation
Full documentation, tutorials, and API reference: https://impulso.quantclimate.com
Development
See AGENTS.md for development setup, testing, and contribution guidelines.
License
MIT License. See LICENSE for details.
Citation
If you use impulso in your research, please cite:
@software{impulso,
author = {Pinder, Thomas},
title = {impulso: Bayesian Vector Autoregression in Python},
year = {2026},
url = {https://github.com/QuantClimate/Impulso}
}
Metadata
Release files for impulso 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| impulso-0.1.3.tar.gz | 1.2 MB | Without provenance | Details for impulso-0.1.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| impulso-0.1.3-py3-none-any.whl | Python 3 | none | any | Details for impulso-0.1.3-py3-none-any.whl |
Total release size: 1.4 MB
Release files / impulso-0.1.3.tar.gz
| Download URL | impulso-0.1.3.tar.gz |
|---|---|
| Size | 1.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3865307721bdc4d46a491a0a0276040ff356ba9440cd4ddd25ca21782b2efe49
|
|
BLAKE2b-256 checksum How to use checksums |
e4075acf7f725152b2468077cdc948236c049a50a8158587fc6af2f7caeb4559
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / impulso-0.1.3-py3-none-any.whl
| Download URL | impulso-0.1.3-py3-none-any.whl |
|---|---|
| Size | 207.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cafc7010c4092c83e44c6cd9d5379acb75437c06c6e660363c9aac63443c5a22
|
|
BLAKE2b-256 checksum How to use checksums |
eb4579e80e6819e5be69ffb35e59b8e1fdbb546d0ced43ff86050ff37ccce880
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for impulso 0.1.3
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.