Repository navigation
CI: select the test element types per run, two on pull requests, all four weekly (#91) - #103
Conversation
…requests, all four weekly (#91) test/backends.jl reads SDS_TEST_ELTYPES once (default all four, at least one real type); ELTYPES/REAL_ELTYPES/COMPLEX_ELTYPES and the SPLIT_FILES parts follow it, RUN_SHARED goes to the Float64 part or the first selected type's. Testsets for some element types only use eltypes_among(...), which notes a skip when the selection has none of them. ci.yml: pull_request/push run Float64,ComplexF32, the weekly schedule all four, workflow_dispatch takes the list as an input. AGENTS.md documents the switch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AvwMxoGmJm3eSmpzxAy72A
There was a problem hiding this comment.
VERDICT: APPROVE (head cc98eaf)
Infrastructure PR for issue #91 (not a TASKS.md task, so no Report block; the PR body serves as the report). Reviewed the full diff against AGENTS.md, the issue and the test conventions.
Checked
- Scope: tests, test helpers,
ci.ymlandAGENTS.mdonly; no library code,PLAN.mdandTASKS.mduntouched, noManifest.toml, no public names involved. test/backends.jl:selected_eltypesparses the comma list inALL_ELTYPESorder, rejects unknown names, duplicates collapse, and a selection without a real type is an error (needed by the shared testsets).SELECTED_ELTYPESis read once per process and shown in the banner.test/utils.jl:ELTYPES/REAL_ELTYPES/COMPLEX_ELTYPESderive from the selection;eltypes_among(types)andeltypes_among(S::Type)filter the running part and log the skip only from the part that owns the shared testsets. Include orderbackends.jl→utils.jl→matrices.jlis sound:backends.jlhas no top-level use of the other helpers, andutils.jlneedsSELECTED_ELTYPES.test/runtests.jl: the banner module now runs before the suite is built so a badSDS_TEST_ELTYPESfails early;SPLIT_FILESsplit over the selected types only;SHARED_ELTYPEfalls back to the first selected type whenFloat64is left out; test names unchanged (SDS_TEST_ONLY/SKIPprefix matching and the runner history still work). Workers read the same environment as the main process, asSDS_TEST_CPUalready does.ci.yml: workflow-levelenvwithinputsis valid;pull_request/pushgetFloat64,ComplexF32,schedulean empty string (all four),workflow_dispatchits input (default all four). Job ids, check names and the GPU job'sSDS_TEST_CPU=0 SDS_TEST_SKIP=test_aquaunchanged.- Tests: no assertion weakened; the three testsets moved to
eltypes_amongare equivalent to the old filters;test_helperscovers the parser (@test_logs match_mode = :anywith no pattern passes with or without the skip note and returns the value). NoELTYPES[k]orfirst(ELTYPES)anywhere intest/. - CI: all checks pending at review time (the red
fixjob is the implementer workflow, not a test). I could not run Julia in this session, so the behaviour under a non-default selection rests on reading plus the pending CI.
Blocking findings: none.
Non-blocking (one inline comment on AGENTS.md:195):
test_numeric_cholesky_a.jl:63-69still compiles aFloat32regime-A Cholesky in theFloat64part regardless of the selection;test_symbolic_schedule.jl:340hard-codes(Float32, ComplexF64)(host-only, cheap, but the new "never" in AGENTS.md should be qualified to numeric testsets).README.md"Running the tests" does not listSDS_TEST_ELTYPES.- The PR body's Tests section says "the table follows"; please fill in the local CPU run with both selections (and the CUDA numbers once CI is green) before the owner merges, so the body matches what was verified.
…PES in the README (#91) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AvwMxoGmJm3eSmpzxAy72A
There was a problem hiding this comment.
VERDICT: APPROVE (head 2a6bf54)
Re-review after the push that answered the previous round. Infrastructure PR for issue #91 (no TASKS.md task, so the PR body stands in for the Report). The head differs from the approved cc98eaf only in AGENTS.md (the "numeric testset … never over a hard-coded list" wording, with the host-only symbolic elsize checks exempted) and one README.md line adding SDS_TEST_ELTYPES to the "Running the tests" block, both as the owner said on the earlier thread. The Float32 factorization in the shared regime-A elsize check stays by the owner's decision.
Checked on this head
- Scope:
test/,ci.yml,AGENTS.md,README.mdonly; no library code,PLAN.md,TASKS.mdandManifest.tomluntouched, no public names involved. test/backends.jl:selected_eltypeskeepsALL_ELTYPESorder, collapses duplicates and blanks, rejects unknown names and a selection with no real type;SELECTED_ELTYPESis read once per process and printed in the banner. No top-level dependency onutils.jl, so the new include order (backends.jl→utils.jl→matrices.jl) is sound; nothing outsidetest/runtests.jlincludesutils.jlorbackends.jl.test/utils.jl:ELTYPES/REAL_ELTYPES/COMPLEX_ELTYPESderive from the selection or the part;eltypes_amongfilters the running part and logs the skip only from the part that owns the shared testsets.test/runtests.jl: the banner module runs before the suite is built, so a badSDS_TEST_ELTYPESfails early; split files run over the selected types only;SHARED_ELTYPEfalls back to the first selected type (always real, given the parser) whenFloat64is left out; test names andSDS_TEST_ONLY/SKIPmatching unchanged.- Audit:
test/has noELTYPES[k]; the three testsets moved toeltypes_amongare equivalent to the old filters, no assertion changed.test_helperscovers the parser and the helpers (@test_logs match_mode = :anywith no pattern passes regardless of the skip note and returns the value). ci.yml: workflow-levelenvgivespull_request/pushFloat64,ComplexF32,schedulethe empty string (all four),workflow_dispatchits input; job ids, check names and the GPU job'sSDS_TEST_CPU=0 SDS_TEST_SKIP=test_aquaunchanged. The workflow parsed and queued on this head.- CI:
buildgreen;Run testsCPU and CUDA jobs pending at review time. I could not run Julia in this session; the parser and@test_logsbehaviour rest on reading.
Blocking findings: none.
Non-blocking: the PR body's Tests section still says "the table follows". Since the owner merges this by hand once CI is green, please fill in the local run with both selections and the CI numbers before merging so the body records what was verified.
Refs #91
Task: CI — select the test element types per run (issue #91, owner decision: fewer element types per CI run, no CPU-specific kernel specialisation tricks). Tests and CI configuration only, no library code.
What was built:
test/backends.jl:SDS_TEST_ELTYPES(comma-separated, default all four, at least one real type) read once intoSELECTED_ELTYPES(selected_eltypes), shown in the backend banner.test/utils.jl:ELTYPES/REAL_ELTYPES/COMPLEX_ELTYPESderive from it;eltypes_among(types)/eltypes_among(Complex)for testsets that run for some types only (notes a skip when the selection has none of them).backends.jlis now included beforeutils.jl.test/runtests.jl:SPLIT_FILESsplit over the selected types only;RUN_SHAREDgoes to theFloat64part, or the first selected type's whenFloat64is left out.test_numeric_ldlt,test_reference_ldlt) and the(Float64, ComplexF32)FGMRES batch testset useeltypes_among; no testset indexesELTYPESpositionally; theRUN_SHAREDtestsets that pinFloat64(refinement to 1e-14, Schur/FGMRES edge cases) are precision-specific and stayFloat64. No assertion changed.test_helperstests the parser..github/workflows/ci.yml: workflow-levelSDS_TEST_ELTYPES=Float64,ComplexF32onpull_request/push, all four on the weeklyschedule, and a newworkflow_dispatchinput (default all four). Job names unchanged; the CUDA job keepsSDS_TEST_CPU=0,SDS_TEST_SKIP=test_aqua.AGENTS.md: test-conventions bullet, the ParallelTestRunner paragraph and the Commands block;README.md:SDS_TEST_ELTYPESin "Running the tests" (review round 1).Tests: Both selections pass in full, with no failures or broken tests. Locally (CPU backend,
SDS_TEST_GPU=0, 4 cores, 4 workers, Julia 1.13.1): all four types 71462/71462,SDS_TEST_ELTYPES=Float64,ComplexF3241076/41076. CI oncc98eafwithFloat64,ComplexF32: CPU 41076/41076, CUDA 44215/44215.Wall time per job (before: run 37693884475 of #100, all four types; after: this PR on
cc98eaf, Float64+ComplexF32):test-gpu, 12 workers), test steptest-github-cpuonly, kkt, 32 workers), test stepThe CI jobs do not get shorter. With 12 or 32 workers, the slowest single part sets the wall time, and the slowest part is a complex part kept in the selection. On CUDA that is
test_numeric_ldlt[ComplexF32](1132 s now; before,[ComplexF64]1089 s and[ComplexF32]1014 s). On kkt every complex part takes about 1100 s, whichever complex type it is. The selection cuts total work (and runner occupancy) by about 40%. It only shortens the wall time where the run is throughput-bound, i.e. locally and on small runners. To shorten the CI jobs, the heavy files have to be split below the element type:test_numeric_ldlt,test_solve,test_numeric_cholesky_candtest_numeric_cholesky_aon CUDA. That is not done here.Per file, seconds summed over the parts (each worker's cold compilation is charged to the first file it runs, so single rows are noisy)
Deviations from PLAN.md / TASKS.md: none (PLAN.md untouched).
Follow-up issues opened: none. #91 stays open for lever 3 (folding the small
Valflags into run-time branches, T25 work).This PR changes
ci.yml, which was expected to make the Claude reviewer skip it; the reviewer ran anyway (VERDICT: APPROVEon2a6bf54). The owner merges it by hand once CI is green.🤖 Generated with Claude Code
https://claude.ai/code/session_01AvwMxoGmJm3eSmpzxAy72A
Generated by Claude Code