Metadata-Version: 2.2
Name: disco-engine
Version: 0.0.5
Summary: A distributed event simulation core (disco) engine.
Author: Michiel Jansen
License: Apache-2.0
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: C++
Classifier: Operating System :: OS Independent
Requires-Python: >=3.11
Requires-Dist: numpy~=2.3
Requires-Dist: pandas~=2.3
Requires-Dist: pydantic~=2.12
Requires-Dist: pydantic-settings~=2.12
Requires-Dist: kazoo~=2.10
Requires-Dist: python-graphblas~=2025.2
Requires-Dist: graphblas-algorithms~=2023.10
Requires-Dist: SQLAlchemy~=2.0
Requires-Dist: disco-tools>=0.1.8
Requires-Dist: disco-data-logger>=0.1.3
Requires-Dist: grpcio>=1.60
Requires-Dist: protobuf>=4.25
Requires-Dist: PyYAML>=6.0
Requires-Dist: scipy>=1.13
Requires-Dist: scikit-learn>=1.5
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == "dev"
Requires-Dist: pytest-cov>=5; extra == "dev"
Requires-Dist: mypy>=1.10; extra == "dev"
Requires-Dist: cibuildwheel>=3.3; extra == "dev"
Requires-Dist: pybind11-stubgen>=2.5; extra == "dev"
Requires-Dist: twine>=5; extra == "dev"
Requires-Dist: grpcio-tools>=1.60; extra == "dev"
Requires-Dist: psycopg[binary]>=3.3; extra == "dev"
Requires-Dist: types-PyYAML>=6.0; extra == "dev"
Requires-Dist: pytest-timeout>=2.3; extra == "dev"
Description-Content-Type: text/markdown

# 🧾 Disco Engine

**Disco Engine** is a Python-based *distributed discrete-event simulation core* (“distributed simulation runtime”).
It’s designed to run large, structured simulations (e.g., supply-chain / networked process models) by executing many
independent **NodeRuntimes** that exchange **events** and **promises** over pluggable transports.

- Deterministic single-threaded stepping per worker process
- Scales out via multiple workers and transport backends
- Built for “engine + plugins” (models as Python packages)

[![PyPI](https://img.shields.io/pypi/v/disco-engine.svg)](https://pypi.org/project/disco-engine/)
[![License: Apache-2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
[![Build](https://github.com/michielmj/disco-engine/actions/workflows/build.yml/badge.svg)](https://github.com/michielmj/disco-engine/actions/workflows/build.yml)
[![Tests](https://github.com/michielmj/disco-engine/actions/workflows/test.yml/badge.svg)](https://github.com/michielmj/disco-engine/actions/workflows/test.yml)

---

## Overview

At a high level, a Disco simulation is:

- a **Layered Graph** (scenario) that defines structure and data access,
- a **Model plugin** that defines simulation logic,
- an **Experiment** that defines parameters and run configuration,
- one or more **Workers** that host NodeRuntimes and step the simulation.

For local debugging and unit tests, Disco also includes a lightweight **TestRun** that executes a single, unpartitioned
run **without** threading, metastore/cluster coordination, or external transports.

---

## ✨ Features

- **Worker lifecycle & state machine** for long-lived simulation processes
- **Routing + transports** (in-process, IPC, gRPC) for node-to-node delivery
- **Partitioning** to distribute nodes across workers (production), while keeping deterministic node order per worker
- **TestRun** for fast local runs without infrastructure (single-process, in-process transport only)
- **Data logging** via an optional `DataLogger`

---

## 🚀 Installation

```bash
pip install disco-engine
```

---

## License

This project is licensed under the Apache License, Version 2.0.
See the `LICENSE` file for details.
