# jalani-dissanayake/traffic-flow-analyzer architecture

> Architecture diagram of the GitHub repository jalani-dissanayake/traffic-flow-analyzer, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jalani-dissanayake/traffic-flow-analyzer
- Repository: https://github.com/jalani-dissanayake/traffic-flow-analyzer

## Overview

Traffic Flow Analyzer is a command-line application for selecting a survey date, loading that date’s junction CSV, calculating traffic statistics, saving a text report, and opening a two-junction hourly histogram. The runtime is orchestrated by main(), which calls validation, loading, analysis, reporting, and visualization. The README also documents speed-limit detection, peak-hour identification, and CSV-based date selection; these are implemented within the analyzer and loader. Relationships below are grounded in the shown source and README; the data files’ contents were not inspected.

Main entry points: [`src/traffic_flow_analyzer/main.py`](https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/src/traffic_flow_analyzer/main.py) (Analysis workflow), [`src/traffic_flow_analyzer/reporting.py`](https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/src/traffic_flow_analyzer/reporting.py) (Text reporting), [`run.py`](https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/run.py) (CLI launcher), [`src/traffic_flow_analyzer/data_loader.py`](https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/src/traffic_flow_analyzer/data_loader.py) (CSV loader)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interaction["User interaction"]
  node_launcher["CLI launcher<br/>[run.py]"]
  node_workflow["Analysis workflow<br/>[main.py]"]
  node_validation["Date validation"]
end

subgraph group_processing["Traffic processing"]
  node_loader["CSV loader<br/>[data_loader.py]"]
  node_survey_csv["Survey CSV files"]
  node_analyzer["Traffic analysis<br/>[analysis.py]"]
end

subgraph group_outputs["Results and visualization"]
  node_reporting["Text reporting<br/>[reporting.py]"]
  node_results_file["Saved results<br/>[results.txt]"]
  node_histogram["Histogram GUI<br/>[histogram.py]"]
end

node_user(("User"))
node_tkinter["Tkinter GUI"]
node_terminal["Terminal"]

node_user -->|"starts"| node_launcher
node_launcher -->|"calls"| node_workflow
node_user -->|"enters date"| node_validation
node_workflow -->|"requests date"| node_validation
node_workflow -->|"loads CSV"| node_loader
node_loader -->|"reads"| node_survey_csv
node_workflow -->|"analyzes rows"| node_analyzer
node_analyzer -->|"returns results"| node_workflow
node_workflow -->|"prints and saves"| node_reporting
node_reporting -->|"prints results"| node_terminal
node_reporting -->|"appends report"| node_results_file
node_workflow -->|"opens histogram"| node_histogram
node_histogram -->|"creates GUI"| node_tkinter

click node_launcher "https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/run.py"
click node_workflow "https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/src/traffic_flow_analyzer/main.py"
click node_validation "https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/src/traffic_flow_analyzer/input_validation.py"
click node_loader "https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/src/traffic_flow_analyzer/data_loader.py"
click node_survey_csv "https://github.com/jalani-dissanayake/traffic-flow-analyzer/tree/main/data"
click node_analyzer "https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/src/traffic_flow_analyzer/analysis.py"
click node_reporting "https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/src/traffic_flow_analyzer/reporting.py"
click node_results_file "https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/outputs/results.txt"
click node_histogram "https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/src/traffic_flow_analyzer/histogram.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_launcher,node_workflow,node_validation,node_user,node_tkinter toneBlue
class node_loader,node_survey_csv,node_analyzer toneAmber
class node_reporting,node_results_file,node_histogram toneMint
class node_terminal toneIndigo
```

## Components

### User interaction

- [CLI launcher](https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/run.py): `run.py`
- [Analysis workflow](https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/src/traffic_flow_analyzer/main.py): `src/traffic_flow_analyzer/main.py`
- [Date validation](https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/src/traffic_flow_analyzer/input_validation.py): `src/traffic_flow_analyzer/input_validation.py`

### Traffic processing

- [CSV loader](https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/src/traffic_flow_analyzer/data_loader.py): `src/traffic_flow_analyzer/data_loader.py`
- [Survey CSV files](https://github.com/jalani-dissanayake/traffic-flow-analyzer/tree/main/data): `data`
- [Traffic analysis](https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/src/traffic_flow_analyzer/analysis.py): `src/traffic_flow_analyzer/analysis.py`

### Results and visualization

- [Text reporting](https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/src/traffic_flow_analyzer/reporting.py): `src/traffic_flow_analyzer/reporting.py`
- [Saved results](https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/outputs/results.txt): `outputs/results.txt`
- [Histogram GUI](https://github.com/jalani-dissanayake/traffic-flow-analyzer/blob/main/src/traffic_flow_analyzer/histogram.py): `src/traffic_flow_analyzer/histogram.py`

### Other components

- **User**
- **Tkinter GUI**
- **Terminal**

## Connections

- User → CLI launcher: starts (evidence: `README.md`)
- CLI launcher → Analysis workflow: calls (evidence: `run.py`)
- User → Date validation: enters date (evidence: `src/traffic_flow_analyzer/input_validation.py`)
- Analysis workflow → Date validation: requests date (evidence: `src/traffic_flow_analyzer/main.py`)
- Analysis workflow → CSV loader: loads CSV (evidence: `src/traffic_flow_analyzer/main.py`)
- CSV loader → Survey CSV files: reads (evidence: `src/traffic_flow_analyzer/data_loader.py`)
- Analysis workflow → Traffic analysis: analyzes rows (evidence: `src/traffic_flow_analyzer/main.py`)
- Traffic analysis → Analysis workflow: returns results (evidence: `src/traffic_flow_analyzer/main.py`)
- Analysis workflow → Text reporting: prints and saves (evidence: `src/traffic_flow_analyzer/main.py`)
- Text reporting → Terminal: prints results (evidence: `src/traffic_flow_analyzer/reporting.py`)
- Text reporting → Saved results: appends report (evidence: `src/traffic_flow_analyzer/reporting.py`)
- Analysis workflow → Histogram GUI: opens histogram (evidence: `src/traffic_flow_analyzer/main.py`)
- Histogram GUI → Tkinter GUI: creates GUI (evidence: `src/traffic_flow_analyzer/histogram.py`)
