R 2.3.0 β†’ Python parity status¶
This repository freezes the public API against gp3tools R 2.3.0.
Contracts¶
- Canonical R exports: 278
- Python public namespace: 285 unique names
- Frozen R4 oracle: 3,786 assertions
- Frozen R4 oracle SHA256:
7749F214B3F16A4A03CEBD030C597999B3BDDA38C1BEB9A4CAEDA5380735F684 - Coverage gate: ≥ 90%
Evidence levels¶
The project deliberately separates API availability from scientific behavioral evidence:
| Status | Meaning |
|---|---|
EXACT |
Frozen deterministic R/Python evidence agrees exactly. |
NUMERIC_TOLERANCE |
Values agree within a declared numerical tolerance. |
STRUCTURAL_EQUIVALENT |
Structure and scientific meaning agree while representation differs. |
BACKEND_EQUIVALENT |
Python uses an appropriate Python backend for the same analysis family. |
INTENTIONAL_PYTHON_ADAPTATION |
Python-native adaptation is documented and tested. |
BLOCKED_OPTIONAL_DEP |
Requires an optional backend not installed in the core environment. |
FAIL |
Measured parity defect. |
A whole-surface smoke pass is not presented as universal exact behavioral parity. Exact claims are limited to frozen R oracle evidence.
Behavioral freeze¶
R1, R2 and R3 are retained as permanent canonical behavioral-parity suites. R4 adds the pupil/QC/workflow/blink/fixation/AOI/geometry family and preserves legacy Python call contracts through semantic dual dispatch. The 3,786-row R4 oracle is frozen and hash-verified; this completion runner does not over-claim a fresh all-row R4 re-score unless a dedicated regenerated scorer is present.
Release gates¶
The completion runner enforces:
- 285/278 namespace/export integrity.
- R1–R3 frozen behavioral regressions plus R4 canonical structure/compatibility gates.
- Legacy R-alias compatibility.
- All 278 exports resolving to introspectable callables.
- Plot export catalog plus headless core plot smoke.
- Full pytest with ≥90% coverage.
- Static call-surface audit, Ruff and compileall.
- Runnable examples.
- Strict MkDocs build.
- Wheel + sdist build and isolated wheel import smoke.