# narngisa/ideal-gas architecture

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

- Interactive diagram: https://gitdiagram.com/narngisa/ideal-gas
- Repository: https://github.com/narngisa/ideal-gas

## Overview

This is a small, dependency-free Python library for solving ideal-gas equations. A user imports the public API, supplies unit-wrapped values and optionally selects school-mode constants, then reads a calculated value from a formula object. The README documents four formula families and automatic conversions. The sampled implementation excerpt shows conversions, validation, constants and parts of the solvers; relationships among unsampled solver details are therefore limited to documented capabilities.

Main entry points: [`src/ideal_gas/__init__.py`](https://github.com/narngisa/ideal-gas/blob/main/src/ideal_gas/__init__.py) (Public API), [`src/ideal_gas/ideal_gas.py`](https://github.com/narngisa/ideal-gas/blob/main/src/ideal_gas/ideal_gas.py) (PVnRT solver)

## Diagram (Mermaid)

```mermaid
flowchart TD

node_user(("Library user"))
node_api["Public API<br/>[__init__.py]"]
node_units["Unit values<br/>[ideal_gas.py]"]
node_constants["Mode constants<br/>[ideal_gas.py]"]
node_pvnrt["PVnRT solver<br/>[ideal_gas.py]"]
node_pvgmrt["PVgMRT solver<br/>[ideal_gas.py]"]
node_pmdrt["PMdRT solver<br/>[ideal_gas.py]"]
node_pmrt["PMRT solver<br/>[ideal_gas.py]"]
node_result["Calculated value<br/>[ideal_gas.py]"]

node_user -->|"imports"| node_api
node_api -->|"exports"| node_units
node_api -->|"exports"| node_pvnrt
node_api -->|"exports"| node_pvgmrt
node_api -->|"exports"| node_pmdrt
node_api -->|"exports"| node_pmrt
node_user -->|"selects mode"| node_constants
node_pvnrt -->|"reads converted values"| node_units
node_pvgmrt -->|"reads converted values"| node_units
node_pmdrt -->|"reads converted values"| node_units
node_pmrt -->|"reads converted values"| node_units
node_pvnrt -->|"uses constant"| node_constants
node_pvgmrt -->|"uses constant"| node_constants
node_pmdrt -->|"uses constant"| node_constants
node_pmrt -->|"uses constant"| node_constants
node_user -->|"constructs and reads"| node_pvnrt
node_user -->|"constructs and reads"| node_pvgmrt
node_user -->|"constructs and reads"| node_pmdrt
node_user -->|"constructs and reads"| node_pmrt
node_pvnrt -->|"returns value"| node_result
node_pvgmrt -->|"returns value"| node_result
node_pmdrt -->|"returns value"| node_result
node_pmrt -->|"returns value"| node_result

click node_api "https://github.com/narngisa/ideal-gas/blob/main/src/ideal_gas/__init__.py"
click node_units "https://github.com/narngisa/ideal-gas/blob/main/src/ideal_gas/ideal_gas.py"
click node_constants "https://github.com/narngisa/ideal-gas/blob/main/src/ideal_gas/ideal_gas.py"
click node_pvnrt "https://github.com/narngisa/ideal-gas/blob/main/src/ideal_gas/ideal_gas.py"
click node_pvgmrt "https://github.com/narngisa/ideal-gas/blob/main/src/ideal_gas/ideal_gas.py"
click node_pmdrt "https://github.com/narngisa/ideal-gas/blob/main/src/ideal_gas/ideal_gas.py"
click node_pmrt "https://github.com/narngisa/ideal-gas/blob/main/src/ideal_gas/ideal_gas.py"
click node_result "https://github.com/narngisa/ideal-gas/blob/main/src/ideal_gas/ideal_gas.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_user toneBlue
class node_api toneMint
class node_units,node_constants,node_pvnrt,node_pvgmrt,node_pmdrt,node_pmrt,node_result toneTeal
```

## Components

### Other components

- **Library user**
- [Public API](https://github.com/narngisa/ideal-gas/blob/main/src/ideal_gas/__init__.py): `src/ideal_gas/__init__.py`
- [Unit values](https://github.com/narngisa/ideal-gas/blob/main/src/ideal_gas/ideal_gas.py): `src/ideal_gas/ideal_gas.py`
- [Mode constants](https://github.com/narngisa/ideal-gas/blob/main/src/ideal_gas/ideal_gas.py): `src/ideal_gas/ideal_gas.py`
- [PVnRT solver](https://github.com/narngisa/ideal-gas/blob/main/src/ideal_gas/ideal_gas.py): `src/ideal_gas/ideal_gas.py`
- [PVgMRT solver](https://github.com/narngisa/ideal-gas/blob/main/src/ideal_gas/ideal_gas.py): `src/ideal_gas/ideal_gas.py`
- [PMdRT solver](https://github.com/narngisa/ideal-gas/blob/main/src/ideal_gas/ideal_gas.py): `src/ideal_gas/ideal_gas.py`
- [PMRT solver](https://github.com/narngisa/ideal-gas/blob/main/src/ideal_gas/ideal_gas.py): `src/ideal_gas/ideal_gas.py`
- [Calculated value](https://github.com/narngisa/ideal-gas/blob/main/src/ideal_gas/ideal_gas.py): `src/ideal_gas/ideal_gas.py`

## Connections

- Library user → Public API: imports (evidence: `README.md`)
- Public API → Unit values: exports (evidence: `src/ideal_gas/__init__.py`)
- Public API → PVnRT solver: exports (evidence: `src/ideal_gas/__init__.py`)
- Public API → PVgMRT solver: exports (evidence: `src/ideal_gas/__init__.py`)
- Public API → PMdRT solver: exports (evidence: `src/ideal_gas/__init__.py`)
- Public API → PMRT solver: exports (evidence: `src/ideal_gas/__init__.py`)
- Library user → Mode constants: selects mode (evidence: `README.md`)
- PVnRT solver → Unit values: reads converted values (evidence: `src/ideal_gas/ideal_gas.py`)
- PVgMRT solver → Unit values: reads converted values (evidence: `src/ideal_gas/ideal_gas.py`)
- PMdRT solver → Unit values: reads converted values (evidence: `src/ideal_gas/ideal_gas.py`)
- PMRT solver → Unit values: reads converted values (evidence: `src/ideal_gas/ideal_gas.py`)
- PVnRT solver → Mode constants: uses constant (evidence: `src/ideal_gas/ideal_gas.py`)
- PVgMRT solver → Mode constants: uses constant (evidence: `src/ideal_gas/ideal_gas.py`)
- PMdRT solver → Mode constants: uses constant (evidence: `src/ideal_gas/ideal_gas.py`)
- PMRT solver → Mode constants: uses constant (evidence: `src/ideal_gas/ideal_gas.py`)
- Library user → PVnRT solver: constructs and reads (evidence: `README.md`)
- Library user → PVgMRT solver: constructs and reads (evidence: `README.md`)
- Library user → PMdRT solver: constructs and reads (evidence: `README.md`)
- Library user → PMRT solver: constructs and reads (evidence: `README.md`)
- PVnRT solver → Calculated value: returns value (evidence: `README.md`)
- PVgMRT solver → Calculated value: returns value (evidence: `README.md`)
- PMdRT solver → Calculated value: returns value (evidence: `README.md`)
- PMRT solver → Calculated value: returns value (evidence: `README.md`)
