Skip to main content

BAM Engine

A Modular Python Framework for the BAM Agent-Based Macroeconomic Model

A Python implementation of the BAM (Bottom-Up Adaptive Macroeconomics) model from Macroeconomics from the Bottom-up (Delli Gatti et al., 2011). It runs simulations of individual workers, firms, and banks making decisions and interacting in labor, credit and goods markets, letting macroeconomic patterns (growth, unemployment, inflation, business cycles) emerge from the bottom up, instead of assuming them with aggregate equations. It is built for researchers, students, and practitioners in agent-based computational economics who need a reproducible, extensible implementation of the BAM model, with validation and calibration tooling included.

bamengine.orgDocumentationGetting StartedExamples

Python PyPI version DOI License

Tests Repo-Review codecov Benchmarks

pre-commit.ci status Ruff Type Checked

Model Validation

Note: This release is feature-complete for the core BAM model but APIs may change in future releases before v1.0.0.

Quick Start

pip install bamengine

Requirements: Python 3.11+. NumPy and PyYAML are installed automatically.

import bamengine as bam

# Initialize and run simulation
sim = bam.Simulation.init(n_firms=100, n_households=500, seed=42)
results = sim.run(n_periods=100)

# Access results
results["Economy.inflation"]  # 1D array (n_periods,)
results.Producer.price  # 2D array (n_periods, n_firms)

# Export to pandas DataFrame
df = results.to_dataframe()

# Add extensions with one call
from extensions.rnd import RND

sim = bam.Simulation.init(seed=42)
sim.use(RND)
results = sim.run(n_periods=1000)

See the Getting Started guide for a complete walkthrough.

Features

  • Complete BAM Implementation: Baseline model from Macroeconomics from the Bottom-up, Chapter 3 (firms, households, and banks across labor, credit, and goods markets), three built-in extensions (R&D / Growth+, buffer-stock consumption, taxation), and a robustness analysis suite (internal validity, sensitivity, structural experiments).
  • Vectorized Performance: Agent state lives in parallel NumPy arrays and behavior is expressed as array transformations, not Python loops over agent objects. Simulations scale to large populations and long horizons.
  • Pluggable Extension System: Add custom roles, events, and pipeline hooks via decorators without modifying the engine. The same mechanism powers the built-in extensions.
  • Parameter Calibration: Automated pipeline for tuning model parameters against validation targets.

Architecture

BAM Engine uses an ECS (Entity-Component-System) architecture: agents are lightweight entities, state lives in Role components stored as parallel NumPy arrays, and behavior is defined by Event systems composed into a YAML-configurable pipeline. New roles, events, and relationships can be added through decorators, without modifying core code.

The trade-off is a mindset shift: you write agent rules as systems that transform whole arrays of state at once, not as methods on per-agent objects. ECS itself does not demand vectorization, but BAM Engine treats it as the default. Every built-in system processes all agents at once, with the goods market's sequential matching rounds as the deliberate exception where strict per-agent ordering matters.

See the User Guide for a full walkthrough of the model and its architecture.

Cross-framework benchmark

BAM Engine is benchmarked against Mesa, mesa-frames, Agents.jl, and NetLogo running the identical baseline model, with a behavioural-equivalence gate ensuring like-for-like comparison. See comparison/ for the harness, committed results, and reproduction instructions.

Documentation

Full documentation is available at bam-engine.readthedocs.io.

Section Description
Getting Started Installation, first simulation, data collection
User Guide Model overview, configuration, custom roles/events, pipelines, best practices
API Reference Complete reference for all components and operations
Examples 16 runnable examples: basic, advanced, and extensions
Extensions R&D / Growth+, buffer-stock consumption, taxation
Validation Scenario validation, scoring, robustness analysis
Calibration Morris screening, grid search, stability testing

Development

git clone https://github.com/kganitis/bam-engine.git
pip install -e ".[dev]"
pytest
ruff format . && ruff check --fix . && mypy

Contributions are welcome. Bug fixes, documentation, tests, performance work, and new extensions are all appreciated. For substantial or model-behavior changes, please open an issue first to discuss the approach. See CONTRIBUTING.md for the full guidelines and quality bar.

See the Development Guide for more on testing, linting, benchmarking, and contributing.

Citation

If you use BAM Engine in your research, please cite:

  1. This software - Use CITATION.cff or GitHub's "Cite this repository"
  2. The original BAM model - Delli Gatti, D., Desiderio, S., Gaffeo, E., Cirillo, P., & Gallegati, M. (2011). Macroeconomics from the Bottom-up. Springer. DOI: 10.1007/978-88-470-1971-3

License

MIT License - see LICENSE for details.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bamengine-0.10.2.tar.gz (286.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bamengine-0.10.2-py3-none-any.whl (339.2 kB view details)

Uploaded Python 3

File details

Details for the file bamengine-0.10.2.tar.gz.

File metadata

  • Download URL: bamengine-0.10.2.tar.gz
  • Upload date:
  • Size: 286.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for bamengine-0.10.2.tar.gz
Algorithm Hash digest
SHA256 f2713927ce601367e0f601173c2d6142d6772cb02844f20ab1c80617affb7c2e
MD5 97f04aabc261c4f3cbe41b48c27b8b69
BLAKE2b-256 dc65a2010de405c25f7e4fb718fd8bce5c3050cd04848dffc3977a0343a7ac07

See more details on using hashes here.

Provenance

The following attestation bundles were made for bamengine-0.10.2.tar.gz:

Publisher: publish.yml on kganitis/bam-engine

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bamengine-0.10.2-py3-none-any.whl.

File metadata

  • Download URL: bamengine-0.10.2-py3-none-any.whl
  • Upload date:
  • Size: 339.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for bamengine-0.10.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a07a3d4d53f17fc3ace89962bc466518b10a07bed20b007066109703aa2068ce
MD5 e3f2ecf985e7727240e95eb827290e68
BLAKE2b-256 99a61e218b572c665cbe9bf7340193ea6ee1e2f313bc8cb501f2bd07319311d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for bamengine-0.10.2-py3-none-any.whl:

Publisher: publish.yml on kganitis/bam-engine

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.10.2 This release

2 files

0.10.1

2 files

0.10.0

2 files

0.9.2

2 files

0.9.1

2 files

0.9.0

2 files

0.8.0

2 files

0.7.0

2 files

0.6.1

2 files

0.6.0

2 files

0.5.1

2 files

0.5.0.post1

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page