# wzq-13/diffslack architecture

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

- Interactive diagram: https://gitdiagram.com/wzq-13/diffslack
- Repository: https://github.com/wzq-13/diffslack

## Overview

DiffSlack is a research framework for learning vehicle trajectories under nonlinear constraints, with a separate constrained-regression demo. The principal workflow generates maps and NMPC expert labels, loads planning samples, trains a prediction method, then evaluates or diagnoses projected trajectories. The graph preserves the documented DiffSlack, ENFORCE, imitation-learning, and DC3 branches. Source excerpts are partial, so uncertain internal call wiring is omitted; subsystem paths for capabilities documented but not sampled use their exact tree paths.

Main entry points: [`models/DiffSlack_Trainer.py`](https://github.com/wzq-13/diffslack/blob/main/models/DiffSlack_Trainer.py) (DiffSlack trainer), [`models/ENFORCE_Trainer.py`](https://github.com/wzq-13/diffslack/blob/main/models/ENFORCE_Trainer.py) (ENFORCE trainer), [`data_generator.py`](https://github.com/wzq-13/diffslack/blob/main/data_generator.py) (Map generation), [`DataLoader/dataload.py`](https://github.com/wzq-13/diffslack/blob/main/DataLoader/dataload.py) (Map dataset loader)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Planning data"]
  node_mapgen["Map generation<br/>[data_generator.py]"]
  node_shortest["Path search"]
  node_nmpc["NMPC labeling<br/>[data_generator.py]"]
  node_rawdata[("Raw map samples")]
  node_labels[("Expert labels")]
  node_maploader["Map dataset loader<br/>[dataload.py]"]
  node_ilload["IL dataset loader<br/>[dataload_IL.py]"]
end

subgraph group_learning["Trajectory learning"]
  node_diffentry["DiffSlack entry<br/>[DiffSlack.py]"]
  node_difftrainer["DiffSlack trainer"]
  node_enforceentry["ENFORCE entry<br/>[ENFORCE.py]"]
  node_enforcetrainer["ENFORCE trainer<br/>[ENFORCE_Trainer.py]"]
  node_ilentry["IL entry<br/>[IL.py]"]
  node_hardentry["Hard IL entry<br/>[IL_hard.py]"]
  node_iltrainer["IL trainers<br/>[IL_Trainer.py]"]
  node_hardtrainer["Hard IL trainer<br/>[IL_Hard_Trainer.py]"]
  node_dc3trainer["DC3 trainer<br/>[DC3_Trainer.py]"]
  node_dc3config["DC3 configuration<br/>[DC3.yaml]"]
end

subgraph group_constraints["Constraint methods"]
  node_network["Prediction networks<br/>[neural_networks.py]"]
  node_diffprojection["Slack projection<br/>[DiffSlack.py]"]
  node_enforceprojection["ENFORCE projection<br/>[ENFORCE.py]"]
  node_constraintsfn["Trajectory constraints<br/>[prob.py]"]
end

subgraph group_evaluation["Evaluation and demo"]
  node_evaluation["Trajectory evaluation"]
  node_demo["Regression comparison<br/>[demo_train.py]"]
  node_demoresult["Demo predictions"]
end

node_user(("Research user"))

node_user -->|"generate maps"| node_mapgen
node_mapgen -->|"search paths"| node_shortest
node_mapgen -->|"writes samples"| node_rawdata
node_user -->|"request labels"| node_nmpc
node_rawdata -->|"reads maps"| node_nmpc
node_nmpc -->|"writes labels"| node_labels
node_rawdata -->|"loads samples"| node_maploader
node_labels -->|"loads paths"| node_ilload
node_user -->|"train or evaluate"| node_diffentry
node_user -->|"train or evaluate"| node_enforceentry
node_user -->|"train baseline"| node_ilentry
node_user -->|"train baseline"| node_hardentry
node_maploader -->|"supplies data"| node_diffentry
node_maploader -->|"supplies data"| node_enforceentry
node_ilload -->|"supplies labels"| node_ilentry
node_ilload -->|"supplies labels"| node_hardentry
node_dc3config -->|"configures"| node_dc3trainer
node_difftrainer -->|"uses predictor"| node_network
node_enforcetrainer -->|"uses predictor"| node_network
node_difftrainer -->|"projects predictions"| node_diffprojection
node_enforcetrainer -->|"projects predictions"| node_enforceprojection
node_difftrainer -->|"evaluates constraints"| node_constraintsfn
node_enforcetrainer -->|"evaluates constraints"| node_constraintsfn
node_difftrainer -->|"evaluates trajectories"| node_evaluation
node_user -->|"run comparison"| node_demo
node_demo -->|"writes results"| node_demoresult

click node_mapgen "https://github.com/wzq-13/diffslack/blob/main/data_generator.py"
click node_shortest "https://github.com/wzq-13/diffslack/blob/main/others/dynamic_programming_heuristic.py"
click node_nmpc "https://github.com/wzq-13/diffslack/blob/main/data_generator.py"
click node_maploader "https://github.com/wzq-13/diffslack/blob/main/DataLoader/dataload.py"
click node_ilload "https://github.com/wzq-13/diffslack/blob/main/DataLoader/dataload_IL.py"
click node_diffentry "https://github.com/wzq-13/diffslack/blob/main/DiffSlack.py"
click node_difftrainer "https://github.com/wzq-13/diffslack/blob/main/models/DiffSlack_Trainer.py"
click node_enforceentry "https://github.com/wzq-13/diffslack/blob/main/ENFORCE.py"
click node_enforcetrainer "https://github.com/wzq-13/diffslack/blob/main/models/ENFORCE_Trainer.py"
click node_ilentry "https://github.com/wzq-13/diffslack/blob/main/IL.py"
click node_hardentry "https://github.com/wzq-13/diffslack/blob/main/IL_hard.py"
click node_iltrainer "https://github.com/wzq-13/diffslack/blob/main/models/IL_Trainer.py"
click node_hardtrainer "https://github.com/wzq-13/diffslack/blob/main/models/IL_Hard_Trainer.py"
click node_dc3trainer "https://github.com/wzq-13/diffslack/blob/main/models/DC3_Trainer.py"
click node_network "https://github.com/wzq-13/diffslack/blob/main/models/neural_networks.py"
click node_diffprojection "https://github.com/wzq-13/diffslack/blob/main/models/DiffSlack.py"
click node_enforceprojection "https://github.com/wzq-13/diffslack/blob/main/models/ENFORCE.py"
click node_constraintsfn "https://github.com/wzq-13/diffslack/blob/main/utils/prob.py"
click node_evaluation "https://github.com/wzq-13/diffslack/blob/main/models/DiffSlack_Trainer.py"
click node_demo "https://github.com/wzq-13/diffslack/blob/main/demo_train.py"
click node_dc3config "https://github.com/wzq-13/diffslack/blob/main/configs/DC3.yaml"

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_mapgen,node_shortest,node_nmpc,node_rawdata,node_labels,node_maploader,node_ilload,node_user toneBlue
class node_diffentry,node_difftrainer,node_enforceentry,node_enforcetrainer,node_ilentry,node_hardentry,node_iltrainer,node_hardtrainer,node_dc3trainer,node_dc3config toneAmber
class node_network,node_diffprojection,node_enforceprojection,node_constraintsfn toneMint
class node_evaluation,node_demo,node_demoresult toneRose
```

## Components

### Planning data

- [Map generation](https://github.com/wzq-13/diffslack/blob/main/data_generator.py): `data_generator.py`
- [Path search](https://github.com/wzq-13/diffslack/blob/main/others/dynamic_programming_heuristic.py): `others/dynamic_programming_heuristic.py`
- [NMPC labeling](https://github.com/wzq-13/diffslack/blob/main/data_generator.py): `data_generator.py`
- **Raw map samples**
- **Expert labels**
- [Map dataset loader](https://github.com/wzq-13/diffslack/blob/main/DataLoader/dataload.py): `DataLoader/dataload.py`
- [IL dataset loader](https://github.com/wzq-13/diffslack/blob/main/DataLoader/dataload_IL.py): `DataLoader/dataload_IL.py`

### Trajectory learning

- [DiffSlack entry](https://github.com/wzq-13/diffslack/blob/main/DiffSlack.py): `DiffSlack.py`
- [DiffSlack trainer](https://github.com/wzq-13/diffslack/blob/main/models/DiffSlack_Trainer.py): `models/DiffSlack_Trainer.py`
- [ENFORCE entry](https://github.com/wzq-13/diffslack/blob/main/ENFORCE.py): `ENFORCE.py`
- [ENFORCE trainer](https://github.com/wzq-13/diffslack/blob/main/models/ENFORCE_Trainer.py): `models/ENFORCE_Trainer.py`
- [IL entry](https://github.com/wzq-13/diffslack/blob/main/IL.py): `IL.py`
- [Hard IL entry](https://github.com/wzq-13/diffslack/blob/main/IL_hard.py): `IL_hard.py`
- [IL trainers](https://github.com/wzq-13/diffslack/blob/main/models/IL_Trainer.py): `models/IL_Trainer.py`
- [Hard IL trainer](https://github.com/wzq-13/diffslack/blob/main/models/IL_Hard_Trainer.py): `models/IL_Hard_Trainer.py`
- [DC3 trainer](https://github.com/wzq-13/diffslack/blob/main/models/DC3_Trainer.py): `models/DC3_Trainer.py`
- [DC3 configuration](https://github.com/wzq-13/diffslack/blob/main/configs/DC3.yaml): `configs/DC3.yaml`

### Constraint methods

- [Prediction networks](https://github.com/wzq-13/diffslack/blob/main/models/neural_networks.py): `models/neural_networks.py`
- [Slack projection](https://github.com/wzq-13/diffslack/blob/main/models/DiffSlack.py): `models/DiffSlack.py`
- [ENFORCE projection](https://github.com/wzq-13/diffslack/blob/main/models/ENFORCE.py): `models/ENFORCE.py`
- [Trajectory constraints](https://github.com/wzq-13/diffslack/blob/main/utils/prob.py): `utils/prob.py`

### Evaluation and demo

- [Trajectory evaluation](https://github.com/wzq-13/diffslack/blob/main/models/DiffSlack_Trainer.py): `models/DiffSlack_Trainer.py`
- [Regression comparison](https://github.com/wzq-13/diffslack/blob/main/demo_train.py): `demo_train.py`
- **Demo predictions**

### Other components

- **Research user**

## Connections

- Research user → Map generation: generate maps
- Map generation → Path search: search paths
- Map generation → Raw map samples: writes samples
- Research user → NMPC labeling: request labels
- Raw map samples → NMPC labeling: reads maps
- NMPC labeling → Expert labels: writes labels
- Raw map samples → Map dataset loader: loads samples
- Expert labels → IL dataset loader: loads paths
- Research user → DiffSlack entry: train or evaluate
- Research user → ENFORCE entry: train or evaluate
- Research user → IL entry: train baseline
- Research user → Hard IL entry: train baseline
- Map dataset loader → DiffSlack entry: supplies data
- Map dataset loader → ENFORCE entry: supplies data
- IL dataset loader → IL entry: supplies labels
- IL dataset loader → Hard IL entry: supplies labels
- DC3 configuration → DC3 trainer: configures
- DiffSlack trainer → Prediction networks: uses predictor
- ENFORCE trainer → Prediction networks: uses predictor
- DiffSlack trainer → Slack projection: projects predictions
- ENFORCE trainer → ENFORCE projection: projects predictions
- DiffSlack trainer → Trajectory constraints: evaluates constraints
- ENFORCE trainer → Trajectory constraints: evaluates constraints
- DiffSlack trainer → Trajectory evaluation: evaluates trajectories
- Research user → Regression comparison: run comparison
- Regression comparison → Demo predictions: writes results
