Home Developers CVP Evidence Reproduce

CVP reproduce

mechanical.statics.plastic_moment

Independent re-run pack: fixed input vectors, O3 expected values, oracle version, commands, and the last result summary. This is how a reader moves from “CalculatorX says it passed” to “I can reproduce why it passed.”

Identity

Calculation version, protocol version, and evidence revision are distinct.

Calculation version
1.0.0
CVP protocol
1.0.0-proposed · proposed
Evidence revision
2026-09-27.o2-o3
Oracle
O3 · mpmath 1.4.1 · 80 dps
Generator
plastic-moment-mpmath-o3 · seed 20260927.plastic-moment-o3
Table SHA-256
5645808124b39ef1383ee3476d8048e610ac808088a83558528854dcbe3aa95c

Numerical claim

O3 PASS is a tabulated-vector claim, not a whole-domain proof.

O2: Mp = σ_y Z vs a separate-module identity (≤2 ULP). Not elastic S, not transverse shear, and not beam deflection. ≤2 ULP vs O3 applies only to the published tabulated plastic-moment vectors. Not elastic S.

  • Last O3 run 8 / 8
  • Max error observed 0 ULP
  • Threshold ≤ 2 ULP

Commands

Regenerate the table from the public generator. Independent REST check needs only this page's reproduce.json plus stdlib Python — no repo clone and no mpmath. The CVP runner remains a maintainer command.

Regenerate O3 table
python3 generate-plastic-moment-o3.py after downloading the public generator next to the table
Repo maintainer path
python3 scripts/lib/cvp/oracles/generate-plastic-moment-o3.py
Independent REST check
Compare POST /api/v1/calc/plastic-moment against /developers/cvp/reproduce/plastic-moment-o3-tables.json after downloading check-math-o3-rest.py next to plastic-moment-o3-tables.json (or pass --reproduce reproduce.json)
Re-run CVP
npm run cvp:run -- --capability mechanical.statics.plastic_moment
REST check
POST https://www.calculatorx.com/api/v1/calc/plastic-moment with a tabulated input from the table below

Re-running the generator without changing seed or inputs should reproduce table SHA-256 5645808124b39ef1383ee3476d8048e610ac808088a83558528854dcbe3aa95c. Compare each expected_f64 to the production result within the declared ULP threshold.

Tabulated vectors

Every O3 vector used for the ≤2 ULP claim. Expected values come from the published mpmath table, not from the implementation under test.

IDKindInputsExpected (f64)ActualULPStatus
o3-unitunit{"sigma_y":"250","Z":"18"}{"oracle_layer":"analytic","Mp":4500,"sigma_y":250,"Z":18}{"model":"plastic_moment","sigma_y":250,"Z":18,"Mp":4500,"solver":"plastic moment","convention":"Mp = σ_y Z on one centroidal axis. Z comes from a plastic-modulus page. This page does not rebuild the section. Transverse shear is its own page."}0PASS
o3-SISI{"sigma_y":"250e6","Z":"8e-6"}{"oracle_layer":"analytic","Mp":2000,"sigma_y":250000000,"Z":0.000008}{"model":"plastic_moment","sigma_y":250000000,"Z":0.000008,"Mp":2000,"solver":"plastic moment","convention":"Mp = σ_y Z on one centroidal axis. Z comes from a plastic-modulus page. This page does not rebuild the section. Transverse shear is its own page."}0PASS
o3-aliasalias{"Fy":"300","plastic_modulus":"12"}{"oracle_layer":"analytic","Mp":3600,"sigma_y":300,"Z":12}{"model":"plastic_moment","sigma_y":300,"Z":12,"Mp":3600,"solver":"plastic moment","convention":"Mp = σ_y Z on one centroidal axis. Z comes from a plastic-modulus page. This page does not rebuild the section. Transverse shear is its own page."}0PASS
o3-awkwardawkward{"sigma_y":"255.5","Z":"17.25"}{"oracle_layer":"analytic","Mp":4407.375,"sigma_y":255.5,"Z":17.25}{"model":"plastic_moment","sigma_y":255.5,"Z":17.25,"Mp":4407.375,"solver":"plastic moment","convention":"Mp = σ_y Z on one centroidal axis. Z comes from a plastic-modulus page. This page does not rebuild the section. Transverse shear is its own page."}0PASS
o3-ZxZx{"sigma_y":"400","Zx":"10"}{"oracle_layer":"analytic","Mp":4000,"sigma_y":400,"Z":10}{"model":"plastic_moment","sigma_y":400,"Z":10,"Mp":4000,"solver":"plastic moment","convention":"Mp = σ_y Z on one centroidal axis. Z comes from a plastic-modulus page. This page does not rebuild the section. Transverse shear is its own page."}0PASS
o3-smallsmall{"sigma_y":"0.5","Z":"0.02"}{"oracle_layer":"analytic","Mp":0.01,"sigma_y":0.5,"Z":0.02}{"model":"plastic_moment","sigma_y":0.5,"Z":0.02,"Mp":0.01,"solver":"plastic moment","convention":"Mp = σ_y Z on one centroidal axis. Z comes from a plastic-modulus page. This page does not rebuild the section. Transverse shear is its own page."}0PASS
o3-largelarge{"sigma_y":"1e9","Z":"1e-3"}{"oracle_layer":"analytic","Mp":1000000,"sigma_y":1000000000,"Z":0.001}{"model":"plastic_moment","sigma_y":1000000000,"Z":0.001,"Mp":1000000,"solver":"plastic moment","convention":"Mp = σ_y Z on one centroidal axis. Z comes from a plastic-modulus page. This page does not rebuild the section. Transverse shear is its own page."}0PASS
o3-mildmild{"sigma_y":"36","Z":"100"}{"oracle_layer":"analytic","Mp":3600,"sigma_y":36,"Z":100}{"model":"plastic_moment","sigma_y":36,"Z":100,"Mp":3600,"solver":"plastic moment","convention":"Mp = σ_y Z on one centroidal axis. Z comes from a plastic-modulus page. This page does not rebuild the section. Transverse shear is its own page."}0PASS