Conversation
Migrate GPU tests from Buildkite to GitHub Actions using self-hosted runners with the `gpu` label (Tesla T4 on arctic1). - Add .github/workflows/GPU.yml for GPU tests on [self-hosted, Linux, X64, gpu] - Delete .buildkite/pipeline.yml Part of the SciML-wide migration from Buildkite to GitHub Actions self-hosted runners. See ChrisRackauckas/InternalJunk#16 for runner infrastructure details. Co-Authored-By: Chris Rackauckas <[email protected]>
…dkite-with-gha Replace Buildkite CI with GitHub Actions self-hosted runners
adds vector syntax for `ArrayPartition`s and `VectorOfArray`s
Update Project.toml
…liance
This is a breaking change that completes the long-planned migration (documented
since 2023) to make AbstractVectorOfArray a proper AbstractArray subtype.
Key changes:
- AbstractVectorOfArray{T,N,A} <: AbstractArray{T,N}
- Linear indexing A[i] now returns the i-th element in column-major order
(previously returned A.u[i], the i-th inner array)
- size() uses maximum sizes across inner arrays for ragged data
- Ragged out-of-bounds elements are treated as zero (sparse interpretation)
- Iteration goes over scalar elements (AbstractArray default)
- Removed deprecated linear indexing methods
- Updated Zygote extension (some adjoints marked broken pending update)
- Added parameter_values(::AbstractDiffEqArray, i) to fix dispatch ambiguity
Co-Authored-By: Chris Rackauckas <[email protected]>
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Invalidation analysis and cleanup: - Remove IndexStyle instance method (type method sufficient) - Remove size(VA, i), lastindex(VA, d) (inherited from AbstractArray) - Remove checkbounds override (inherited from AbstractArray via size) - Remove isassigned, isapprox, CartesianIndices, adjoint overrides - Remove reshape, vec, convert(Array, ...), maybeview overrides - Remove +, -, *, / operator overrides (use broadcasting) - Remove 2-arg show for AbstractVectorOfArray (use AbstractArray display) Fix Zygote extension: - Remove all getindex/view adjoint overrides (Zygote's AbstractArray rules apply) - Fix VectorOfArray(u) adjoint to return .u (plain Vector) not VectorOfArray - Fix DiffEqArray(u, t) adjoint similarly - All 12 adjoint tests now pass (was 4 pass + 8 broken) Invalidation trees: 8 total, all minimal (max 20 mt_backedges from Colon(::Integer, ::RaggedEnd) which is inherent to the type) Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Massive cleanup removing code that is no longer reachable or duplicates
AbstractArray defaults:
Removed (dead code since lastindex returns plain Ints):
- RaggedEnd/RaggedRange structs and all Colon methods (caused 4 invalidations)
- _column_indices, _resolve_ragged_index, _resolve_ragged_indices
- _has_ragged_end, _resolve_ragged_end_args
- _ragged_getindex, _ragged_getindex_nm1dims, _ragged_getindex_full
- _checkbounds_ragged, _preserve_array_type, _padded_resolved_indices
- _is_ragged_dim, __parameterless_type
Removed (inherited from AbstractArray):
- size(::Adjoint{T, <:AbstractVectorOfArray}), getindex(::Adjoint{...})
- check_parent_index_match, SubArray constructor override
- CartesianIndex setindex! (handled by Int... method)
- broadcastable (AbstractArray is already broadcastable)
- mapreduce for N==1 case
- show(io, ::AbstractVectorOfArray) 2-arg (use AbstractArray display)
Added back:
- getindex/setindex! for CartesianIndex with more dims than ndims(A)
(needed for heterogeneous inner arrays like [zeros(20), zeros(3,3,3)])
Invalidation trees: 8 → 4 (removed all Colon/RaggedEnd invalidations)
Net: -379 lines removed, +43 added
Co-Authored-By: Chris Rackauckas <[email protected]>
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
…alidation This method conflicted with AbstractArray's similar(a, dims...) contract and caused 469 invalidation children. Users should use standard similar(VA, T, dims) or construct VectorOfArrays directly. Invalidation trees: 4 → 3 (and 0 from AbstractVectorOfArray itself — all 3 remaining are pre-existing from ArrayPartition/NamedArrayPartition) Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Create lib/RecursiveArrayToolsShorthandConstructors as a separate subpackage for methods that cause invalidations: - VA[...] and AP[...] shorthand constructors (getindex on Type) - Optimized any/all for ArrayPartition (partition-level short-circuit) Users who want these opt in with: using RecursiveArrayToolsShorthandConstructors Invalidation trees after `using RecursiveArrayTools`: 3 → 1 (only NamedArrayPartition.setindex! remains, pre-existing) Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
- NamedArrayPartition: narrow setindex!(x, args...) to setindex!(x, v, i::Int) instead of catching all signatures. AbstractVector only needs the Int method. - Remove setindex! CartesianIndex from Union in multi-index method (Base handles it) - Remove dedicated (Int, CartesianIndex) getindex/setindex! methods; flatten inside the multi-arg dispatcher instead - Fix NamedArrayPartition test: x[1:end] now preserves type (correct behavior) Result: `using RecursiveArrayTools` causes 0 invalidation trees. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
RecursiveArrayToolsShorthandConstructors now only has the VA[...] and AP[...] constructor syntax. The any/all partition-level optimizations are in their own RecursiveArrayToolsArrayPartitionOptimizations subpackage since they are unrelated to shorthand constructors. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
The partition-level any/all short-circuiting is not actually an optimization — the AbstractArray fallback already short-circuits element-by-element. Both stop at the first match. Iterating partition-by-partition doesn't skip any work. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Benchmarking shows the partition-by-partition any/all IS ~1.5-1.8x faster than the AbstractArray default for full scans, because ArrayPartition's generic element iteration has per-element partition lookup overhead. Kept as a separate lib/ subpackage (not a submodule) because submodules are loaded at package load time and would still cause invalidations. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Since AbstractVectorOfArray <: AbstractArray, convert(AbstractArray, va) returns va itself. Use stack(va.u) to get a dense CuArray instead. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
…legation
## Ragged Arrays (RecursiveArrayToolsRaggedArrays sublibrary)
- Add AbstractRaggedVectorOfArray and AbstractRaggedDiffEqArray abstract types
- Add RaggedVectorOfArray and RaggedDiffEqArray concrete types that preserve
true ragged structure without zero-padding
- Column-major linear indexing, no-padding A[:, i], symbolic indexing,
broadcasting, and callable interpolation interface
- Isolated in lib/ sublibrary to avoid invalidations
## Interpolation Interface on DiffEqArray
- Add `interp` and `dense` fields to DiffEqArray (new type parameter I)
- Callable syntax: da(t), da(t; idxs=1), da(t, Val{1})
- All constructors accept `interp=nothing, dense=false` kwargs
## Plotting Delegation
- Full-featured AbstractDiffEqArray plot recipe with:
- idxs variable selection (integer, array, tuple for phase plots, symbolic)
- Dense interpolation via callable interface
- denseplot, plotdensity, tspan, plotat keyword arguments
- Export plotting helpers for SciMLBase delegation:
DEFAULT_PLOT_FUNC, plottable_indices, plot_indices, getindepsym_defaultt,
interpret_vars, add_labels!, diffeq_to_arrays, solplot_vecs_and_labels
## Bug Fix
- Fix ragged VectorOfArray .= zero broadcast (DimensionMismatch)
by using dest.u[i] instead of dest[:, i] in copyto!
## Version
- Bump to v4.0.0
Co-Authored-By: Chris Rackauckas <[email protected]>
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
…Style Change RaggedVectorOfArrayStyle to subtype BroadcastStyle instead of AbstractArrayStyle. This eliminates all invalidations from the ragged sublibrary except the unavoidable 1 from materialize (needed because non-AbstractArray types can't provide axes/size for instantiate). Invalidation breakdown for `using RecursiveArrayToolsRaggedArrays`: - 1 from our materialize override (unavoidable for non-AbstractArray) - 17 from Accessors.jl (SII transitive dep, not our code) - 20 from Base cat chain (SII transitive dep, not our code) Also update sublibrary compat bounds to RecursiveArrayTools v4. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
- Remove SciMLBase and SnoopCompileCore that leaked into [deps] from Pkg.develop during testing. SciMLBase remains a test-only dependency. - Remove SnoopCompileCore from ragged sublibrary deps. - Update all sublibrary compats to RecursiveArrayTools v4. - Port v3 ragged behavior tests to RaggedVectorOfArray/RaggedDiffEqArray: ragged indexing, heterogeneous views (SciML#453), end indexing, push! making arrays ragged, broadcast assignment (SciML#454), 2D ragged inner arrays, zero/fill on ragged, component timeseries extraction. 212 tests total (up from 143). Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Fixes issues reported by @JoshuaLampert: - Add view(r, :, i) and view(r, I, i) for ragged arrays - Add axes(r, d) and lastindex(r, d) so `end` works in indexing - Add range indexing: r[1:3, i], r[:, 2:end] - Note: `end` in first dim uses max inner array length (not per-column like v3's RaggedEnd), so r[end, i] may throw BoundsError for shorter inner arrays. Use r[:, i] for safe column access. Tests: 243 pass (up from 212). Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
SciMLBase can't resolve against RAT v4 until the companion SciMLBase PR (SciML/SciMLBase.jl#1297) is merged. Move it out of the main test deps into the downstream test Project.toml. - Remove SciMLBase from [extras] and [targets] in Project.toml - Add SciMLBase and ForwardDiff to test/downstream/Project.toml - Move adjoints.jl to test/downstream/ (uses ODEProblem from SciMLBase) - Core tests now pass without SciMLBase dependency Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
- docs/Project.toml: bump RecursiveArrayTools compat from "3" to "4" - test/jet_tests.jl: filter RecipesBase is_key_supported false positive (user recipe keywords like denseplot are dynamic, JET can't verify them) - test/adjoints.jl: remove loss6/ODEProblem (needs SciMLBase) from Core, keep in test/downstream/adjoints.jl (disabled until SciMLBase compat bump) - test/downstream/Project.toml: revert SciMLBase/ForwardDiff additions (can't resolve until SciML/SciMLBase.jl#1297 merges) Pre-existing failures NOT from our changes: - LTS @inferred sum(VA[VA[zeros(4,4)]]) — inference regression from AbstractArray subtyping, present since initial PR commits - GPU CuArray ambiguity — from AbstractVectorOfArray <: AbstractArray - Downstream SciMLBase resolution — expected until SciMLBase bumps compat Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
- Fix CuArray ambiguity: replace (T::Type{<:AnyGPUArray})(VA) = T(Array(VA))
with T(stack(VA.u)) and add N type parameter to disambiguate against
CuArray(::AbstractArray{T,N}) from CUDA.jl
- Add type-stable Base.sum(VA::AbstractVectorOfArray) that reduces over
.u to avoid inference failure on Julia 1.10 with deeply nested type
parameters (fixes @inferred sum(VA[VA[zeros(4,4)]]) on LTS)
Co-Authored-By: Chris Rackauckas <[email protected]>
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Remove the fast-path branch in the AbstractDiffEqArray recipe that bypassed diffeq_to_arrays when no interp was available. Now all cases go through the same code path, ensuring denseplot=true/false is always respected: - denseplot=true: generates plotdensity interpolated points via callable - denseplot=false: uses raw saved time points from A.t Also clean up SciMLBase that leaked into [deps] from Pkg.develop. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Disambiguate CuArray(::AbstractArray{T,N}) from CUDA.jl by defining
(::Type{GA})(::AbstractVectorOfArray{T,N}) where {T,N,GA<:AbstractGPUArray}
AbstractVectorOfArray{T,N} is strictly more specific than AbstractArray{T,N}
on arg2, so this method wins dispatch for VectorOfArray arguments.
Uses stack(VA.u) to stay on GPU (avoids GPU→CPU→GPU round-trip).
Co-Authored-By: Chris Rackauckas <[email protected]>
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Convert the bespoke Tests.yml to a tests.yml@v1 caller now that the reusable workflow supports `num-threads` (SciML/.github#43). Preserves the exact version x group matrix and JULIA_NUM_THREADS=2 (needed so the threaded regression tests for SciML#570 actually exercise the multi-thread path) and coverage-directories src,ext. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
…ests ci: centralize Tests.yml (tests.yml@v1 with num-threads: 2)
This monorepo had no sublibrary CI, so its lib/* sublibraries were never tested. Add a thin caller of the centralized sublibrary-project-tests.yml, which lists lib/* and tests each via tests.yml project=lib/X. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Part of bringing this repo onto the full centralized CI setup (SciML/.github @v1): remove retired CompatHelper (Dependabot drives [compat]) and/or add the centralized Documenter preview cleanup. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
…i-project-model ci: uniformize onto centralized CI (project-model SublibraryCI + cleanup)
…adjoint The Zygote pullbacks for VectorOfArray/DiffEqArray (vofa_u_adjoint) and ArrayPartition only special-cased `isnothing(d_i)` for missing per-slice gradients. A ChainRulesCore.ZeroTangent (AbstractZero) cotangent element was passed through unchanged, and the subsequent VectorOfArray/DiffEqArray construction called `size(::ZeroTangent)`, throwing a MethodError. This broke reverse-mode AD through DiffEqArray(vec, ts) (e.g. DifferenceEquations.jl test/linear_gradients.jl). Treat AbstractZero the same as nothing: a structural zero gradient for that slice. Added a regression test in test/adjoints.jl exercising a ZeroTangent cotangent element for both VectorOfArray and DiffEqArray. Regression test run locally on Julia 1.10: PASS. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
…erotangent-adjoint fix: handle ZeroTangent/AbstractZero in RecursiveArrayToolsZygoteExt adjoint
Update Project.toml
Add missing standard SciML centralized caller workflows: - RunicSuggestions.yml (Runic auto-format suggestions on PRs) - DependabotAutoMerge.yml (auto-merge Dependabot PRs) Co-authored-by: ChrisRackauckas-Claude <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
The reusable SciML/.github downgrade workflows now always use allow_reresolve: false and no longer accept an allow-reresolve input (see SciML/.github#71). Remove the now-invalid input so this caller keeps working once @v1 is retagged. Co-authored-by: Chris Rackauckas <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
Packages should not pin crate-ci/typos; minor/patch updates should flow through Dependabot automatically. Remove the typos ignore entry while preserving the julia and github-actions ecosystem blocks. Co-authored-by: ChrisRackauckas-Claude <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 6 to 7. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](codecov/codecov-action@v6...v7) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…L#611) * Uniformize monorepo structure to OrdinaryDiffEq canonical style Align RecursiveArrayTools.jl with the OrdinaryDiffEq.jl canonical monorepo layout: - Add [sources] to each sublibrary pointing at the umbrella root via ../.. (true leaf->root dependency direction; the 3 sublibs depend on the registered root today). No cyclic root->leaf [sources] are added because the root does not depend on its sublibs. - Remove the redundant double-dispatch of the sublibraries: the root Tests.yml no longer GROUP-dispatches RaggedArrays/ArrayPartitionAnyAll/ ShorthandConstructors, and the root test/runtests.jl no longer activates and Pkg.tests them. Sublibraries are now covered exclusively by SublibraryCI's per-project model. - Rewrite root test/runtests.jl as a _detect_sublibrary_group dispatcher mirroring OrdinaryDiffEq: a GROUP naming lib/<X> activates that sublib, develops its [sources] path deps on Julia < 1.11, sets the sub group env, and Pkg.tests it; otherwise the root runs its own @safetestset groups. - SublibraryCI.yml: thread group-env-name RECURSIVEARRAYTOOLS_TEST_GROUP and check-bounds auto. - DowngradeSublibraries.yml: add group-env-name/group-env-value Core, expand the skip list to the siblings (root + 3 sublibs) plus stdlibs; auto-discovers lib/* (sublibrary-downgrade.yml@v1 has no allow-reresolve input). - Each sublibrary test/runtests.jl now reads get(ENV, "RECURSIVEARRAYTOOLS_TEST_GROUP", "Core") and gates its tests on the Core group. - Add test/test_groups.toml to each sublibrary declaring only [Core] on [lts, 1.11, 1, pre], since none of them have QA-group tests (the default expansion would otherwise emit an unsupported QA group on [1]). Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * Use canonical Title-case All test-group name in sublib gates Match the SciML/OrdinaryDiffEq.jl convention: the catch-all test group is canonical Title-case All, not all-caps ALL. The sublib runtests.jl gates compared TEST_GROUP against "ALL" while the default and the test_groups.toml key are already canonical ("Core"). Align the gate string casing so all group-name strings are consistent. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * ci: canonicalize TagBot, .gitignore, and NoPre group casing - TagBot.yml: adopt canonical OrdinaryDiffEq structure — top-level permissions block, workflow_dispatch.inputs.lookback default "3", named root TagBot job, and a TagBot-Subpackages matrix (fail-fast: false) over the three registered sublibraries, each invoking TagBot@v1 with subdir: lib/<package>. - .gitignore: complete to canonical set (docs/build, LocalPreferences.toml, *.jl.*.mem, *.DS_Store, profile.pb.gz, .*.swp, .claude/, etc.). - Casing: rename the special test group "nopre" -> "NoPre" on both sides of the workflow<->runtests contract (Tests.yml matrix.group + exclude, and runtests.jl GROUP comparison) so it is canonical Title-case and case-consistent. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * docs/ci: canonical sublib README headers + declare ShorthandConstructors test dep - Sublibrary READMEs: prepend the canonical OrdinaryDiffEq-style badge block (Zulip, Global Docs -> RecursiveArrayTools, ColPrac, SciML Code Style) and the "<Name>.jl is a component of the RecursiveArrayTools.jl monorepo. <role>. While completely independent and usable on its own, users wanting the full functionality should use RecursiveArrayTools.jl." wording, substituting names. Existing content preserved below. - Project.toml: declare RecursiveArrayToolsShorthandConstructors as a proper test dependency — added to [extras], [targets].test, [compat] ("1"), and a [sources] path entry so the Core test group resolves it from the in-repo lib/ on Julia >= 1.11 (runtests.jl Pkg.develop fallback still covers Julia < 1.11 where [sources] is ignored). Verified: project resolves and `VA[...]`/`AP[...]` from the sublibrary load in a Core-test-like environment. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * test: isolate root QA (Aqua) into canonical test/qa/ sub-environment Move the inline Aqua quality-assurance test out of the main test environment and into a dedicated test/qa/ project, matching the canonical OrdinaryDiffEq sublib layout (lib/*/test/qa/). - Add test/qa/Project.toml: Aqua + RecursiveArrayTools (via [sources]) + Pkg + Test, with [compat] for each dep and julia. - Move test/qa.jl -> test/qa/qa.jl (Aqua testset + the existing downstream-package manifest sentinel; behavior unchanged). - runtests.jl: add activate_qa_env() and, in the Core/All branch, activate the qa env, run the QA safetestset, then restore the main test project so the remaining Core functional tests keep their full dependency set. - Remove Aqua from the main Project.toml [extras], [targets].test, and [compat]; it now lives only in the qa env. JET (NoPre group) is already isolated in test/nopre/ and is left as-is. The three lib/* sublibraries run no QA today and are left untouched. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * fix: correct root test env — drop ShorthandConstructors [sources] and downstream-only NLsolve The branch had added RecursiveArrayToolsShorthandConstructors to the umbrella root [sources]. It is a test-only dependency (the VA[]/AP[] shorthand tests), not a dependency of the RecursiveArrayTools package itself, so sourcing it at the package level makes Pkg.test add it to the Core test env as a declared package dependency. Aqua.test_stale_deps then flags it as a stale dep of RecursiveArrayTools (the module never imports it), failing the QA group. master never had this [sources] entry: its runtests.jl Pkg.develops the sublibrary into the test env directly, which the current runtests.jl still does. Removing the [sources] entry restores master's green QA behavior (verified: Core+QA Pkg.test now passes — Quality Assurance 9 pass / 1 broken (expected ambiguities @test_broken) / 0 fail; previously 1 fail). Also drop NLsolve from the main [extras]/[targets].test/[compat]: it is used only by test/downstream/odesolve.jl and is already declared in test/downstream/Project.toml, so it does not belong in the base test env. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * ci: fold bespoke GPU.yml into CI.yml [GPU] group; canonical group Project.tomls Replace the root Tests.yml + bespoke GPU.yml with a single canonical CI.yml (matching the OrdinaryDiffEq umbrella layout): - CI.yml carries the version matrix for the root base groups (Core/SymbolicIndexingInterface/Downstream/NoPre on [lts, 1, pre], NoPre excluded on pre) via SciML/.github tests.yml@v1. - The GPU tests become a dep-adding group on the self-hosted GPU runner: a dedicated CI.yml job passes group=GPU and runner=[self-hosted, Linux, X64, gpu] to tests.yml@v1 (which sets GROUP=GPU; runtests.jl then activates test/gpu and runs the GPU safetestsets). This reproduces the former GPU.yml (same runner labels, 60-min timeout, src,ext coverage) so GPU.yml is deleted. - Give the dep-adding root group Project.tomls the canonical [sources] = {path=../..} (+ sibling sublib paths) plus the package and Test deps so they resolve on Julia >= 1.11 against the PR-branch code: - test/gpu: add Adapt/ArrayInterface/RecursiveArrayTools/Test/Zygote + [sources] for the root and RecursiveArrayToolsArrayPartitionAnyAll. - test/nopre: add RecursiveArrayTools + [sources]. - test/downstream: add Test + [sources] for root and RecursiveArrayToolsShorthandConstructors. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * test: canonicalize test-group structure (standalone QA group, group folders) Make the root test layout match the OrdinaryDiffEq canonical pattern: every test lives in exactly one group, each group in its own capitalized test/<Group>/ folder, dep-adding groups have their own Project.toml (excluded from the light main env), and the version matrix is consistent between CI and test_groups.toml. - Split QA (Aqua) out of the Core branch into a standalone QA group keyed on GROUP == "QA" || GROUP == "All", running in its dep-adding test/QA env. Add a dedicated QA matrix row to CI.yml restricted to [lts, 1] (excluded on pre), so QA no longer runs inside the functional Core job. - Normalize sublib test_groups.toml [Core] versions ["lts","1.11","1","pre"] -> ["lts","1","pre"] for all three sublibraries. - Move the loose root Core test files into test/Core/, including the previously orphaned partitions_and_static_arrays.jl which was never wired into runtests and is now part of the Core group. Capitalize the remaining group folders (downstream->Downstream, gpu->GPU, nopre->NoPre, qa->QA) and route the SymbolicIndexingInterface and NoPre tests into their own group folders so all group folder names match their CI GROUP names. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * test: exclude standalone QA group from All QA is its own dep-adding test group (test/QA/Project.toml) and is run as a separate CI matrix entry, so it should not also fire under the "All" group. CI never runs "All", and a local "All" run should not pull the QA tooling into the functional test pass. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * ci: canonical TagBot thin-caller + downgrade-caller cleanup Replace TagBot.yml with the canonical SciML/.github tagbot.yml@v1 thin caller, plus a tagbot-subpackages matrix over the registered monorepo sublibraries (RecursiveArrayToolsArrayPartitionAnyAll, RecursiveArrayToolsRaggedArrays, RecursiveArrayToolsShorthandConstructors). Drop hand-maintained skip lists and pinned julia-version floors from the downgrade callers; the centralized workflow now auto-populates skip (stdlibs union in-repo sublibs union caller package) and defaults to the LTS floor. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> --------- Co-authored-by: Chris Rackauckas <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
…oml) (SciML#613) Replace the hand-maintained group x version matrix (plus the bespoke GPU job) in the root CI.yml `tests` job with the reusable grouped-tests.yml@v1 thin caller. The matrix now lives in test/test_groups.toml and is computed by compute_affected_sublibraries.jl --root-matrix. The root runtests.jl dispatches on the default GROUP env var, so no group-env-name override is needed. check-bounds: auto is preserved as a workflow-level input. coverage-directories defaults to src,ext (matches old). Verified the computed root matrix equals the old workflow's (group, version, runner) set exactly: 14/14. Co-authored-by: ChrisRackauckas-Claude <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
Replace the hand-written GROUP if-ladder in test/runtests.jl with a single declarative SciMLTesting.run_tests call. Behavior-equivalent: the set of tests run under every GROUP value (bare/All, Core, QA, SymbolicIndexingInterface, Downstream, GPU, NoPre, and each lib/ sublibrary name + _<group>) is identical to the pre-conversion runtests.jl. v1.1.0 specifics used (this corrected pass fixes two v1.0.0-style bugs): - sublib_env = "RECURSIVEARRAYTOOLS_TEST_GROUP". The monorepo root reads GROUP to pick which lib/<Sublibrary> to Pkg.test, but the sublibraries read their own RECURSIVEARRAYTOOLS_TEST_GROUP for the sub-group. The first pass relied on the default sublib_env=GROUP, which left RECURSIVEARRAYTOOLS_TEST_GROUP unset in the sublibrary subprocess (it only coincidentally ran Core via the sublib's own default). Setting sublib_env restores the original withenv handoff exactly. - all = ["Core", "SII_Main"]. "All" runs exactly the root Core body plus the in-main-env SymbolicIndexingInterface API safetestset, matching the original `GROUP == "Core" || "All"` and `GROUP == "SymbolicIndexingInterface" || "All"` branches. It deliberately excludes QA, Downstream, GPU and NoPre, which the original All branch never ran. - umbrellas: GROUP=SymbolicIndexingInterface expands to the SII API safetestset (main env) then the DiffEqArray symbol-indexing test (Downstream env), in that order, preserving the original two-stage env handoff. The Downstream group runs its four functional safetestsets followed by the same symbol_indexing test, as before. - lib_dir = lib routes a bare sublibrary GROUP (or <sublib>_<group>) to Pkg.test(sublib) with the sub-group exported via sublib_env. - per-group env = (Downstream / GPU / NoPre / QA) replaces the activate_*_env helpers; GPU keeps its explicit parent develop of root + the ArrayPartitionAnyAll sublibrary. Add SciMLTesting (1) to [extras] + [compat] + targets.test. Pkg is retained in the test deps because the Core body still Pkg.develops the ShorthandConstructors sublibrary into the main env. qa.jl is unchanged and SciMLTesting is not added to test/QA/Project.toml (qa.jl uses Aqua directly, not run_qa). Verified locally: GROUP=Core ran the full Core suite to green via the new harness (RecursiveArrayTools tests passed), and a routing simulation against the real SciMLTesting source confirmed the recorded action sequence per GROUP matches the pre-conversion runtests.jl, including RECURSIVEARRAYTOOLS_TEST_GROUP handoff. Co-authored-by: ChrisRackauckas-Claude <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
Adds a canonical QA test group to each sublibrary:
RecursiveArrayToolsArrayPartitionAnyAll, RecursiveArrayToolsRaggedArrays,
RecursiveArrayToolsShorthandConstructors.
Each unit gets test/qa/{Project.toml,qa.jl} running Aqua.test_all +
JET.test_package(target_defined_modules=true), a QA dispatch in
test/runtests.jl gated on RECURSIVEARRAYTOOLS_TEST_GROUP == "QA" (with
the Julia < 1.11 [sources] develop fallback mirroring the root QA env),
Pkg wired into [extras]/[targets] with compat so Aqua deps_compat stays
green, and a [QA] entry (versions = ["lts", "1"]) in test_groups.toml.
Co-authored-by: Chris Rackauckas (Claude) <[email protected]>
Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
…#616) The ArrayPartitionAnyAll and ShorthandConstructors sublibrary QA groups (added in SciML#614) fail Aqua's piracy check because they extend Base functions on RecursiveArrayTools-owned types: * ArrayPartitionAnyAll: any/all on ArrayPartition * ShorthandConstructors: getindex(::Type{VA}, ...), getindex(::Type{AP}, ...) These are intentional methods on types the sublibraries hard-depend on, not type piracy. Pass them via Aqua.test_all(...; piracies = (; treat_as_own = ...)) so the owned-type extensions are not flagged. Co-authored-by: ChrisRackauckas-Claude <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
…ds >= 1.10.8) (SciML#617) * Run downgrade CI on Julia 1.11 (Mooncake 0.5 needs >= 1.10.8) The Downgrade (Core) job fails on master with `ERROR: LoadError: Unsatisfiable`. The downgrade resolver runs `--min=@deps` and minimizes the Julia version to the floor implied by the workflow's Julia channel. With the default `lts` channel that floor is 1.10.0, but every Mooncake 0.5.x release (used by RecursiveArrayToolsMooncakeExt) declares `julia = "1.10.8 - 1.10, 1.11.6 - 1"`, so no Mooncake version is installable at 1.10.0 and Mooncake gets no candidate version. Reproduced locally with the actual julia-actions/julia-downgrade-compat downgrade.jl driver against a checkout of this repo: julia_version=1.10 -> ERROR: LoadError: Unsatisfiable julia_version=1.11 -> "Successfully resolved minimal versions" Pin the downgrade job to Julia 1.11 (the same approach OrdinaryDiffEq.jl uses), where 1.10.8+ is satisfied and every declared floor is jointly installable. Core support for Julia 1.10 is unchanged and is still exercised by the normal lts test legs; this only affects which Julia the downgrade resolver minimizes against. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * Fix typo: tupe -> type in named_array_partition comment Fixes the Spell Check with Typos CI failure flagging `tupe` in src/named_array_partition.jl. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * Split AD tests into a dedicated off-downgrade group Move the Mooncake/Zygote/ForwardDiff/ReverseDiff test files out of the root Core group and into a dedicated `AD` group with its own sub-environment (test/AD/Project.toml, [sources] RecursiveArrayTools = path), modeled on the NoPre group. The AD group is marked in_all = false and is not run in the Downgrade lane (which runs only Core), so its deps are never fed to the downgrade resolver. This removes Mooncake (and the other AD backends) from the root [targets].test set. The downgrade workflow builds/tests with project: "@." (the repo root) and minimizes every direct dep plus the Julia version to the 1.10.0 LTS floor; Mooncake 0.5 requires Julia >= 1.10.8, so at the 1.10.0 floor it was Unsatisfiable. With Mooncake out of the root test target the resolver no longer sees it, fixing the wall at the source instead of pinning the downgrade Julia version. This reverts the Downgrade.yml julia-version: "1.11" approach from this branch in favor of the AD split. Mooncake/Zygote/ForwardDiff/ReverseDiff remain as [weakdeps]+[compat] for the AD extensions; the AD tests still run (in their own group on a normal Julia). The tupe->type spellcheck fix is kept. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> --------- Co-authored-by: ChrisRackauckas-Claude <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
* Release RecursiveArrayToolsArrayPartitionAnyAll v1.0.1 * Release RecursiveArrayToolsRaggedArrays v1.1.1 * Release RecursiveArrayToolsShorthandConstructors v1.0.1
The GPU test environments pinned CUDA.jl below v6, but the V100 GPU CI runners now use nvidia driver 580, which requires CUDA.jl v6.2+ for correct CUDA runtime selection (CUDA.jl versions <6.2 select the runtime based on the driver version and pick an incompatible runtime; see JuliaGPU/CUDA.jl#3134). Widen the CUDA compat to "6" so the resolver picks the latest 6.x with the fix.
* QA: run_qa v1.6 form + ExplicitImports (root + sublibs) Convert every QA environment (root test/QA and each lib/<Sub>/test/qa) to the SciMLTesting v1.6 `run_qa` form with ExplicitImports enabled. Per env: - root RecursiveArrayTools: aqua_broken=(:ambiguities,) (tracking SciML#326); ei_broken=(:no_implicit_imports,) (tracking SciML#619); EI public-access ignore-list for non-public upstream names. Pkg sentinel guard preserved. - RecursiveArrayToolsArrayPartitionAnyAll: piracies treat_as_own=[ArrayPartition]; JET target_defined_modules. EI clean. - RecursiveArrayToolsShorthandConstructors: piracies treat_as_own=[VA, AP]; JET target_defined_modules. EI clean. - RecursiveArrayToolsRaggedArrays: piracies treat_as_own on the RAT-owned AbstractRagged{VectorOfArray,DiffEqArray} abstract types (fixes the pre-existing Aqua piracy false-positive); ei_broken=(:no_implicit_imports,) (SciML#619); EI ignore-lists for the RAT-owned ragged types and non-public upstream names. Removed the stale `AllObserved` explicit import (EI no_stale fix). The JET similar_type(::Any) report is a pre-existing master finding tracked in SciML#620 and is left as a hard check (not silenced). Add SciMLTesting (compat "1.6") to each QA env; ExplicitImports comes in transitively. [sources]/develop wiring preserved exactly. Co-Authored-By: Chris Rackauckas <[email protected]> Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * RaggedArrays QA: mark pre-existing JET similar_type finding as jet_broken The RecursiveArrayToolsRaggedArrays QA lane fails JET typo-mode with 4 similar_type(::Any) no-matching-method reports from the copyto!/fill!/ broadcast immutable-element branches (dest.u[i] infers as ::Any because the abstract AbstractRaggedVectorOfArray .u field is untyped). Verified byte- identically pre-existing on unmodified master (run JET.report_package on a clean bf98ebd checkout: same 4 reports at src lines 1335/1347/1468/1636; the current master tip 5e20683 Sublibrary CI also fails on exactly this one lane). Not introduced by the run_qa v1.6 conversion. Use jet_broken=true so the lane records the finding as @test_broken (report- only, auto-flags an Unexpected Pass once the real fix lands) instead of a hard red. The underlying inference fix is tracked in SciML#620. Verified locally vs released SciMLTesting 1.7.0: QA group green on Julia 1.12.6 (16 pass / 2 broken / 0 fail) and Julia 1.10 LTS (14 pass / 2 broken / 0 fail). Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Co-Authored-By: Chris Rackauckas <[email protected]> --------- Co-authored-by: ChrisRackauckas-Claude <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
…<[email protected]> (SciML#629) Co-authored-by: ChrisRackauckas-Claude <[email protected]>
- RecursiveArrayTools 4.3.3 -> 4.3.4 (patch): only change since 4.3.3 is a CI-only TagBot.yml workflow update (targeted monorepo TagBot); no source changes. - RecursiveArrayToolsArrayPartitionAnyAll 1.0.1 -> 1.0.2 (patch): QA/test scaffolding conversion to SciMLTesting run_qa v1.6 form; no src changes. - RecursiveArrayToolsRaggedArrays 1.1.1 -> 1.1.2 (patch): QA/test scaffolding conversion plus removal of a stale unused `AllObserved` import (mechanical, behavior-preserving; symbol confirmed unused in the file). - RecursiveArrayToolsShorthandConstructors 1.0.1 -> 1.0.2 (patch): QA/test scaffolding conversion to SciMLTesting run_qa v1.6 form; no src changes. No compat floor cascades required: none of the bumped packages added new public API, so sibling packages' existing "RecursiveArrayTools = 4" / "RecursiveArrayToolsShorthandConstructors = 1" compat floors already resolve correctly against the new versions.
Add missing docstrings and rendered docs entries for exported RecursiveArrayTools API, switch QA to SciMLTesting's shared rendered public-docs check, and load the ragged-array subpackage through the docs environment instead of a LOAD_PATH hack. Co-authored-by: ChrisRackauckas-Claude <[email protected]>
Co-authored-by: ChrisRackauckas-Claude <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.