diff --git a/Project.toml b/Project.toml index 2caeebe..f239211 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "DiagonalArrays" uuid = "74fd4be6-21e2-4f6f-823a-4360d37c7a77" -version = "0.3.24" authors = ["ITensor developers and contributors"] +version = "0.3.25" [deps] ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" @@ -13,16 +13,19 @@ SparseArraysBase = "0d5efcca-f356-4864-8770-e1ed8d78f208" [weakdeps] MatrixAlgebraKit = "6c742aac-3347-4629-af66-fc926824e5e4" +NamedDimsArrays = "60cbd0c0-df58-4cb7-918c-6f5607b73fde" [extensions] DiagonalArraysMatrixAlgebraKitExt = "MatrixAlgebraKit" +DiagonalArraysNamedDimsArraysExt = "NamedDimsArrays" [compat] ArrayLayouts = "1.10.4" DerivableInterfaces = "0.5.5" -FillArrays = "1.13.0" -LinearAlgebra = "1.10.0" +FillArrays = "1.13" +LinearAlgebra = "1.10" MapBroadcast = "0.1.10" MatrixAlgebraKit = "0.2, 0.3, 0.4, 0.5, 0.6" +NamedDimsArrays = "0.10" SparseArraysBase = "0.7.2" julia = "1.10" diff --git a/ext/DiagonalArraysNamedDimsArraysExt/DiagonalArraysNamedDimsArraysExt.jl b/ext/DiagonalArraysNamedDimsArraysExt/DiagonalArraysNamedDimsArraysExt.jl new file mode 100644 index 0000000..7d30d80 --- /dev/null +++ b/ext/DiagonalArraysNamedDimsArraysExt/DiagonalArraysNamedDimsArraysExt.jl @@ -0,0 +1,52 @@ +module DiagonalArraysNamedDimsArraysExt + +using DiagonalArrays: DiagonalArrays, δ, delta +using NamedDimsArrays: AbstractNamedUnitRange, nameddims + +function DiagonalArrays.delta( + elt::Type{<:Number}, + is::Tuple{AbstractNamedUnitRange, Vararg{AbstractNamedUnitRange}}, + ) + return nameddims(delta(elt, Int.(length.(is))), is) +end +# TODO: Make `δ` an alias for `delta` so this isn't needed. +function DiagonalArrays.δ( + elt::Type{<:Number}, + is::Tuple{AbstractNamedUnitRange, Vararg{AbstractNamedUnitRange}}, + ) + return delta(elt, is) +end +# TODO: Is this needed? +function DiagonalArrays.delta( + is::Tuple{AbstractNamedUnitRange, Vararg{AbstractNamedUnitRange}} + ) + return delta(Bool, is) +end +# TODO: Is this needed? +function DiagonalArrays.δ( + is::Tuple{AbstractNamedUnitRange, Vararg{AbstractNamedUnitRange}} + ) + return delta(is) +end +# TODO: Is this needed? +function DiagonalArrays.delta( + elt::Type{<:Number}, i1::AbstractNamedUnitRange, i_rest::AbstractNamedUnitRange... + ) + return delta(elt, (i1, i_rest...)) +end +# TODO: Is this needed? +function DiagonalArrays.δ( + elt::Type{<:Number}, i1::AbstractNamedUnitRange, i_rest::AbstractNamedUnitRange... + ) + return delta(elt, i1, i_rest...) +end +# TODO: Is this needed? +function DiagonalArrays.delta(i1::AbstractNamedUnitRange, i_rest::AbstractNamedUnitRange...) + return delta((i1, i_rest...)) +end +# TODO: Is this needed? +function DiagonalArrays.δ(i1::AbstractNamedUnitRange, i_rest::AbstractNamedUnitRange...) + return delta(i1, i_rest...) +end + +end diff --git a/test/Project.toml b/test/Project.toml index 38d2a92..bc8a7a3 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -1,10 +1,13 @@ [deps] +Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" DerivableInterfaces = "6c5e35bf-e59e-4898-b73c-732dcc4ba65f" DiagonalArrays = "74fd4be6-21e2-4f6f-823a-4360d37c7a77" FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" +JLArrays = "27aeb0d3-9eb9-45fb-866b-73c2ecf80fcb" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" MatrixAlgebraKit = "6c742aac-3347-4629-af66-fc926824e5e4" +NamedDimsArrays = "60cbd0c0-df58-4cb7-918c-6f5607b73fde" SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" SparseArraysBase = "0d5efcca-f356-4864-8770-e1ed8d78f208" StableRNGs = "860ef19b-820b-49d6-a774-d7a799459cd3" @@ -12,14 +15,17 @@ Suppressor = "fd094767-a336-5f1f-9728-57cf17d0bbfb" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [compat] +Adapt = "4.4" Aqua = "0.8.9" DerivableInterfaces = "0.5" DiagonalArrays = "0.3" FillArrays = "1" +JLArrays = "0.3" LinearAlgebra = "1" MatrixAlgebraKit = "0.2.5, 0.3, 0.4, 0.5, 0.6" +NamedDimsArrays = "0.10" SafeTestsets = "0.1" -SparseArraysBase = "0.7" +SparseArraysBase = "0.7.10" StableRNGs = "1" Suppressor = "0.2" Test = "1" diff --git a/test/test_nameddimsarraysext.jl b/test/test_nameddimsarraysext.jl new file mode 100644 index 0000000..c574d80 --- /dev/null +++ b/test/test_nameddimsarraysext.jl @@ -0,0 +1,38 @@ +using Adapt: adapt +using DiagonalArrays: DiagonalArray, δ, delta, diagview +using JLArrays: JLArray +using NamedDimsArrays: dename, nameddims, namedoneto, inds +using SparseArraysBase: dense +using Test: @test, @test_broken, @testset + +@testset "NamedDimsArrayExt (eltype=$elt, arraytype=$arrayt)" for elt in (Float64, ComplexF64), + arrayt in (Array, JLArray) + + dev = adapt(arrayt) + @testset "delta" begin + i, j = namedoneto.((2, 2), (:i, :j)) + for a in ( + delta(i, j), + delta(Bool, i, j), + delta((i, j)), + delta(Bool, (i, j)), + δ(i, j), + δ(Bool, i, j), + δ((i, j)), + δ(Bool, (i, j)), + ) + @test eltype(a) ≡ Bool + # TODO: Fix this. + @test_broken diagview(a) + @test diagview(dename(a)) == ones(2) + end + end + @testset "DiagonalArrays" begin + s = dev(DiagonalArray(randn(elt, 3), (3, 3))) + a = nameddims(s, (:a, :b)) + b = dense(a) + @test dename(b) == dense(dename(a)) + @test dename(b) isa arrayt{elt, 2} + @test inds(b) == inds(a) + end +end