Skip to main content

Fast, Monte Carlo DAG propagation simulator with user‑defined delay distributions

Project description

mc_dagprop

PyPI version
Python Versions
License

mc_dagprop is a fast, Monte Carlo–style propagation simulator for directed acyclic graphs (DAGs), written in C++
with Python bindings via pybind11. It allows you to model timing networks (timetables, precedence graphs, etc.)
and inject user-defined delay distributions on edges.


Features

  • Lightweight & high-performance core in C++
  • Simple Python API via poetry or pip
  • Custom per-activity-type delay distributions:
    • Constant (linear scaling)
    • Exponential (with cutoff)
    • Gamma (shape & scale)
    • Easily extendable (Weibull, etc.)
  • Single-run (run(seed)) and batch-run (run_many([seeds]))
  • Returns a SimResult: realized times, per-edge delays, and causal predecessors

Installation

# with poetry
poetry add mc_dagprop

# or with pip
pip install mc_dagprop

Quickstart

from mc_dagprop import (
    EventTimestamp,
    SimEvent,
    SimActivity,
    SimContext,
    GenericDelayGenerator,
    Simulator,
)

# 1) Build your DAG timing context
events = [
    SimEvent("A", EventTimestamp(0.0, 5.0, 2.0)),
    SimEvent("B", EventTimestamp(10.0, 15.0, 12.0)),
]

activities = {
    (0, 1): SimActivity(minimal_duration=60.0, activity_type=1),
}

precedence = [
    (1, [(0, 0)]),
]

ctx = SimContext(
    events=events,
    activities=activities,
    precedence_list=precedence,
    max_delay=1800.0,
)

# 2) Configure delay generator
gen = GenericDelayGenerator()
gen.add_constant(activity_type=1, factor=1.5)
gen.add_exponential(activity_type=1, lambda_=2.0, max_scale=5.0)
gen.add_gamma(activity_type=1, shape=2.0, scale=0.5)

# 3) Simulate
sim = Simulator(ctx, gen)
result = sim.run(seed=42)
print(result.realized, result.delays, result.cause_event)

API Reference

EventTimestamp(earliest: float, latest: float, actual: float)

Holds the scheduling window and actual time for one event (node):

  • earliest – earliest possible occurrence
  • latest – latest allowed occurrence
  • actual – scheduled (baseline) timestamp

SimEvent(node_id: str, timestamp: EventTimestamp)

Wraps a DAG node with its identifier and timing stamp:

  • node_id – string key for the node
  • timestamp – an EventTimestamp instance

SimActivity(duration: float, activity_type: int)

Represents an edge in the DAG:

  • minimal_duration – minimal (base) duration
  • activity_type – integer type id

SimContext(events, activities, precedence_list, max_delay)

Container for your DAG:

  • events: List[SimEvent]
  • activities: Dict[(src_idx, dst_idx), SimActivity]
  • precedence_list: List[(target_idx, [(pred_idx, act_idx), …])]
  • max_delay: overall cap on delay propagation for an event

GenericDelayGenerator

Configurable delay factory:

  • .add_constant(activity_type, factor)
  • .add_exponential(activity_type, lambda_, max_scale)
  • .add_gamma(activity_type, shape, scale)
  • .set_seed(seed)

Simulator(context: SimContext, generator: GenericDelayGenerator)

  • .run(seed: int) → SimResult
  • .run_many(seeds: Sequence[int]) → List[SimResult]

SimResult

  • .realized: List[float] – event times after propagation
  • .delays: List[float] – per-edge injected delays
  • .cause_event: List[int] – which predecessor caused each event

Visualization Demo

# install plotly to run the demo
pip install plotly

# then from your project root
python -m mc_dagprop.utils.demo_distributions

Displays histograms of the realized times under Constant, Exponential, and Gamma delays.


Development

git clone https://github.com/WonJayne/mc_dagprop.git
cd mc_dagprop
poetry install
poetry run pytest

License

MIT — see LICENSE

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

mc_dagprop-0.1.12.tar.gz (13.7 kB view details)

Uploaded Source

Built Distribution

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

mc_dagprop-0.1.12-cp312-cp312-win_amd64.whl (109.9 kB view details)

Uploaded CPython 3.12Windows x86-64

File details

Details for the file mc_dagprop-0.1.12.tar.gz.

File metadata

  • Download URL: mc_dagprop-0.1.12.tar.gz
  • Upload date:
  • Size: 13.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.1 CPython/3.10.4 Windows/10

File hashes

Hashes for mc_dagprop-0.1.12.tar.gz
Algorithm Hash digest
SHA256 0e4fe571716976b2f4c9189624e183411c4bbce6f923b397f5d0b6ac6b0f4246
MD5 a3d5e5332458cc2839be01f133171168
BLAKE2b-256 82b8a1da6e452b597d843ba01a9faaea45a5cdcd271f9232c74ee8aeb288c7d1

See more details on using hashes here.

File details

Details for the file mc_dagprop-0.1.12-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: mc_dagprop-0.1.12-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 109.9 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.1 CPython/3.10.4 Windows/10

File hashes

Hashes for mc_dagprop-0.1.12-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d48a07be064cad637c843eb6bbd7361dd320fb17d7132622171a87498d310abd
MD5 c0d2dfc90f1bf2a79c467873b09e3ee1
BLAKE2b-256 b0b7e4db3f75eb0c35db4d69813a1d1493dadaff3a462f91cde0f65c6eb7a101

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page