Metadata-Version: 2.4
Name: engineeringkit
Version: 0.1.0
Summary: Inspectable computational engineering for learning and teaching.
Author-email: Charles Poli <cpoli374@gmail.com>
Maintainer-email: Charles Poli <cpoli374@gmail.com>
License: MIT
Project-URL: Homepage, https://github.com/cpoli/engineeringkit
Project-URL: Documentation, https://cpoli.github.io/engineeringkit/
Project-URL: Issues, https://github.com/cpoli/engineeringkit/issues
Project-URL: Changelog, https://github.com/cpoli/engineeringkit/blob/main/CHANGELOG.md
Keywords: engineering,computational-engineering,education,control-systems,structural-engineering,thermodynamics,heat-transfer,signal-processing
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Education
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Education
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy>=1.24
Requires-Dist: scipy>=1.10
Requires-Dist: matplotlib>=3.6
Provides-Extra: test
Requires-Dist: pytest>=7; extra == "test"
Requires-Dist: pytest-cov; extra == "test"
Provides-Extra: docs
Requires-Dist: sphinx-design>=0.6; extra == "docs"
Requires-Dist: sphinx-gallery>=0.19; extra == "docs"
Requires-Dist: sphinx-autodoc-typehints>=2; extra == "docs"
Requires-Dist: sphinx>=7; extra == "docs"
Requires-Dist: pydata-sphinx-theme>=0.15; extra == "docs"
Requires-Dist: myst-parser>=2; extra == "docs"
Requires-Dist: jupyterlite-sphinx>=0.17; extra == "docs"
Requires-Dist: jupyterlite-pyodide-kernel>=0.4; extra == "docs"
Requires-Dist: sphinx-sitemap>=2.6; extra == "docs"
Requires-Dist: sphinxext-opengraph>=0.9; extra == "docs"
Provides-Extra: dev
Requires-Dist: sphinx-design>=0.6; extra == "dev"
Requires-Dist: sphinx-sitemap>=2.6; extra == "dev"
Requires-Dist: sphinxext-opengraph>=0.9; extra == "dev"
Requires-Dist: sphinx-gallery>=0.19; extra == "dev"
Requires-Dist: sphinx-autodoc-typehints>=2; extra == "dev"
Requires-Dist: pytest>=7; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: sphinx>=7; extra == "dev"
Requires-Dist: pydata-sphinx-theme>=0.15; extra == "dev"
Requires-Dist: jupyterlite-sphinx>=0.17; extra == "dev"
Requires-Dist: jupyterlite-pyodide-kernel>=0.4; extra == "dev"
Requires-Dist: ruff>=0.6; extra == "dev"
Requires-Dist: mypy>=1.10; extra == "dev"
Requires-Dist: build>=1.2; extra == "dev"
Dynamic: license-file

# engineeringkit

[![PyPI version](https://badgen.net/pypi/v/engineeringkit)](https://pypi.org/project/engineeringkit/) [![Python versions](https://badgen.net/pypi/python/engineeringkit)](https://pypi.org/project/engineeringkit/) [![License](https://img.shields.io/github/license/cpoli/engineeringkit)](https://github.com/cpoli/engineeringkit/blob/main/LICENSE) [![CI](https://github.com/cpoli/engineeringkit/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/cpoli/engineeringkit/actions/workflows/ci.yml) [![Docs](https://badgen.net/badge/docs/cpoli.github.io%2Fengineeringkit/blue)](https://cpoli.github.io/engineeringkit/) [![Ruff](https://badgen.net/badge/code%20style/ruff/purple)](https://github.com/astral-sh/ruff)

**Engineering concepts made computable → inspectable → visualizable → understandable.**

EngineeringKit is an educational scientific-Python toolkit following the design philosophy of MathematicsKit: explicit intermediate results, NumPy/SciPy for mature numerics, and hand-written formulas/algorithms where seeing the mechanics is the lesson. SI units are used by public APIs.

## Install
```bash
pip install engineeringkit
```

## Beam
```python
from engineeringkit.structural_engineering import SimplySupportedBeam

beam = SimplySupportedBeam(5.0, 200e9, 8e-6)
r = beam.solve_point_load(10_000)
print(r.summary())
r.plot()
```

## PID
```python
from scipy import signal
from engineeringkit.control_systems import PID

plant = signal.TransferFunction([1], [1, 2, 1])
r = PID(3, 1, 0.2).simulate(plant)
r.plot()
```

## RLC
```python
from engineeringkit.electrical_engineering import SeriesRLC

r = SeriesRLC(10, 0.1, 100e-6).step_response()
r.plot()
```

## Thermodynamics
```python
from engineeringkit.thermodynamics import OttoCycle

print(OttoCycle(10).summary())
```

## Pipe flow
```python
from engineeringkit.fluid_engineering import reynolds_number, colebrook_friction_factor

Re = reynolds_number(998, 2, 0.05, 1.002e-3)
f = colebrook_friction_factor(Re, 1e-4)
```

## Release scope (v0.1)

All twelve domains include executable educational models. Version 0.1 adds
physical input validation, independent conservation/analytical/distribution
benchmarks, public scalar API units, and twelve detailed model guides. It also
corrects RLC current response, FM phase integration and unsigned modulation,
and improves numerical limiting cases. See `docs/source/guides/` for model
assumptions and `VERIFICATION.md` for the actual test/build evidence.

Documentation: <https://cpoli.github.io/engineeringkit/>. To cite
engineeringkit, use `CITATION.cff` (GitHub's "Cite this repository").

## Inspect a numerical method

```python
import numpy as np
from engineeringkit.integrators import integrate_ode

result = integrate_ode(lambda t, y: -y, [1.0], np.linspace(0, 2, 101), "rk4")
print(result.summary())
fig, ax = result.plot(["normalized state"])
```

## Verify locally

```bash
python -m pip install -e '.[dev]'
MPLBACKEND=Agg python -m pytest
python -m ruff check .
python -m ruff format --check .
python -m sphinx -W --keep-going -b html docs/source docs/_build/html
python -m build
```

## Coverage requirement

Run the suite with production statement coverage:

```bash
MPLBACKEND=Agg python -m pytest --cov=engineeringkit --cov-report=term-missing
```

The report enforces 100% statement coverage. Test modules are excluded from the
coverage denominator; all production modules, private validation helpers,
constants, units, plotting and integration code are included. No production
statements are marked with coverage-ignore pragmas. This measures statement
execution, not 100% branch coverage or proof of scientific correctness.

## Documentation navigation

Documentation now follows MathematicsKit's domain-first architecture: Subpackages,
History, Examples and API. Each domain hub links all three learning paths; grouped
cards and cross-links are generated from one registry in `docs/source/conf.py`.
Executed galleries come from `examples/<domain>/`, and detailed SI/assumption
guides remain linked from the galleries and domain hubs. See `docs/README.md`.

The MathematicsKit-style Sphinx navigation connects twelve domain hubs to
History, Examples and API pages. History pages explain key equations and limits;
24 plotted gallery scripts include twelve explicit benchmark demonstrations.
