diff --git a/docs/src/releasenotes.md b/docs/src/releasenotes.md index 56a0bb66..1bf50ec8 100644 --- a/docs/src/releasenotes.md +++ b/docs/src/releasenotes.md @@ -2,6 +2,7 @@ ## Unreleased * Added `PYTHON_JULIACALL_HEAP_SIZE_HINT` option to configure initial Julia heap size. +* `Base.elsize` now defined for `PyArray`. ## 0.9.24 (2025-01-22) * Bug fixes. diff --git a/src/Wrap/PyArray.jl b/src/Wrap/PyArray.jl index eb561bbc..37dea3ac 100644 --- a/src/Wrap/PyArray.jl +++ b/src/Wrap/PyArray.jl @@ -637,6 +637,8 @@ Base.IndexStyle(::Type{PyArray{T,N,M,L,R}}) where {T,N,M,L,R} = Base.unsafe_convert(::Type{Ptr{T}}, x::PyArray{T,N,M,L,T}) where {T,N,M,L} = x.ptr +Base.elsize(::Type{PyArray{T,N,M,L,T}}) where {T,N,M,L} = sizeof(T) + Base.strides(x::PyArray{T,N,M,L,R}) where {T,N,M,L,R} = if all(mod.(x.strides, sizeof(R)) .== 0) div.(x.strides, sizeof(R)) diff --git a/test/Wrap.jl b/test/Wrap.jl index a1e2a359..c0af7ba2 100644 --- a/test/Wrap.jl +++ b/test/Wrap.jl @@ -26,6 +26,13 @@ @test strides(y) === (1,) @test strides(z) === (1,) end + @testset "elsize" begin + @test Base.elsize(y) === sizeof(Cint) + @test Base.elsize(z) === sizeof(Cint) + @test Base.elsize(PyArray{Cint,1,true,true,Cint}) === sizeof(Cint) + @test Base.elsize(PyArray{Cint,1,false,false,Cint}) === sizeof(Cint) + @test_throws Exception elsize(PyArray{Cint,1,true,false,Cchar}) + end @testset "getindex" begin @test_throws BoundsError y[0] @test y[1] == 1