Skip to content

Commit ba8116f

Browse files
Merge pull request #373 from JuliaArrays/redo
Redo ArrayInterface to use extension packages
2 parents 1c78e7c + b92a32a commit ba8116f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+2607
-2898
lines changed

.buildkite/pipeline.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ steps:
44
- JuliaCI/julia#v1:
55
version: "1"
66
- JuliaCI/julia-test#v1:
7-
- JuliaCI/julia-coverage#v1:
8-
codecov: true
7+
coverage: false # 1000x slowdown
98
agents:
109
queue: "juliagpu"
1110
cuda: "*"
1211
timeout_in_minutes: 60
12+
# Don't run Buildkite if the commit message includes the text [skip tests]
13+
if: build.message !~ /\[skip tests\]/
1314

1415
env:
16+
GROUP: GPU
1517
JULIA_PKG_SERVER: "" # it often struggles with our large artifacts
16-
SECRET_CODECOV_TOKEN: "b3VnbGgFLwQ5JLdP+RtluFzff8Iq7OdCr1mQiXIcrRz6w1gH1ZBO74lh5/G8G0DCZ8FcDPExcAU15Bgg1fnuKBUD+pM5+lh75Omd8sIQwy04KuFjya8LYRYTg9Jpi9LiUVFke/EpXnii84WkWGfvNMpLQedLvuM8FUzInFnuXicMgrbcIQQO0M7va/Efwn7yRiBLmgGv8jI5hphHsjF7joU1tnNeJEPTZ/oKzubxta0DlLW4DYaaRZc9RmsXGH2bg1el+ujouf8YZ4ncO7okvsgjSXzKxdGqN74WqlgzLZRtvtDkDRT8jTlugDq9C+oeUDnCfc6VJcSaNw1Kmk5OyQ==;U2FsdGVkX1+l463STh4TdVc8OUkIO2uf1pWXUtVHDZHgxILX1+40v9kVYUGznEE/flndA4dOk6PrND8KnISGsA=="
18+
# SECRET_CODECOV_TOKEN: "..."

.ci/test.jl

Lines changed: 0 additions & 23 deletions
This file was deleted.

.github/workflows/ci.yml

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,10 @@ on:
99
jobs:
1010
test:
1111
runs-on: ubuntu-latest
12-
continue-on-error: ${{ matrix.group == 'Downstream' }}
1312
strategy:
14-
fail-fast: false
1513
matrix:
1614
group:
17-
- ArrayInterface
18-
- ArrayInterfaceCore
19-
- ArrayInterfaceBandedMatrices
20-
- ArrayInterfaceBlockBandedMatrices
21-
- ArrayInterfaceOffsetArrays
22-
- ArrayInterfaceStaticArrays
23-
- ArrayInterfaceStaticArraysCore
24-
- ArrayInterfaceTracker
15+
- Core
2516
version:
2617
- '1'
2718
- '1.6'
@@ -40,10 +31,11 @@ jobs:
4031
${{ runner.os }}-test-${{ env.cache-name }}-
4132
${{ runner.os }}-test-
4233
${{ runner.os }}-
43-
- run: julia .ci/test.jl
34+
- uses: julia-actions/julia-buildpkg@v1
35+
- uses: julia-actions/julia-runtest@v1
4436
env:
4537
GROUP: ${{ matrix.group }}
4638
- uses: julia-actions/julia-processcoverage@v1
4739
- uses: codecov/codecov-action@v1
4840
with:
49-
file: lcov.info
41+
file: lcov.info

Project.toml

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,60 @@ uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9"
33
version = "6.0.25"
44

55
[deps]
6-
ArrayInterfaceCore = "30b0a656-2188-435a-8636-2ec0e6a096e2"
6+
Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
77
Compat = "34da2185-b29b-5c13-b0c7-acf172513d20"
88
IfElse = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173"
99
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
10+
Requires = "ae029012-a4dd-5104-9daa-d747884805df"
1011
SnoopPrecompile = "66db9d55-30c0-4569-8b51-7e840670fc0c"
11-
Static = "aedffcd0-7271-4cad-89d0-dc628f76c6d3"
12+
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
13+
SuiteSparse = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9"
1214

1315
[compat]
14-
ArrayInterfaceCore = "0.1.3"
15-
Compat = "3, 4"
16-
IfElse = "0.1"
16+
Compat = "4"
1717
SnoopPrecompile = "1"
18-
Static = "0.8"
18+
Requires = "1"
1919
julia = "1.6"
2020

21+
[extensions]
22+
ArrayInterfaceBandedMatricesExt = "BandedMatrices"
23+
ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices"
24+
ArrayInterfaceCUDAExt = "CUDA"
25+
ArrayInterfaceGPUArraysExt = "GPUArraysCore"
26+
ArrayInterfaceOffsetArraysExt = ["OffsetArrays","Static"]
27+
ArrayInterfaceStaticArraysExt = ["StaticArrays","Static"]
28+
ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore"
29+
ArrayInterfaceStaticExt = "Static"
30+
ArrayInterfaceTrackerExt = "Tracker"
31+
2132
[extras]
2233
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
34+
BandedMatrices = "aae01518-5342-5314-be14-df237901396f"
35+
BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0"
36+
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
37+
GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527"
38+
OffsetArrays = "6fe1bfb0-de20-5000-8ca7-80f57d26f881"
39+
Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595"
40+
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
41+
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
42+
SuiteSparse = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9"
43+
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
44+
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
45+
StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c"
46+
Static = "aedffcd0-7271-4cad-89d0-dc628f76c6d3"
47+
Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c"
2348
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
2449

2550
[targets]
26-
test = ["Pkg", "Test"]
51+
test = ["SafeTestsets", "Pkg", "Test", "Aqua", "Random", "SparseArrays", "SuiteSparse", "Static", "BandedMatrices", "BlockBandedMatrices", "GPUArraysCore", "OffsetArrays", "StaticArrays", "StaticArraysCore", "Tracker"]
52+
53+
[weakdeps]
54+
BandedMatrices = "aae01518-5342-5314-be14-df237901396f"
55+
BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0"
56+
GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527"
57+
OffsetArrays = "6fe1bfb0-de20-5000-8ca7-80f57d26f881"
58+
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
59+
StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c"
60+
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
61+
Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c"
62+
Static = "aedffcd0-7271-4cad-89d0-dc628f76c6d3"

lib/ArrayInterfaceBandedMatrices/src/ArrayInterfaceBandedMatrices.jl renamed to ext/ArrayInterfaceBandedMatricesExt.jl

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,8 @@
1-
module ArrayInterfaceBandedMatrices
1+
module ArrayInterfaceBandedMatricesExt
22

3-
using ArrayInterfaceCore
4-
using BandedMatrices
5-
6-
struct BandedMatrixIndex <: ArrayInterfaceCore.MatrixIndex
7-
count::Int
8-
rowsize::Int
9-
colsize::Int
10-
bandinds::Array{Int,1}
11-
bandsizes::Array{Int,1}
12-
isrow::Bool
13-
end
3+
using ArrayInterface
4+
using ArrayInterface: BandedMatrixIndex
5+
isdefined(Base, :get_extension) ? (using BandedMatrices) : (using ..BandedMatrices)
146

