Skip to content

chore(ci): target py3.12 only (align to the PROTEA stack)#18

Merged
frapercan merged 1 commit into
mainfrom
chore/ci-py312-only
Jun 24, 2026
Merged

chore(ci): target py3.12 only (align to the PROTEA stack)#18
frapercan merged 1 commit into
mainfrom
chore/ci-py312-only

Conversation

@frapercan

Copy link
Copy Markdown
Owner

Makes cafaeval CI green by aligning it to the Python the project actually uses.

Change

Why (parity context)

The red check was Tests + parity (py3.10), failing at actual.index.equals(expected.index) with 56 vs 56 rows, i.e. a row-order difference before any value comparison, caused by unpinned pandas/numpy resolving differently on py3.10. It is not a metric divergence: the parity suite is bit-/ULP-exact on py3.12 (verified locally, 0 hard failures), which is the only interpreter the stack runs on. No parity logic or pins were touched.

Drop the 3.10/3.11 CI matrix legs and set requires-python to >=3.12. The whole
PROTEA stack runs on Python 3.12; the parity oracle is bit-exact there. The
3.10 leg failed only on a pandas index-ordering quirk (same rows, different
order, before any value comparison) caused by unpinned deps resolving
differently on the older interpreter, not a metric divergence.
@frapercan frapercan merged commit 444f3a0 into main Jun 24, 2026
6 checks passed
@frapercan frapercan deleted the chore/ci-py312-only branch June 24, 2026 17:14
frapercan added a commit that referenced this pull request Jun 24, 2026
Promotes develop's sparse evaluation work to main so the branch PROTEA
installs (`@main`) actually uses it. main had drifted: it only carried
today's docs/CI commits (#17, #18) while the sparse perf landed on
develop and was never promoted.

## Brings to main
- **#16** `perf(eval)`: predictions stored as `scipy.sparse` CSR, never
materialising the dense N x T matrix (11.9 -> 7.0 GB).
- **#15** `perf(graph)`: sparse CSR GO DAG adjacency + O(1) `deque`
topological sort (about 3x faster build, ~3x less RAM).

## Verified (py3.12, the only interpreter the stack uses)
- ruff + mypy clean.
- Parity suite `CAFAEVAL_PARITY_PHASE=B pytest tests/diff`: 7 passed, 6
xfailed, **0 hard failures** (the sparse path stays bit-/ULP-exact vs
the dense fallback and the upstream oracle).

## Conflict resolution
Only README.md conflicted (both branches edited the optimisation table):
took develop's rows (they document the C1/C3 sparse kernels) and
re-applied the em-dash purge from #17. pyproject auto-merged
(`requires-python >=3.12` from #18 + the scipy/pyarrow sparse-era deps).

Follow-up: bump PROTEA's `poetry.lock` cafaeval pin so the platform
consumes this.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant