Monte Carlo, DOE, RSM and Sobol sensitivity for the 150 mm concrete cube compressive test (CubeSpec / Sensitive-Spark thesis dashboard).
Project description
cubespec
Monte-Carlo, DOE, RSM and Sobol sensitivity for the 150 mm concrete cube compressive test — Python companion to the Sensitive-Spark dashboard, with a bit-for-bit parity contract against the TypeScript implementation.
Two front ends, one set of equations:
- 🌐 Web dashboard — React + TypeScript, runs in the browser, no install: https://app.ai-systems.today
- 🐍 Python package —
cubespec, this repo. Notebook-, CLI- and library-friendly.
Both implementations share the same surrogate model and PRNG
(mulberry32), so the same seed gives the same numbers in either
environment, validated by tests/test_parity.py at 1e-9 tolerance.
What it does
Given the Cube Specification Parameters (CSP) — material density,
geometry (dx, dy, dz) and forces (Fx, Fy, Fz) — cubespec computes
the three dependent outputs P7 (deformation), P8 (strain), and P9
(compressive strength) through a calibrated surrogate, and quantifies
how uncertainty propagates through it.
| Capability | Web dashboard | Python (cubespec) |
|---|---|---|
| Live Monte-Carlo with convergence tracking | ✅ | ✅ |
| Independent / LHS / correlated MVN sampling | ✅ | ✅ |
| Full & fractional 2^(k-p) factorial DOE (1/2, 1/4, 1/8) | ✅ | ✅ |
| Main, 2-way & 3-way interaction effects | ✅ | ✅ |
| Quadratic Response-Surface fit + 2-D contours | ✅ | ✅ |
| Sobol S1 / ST sensitivity (Saltelli scheme) | ✅ | ✅ |
| Percentile bootstrap CI (B = 1000) | ✅ | ✅ |
| Residual diagnostics (RMSE, MAE, R², Q-Q) | ✅ | ✅ |
| CSV / JSON export | ✅ | ✅ |
| CLI | – | ✅ |
| Calibrated surrogate (poly-2 ridge + residuals) | ✅ | ✅ |
Install
Until the first PyPI release, install directly from GitHub:
pip install "git+https://github.com/ai-systems-today/cubespec.git"
Or from a local clone (for development):
git clone https://github.com/ai-systems-today/cubespec.git
cd cubespec
pip install -e ".[plot,cli,dev]"
Once on PyPI:
# pip install cubespec
Quickstart — Python API
from cubespec import (
DEFAULT_CSP, sample_independent, compute_outputs_batch,
bootstrap_mean_ci, sobol_indices,
)
# 50 000-draw Monte-Carlo run on the default CSP
X = sample_independent(DEFAULT_CSP, n=50_000, seed=1337)
Y = compute_outputs_batch(X) # columns: P7, P8, P9
print(f"P9 mean: {Y[:, 2].mean():.2f} MPa")
# → P9 mean: 44.20 MPa (matches the dashboard at the same seed)
# 95 % bootstrap CI on the P9 mean
lo, hi = bootstrap_mean_ci(Y[:, 2], B=1000, seed=1337, alpha=0.05)
print(f"95% CI: [{lo:.2f}, {hi:.2f}] MPa")
# Sobol indices (Saltelli, base N = 1024)
print(sobol_indices(DEFAULT_CSP, n_base=1024))
Quickstart — CLI
# 50k Monte-Carlo run + report JSON
cubespec run --csp examples/default_csp.csv --n 50000 --output report.json
# Fractional 2^(7-3) factorial design
cubespec doe --csp examples/default_csp.csv --design fractional-1/8 --output design.csv
# Sobol sensitivity (Saltelli, base N = 1024)
cubespec sobol --csp examples/default_csp.csv --n 1024 --output sobol.csv
# Re-run a saved bundle from the dashboard's Reproduce button
cubespec replay run.json
Methods (1-page summary)
The surrogate is
σ = F / A A = dx · dy (engineering stress, MPa)
E ≈ 0.255 · ρ¹·⁵ (concrete stiffness law)
ε = σ / E (Hooke)
δ = ε · h h = dz (axial deformation)
with the disturbance term −0.5·(|Fy|+|Fz|)/A subtracted from σ to give P9.
Sampling. Independent Gaussian, Latin Hypercube (Owen-shuffled), or multivariate normal with a Cholesky factor of an editable correlation matrix.
DOE. Two-level full factorial (2⁷ = 128 runs) and fractional designs 2^(7-1) / 2^(7-2) / 2^(7-3) generated via pyDOE2 (Resolution VII / IV / IV). Effects estimated as the contrast of mean responses at coded ±1 levels.
RSM. Quadratic OLS on [1, xᵢ, xᵢxⱼ, xᵢ²]; 2-D contour grids over
any factor pair, others held at the run mean.
Sobol. Saltelli A/B/AB matrices; S1 and ST estimated via SALib. The default span is ±3σ around each parameter mean.
Confidence. Percentile bootstrap (B = 1000, seed 1337) on the P9 mean.
Full theory and references in the bilingual thesis at https://app.ai-systems.today/thesis.
Notebooks
Seventeen Jupyter notebooks in notebooks/ walk through
the full curriculum end-to-end:
| # | Topic |
|---|---|
| 01 | Quickstart |
| 02 | CSP I/O |
| 03 | Live controls |
| 04 | Sampling strategies |
| 05 | Correlation presets |
| 06 | Full factorial DOE |
| 07 | Fractional DOE |
| 08 | Multilevel DOE |
| 09 | DOE interactions |
| 10 | DOE with measurements |
| 11 | Sobol indices |
| 12 | Response Surface Methodology |
| 13 | Optimisation |
| 14 | Uncertainty & reliability |
| 15 | Calibrated vs analytic surrogate |
| 16 | Full report parity |
All seventeen execute end-to-end in CI on every push to main
(see notebooks.yml).
Reproducibility
The thesis bundle is reproducible three ways:
- In-app Reproduce button — open the dashboard at https://app.ai-systems.today, go to the Report tab, click Reproduce thesis bundle. Downloads a ZIP with every figure (PNG) and table (CSV) plus the commit SHA.
- Python CLI —
cubespec replay run.jsonre-executes a saved dashboard run. - Parity contract —
pytest tests/test_parity.pymatches the TypeScript fixtures bit-for-bit at1e-9tolerance.
Citation
Use CITATION.cff — GitHub renders a Cite this
repository button automatically. A Zenodo DOI will be minted with the
first PyPI release.
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cubespec-0.1.1.tar.gz.
File metadata
- Download URL: cubespec-0.1.1.tar.gz
- Upload date:
- Size: 58.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31d8ee98f58e6317f62c76296eba6f8cccf271a7efe61d4ffbbe6597b6a3e824
|
|
| MD5 |
f65e4f001b74b9c0eeb30c719f31b392
|
|
| BLAKE2b-256 |
7291027c2c69332087314408d9f3c25f219baadaa3ee9e8f206f94acab104d84
|
Provenance
The following attestation bundles were made for cubespec-0.1.1.tar.gz:
Publisher:
publish.yml on ai-systems-today/cubespec
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cubespec-0.1.1.tar.gz -
Subject digest:
31d8ee98f58e6317f62c76296eba6f8cccf271a7efe61d4ffbbe6597b6a3e824 - Sigstore transparency entry: 1396166351
- Sigstore integration time:
-
Permalink:
ai-systems-today/cubespec@a986fed5a94634b5194396565d5b1d270d2e9f15 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/ai-systems-today
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a986fed5a94634b5194396565d5b1d270d2e9f15 -
Trigger Event:
push
-
Statement type:
File details
Details for the file cubespec-0.1.1-py3-none-any.whl.
File metadata
- Download URL: cubespec-0.1.1-py3-none-any.whl
- Upload date:
- Size: 52.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1be4bdac285b7e26884f1205cd984717b6f341169d836657e4482ac74f6142d2
|
|
| MD5 |
ac82ca970d24c0f391e7306caabda8fe
|
|
| BLAKE2b-256 |
584f347d8e6732679d31ae0aba4ab0a6d79aa31b28fb8ffd9a853edb9a8a6141
|
Provenance
The following attestation bundles were made for cubespec-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on ai-systems-today/cubespec
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cubespec-0.1.1-py3-none-any.whl -
Subject digest:
1be4bdac285b7e26884f1205cd984717b6f341169d836657e4482ac74f6142d2 - Sigstore transparency entry: 1396166370
- Sigstore integration time:
-
Permalink:
ai-systems-today/cubespec@a986fed5a94634b5194396565d5b1d270d2e9f15 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/ai-systems-today
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a986fed5a94634b5194396565d5b1d270d2e9f15 -
Trigger Event:
push
-
Statement type: