Skip to content

Fix downgrade CI: add GPUArrays compat floor (8.4) and raise ArrayInterface to 7.7 - #42

Merged
ChrisRackauckas merged 2 commits into
SciML:mainfrom
ChrisRackauckas-Claude:fix-downgrade-arrayinterface-adapt4-floor
Jun 20, 2026
Merged

ChrisRackauckas merged 2 commits into
SciML:mainfrom
ChrisRackauckas-Claude:fix-downgrade-arrayinterface-adapt4-floor

Conversation

@ChrisRackauckas-Claude

@ChrisRackauckas-Claude ChrisRackauckas-Claude commented Jun 19, 2026 •

Copy link
Copy Markdown
Member

Fix downgrade CI failure (interface_compatibility_tests.jl JLArray testset)

The downgrade job was failing in the JLArray error messages testset (8 passed / 8 failed).

Root cause

The package guards against GPU arrays with ArrayInterface.fast_scalar_indexing(A) and throws a friendly ArgumentError ("requires arrays with fast scalar indexing. GPU arrays are not supported"). The test feeds a JLArray and asserts that ArgumentError.

During downgrade resolution, GPUArrays is pulled in transitively via JLArrays 0.1.1 and resolves to its floor 8.1.3. At GPUArrays < 8.4, ArrayInterface.fast_scalar_indexing(::JLArray) returns true, so the package guard never fires; the code scalar-indexes the JLArray and GPUArrays raises its own ErrorException("Scalar indexing is disallowed...") instead of the expected ArgumentError. fast_scalar_indexing first returns false for JLArray at GPUArrays 8.4.0.

Bisected locally on Julia 1.10 (lts) with the CI-resolved ArrayInterface 7.7.0 / JLArrays 0.1.1:

GPUArrays fast_scalar_indexing(JLArray) interface test
8.1.3 (CI) true 8/8 FAIL (reproduces CI)
8.3.2 true fail
8.4.0 false 16/16 PASS
11.5.8 (newest) false pass

Fix

Add an explicit GPUArrays compat floor (8.4, 9, 10, 11) plus the matching [extras]/test-target entries, so downgrade resolution cannot pick the broken < 8.4 series. (The earlier ArrayInterface 7.1 → 7.7 floor bump remains, addressing the original Adapt/ArrayInterface resolution issue.)

Local verification (Julia 1.10.11)

  • GPUArrays 8.1.3 + JLArrays 0.1.1 + ArrayInterface 7.7.0 → interface_compatibility_tests.jl: 8 pass / 8 fail (reproduces CI).
  • GPUArrays 8.4.0 (new floor) + same → 16/16 pass.
  • Full GROUP=Core Pkg.test() on lts at normal resolution → all green.

Please ignore until reviewed by @ChrisRackauckas

ChrisRackauckas and others added 2 commits June 19, 2026 06:28
The downgrade CI (Julia lts) was failing the JLArray error-message tests in
test/interface_compatibility_tests.jl: the package threw the cryptic GPUArrays
"Scalar indexing is disallowed" ErrorException instead of the friendly
ArgumentError its guard is supposed to raise.

Root cause: the guard relies on ArrayInterface.fast_scalar_indexing(JLArray)
== false, which is only true when ArrayInterface's GPUArraysCore extension is
loaded. ArrayInterface 7.1's [compat] caps Adapt at 3.7.2. In the downgrade
resolution that forced GPUArrays down to 8.1.3 (pre-8.4, before the
GPUArraysCore split), so GPUArraysCore was absent from the manifest, the
extension never loaded, fast_scalar_indexing(JLArray) returned true, the guard
did not fire, and indexing the JLArray triggered the GPUArrays scalar-indexing
error.

ArrayInterface 7.7 is the first release whose [compat] allows Adapt 4. Raising
the floor lets the downgrade resolver pick GPUArrays 10.3.1 + GPUArraysCore
0.1.6, so the extension loads and fast_scalar_indexing(JLArray) is false again.

Verified locally on Julia 1.10 (lts): the previously-failing testset now passes
16/16. Full Pkg.test() also passes on Julia 1.12, which resolves to
ArrayInterface 7.25 (unaffected by the raised lower bound).

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ng test

The downgrade CI resolved GPUArrays to 8.1.3 (pulled transitively via
JLArrays 0.1.1), where ArrayInterface.fast_scalar_indexing(::JLArray)
returns true. The package's GPU-array guard therefore never fired and
scalar indexing proceeded, so GPUArrays raised its own
"Scalar indexing is disallowed" ErrorException instead of the package's
ArgumentError, failing the JLArray-error-message testset.

fast_scalar_indexing first reports false for JLArray at GPUArrays 8.4.0,
so floor GPUArrays at 8.4 (covering 8.4, 9, 10, 11). Verified locally on
Julia 1.10 with the CI-resolved ArrayInterface 7.7.0 / JLArrays 0.1.1:
8.1.3 reproduces the 8/8 failure, 8.4.0 passes 16/16; full Core suite green.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ChrisRackauckas-Claude ChrisRackauckas-Claude changed the title Raise ArrayInterface compat floor to 7.7 to fix downgrade CI Fix downgrade CI: add GPUArrays compat floor (8.4) and raise ArrayInterface to 7.7 Jun 19, 2026
@ChrisRackauckas
ChrisRackauckas marked this pull request as ready for review June 20, 2026 11:09
@ChrisRackauckas
ChrisRackauckas merged commit 8ef78c3 into SciML:main Jun 20, 2026
11 checks passed
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.

2 participants