Bayesian Vector Autoregression (VAR) in Python.
Project description
Impulso
Bayesian Vector Autoregression (VAR) in Python.
🚧 Experimental — under heavy development. This project is an experiment in AI-driven software development. The vast majority of the code, tests, and documentation were written by AI (Claude Code). Humans direct architecture, priorities, and design decisions, but have not reviewed most of the code line-by-line. Treat this accordingly — there will be bugs, rough edges, and things that don't work.
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
- 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
- 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://thomaspinder.github.io/impulso
Development
See CLAUDE.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/thomaspinder/impulso}
}
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file impulso-0.0.4.tar.gz.
File metadata
- Download URL: impulso-0.0.4.tar.gz
- Upload date:
- Size: 719.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ba8d1e354a9be8c537b235630c4791f13ca2e08650b7f1f698178c9c8df2408
|
|
| MD5 |
e2a68e0eb33607689a74c95a411d3248
|
|
| BLAKE2b-256 |
8c0ca6e3ede402794d5495aeaf701c1b36909018e4b0dea5135bff7ea20dc234
|
File details
Details for the file impulso-0.0.4-py3-none-any.whl.
File metadata
- Download URL: impulso-0.0.4-py3-none-any.whl
- Upload date:
- Size: 22.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b028f2bff1097ef9af97028d4116cbd90096cae1ab71cf711ac78b781b296324
|
|
| MD5 |
3a602259ba08fa5cf46a088d2b5593e0
|
|
| BLAKE2b-256 |
22d75a7753588999f245d7f61320b57b343e1df9159df00874d711027c963500
|