157
Base.firstindex(i::BandedMatrixIndex) = 1
168
Base.lastindex(i::BandedMatrixIndex) = i.count
@@ -50,22 +42,22 @@ function BandedMatrixIndex(rowsize, colsize, lowerbandwidth, upperbandwidth, isr
5042
BandedMatrixIndex(sum(bandsizes), rowsize, colsize, bandinds, bandsizes, isrow)
5143
end
5244

53-
function ArrayInterfaceCore.findstructralnz(x::BandedMatrices.BandedMatrix)
45+
function ArrayInterface.findstructralnz(x::BandedMatrices.BandedMatrix)
5446
l, u = BandedMatrices.bandwidths(x)
5547
rowsize, colsize = Base.size(x)
5648
rowind = BandedMatrixIndex(rowsize, colsize, l, u, true)
5749
colind = BandedMatrixIndex(rowsize, colsize, l, u, false)
5850
return (rowind, colind)
5951
end
6052

61-
ArrayInterfaceCore.has_sparsestruct(::Type{<:BandedMatrices.BandedMatrix}) = true
62-
ArrayInterfaceCore.isstructured(::Type{<:BandedMatrices.BandedMatrix}) = true
63-
ArrayInterfaceCore.fast_matrix_colors(::Type{<:BandedMatrices.BandedMatrix}) = true
53+
ArrayInterface.has_sparsestruct(::Type{<:BandedMatrices.BandedMatrix}) = true
54+
ArrayInterface.isstructured(::Type{<:BandedMatrices.BandedMatrix}) = true
55+
ArrayInterface.fast_matrix_colors(::Type{<:BandedMatrices.BandedMatrix}) = true
6456

65-
function ArrayInterfaceCore.matrix_colors(A::BandedMatrices.BandedMatrix)
57+
function ArrayInterface.matrix_colors(A::BandedMatrices.BandedMatrix)
6658
l, u = BandedMatrices.bandwidths(A)
6759
width = u + l + 1
68-
return ArrayInterfaceCore._cycle(1:width, Base.size(A, 2))
60+
return ArrayInterface._cycle(1:width, Base.size(A, 2))
6961
end
7062

7163
end # module
Lines changed: 35 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1-
module ArrayInterfaceBlockBandedMatrices
1+
module ArrayInterfaceBlockBandedMatricesExt
22

3-
using ArrayInterfaceCore
4-
using ArrayInterfaceBandedMatrices
5-
using BlockArrays
6-
using BlockBandedMatrices
3+
using ArrayInterface
4+
using ArrayInterface: BandedMatrixIndex
75

8-
struct BlockBandedMatrixIndex <: ArrayInterfaceCore.MatrixIndex
6+
if isdefined(Base, :get_extension)
7+
using BlockBandedMatrices
8+
using BlockBandedMatrices.BlockArrays
9+
else
10+
using ..BlockBandedMatrices
11+
using ..BlockBandedMatrices.BlockArrays
12+
end
13+
14+
struct BlockBandedMatrixIndex <: ArrayInterface.MatrixIndex
915
count::Int
1016
refinds::Array{Int,1}
1117
refcoords::Array{Int,1}# storing col or row inds at ref points
@@ -15,8 +21,8 @@ Base.firstindex(i::BlockBandedMatrixIndex) = 1
1521
Base.lastindex(i::BlockBandedMatrixIndex) = i.count
1622
Base.length(i::BlockBandedMatrixIndex) = lastindex(i)
1723
function BlockBandedMatrixIndex(nrowblock, ncolblock, rowsizes, colsizes, l, u)
18-
blockrowind = ArrayInterfaceBandedMatrices.BandedMatrixIndex(nrowblock, ncolblock, l, u, true)
19-
blockcolind = ArrayInterfaceBandedMatrices.BandedMatrixIndex(nrowblock, ncolblock, l, u, false)
24+
blockrowind = BandedMatrixIndex(nrowblock, ncolblock, l, u, true)
25+
blockcolind = BandedMatrixIndex(nrowblock, ncolblock, l, u, false)
2026
sortedinds = sort(
2127
[(blockrowind[i], blockcolind[i]) for i = 1:length(blockrowind)],
2228
by=x -> x[1],
@@ -81,7 +87,7 @@ Base.@propagate_inbounds function Base.getindex(ind::BlockBandedMatrixIndex, i::
8187
end
8288
end
8389

84-
function ArrayInterfaceCore.findstructralnz(x::BlockBandedMatrices.BlockBandedMatrix)
90+
function ArrayInterface.findstructralnz(x::BlockBandedMatrices.BlockBandedMatrix)
8591
l, u = BlockBandedMatrices.blockbandwidths(x)
8692
nrowblock = BlockBandedMatrices.blocksize(x, 1)
8793
ncolblock = BlockBandedMatrices.blocksize(x, 2)
@@ -96,11 +102,11 @@ function ArrayInterfaceCore.findstructralnz(x::BlockBandedMatrices.BlockBandedMa
96102
u,
97103
)
98104
end
99-
struct BandedBlockBandedMatrixIndex <: ArrayInterfaceCore.MatrixIndex
105+
struct BandedBlockBandedMatrixIndex <: ArrayInterface.MatrixIndex
100106
count::Int
101107
refinds::Array{Int,1}
102108
refcoords::Array{Int,1}# storing col or row inds at ref points
103-
reflocalinds::Array{ArrayInterfaceBandedMatrices.BandedMatrixIndex,1}
109+
reflocalinds::Array{BandedMatrixIndex,1}
104110
isrow::Bool
105111
end
106112
Base.firstindex(i::BandedBlockBandedMatrixIndex) = 1
@@ -128,8 +134,8 @@ function BandedBlockBandedMatrixIndex(
128134
lambda,
129135
mu,
130136
)
131-
blockrowind = ArrayInterfaceBandedMatrices.BandedMatrixIndex(nrowblock, ncolblock, l, u, true)
132-
blockcolind = ArrayInterfaceBandedMatrices.BandedMatrixIndex(nrowblock, ncolblock, l, u, false)
137+
blockrowind = BandedMatrixIndex(nrowblock, ncolblock, l, u, true)
138+
blockcolind = BandedMatrixIndex(nrowblock, ncolblock, l, u, false)
133139
sortedinds = sort(
134140
[(blockrowind[i], blockcolind[i]) for i = 1:length(blockrowind)],
135141
by=x -> x[1],
@@ -143,14 +149,14 @@ function BandedBlockBandedMatrixIndex(
143149
refinds = Array{Int,1}()
144150
refrowcoords = Array{Int,1}()
145151
refcolcoords = Array{Int,1}()
146-
reflocalrowinds = Array{ArrayInterfaceBandedMatrices.BandedMatrixIndex,1}()
147-
reflocalcolinds = Array{ArrayInterfaceBandedMatrices.BandedMatrixIndex,1}()
152+
reflocalrowinds = Array{BandedMatrixIndex,1}()
153+
reflocalcolinds = Array{BandedMatrixIndex,1}()
148154
for ind in sortedinds
149155
rowind, colind = ind
150156
localrowind =
151-
ArrayInterfaceBandedMatrices.BandedMatrixIndex(rowsizes[rowind], colsizes[colind], lambda, mu, true)
157+
BandedMatrixIndex(rowsizes[rowind], colsizes[colind], lambda, mu, true)
152158
localcolind =
153-
ArrayInterfaceBandedMatrices.BandedMatrixIndex(rowsizes[rowind], colsizes[colind], lambda, mu, false)
159+
BandedMatrixIndex(rowsizes[rowind], colsizes[colind], lambda, mu, false)
154160
push!(refinds, currenti)
155161
push!(refrowcoords, rowheights[rowind])
156162
push!(refcolcoords, colwidths[colind])
@@ -178,7 +184,7 @@ function BandedBlockBandedMatrixIndex(
178184
rowindobj, colindobj
179185
end
180186

181-
function ArrayInterfaceCore.findstructralnz(x::BlockBandedMatrices.BandedBlockBandedMatrix)
187+
function ArrayInterface.findstructralnz(x::BlockBandedMatrices.BandedBlockBandedMatrix)
182188
l, u = BlockBandedMatrices.blockbandwidths(x)
183189
lambda, mu = BlockBandedMatrices.subblockbandwidths(x)
184190
nrowblock = BlockBandedMatrices.blocksize(x, 1)
@@ -197,19 +203,19 @@ function ArrayInterfaceCore.findstructralnz(x::BlockBandedMatrices.BandedBlockBa
197203
)
198204
end
199205

200-
ArrayInterfaceCore.has_sparsestruct(::Type{<:BlockBandedMatrices.BlockBandedMatrix}) = true
201-
ArrayInterfaceCore.has_sparsestruct(::Type{<:BlockBandedMatrices.BandedBlockBandedMatrix}) = true
202-
ArrayInterfaceCore.isstructured(::Type{<:BlockBandedMatrices.BlockBandedMatrix}) = true
203-
ArrayInterfaceCore.isstructured(::Type{<:BlockBandedMatrices.BandedBlockBandedMatrix}) = true
204-
ArrayInterfaceCore.fast_matrix_colors(::Type{<:BlockBandedMatrices.BlockBandedMatrix}) = true
205-
ArrayInterfaceCore.fast_matrix_colors(::Type{<:BlockBandedMatrices.BandedBlockBandedMatrix}) = true
206+
ArrayInterface.has_sparsestruct(::Type{<:BlockBandedMatrices.BlockBandedMatrix}) = true
207+
ArrayInterface.has_sparsestruct(::Type{<:BlockBandedMatrices.BandedBlockBandedMatrix}) = true
208+
ArrayInterface.isstructured(::Type{<:BlockBandedMatrices.BlockBandedMatrix}) = true
209+
ArrayInterface.isstructured(::Type{<:BlockBandedMatrices.BandedBlockBandedMatrix}) = true
210+
ArrayInterface.fast_matrix_colors(::Type{<:BlockBandedMatrices.BlockBandedMatrix}) = true
211+
ArrayInterface.fast_matrix_colors(::Type{<:BlockBandedMatrices.BandedBlockBandedMatrix}) = true
206212

207-
function ArrayInterfaceCore.matrix_colors(A::BlockBandedMatrices.BlockBandedMatrix)
213+
function ArrayInterface.matrix_colors(A::BlockBandedMatrices.BlockBandedMatrix)
208214
l, u = BlockBandedMatrices.blockbandwidths(A)
209215
blockwidth = l + u + 1
210216
nblock = BlockBandedMatrices.blocksize(A, 2)
211217
cols = BlockArrays.blocklengths(axes(A, 2))
212-
blockcolors = ArrayInterfaceCore._cycle(1:blockwidth, nblock)
218+
blockcolors = ArrayInterface._cycle(1:blockwidth, nblock)
213219
# the reserved number of colors of a block is the maximum length of columns of blocks with the same block color
214220
ncolors = [maximum(cols[i:blockwidth:nblock]) for i = 1:blockwidth]
215221
endinds = cumsum(ncolors)
@@ -221,14 +227,14 @@ function ArrayInterfaceCore.matrix_colors(A::BlockBandedMatrices.BlockBandedMatr
221227
return reduce(vcat, colors)
222228
end
223229

224-
function ArrayInterfaceCore.matrix_colors(A::BlockBandedMatrices.BandedBlockBandedMatrix)
230+
function ArrayInterface.matrix_colors(A::BlockBandedMatrices.BandedBlockBandedMatrix)
225231
l, u = BlockBandedMatrices.blockbandwidths(A)
226232
lambda, mu = BlockBandedMatrices.subblockbandwidths(A)
227233
blockwidth = l + u + 1
228234
subblockwidth = lambda + mu + 1
229235
nblock = BlockBandedMatrices.blocksize(A, 2)
230236
cols = BlockArrays.blocklengths(axes(A, 2))
231-
blockcolors = ArrayInterfaceCore._cycle(1:blockwidth, nblock)
237+
blockcolors = ArrayInterface._cycle(1:blockwidth, nblock)
232238
# the reserved number of colors of a block is the min of subblockwidth and the largest length of columns of blocks with the same block color
233239
ncolors = [
234240
min(subblockwidth, maximum(cols[i:blockwidth:nblock]))
@@ -237,7 +243,7 @@ function ArrayInterfaceCore.matrix_colors(A::BlockBandedMatrices.BandedBlockBand
237243
endinds = cumsum(ncolors)
238244
startinds = [endinds[i] - ncolors[i] + 1 for i = 1:min(blockwidth, nblock)]
239245
colors = [
240-
ArrayInterfaceCore._cycle(startinds[blockcolors[i]]:endinds[blockcolors[i]], cols[i])
246+
ArrayInterface._cycle(startinds[blockcolors[i]]:endinds[blockcolors[i]], cols[i])
241247
for i = 1:nblock
242248
]
243249
return reduce(vcat, colors)

lib/ArrayInterfaceCUDA/src/ArrayInterfaceCUDA.jl renamed to ext/ArrayInterfaceCUDAExt.jl

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
1-
module ArrayInterfaceCUDA
1+
module ArrayInterfaceCUDAExt
22

33
using Adapt
4-
using ArrayInterface, ArrayInterfaceGPUArrays
5-
using CUDA
6-
using CUDA.CUSOLVER
4+
using ArrayInterface
5+
6+
if isdefined(Base, :get_extension)
7+
using CUDA
8+
using CUDA.CUSOLVER
9+
else
10+
using ..CUDA
11+
using ..CUDA.CUSOLVER
12+
end
713

814
using LinearAlgebra
915

ext/ArrayInterfaceGPUArraysCoreExt.jl

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
module ArrayInterfaceGPUArraysExt
2+
3+
using Adapt
4+
using ArrayInterface
5+
using LinearAlgebra: lu
6+
isdefined(Base, :get_extension) ? (import GPUArraysCore) : (import ..GPUArraysCore)
7+
8+
ArrayInterface.fast_scalar_indexing(::Type{<:GPUArraysCore.AbstractGPUArray}) = false
9+
@inline ArrayInterface.allowed_getindex(x::GPUArraysCore.AbstractGPUArray, i...) = GPUArraysCore.@allowscalar(x[i...])
10+
@inline ArrayInterface.allowed_setindex!(x::GPUArraysCore.AbstractGPUArray, v, i...) = (GPUArraysCore.@allowscalar(x[i...] = v))
11+
12+
function Base.setindex(x::GPUArraysCore.AbstractGPUArray, v, i::Int)
13+
_x = copy(x)
14+
ArrayInterface.allowed_setindex!(_x, v, i)
15+
return _x
16+
end
17+
18+
function ArrayInterface.restructure(x::GPUArraysCore.AbstractGPUArray, y)
19+
reshape(Adapt.adapt(ArrayInterface.parameterless_type(x), y), Base.size(x)...)
20+
end
21+
22+
function ArrayInterface.lu_instance(A::GPUArraysCore.AbstractGPUMatrix{T}) where {T}
23+
lu(Adapt.adapt(ArrayInterface.parameterless_type(A), ones(T, 0, 0)))
24+
end
25+
26+
# Doesn't do much, but makes a gigantic change to the dependency chain.
27+
# ArrayInterface.device(::Type{<:GPUArraysCore.AbstractGPUArray}) = ArrayInterface.GPU()
28+
29+
end

0 commit comments

Comments
 (0)