From b6b9b6a34777fbe559dcadbdac91325012a5c295 Mon Sep 17 00:00:00 2001 From: Alexander Plavin Date: Tue, 13 Oct 2026 17:32:05 -0500 Subject: [PATCH 1/2] Rename package extensions --- Project.toml | 10 +++++----- ext/{StructArraysAdaptExt.jl => AdaptExt.jl} | 2 +- ...ctArraysGPUArraysCoreExt.jl => GPUArraysCoreExt.jl} | 2 +- ...ctArraysLinearAlgebraExt.jl => LinearAlgebraExt.jl} | 2 +- ...ructArraysSparseArraysExt.jl => SparseArraysExt.jl} | 2 +- ...ructArraysStaticArraysExt.jl => StaticArraysExt.jl} | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) rename ext/{StructArraysAdaptExt.jl => AdaptExt.jl} (87%) rename ext/{StructArraysGPUArraysCoreExt.jl => GPUArraysCoreExt.jl} (95%) rename ext/{StructArraysLinearAlgebraExt.jl => LinearAlgebraExt.jl} (95%) rename ext/{StructArraysSparseArraysExt.jl => SparseArraysExt.jl} (89%) rename ext/{StructArraysStaticArraysExt.jl => StaticArraysExt.jl} (99%) diff --git a/Project.toml b/Project.toml index 8ce41f62..2486b56a 100644 --- a/Project.toml +++ b/Project.toml @@ -16,11 +16,11 @@ SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" [extensions] -StructArraysAdaptExt = "Adapt" -StructArraysGPUArraysCoreExt = ["GPUArraysCore", "KernelAbstractions"] -StructArraysLinearAlgebraExt = "LinearAlgebra" -StructArraysSparseArraysExt = "SparseArrays" -StructArraysStaticArraysExt = "StaticArrays" +AdaptExt = "Adapt" +GPUArraysCoreExt = ["GPUArraysCore", "KernelAbstractions"] +LinearAlgebraExt = "LinearAlgebra" +SparseArraysExt = "SparseArrays" +StaticArraysExt = "StaticArrays" [compat] Adapt = "4" diff --git a/ext/StructArraysAdaptExt.jl b/ext/AdaptExt.jl similarity index 87% rename from ext/StructArraysAdaptExt.jl rename to ext/AdaptExt.jl index f717f882..15017f4c 100644 --- a/ext/StructArraysAdaptExt.jl +++ b/ext/AdaptExt.jl @@ -1,4 +1,4 @@ -module StructArraysAdaptExt +module AdaptExt # Use Adapt allows for automatic conversion of CPU to GPU StructArrays using Adapt, StructArrays diff --git a/ext/StructArraysGPUArraysCoreExt.jl b/ext/GPUArraysCoreExt.jl similarity index 95% rename from ext/StructArraysGPUArraysCoreExt.jl rename to ext/GPUArraysCoreExt.jl index 5b46ffaf..2fbda889 100644 --- a/ext/StructArraysGPUArraysCoreExt.jl +++ b/ext/GPUArraysCoreExt.jl @@ -1,4 +1,4 @@ -module StructArraysGPUArraysCoreExt +module GPUArraysCoreExt using StructArrays using StructArrays: map_params, array_types diff --git a/ext/StructArraysLinearAlgebraExt.jl b/ext/LinearAlgebraExt.jl similarity index 95% rename from ext/StructArraysLinearAlgebraExt.jl rename to ext/LinearAlgebraExt.jl index 6699d858..f2e439e2 100644 --- a/ext/StructArraysLinearAlgebraExt.jl +++ b/ext/LinearAlgebraExt.jl @@ -1,4 +1,4 @@ -module StructArraysLinearAlgebraExt +module LinearAlgebraExt using StructArrays using LinearAlgebra diff --git a/ext/StructArraysSparseArraysExt.jl b/ext/SparseArraysExt.jl similarity index 89% rename from ext/StructArraysSparseArraysExt.jl rename to ext/SparseArraysExt.jl index f6dfd0bf..00dc998f 100644 --- a/ext/StructArraysSparseArraysExt.jl +++ b/ext/SparseArraysExt.jl @@ -1,4 +1,4 @@ -module StructArraysSparseArraysExt +module SparseArraysExt using StructArrays: StructArray, components, createinstance import SparseArrays: sparse, issparse diff --git a/ext/StructArraysStaticArraysExt.jl b/ext/StaticArraysExt.jl similarity index 99% rename from ext/StructArraysStaticArraysExt.jl rename to ext/StaticArraysExt.jl index 503fc248..ca8a1ea6 100644 --- a/ext/StructArraysStaticArraysExt.jl +++ b/ext/StaticArraysExt.jl @@ -1,4 +1,4 @@ -module StructArraysStaticArraysExt +module StaticArraysExt using StructArrays using StaticArrays: StaticArray, FieldArray, tuple_prod, SVector, MVector, SOneTo, HeterogeneousShapeTuple From da60bcf58653e8badefb6b90b85ac7dd8c538c0e Mon Sep 17 00:00:00 2001 From: Alexander Plavin Date: Tue, 13 Oct 2026 17:33:21 -0500 Subject: [PATCH 2/2] Split KernelAbstractions extension --- Project.toml | 3 ++- ext/GPUArraysCoreExt.jl | 20 -------------------- ext/KernelAbstractionsExt.jl | 24 ++++++++++++++++++++++++ test/runtests.jl | 10 ++++++++-- 4 files changed, 34 insertions(+), 23 deletions(-) create mode 100644 ext/KernelAbstractionsExt.jl diff --git a/Project.toml b/Project.toml index 2486b56a..a74baaff 100644 --- a/Project.toml +++ b/Project.toml @@ -17,7 +17,8 @@ StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" [extensions] AdaptExt = "Adapt" -GPUArraysCoreExt = ["GPUArraysCore", "KernelAbstractions"] +GPUArraysCoreExt = "GPUArraysCore" +KernelAbstractionsExt = "KernelAbstractions" LinearAlgebraExt = "LinearAlgebra" SparseArraysExt = "SparseArrays" StaticArraysExt = "StaticArrays" diff --git a/ext/GPUArraysCoreExt.jl b/ext/GPUArraysCoreExt.jl index 2fbda889..91f7a001 100644 --- a/ext/GPUArraysCoreExt.jl +++ b/ext/GPUArraysCoreExt.jl @@ -1,27 +1,7 @@ module GPUArraysCoreExt using StructArrays -using StructArrays: map_params, array_types - -using Base: tail - import GPUArraysCore -import KernelAbstractions as KA - -function KA.get_backend(x::T) where {T<:StructArray} - components = StructArrays.components(x) - array_components = filter( - fn -> getfield(components, fn) isa AbstractArray, - fieldnames(typeof(components))) - backends = map( - fn -> KA.get_backend(getfield(components, fn)), - array_components) - - backend, others = backends[1], tail(backends) - isconsistent = mapfoldl(isequal(backend), &, others; init=true) - isconsistent || throw(ArgumentError("all component arrays must have the same GPU backend")) - return backend -end StructArrays.always_struct_broadcast(::GPUArraysCore.AbstractGPUArrayStyle) = true diff --git a/ext/KernelAbstractionsExt.jl b/ext/KernelAbstractionsExt.jl new file mode 100644 index 00000000..12ca1307 --- /dev/null +++ b/ext/KernelAbstractionsExt.jl @@ -0,0 +1,24 @@ +module KernelAbstractionsExt + +using StructArrays + +using Base: tail + +import KernelAbstractions as KA + +function KA.get_backend(x::T) where {T<:StructArray} + components = StructArrays.components(x) + array_components = filter( + fn -> getfield(components, fn) isa AbstractArray, + fieldnames(typeof(components))) + backends = map( + fn -> KA.get_backend(getfield(components, fn)), + array_components) + + backend, others = backends[1], tail(backends) + isconsistent = mapfoldl(isequal(backend), &, others; init=true) + isconsistent || throw(ArgumentError("all component arrays must have the same GPU backend")) + return backend +end + +end # module diff --git a/test/runtests.jl b/test/runtests.jl index d97b89b5..9ec78d51 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,4 +1,12 @@ using StructArrays +using Test +import KernelAbstractions as KA + +@testset "KernelAbstractions without GPUArraysCore" begin + s = StructArray(a=[1, 2], b=[3, 4]) + @test (@inferred KA.get_backend(s)) == KA.CPU() +end + using StructArrays: staticschema, iscompatible, _promote_typejoin, append!! using OffsetArrays: OffsetArray, OffsetVector, OffsetMatrix using StaticArrays @@ -8,12 +16,10 @@ using Adapt: adapt, Adapt using ConstructionBase: constructorof, setproperties, getproperties, getfields using JLArrays using LinearAlgebra -using Test using SparseArrays using InfiniteArrays import Aqua -import KernelAbstractions as KA import Tables, PooledArrays, WeakRefStrings using Documenter: doctest