# scicompmod/memilio architecture

> Architecture diagram of the GitHub repository scicompmod/memilio, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/scicompmod/memilio
- Repository: https://github.com/scicompmod/memilio

## Overview

MEmilio is a modular infectious-disease modeling and simulation platform, with C++ model and numerical runtimes, Python-facing simulation tools, epidemiological data utilities, and surrogate-model capabilities. Its principal workflow is to prepare epidemiological inputs, configure a model and mobility scenario, run a simulation, and inspect results. The README documents the model families and modular mobility support; sampled excerpts are limited, so links between unsampled subsystems are omitted where their wiring is unclear.

Main entry points: [`pycode/memilio-simulation/memilio/simulation/bindings`](https://github.com/scicompmod/memilio/tree/main/pycode/memilio-simulation/memilio/simulation/bindings) (Python bindings), [`cpp/models/ode_secir`](https://github.com/scicompmod/memilio/tree/main/cpp/models/ode_secir) (ODE models), [`cpp/memilio/compartments`](https://github.com/scicompmod/memilio/tree/main/cpp/memilio/compartments) (Compartment framework), [`pycode/memilio-epidata/memilio/epidata`](https://github.com/scicompmod/memilio/tree/main/pycode/memilio-epidata/memilio/epidata) (Epidata utilities)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Data preparation"]
  node_epidata["Epidata utilities"]
  node_cppio["Data and result I/O"]
end

subgraph group_engine["Simulation engine"]
  node_compartments["Compartment framework"]
  node_solver["Numerical solvers"]
  node_epidemiology["Epidemiology components"]
  node_mobility["Mobility modeling"]
end

subgraph group_models["Epidemic models"]
  node_ode["ODE models"]
  node_ide["IDE models"]
  node_lct["Linear-chain models"]
  node_abm["Agent-based models"]
  node_hybrid["Hybrid models"]
  node_graphmodels["Graph ODE models"]
end

subgraph group_python["Python tools"]
  node_pythonapi["Python simulation API"]
  node_bindings["Python bindings"]
  node_generator["Model generator"]
  node_plot["Plotting utilities"]
end

subgraph group_surrogate["Surrogate models"]
  node_surrogate["Surrogate training"]
end

node_user(("Modeler"))
node_sources[("Epidemiological sources")]
node_results["Simulation results"]

node_sources -->|"provides data"| node_epidata
node_user -->|"prepares inputs"| node_epidata
node_user -->|"configures run"| node_pythonapi
node_epidata -.->|"supplies inputs"| node_pythonapi
node_pythonapi -->|"dispatches calls"| node_bindings
node_bindings -->|"invokes model"| node_ode
node_bindings -->|"invokes model"| node_abm
node_bindings -->|"invokes model"| node_ide
node_bindings -->|"invokes model"| node_lct
node_ode -->|"uses framework"| node_compartments
node_ide -->|"uses framework"| node_compartments
node_lct -->|"uses framework"| node_compartments
node_abm -.->|"uses numerical methods"| node_solver
node_compartments -->|"integrates states"| node_solver
node_ode -->|"uses parameters"| node_epidemiology
node_ode -.->|"combines mobility"| node_mobility
node_graphmodels -.->|"uses mobility"| node_mobility
node_hybrid -.->|"combines model scales"| node_abm
node_user -->|"generates model"| node_generator
node_user -->|"trains surrogate"| node_surrogate
node_surrogate -->|"produces predictions"| node_results
node_user -->|"loads or saves"| node_cppio
node_cppio -->|"writes outputs"| node_results
node_user -->|"visualizes results"| node_plot
node_results -->|"provides series"| node_plot

click node_epidata "https://github.com/scicompmod/memilio/tree/main/pycode/memilio-epidata/memilio/epidata"
click node_cppio "https://github.com/scicompmod/memilio/tree/main/cpp/memilio/io"
click node_pythonapi "https://github.com/scicompmod/memilio/tree/main/pycode/memilio-simulation/memilio/simulation"
click node_bindings "https://github.com/scicompmod/memilio/tree/main/pycode/memilio-simulation/memilio/simulation/bindings"
click node_compartments "https://github.com/scicompmod/memilio/tree/main/cpp/memilio/compartments"
click node_solver "https://github.com/scicompmod/memilio/tree/main/cpp/memilio/math"
click node_epidemiology "https://github.com/scicompmod/memilio/tree/main/cpp/memilio/epidemiology"
click node_mobility "https://github.com/scicompmod/memilio/tree/main/cpp/memilio/mobility"
click node_ode "https://github.com/scicompmod/memilio/tree/main/cpp/models/ode_secir"
click node_ide "https://github.com/scicompmod/memilio/tree/main/cpp/models/ide_secir"
click node_lct "https://github.com/scicompmod/memilio/tree/main/cpp/models/lct_secir"
click node_abm "https://github.com/scicompmod/memilio/tree/main/cpp/models/abm"
click node_hybrid "https://github.com/scicompmod/memilio/tree/main/cpp/models/hybrid"
click node_graphmodels "https://github.com/scicompmod/memilio/tree/main/cpp/models/ode_seir_metapop"
click node_generator "https://github.com/scicompmod/memilio/tree/main/pycode/memilio-generation/memilio/generation"
click node_surrogate "https://github.com/scicompmod/memilio/tree/main/pycode/memilio-surrogatemodel/memilio/surrogatemodel"
click node_plot "https://github.com/scicompmod/memilio/tree/main/pycode/memilio-plot/memilio/plot"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_epidata,node_cppio toneBlue
class node_compartments,node_solver,node_epidemiology,node_mobility,node_sources toneAmber
class node_ode,node_ide,node_lct,node_abm,node_hybrid,node_graphmodels toneMint
class node_pythonapi,node_bindings,node_generator,node_plot toneRose
class node_surrogate,node_user,node_results toneIndigo
```

## Components

### Data preparation

- [Epidata utilities](https://github.com/scicompmod/memilio/tree/main/pycode/memilio-epidata/memilio/epidata): `pycode/memilio-epidata/memilio/epidata`
- [Data and result I/O](https://github.com/scicompmod/memilio/tree/main/cpp/memilio/io): `cpp/memilio/io`

### Simulation engine

- [Compartment framework](https://github.com/scicompmod/memilio/tree/main/cpp/memilio/compartments): `cpp/memilio/compartments`
- [Numerical solvers](https://github.com/scicompmod/memilio/tree/main/cpp/memilio/math): `cpp/memilio/math`
- [Epidemiology components](https://github.com/scicompmod/memilio/tree/main/cpp/memilio/epidemiology): `cpp/memilio/epidemiology`
- [Mobility modeling](https://github.com/scicompmod/memilio/tree/main/cpp/memilio/mobility): `cpp/memilio/mobility`

### Epidemic models

- [ODE models](https://github.com/scicompmod/memilio/tree/main/cpp/models/ode_secir): `cpp/models/ode_secir`
- [IDE models](https://github.com/scicompmod/memilio/tree/main/cpp/models/ide_secir): `cpp/models/ide_secir`
- [Linear-chain models](https://github.com/scicompmod/memilio/tree/main/cpp/models/lct_secir): `cpp/models/lct_secir`
- [Agent-based models](https://github.com/scicompmod/memilio/tree/main/cpp/models/abm): `cpp/models/abm`
- [Hybrid models](https://github.com/scicompmod/memilio/tree/main/cpp/models/hybrid): `cpp/models/hybrid`
- [Graph ODE models](https://github.com/scicompmod/memilio/tree/main/cpp/models/ode_seir_metapop): `cpp/models/ode_seir_metapop`

### Python tools

- [Python simulation API](https://github.com/scicompmod/memilio/tree/main/pycode/memilio-simulation/memilio/simulation): `pycode/memilio-simulation/memilio/simulation`
- [Python bindings](https://github.com/scicompmod/memilio/tree/main/pycode/memilio-simulation/memilio/simulation/bindings): `pycode/memilio-simulation/memilio/simulation/bindings`
- [Model generator](https://github.com/scicompmod/memilio/tree/main/pycode/memilio-generation/memilio/generation): `pycode/memilio-generation/memilio/generation`
- [Plotting utilities](https://github.com/scicompmod/memilio/tree/main/pycode/memilio-plot/memilio/plot): `pycode/memilio-plot/memilio/plot`

### Surrogate models

- [Surrogate training](https://github.com/scicompmod/memilio/tree/main/pycode/memilio-surrogatemodel/memilio/surrogatemodel): `pycode/memilio-surrogatemodel/memilio/surrogatemodel`

### Other components

- **Modeler**
- **Epidemiological sources**
- **Simulation results**

## Connections

- Epidemiological sources → Epidata utilities: provides data
- Modeler → Epidata utilities: prepares inputs
- Modeler → Python simulation API: configures run
- Epidata utilities → Python simulation API: supplies inputs
- Python simulation API → Python bindings: dispatches calls
- Python bindings → ODE models: invokes model
- Python bindings → Agent-based models: invokes model
- Python bindings → IDE models: invokes model
- Python bindings → Linear-chain models: invokes model
- ODE models → Compartment framework: uses framework
- IDE models → Compartment framework: uses framework
- Linear-chain models → Compartment framework: uses framework
- Agent-based models → Numerical solvers: uses numerical methods
- Compartment framework → Numerical solvers: integrates states
- ODE models → Epidemiology components: uses parameters
- ODE models → Mobility modeling: combines mobility
- Graph ODE models → Mobility modeling: uses mobility
- Hybrid models → Agent-based models: combines model scales
- Modeler → Model generator: generates model
- Modeler → Surrogate training: trains surrogate
- Surrogate training → Simulation results: produces predictions
- Modeler → Data and result I/O: loads or saves
- Data and result I/O → Simulation results: writes outputs
- Modeler → Plotting utilities: visualizes results
- Simulation results → Plotting utilities: provides series
