# bullygen/gds architecture

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

- Interactive diagram: https://gitdiagram.com/bullygen/gds
- Repository: https://github.com/bullygen/gds

## Overview

GDS is a C++17 finite scheduling library with a Python interface; its main workflow models and compiles a problem, searches for a schedule, then independently checks feasibility. The repository also contains a distinct satellite-operations planner with event-driven simulation and multiobjective replanning. The graph preserves these documented capabilities, but some subsystem links use enclosing paths because their implementation was not sampled.

Main entry points: [`hackathon/solver/project.py`](https://github.com/bullygen/gds/blob/main/hackathon/solver/project.py) (Project and replanning), [`hackathon/solver/engine.py`](https://github.com/bullygen/gds/blob/main/hackathon/solver/engine.py) (GDE3 engine), [`include/gds/scheduling.hpp`](https://github.com/bullygen/gds/blob/main/include/gds/scheduling.hpp) (Schedule result), [`python/gds/__init__.py`](https://github.com/bullygen/gds/blob/main/python/gds/__init__.py) (Python API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_gds["GDS scheduling library"]
  node_pyapi["Python API<br/>[__init__.py]"]
  node_bindings["Python bindings"]
  node_problem["Problem model<br/>[scheduling.hpp]"]
  node_compile["Compile constraints<br/>[scheduling.cpp]"]
  node_network["GDS network<br/>[network.cpp]"]
  node_solvers["Search algorithms<br/>[solvers.cpp]"]
  node_schedule["Schedule result<br/>[scheduling.hpp]"]
  node_verify["Independent checks<br/>[scheduling.cpp]"]
end

subgraph group_hackathon["Satellite planner"]
  node_scenario["Scenario data"]
  node_session["Operations session<br/>[operations.py]"]
  node_environment["Resource environment<br/>[resource_env.py]"]
  node_project["Project and replanning<br/>[project.py]"]
  node_engine["GDE3 engine<br/>[engine.py]"]
  node_native["Native decoder<br/>[native.cpp]"]
  node_reports["Reports and metrics<br/>[reports.py]"]
  node_outputs["Planner results"]
end

subgraph group_visuals["Optional visualization"]
  node_plot["Schedule plots<br/>[__init__.py]"]
end

node_engineer(("Problem author"))
node_duration(("Duration provider"))

node_engineer -->|"defines problem"| node_pyapi
node_pyapi -->|"calls"| node_bindings
node_bindings -->|"exposes types"| node_problem
node_problem -->|"compiles"| node_compile
node_compile -->|"builds network"| node_network
node_compile -.->|"requests durations"| node_duration
node_pyapi -->|"invokes search"| node_solvers
node_solvers -->|"runs search"| node_network
node_solvers -->|"produces"| node_schedule
node_schedule -->|"checks feasibility"| node_verify
node_verify -->|"returns checked result"| node_schedule
node_schedule -.->|"renders"| node_plot
node_engineer -->|"provides scenario"| node_scenario
node_scenario -->|"initializes"| node_session
node_session -->|"advances state"| node_environment
node_engineer -->|"requests planning"| node_project
node_project -->|"replays and branches"| node_session
node_project -->|"requests replanning"| node_engine
node_engine -->|"validates resources"| node_environment
node_engine -->|"decodes genomes"| node_native
node_engine -->|"summarizes results"| node_reports
node_project -->|"generates reports"| node_reports
node_reports -->|"writes results"| node_outputs

click node_pyapi "https://github.com/bullygen/gds/blob/main/python/gds/__init__.py"
click node_bindings "https://github.com/bullygen/gds/tree/main/bindings"
click node_problem "https://github.com/bullygen/gds/blob/main/include/gds/scheduling.hpp"
click node_compile "https://github.com/bullygen/gds/blob/main/src/scheduling.cpp"
click node_network "https://github.com/bullygen/gds/blob/main/src/network.cpp"
click node_solvers "https://github.com/bullygen/gds/blob/main/src/solvers.cpp"
click node_schedule "https://github.com/bullygen/gds/blob/main/include/gds/scheduling.hpp"
click node_verify "https://github.com/bullygen/gds/blob/main/src/scheduling.cpp"
click node_plot "https://github.com/bullygen/gds/blob/main/python/gds_plot/__init__.py"
click node_scenario "https://github.com/bullygen/gds/tree/main/hackathon/data"
click node_session "https://github.com/bullygen/gds/blob/main/hackathon/model/operations.py"
click node_environment "https://github.com/bullygen/gds/blob/main/hackathon/model/resource_env.py"
click node_project "https://github.com/bullygen/gds/blob/main/hackathon/solver/project.py"
click node_engine "https://github.com/bullygen/gds/blob/main/hackathon/solver/engine.py"
click node_native "https://github.com/bullygen/gds/blob/main/hackathon/solver/native.cpp"
click node_reports "https://github.com/bullygen/gds/blob/main/hackathon/solver/reports.py"
click node_outputs "https://github.com/bullygen/gds/tree/main/hackathon/solver"

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_pyapi,node_bindings,node_problem,node_compile,node_network,node_solvers,node_schedule,node_verify toneBlue
class node_scenario,node_session,node_environment,node_project,node_engine,node_native,node_reports,node_outputs toneAmber
class node_plot toneMint
class node_engineer,node_duration toneIndigo
```

## Components

### GDS scheduling library

- [Python API](https://github.com/bullygen/gds/blob/main/python/gds/__init__.py): `python/gds/__init__.py`
- [Python bindings](https://github.com/bullygen/gds/tree/main/bindings): `bindings`
- [Problem model](https://github.com/bullygen/gds/blob/main/include/gds/scheduling.hpp): `include/gds/scheduling.hpp`
- [Compile constraints](https://github.com/bullygen/gds/blob/main/src/scheduling.cpp): `src/scheduling.cpp`
- [GDS network](https://github.com/bullygen/gds/blob/main/src/network.cpp): `src/network.cpp`
- [Search algorithms](https://github.com/bullygen/gds/blob/main/src/solvers.cpp): `src/solvers.cpp`
- [Schedule result](https://github.com/bullygen/gds/blob/main/include/gds/scheduling.hpp): `include/gds/scheduling.hpp`
- [Independent checks](https://github.com/bullygen/gds/blob/main/src/scheduling.cpp): `src/scheduling.cpp`

### Satellite planner

- [Scenario data](https://github.com/bullygen/gds/tree/main/hackathon/data): `hackathon/data`
- [Operations session](https://github.com/bullygen/gds/blob/main/hackathon/model/operations.py): `hackathon/model/operations.py`
- [Resource environment](https://github.com/bullygen/gds/blob/main/hackathon/model/resource_env.py): `hackathon/model/resource_env.py`
- [Project and replanning](https://github.com/bullygen/gds/blob/main/hackathon/solver/project.py): `hackathon/solver/project.py`
- [GDE3 engine](https://github.com/bullygen/gds/blob/main/hackathon/solver/engine.py): `hackathon/solver/engine.py`
- [Native decoder](https://github.com/bullygen/gds/blob/main/hackathon/solver/native.cpp): `hackathon/solver/native.cpp`
- [Reports and metrics](https://github.com/bullygen/gds/blob/main/hackathon/solver/reports.py): `hackathon/solver/reports.py`
- [Planner results](https://github.com/bullygen/gds/tree/main/hackathon/solver): `hackathon/solver`

### Optional visualization

- [Schedule plots](https://github.com/bullygen/gds/blob/main/python/gds_plot/__init__.py): `python/gds_plot/__init__.py`

### Other components

- **Problem author**
- **Duration provider**

## Connections

- Problem author → Python API: defines problem
- Python API → Python bindings: calls
- Python bindings → Problem model: exposes types
- Problem model → Compile constraints: compiles
- Compile constraints → GDS network: builds network
- Compile constraints → Duration provider: requests durations
- Python API → Search algorithms: invokes search
- Search algorithms → GDS network: runs search
- Search algorithms → Schedule result: produces
- Schedule result → Independent checks: checks feasibility
- Independent checks → Schedule result: returns checked result
- Schedule result → Schedule plots: renders
- Problem author → Scenario data: provides scenario
- Scenario data → Operations session: initializes
- Operations session → Resource environment: advances state
- Problem author → Project and replanning: requests planning
- Project and replanning → Operations session: replays and branches
- Project and replanning → GDE3 engine: requests replanning
- GDE3 engine → Resource environment: validates resources
- GDE3 engine → Native decoder: decodes genomes
- GDE3 engine → Reports and metrics: summarizes results
- Project and replanning → Reports and metrics: generates reports
- Reports and metrics → Planner results: writes results
