# evg-g/region-presence architecture

> Architecture diagram of the GitHub repository evg-g/region-presence, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/evg-g/region-presence
- Repository: https://github.com/evg-g/region-presence

## Overview

region-presence is a real-time In A / In B / Outside classifier, with a configurable simulator and live or headless demonstration. The main workflow loads a TOML scenario, constructs simulated motion and noisy boundary-distance readings, classifies each sample, and displays or reports the result alongside ground truth. The classifier also accepts distance functions independently of the simulator. Relationships below follow sampled source and README statements; unsampled implementation details are not inferred.

Main entry points: [`src/region_presence/simulation.py`](https://github.com/evg-g/region-presence/blob/main/src/region_presence/simulation.py) (Simulation stream), [`src/region_presence/cli.py`](https://github.com/evg-g/region-presence/blob/main/src/region_presence/cli.py) (Command interface), [`src/region_presence/sensor.py`](https://github.com/evg-g/region-presence/blob/main/src/region_presence/sensor.py) (Simulated sensor), [`src/region_presence/classifier.py`](https://github.com/evg-g/region-presence/blob/main/src/region_presence/classifier.py) (Presence classifier)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["User entry"]
  node_cli["Command interface<br/>[cli.py]"]
  node_configuration["Scenario configuration<br/>[config.py]"]
end

subgraph group_classification["Classification"]
  node_classifier["Presence classifier<br/>[classifier.py]"]
end

subgraph group_simulation["Simulation"]
  node_geometry["Region geometry<br/>[regions.py]"]
  node_path["Waypoint trajectory<br/>[trajectory.py]"]
  node_speed["Variable speed<br/>[trajectory.py]"]
  node_sensor["Simulated sensor<br/>[sensor.py]"]
  node_simulation["Simulation stream<br/>[simulation.py]"]
  node_metrics["Accuracy metrics<br/>[simulation.py]"]
end

subgraph group_presentation["Presentation"]
  node_gui["Live view<br/>[live_view.py]"]
  node_console["Headless output<br/>[cli.py]"]
end

node_user(("User"))

node_user -->|"runs"| node_cli
node_cli -->|"loads"| node_configuration
node_cli -->|"constructs"| node_simulation
node_cli -->|"launches"| node_gui
node_cli -->|"runs headless"| node_console
node_simulation -->|"builds regions"| node_geometry
node_simulation -->|"builds path"| node_path
node_simulation -->|"creates process"| node_speed
node_simulation -->|"creates sensor"| node_sensor
node_simulation -->|"updates"| node_classifier
node_sensor -->|"queries distances"| node_geometry
node_sensor -->|"gets positions"| node_path
node_sensor -->|"steps process"| node_speed
node_classifier -->|"reads distances"| node_sensor
node_simulation -->|"records frames"| node_metrics
node_gui -->|"consumes frames"| node_simulation
node_console -->|"consumes frames"| node_simulation

click node_cli "https://github.com/evg-g/region-presence/blob/main/src/region_presence/cli.py"
click node_configuration "https://github.com/evg-g/region-presence/blob/main/src/region_presence/config.py"
click node_classifier "https://github.com/evg-g/region-presence/blob/main/src/region_presence/classifier.py"
click node_geometry "https://github.com/evg-g/region-presence/blob/main/src/region_presence/regions.py"
click node_path "https://github.com/evg-g/region-presence/blob/main/src/region_presence/trajectory.py"
click node_speed "https://github.com/evg-g/region-presence/blob/main/src/region_presence/trajectory.py"
click node_sensor "https://github.com/evg-g/region-presence/blob/main/src/region_presence/sensor.py"
click node_simulation "https://github.com/evg-g/region-presence/blob/main/src/region_presence/simulation.py"
click node_metrics "https://github.com/evg-g/region-presence/blob/main/src/region_presence/simulation.py"
click node_gui "https://github.com/evg-g/region-presence/blob/main/src/region_presence/live_view.py"
click node_console "https://github.com/evg-g/region-presence/blob/main/src/region_presence/cli.py"

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_cli,node_configuration,node_user toneBlue
class node_classifier toneAmber
class node_geometry,node_path,node_speed,node_sensor,node_simulation,node_metrics toneMint
class node_gui,node_console toneRose
```

## Components

### User entry

- [Command interface](https://github.com/evg-g/region-presence/blob/main/src/region_presence/cli.py): `src/region_presence/cli.py`
- [Scenario configuration](https://github.com/evg-g/region-presence/blob/main/src/region_presence/config.py): `src/region_presence/config.py`

### Classification

- [Presence classifier](https://github.com/evg-g/region-presence/blob/main/src/region_presence/classifier.py): `src/region_presence/classifier.py`

### Simulation

- [Region geometry](https://github.com/evg-g/region-presence/blob/main/src/region_presence/regions.py): `src/region_presence/regions.py`
- [Waypoint trajectory](https://github.com/evg-g/region-presence/blob/main/src/region_presence/trajectory.py): `src/region_presence/trajectory.py`
- [Variable speed](https://github.com/evg-g/region-presence/blob/main/src/region_presence/trajectory.py): `src/region_presence/trajectory.py`
- [Simulated sensor](https://github.com/evg-g/region-presence/blob/main/src/region_presence/sensor.py): `src/region_presence/sensor.py`
- [Simulation stream](https://github.com/evg-g/region-presence/blob/main/src/region_presence/simulation.py): `src/region_presence/simulation.py`
- [Accuracy metrics](https://github.com/evg-g/region-presence/blob/main/src/region_presence/simulation.py): `src/region_presence/simulation.py`

### Presentation

- [Live view](https://github.com/evg-g/region-presence/blob/main/src/region_presence/live_view.py): `src/region_presence/live_view.py`
- [Headless output](https://github.com/evg-g/region-presence/blob/main/src/region_presence/cli.py): `src/region_presence/cli.py`

### Other components

- **User**

## Connections

- User → Command interface: runs (evidence: `README.md`)
- Command interface → Scenario configuration: loads (evidence: `src/region_presence/cli.py`)
- Command interface → Simulation stream: constructs (evidence: `src/region_presence/cli.py`)
- Command interface → Live view: launches (evidence: `src/region_presence/cli.py`)
- Command interface → Headless output: runs headless (evidence: `src/region_presence/cli.py`)
- Simulation stream → Region geometry: builds regions (evidence: `src/region_presence/simulation.py`)
- Simulation stream → Waypoint trajectory: builds path (evidence: `src/region_presence/simulation.py`)
- Simulation stream → Variable speed: creates process (evidence: `src/region_presence/simulation.py`)
- Simulation stream → Simulated sensor: creates sensor (evidence: `src/region_presence/simulation.py`)
- Simulation stream → Presence classifier: updates (evidence: `src/region_presence/simulation.py`)
- Simulated sensor → Region geometry: queries distances (evidence: `src/region_presence/sensor.py`)
- Simulated sensor → Waypoint trajectory: gets positions (evidence: `src/region_presence/sensor.py`)
- Simulated sensor → Variable speed: steps process (evidence: `src/region_presence/sensor.py`)
- Presence classifier → Simulated sensor: reads distances (evidence: `README.md`)
- Simulation stream → Accuracy metrics: records frames (evidence: `src/region_presence/simulation.py`)
- Live view → Simulation stream: consumes frames (evidence: `src/region_presence/live_view.py`)
- Headless output → Simulation stream: consumes frames (evidence: `src/region_presence/cli.py`)
