From 408f042470d48f03264aa94e042a3d2e023399d7 Mon Sep 17 00:00:00 2001 From: Katharine Hyatt Date: Fri, 27 Feb 2026 13:48:58 +0100 Subject: [PATCH 1/2] Add JLArrays extension and tests --- Project.toml | 6 +++++- ext/StridedViewsJLArraysExt.jl | 27 +++++++++++++++++++++++++++ test/runtests.jl | 13 +++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 ext/StridedViewsJLArraysExt.jl diff --git a/Project.toml b/Project.toml index 72f3c7e..7abe04d 100644 --- a/Project.toml +++ b/Project.toml @@ -11,10 +11,12 @@ PackageExtensionCompat = "65ce6f38-6b18-4e1d-a461-8949797d7930" AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" PtrArrays = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" +JLArrays = "27aeb0d3-9eb9-45fb-866b-73c2ecf80fcb" [extensions] StridedViewsAMDGPUExt = "AMDGPU" StridedViewsCUDAExt = "CUDA" +StridedViewsJLArraysExt = "JLArrays" StridedViewsPtrArraysExt = "PtrArrays" [compat] @@ -22,6 +24,7 @@ AMDGPU = "2" Aqua = "0.8" CUDA = "4,5" JET = "0.9, 0.10, 0.11" +JLArrays = "0.3.1" LinearAlgebra = "1.6" PackageExtensionCompat = "1" PtrArrays = "1.2.0" @@ -34,9 +37,10 @@ AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" +JLArrays = "27aeb0d3-9eb9-45fb-866b-73c2ecf80fcb" PtrArrays = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [targets] -test = ["Test", "Random", "Aqua", "JET", "PtrArrays", "CUDA", "AMDGPU"] +test = ["Test", "Random", "Aqua", "JET", "PtrArrays", "CUDA", "AMDGPU", "JLArrays"] diff --git a/ext/StridedViewsJLArraysExt.jl b/ext/StridedViewsJLArraysExt.jl new file mode 100644 index 0000000..02c863c --- /dev/null +++ b/ext/StridedViewsJLArraysExt.jl @@ -0,0 +1,27 @@ +module StridedViewsJLArraysExt + +using StridedViews +using JLArrays +using JLArrays: Adapt + +const JLArrayStridedView{T, N, A <: JLArray{T}} = StridedView{T, N, A} + +function Adapt.adapt_structure(to, A::JLArrayStridedView) + return StridedView( + Adapt.adapt_structure(to, parent(A)), + A.size, A.strides, A.offset, A.op + ) +end + +function Base.pointer(x::JLArrayStridedView{T}) where {T} + return Base.unsafe_convert(Ptr{T}, pointer(x.parent, x.offset + 1)) +end +function Base.unsafe_convert(::Type{Ptr{T}}, a::JLArrayStridedView{T}) where {T} + return convert(Ptr{T}, pointer(a)) +end + +function Base.print_array(io::IO, X::JLArrayStridedView) + return Base.print_array(io, Adapt.adapt_structure(Array, X)) +end + +end # module diff --git a/test/runtests.jl b/test/runtests.jl index 36cc38e..f53dffe 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -2,6 +2,7 @@ using Test using LinearAlgebra using Random using StridedViews +using JLArrays Random.seed!(1234) @@ -290,6 +291,18 @@ if !is_buildkite end end + @testset "JLArrays with StridedView" begin + @testset for T in (Float64, ComplexF64) + A = JLArray(randn(T, 10, 10, 10, 10)) + @test isstrided(A) + B = StridedView(A) + @test B isa StridedView + JLArrays.@allowscalar begin + @test B == A + end + end + end + using Aqua Aqua.test_all(StridedViews) From 3be0115d92ddcddef35d38e44cfa1f94f957020a Mon Sep 17 00:00:00 2001 From: Katharine Hyatt Date: Fri, 27 Feb 2026 16:02:32 +0100 Subject: [PATCH 2/2] Add a test --- test/runtests.jl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/runtests.jl b/test/runtests.jl index f53dffe..4b9a133 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -293,13 +293,16 @@ if !is_buildkite @testset "JLArrays with StridedView" begin @testset for T in (Float64, ComplexF64) - A = JLArray(randn(T, 10, 10, 10, 10)) + Araw = randn(T, 10, 10, 10, 10) + A = JLArray(Araw) @test isstrided(A) B = StridedView(A) @test B isa StridedView JLArrays.@allowscalar begin @test B == A end + Bvec = JLArrays.Adapt.adapt(Vector{T}, B) + @test Bvec == StridedView(Araw) end end