Validation Evidence
This page organizes the test suite by what each kind of evidence proves. A passing suite shows that these specific claims still hold; it does not show scientific completeness. Tests that compare the engine with itself (for example superposition or chunk equivalence) protect contracts but are not independent evidence about the science.
Evidence matrix
| Kind of evidence | What it establishes | Tests | Scenario / tolerance | Known limits |
|---|---|---|---|---|
| Source-cell fidelity | Exported dose, skin and inhalation-class tables equal the original workbook cells, read with xlrd independently of the loader |
tests_export_excel_data/test_dose_source_audit.py, test_workbook_loader.py |
All three registered workbooks, fresh and packaged databases; exact | Stored formula results only: xlrd cannot show whether a workbook was recalculated |
| Import transformations | Every default, fallback, skip and omission is recorded with its cell; the registered workbooks have a fixed baseline | tests_export_excel_data/test_import_diagnostics.py |
Baseline: one synthesized value per workbook (turf resuspension/soil intake = 0) | Plain transcriptions are not individually diagnosed |
| Database normalization | Canonical SQLite reproduces the legacy parameter snapshot; exports are deterministic; packaged databases are reproducible exports | test_canonical_export.py, test_legacy_snapshot.py, test_parameter_sets.py |
Logical digest equality | The legacy snapshot is the historical loader's interpretation |
| Dataset integrity | Loaded databases have a supported schema; strict validation checks integrity, foreign keys, finite values and digest | tests/data/test_dataset_validation.py |
Exact | A digest is provenance, not scientific validity |
| Analytic kernel limits | Kernels equal closed forms and limits computed independently of production code | tests/kernels/test_soil_compartments.py (matrix-exponential reference, repeated root, nearby rates), test_exponential_integrals.py, test_decay.py, test_ground_dose.py, test_root_uptake.py, tests/domain/test_numeric_boundaries.py |
rtol 1e-12 to 1e-8 | Kernel algebra is checked, not the choice of model equations |
| Independently derived integrated pathways | Complete engine runs equal hand-derived results from transcribed constants and documented formulas | tests/validation/test_end_to_end_matrix.py with end_to_end_reference.py: Cs-137 cloud inhalation, ground external, and potato ingestion through root uptake, harvest stock, storage and processing |
rtol 1e-12 / 1e-9 | Constants are transcribed from the canonical database, so import errors are caught by the source-cell tests instead |
| Shared-cohort aging | A cohort's age at an absolute instant does not depend on the output origin or on which event is evaluated | tests/integration/test_cohort_aging.py |
Origin shift by exactly four Julian years; rtol 1e-12 | Engine compared with itself under an exact invariance |
| Original-model compatibility | Engine food-chain concentrations match preserved runs of the Excel-for-ECOSYS-87 1.4D workbook | tests/validation/test_vm_foodchain_exports.py (tests/artifacts_ecosys_for_excel/run1–3.XLS) |
Valley set, Cs-137, three dates in 1986; per-checkpoint tolerances | Valley set only; intentional differences in the development history |
| Numerical convergence | The default support is within 1% of a daily refinement for iodine, child age transitions, deposition near harvest, ration transitions and regional seasons | tests/validation/test_support_convergence.py |
Measured maximum 0.69% (child cohort, three years) | A daily grid is a refinement, not the exact integral |
| Contracts | Units, shapes, masks, chunking, superposition, immutability, provenance, import boundaries | tests/domain, tests/integration, tests/performance, tests/reporting, tests/test_architecture_boundaries.py |
Exact | Not scientific evidence |
| External scientific / measurement evidence | — | none | — | No comparison with field measurements exists |
Qualifications
- The mountain and Ticino/Valais parameter sets are not validated against
runs of the original model (
ParameterSet.validatedisFalse). Reproducible exports and shared tables do not establish their seasonal results. - The soil desorption term is a later-model extension. The 1993 paper has no desorption term, and the match to the original Fesenko source is still unverified (model reference, chapter 5). Agreement between the kernel and its independent two-state reference validates the algebra, not the extension against ECOSYS-87.
- Ingestion combines endpoint concentration means with sampled age-dependent coefficients and interval-averaged seasonality (SD-18). The convergence cases bound the effect for the default support; custom sparse supports can differ by much more.