# nlmhoagn/probability-statistics-project architecture

> Architecture diagram of the GitHub repository nlmhoagn/probability-statistics-project, 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/nlmhoagn/probability-statistics-project
- Repository: https://github.com/nlmhoagn/probability-statistics-project

## Overview

This repository is a reproducibility package for a two-factor password brute-force experiment: it measures SHA-256 search attempts and time across password lengths and character-set sizes, then validates and analyzes those observations for reporting. The main workflow runs from collection through preprocessing, statistical analysis, visualization, and workbook export. Separate documented capabilities include an equivalent R analysis and optional PDF report figures. Relationships reflect the documented pipeline and shown file reads; unsampled implementation details are not inferred.

Main entry points: [`run_all.py`](https://github.com/nlmhoagn/probability-statistics-project/blob/main/run_all.py) (Pipeline Runner), [`data/processed_experiment_data.csv`](https://github.com/nlmhoagn/probability-statistics-project/blob/main/data/processed_experiment_data.csv) (Processed Observations), [`02_clean_and_preprocess.py`](https://github.com/nlmhoagn/probability-statistics-project/blob/main/02_clean_and_preprocess.py) (Validation and Features), [`05_export_excel.py`](https://github.com/nlmhoagn/probability-statistics-project/blob/main/05_export_excel.py) (Excel Exporter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experiment["Experiment Design"]
  node_orchestrator["Pipeline Runner<br/>[run_all.py]"]
  node_design["Experiment Configuration<br/>[config.py]"]
  node_collector["Brute-Force Trials<br/>[01_collect_data.py]"]
end

subgraph group_data["Data Handling"]
  node_rawdata["Raw Observations"]
  node_preprocessor["Validation and Features"]
  node_processed["Processed Observations"]
  node_preport["Preprocessing Report"]
end

subgraph group_analysis["Statistical Reporting"]
  node_statanalysis["Statistical Analysis"]
  node_r_analysis["Equivalent R Analysis<br/>[analysis.R]"]
  node_results["Analysis Results"]
end

subgraph group_outputs["Reports and Exports"]
  node_visualizer["TikZ Visualization<br/>[04_visualize.py]"]
  node_tikz["TikZ Figures"]
  node_reportfigs["PDF Report Figures<br/>[make_figures.py]"]
  node_pdfs["PDF Figure Outputs"]
  node_exporter["Excel Exporter<br/>[05_export_excel.py]"]
  node_workbook["Excel Workbook"]
end

node_researcher(("Researcher"))

node_researcher -->|"starts pipeline"| node_orchestrator
node_researcher -->|"collects trials"| node_collector
node_orchestrator -->|"runs first"| node_collector
node_orchestrator -->|"runs next"| node_preprocessor
node_orchestrator -->|"runs next"| node_statanalysis
node_orchestrator -->|"runs next"| node_visualizer
node_orchestrator -->|"runs last"| node_exporter
node_collector -->|"reads settings"| node_design
node_preprocessor -->|"reads settings"| node_design
node_collector -->|"writes observations"| node_rawdata
node_rawdata -->|"supplies rows"| node_preprocessor
node_preprocessor -->|"writes features"| node_processed
node_preprocessor -->|"writes validation report"| node_preport
node_processed -->|"supplies observations"| node_statanalysis
node_statanalysis -->|"writes analyses"| node_results
node_processed -->|"supplies observations"| node_visualizer
node_results -->|"supplies summary"| node_visualizer
node_visualizer -->|"writes figures"| node_tikz
node_processed -->|"supplies observations"| node_reportfigs
node_reportfigs -->|"loads t critical value"| node_statanalysis
node_reportfigs -->|"writes PDFs and PNGs"| node_pdfs
node_results -->|"supplies tables"| node_exporter
node_processed -->|"supplies processed rows"| node_exporter
node_rawdata -->|"supplies raw rows"| node_exporter
node_exporter -->|"writes workbook"| node_workbook

click node_orchestrator "https://github.com/nlmhoagn/probability-statistics-project/blob/main/run_all.py"
click node_design "https://github.com/nlmhoagn/probability-statistics-project/blob/main/config.py"
click node_collector "https://github.com/nlmhoagn/probability-statistics-project/blob/main/01_collect_data.py"
click node_rawdata "https://github.com/nlmhoagn/probability-statistics-project/blob/main/data/raw_experiment_data.csv"
click node_preprocessor "https://github.com/nlmhoagn/probability-statistics-project/blob/main/02_clean_and_preprocess.py"
click node_processed "https://github.com/nlmhoagn/probability-statistics-project/blob/main/data/processed_experiment_data.csv"
click node_preport "https://github.com/nlmhoagn/probability-statistics-project/blob/main/logs/preprocessing_report.json"
click node_statanalysis "https://github.com/nlmhoagn/probability-statistics-project/blob/main/03_statistical_analysis.py"
click node_r_analysis "https://github.com/nlmhoagn/probability-statistics-project/blob/main/analysis.R"
click node_results "https://github.com/nlmhoagn/probability-statistics-project/tree/main/results"
click node_visualizer "https://github.com/nlmhoagn/probability-statistics-project/blob/main/04_visualize.py"
click node_tikz "https://github.com/nlmhoagn/probability-statistics-project/tree/main/figures"
click node_reportfigs "https://github.com/nlmhoagn/probability-statistics-project/blob/main/report_figures/make_figures.py"
click node_pdfs "https://github.com/nlmhoagn/probability-statistics-project/tree/main/report_figures/output"
click node_exporter "https://github.com/nlmhoagn/probability-statistics-project/blob/main/05_export_excel.py"
click node_workbook "https://github.com/nlmhoagn/probability-statistics-project/blob/main/data/MT2013_CC09_Data.xlsx"

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_orchestrator,node_design,node_collector toneBlue
class node_rawdata,node_preprocessor,node_processed,node_preport toneAmber
class node_statanalysis,node_r_analysis,node_results toneMint
class node_visualizer,node_tikz,node_reportfigs,node_pdfs,node_exporter,node_workbook toneRose
class node_researcher toneIndigo
```

## Components

### Experiment Design

- [Pipeline Runner](https://github.com/nlmhoagn/probability-statistics-project/blob/main/run_all.py): `run_all.py`
- [Experiment Configuration](https://github.com/nlmhoagn/probability-statistics-project/blob/main/config.py): `config.py`
- [Brute-Force Trials](https://github.com/nlmhoagn/probability-statistics-project/blob/main/01_collect_data.py): `01_collect_data.py`

### Data Handling

- [Raw Observations](https://github.com/nlmhoagn/probability-statistics-project/blob/main/data/raw_experiment_data.csv): `data/raw_experiment_data.csv`
- [Validation and Features](https://github.com/nlmhoagn/probability-statistics-project/blob/main/02_clean_and_preprocess.py): `02_clean_and_preprocess.py`
- [Processed Observations](https://github.com/nlmhoagn/probability-statistics-project/blob/main/data/processed_experiment_data.csv): `data/processed_experiment_data.csv`
- [Preprocessing Report](https://github.com/nlmhoagn/probability-statistics-project/blob/main/logs/preprocessing_report.json): `logs/preprocessing_report.json`

### Statistical Reporting

- [Statistical Analysis](https://github.com/nlmhoagn/probability-statistics-project/blob/main/03_statistical_analysis.py): `03_statistical_analysis.py`
- [Equivalent R Analysis](https://github.com/nlmhoagn/probability-statistics-project/blob/main/analysis.R): `analysis.R`
- [Analysis Results](https://github.com/nlmhoagn/probability-statistics-project/tree/main/results): `results`

### Reports and Exports

- [TikZ Visualization](https://github.com/nlmhoagn/probability-statistics-project/blob/main/04_visualize.py): `04_visualize.py`
- [TikZ Figures](https://github.com/nlmhoagn/probability-statistics-project/tree/main/figures): `figures`
- [PDF Report Figures](https://github.com/nlmhoagn/probability-statistics-project/blob/main/report_figures/make_figures.py): `report_figures/make_figures.py`
- [PDF Figure Outputs](https://github.com/nlmhoagn/probability-statistics-project/tree/main/report_figures/output): `report_figures/output`
- [Excel Exporter](https://github.com/nlmhoagn/probability-statistics-project/blob/main/05_export_excel.py): `05_export_excel.py`
- [Excel Workbook](https://github.com/nlmhoagn/probability-statistics-project/blob/main/data/MT2013_CC09_Data.xlsx): `data/MT2013_CC09_Data.xlsx`

### Other components

- **Researcher**

## Connections

- Researcher → Pipeline Runner: starts pipeline (evidence: `README.md`)
- Researcher → Brute-Force Trials: collects trials (evidence: `README.md`)
- Pipeline Runner → Brute-Force Trials: runs first (evidence: `run_all.py`)
- Pipeline Runner → Validation and Features: runs next (evidence: `run_all.py`)
- Pipeline Runner → Statistical Analysis: runs next (evidence: `run_all.py`)
- Pipeline Runner → TikZ Visualization: runs next (evidence: `run_all.py`)
- Pipeline Runner → Excel Exporter: runs last (evidence: `run_all.py`)
- Brute-Force Trials → Experiment Configuration: reads settings (evidence: `01_collect_data.py`)
- Validation and Features → Experiment Configuration: reads settings (evidence: `02_clean_and_preprocess.py`)
- Brute-Force Trials → Raw Observations: writes observations (evidence: `01_collect_data.py`)
- Raw Observations → Validation and Features: supplies rows (evidence: `02_clean_and_preprocess.py`)
- Validation and Features → Processed Observations: writes features (evidence: `02_clean_and_preprocess.py`)
- Validation and Features → Preprocessing Report: writes validation report (evidence: `02_clean_and_preprocess.py`)
- Processed Observations → Statistical Analysis: supplies observations (evidence: `03_statistical_analysis.py`)
- Statistical Analysis → Analysis Results: writes analyses (evidence: `README.md`)
- Processed Observations → TikZ Visualization: supplies observations (evidence: `04_visualize.py`)
- Analysis Results → TikZ Visualization: supplies summary (evidence: `04_visualize.py`)
- TikZ Visualization → TikZ Figures: writes figures (evidence: `04_visualize.py`)
- Processed Observations → PDF Report Figures: supplies observations (evidence: `report_figures/make_figures.py`)
- PDF Report Figures → Statistical Analysis: loads t critical value (evidence: `report_figures/make_figures.py`)
- PDF Report Figures → PDF Figure Outputs: writes PDFs and PNGs (evidence: `report_figures/make_figures.py`)
- Analysis Results → Excel Exporter: supplies tables (evidence: `05_export_excel.py`)
- Processed Observations → Excel Exporter: supplies processed rows (evidence: `05_export_excel.py`)
- Raw Observations → Excel Exporter: supplies raw rows (evidence: `05_export_excel.py`)
- Excel Exporter → Excel Workbook: writes workbook (evidence: `README.md`)
