From 9801b7c7f4765c81fe5a1bf0c6575bd1903f9a7c Mon Sep 17 00:00:00 2001 From: mtfishman Date: Mon, 22 Dec 2025 16:00:44 -0500 Subject: [PATCH 1/6] NamedDimsArraysExt --- Project.toml | 3 ++ .../SparseArraysBaseNamedDimsArraysExt.jl | 20 ++++++++++ test/Project.toml | 2 + test/test_nameddimsarraysext.jl | 40 +++++++++++++++++++ 4 files changed, 65 insertions(+) create mode 100644 ext/SparseArraysBaseNamedDimsArraysExt/SparseArraysBaseNamedDimsArraysExt.jl create mode 100644 test/test_nameddimsarraysext.jl diff --git a/Project.toml b/Project.toml index 1b7cb4d..485b46b 100644 --- a/Project.toml +++ b/Project.toml @@ -18,9 +18,11 @@ SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" TypeParameterAccessors = "7e5a90cf-f82e-492e-a09b-e3e26432c138" [weakdeps] +NamedDimsArrays = "60cbd0c0-df58-4cb7-918c-6f5607b73fde" TensorAlgebra = "68bd88dc-f39d-4e12-b2ca-f046b68fcc6a" [extensions] +SparseArraysBaseNamedDimsArraysExt = ["NamedDimsArrays"] SparseArraysBaseTensorAlgebraExt = ["TensorAlgebra", "SparseArrays"] [compat] @@ -33,6 +35,7 @@ FillArrays = "1.13" GPUArraysCore = "0.2" LinearAlgebra = "1.10" MapBroadcast = "0.1.5" +NamedDimsArrays = "0.10" Random = "1.10" SparseArrays = "1.10" TensorAlgebra = "0.6.2" diff --git a/ext/SparseArraysBaseNamedDimsArraysExt/SparseArraysBaseNamedDimsArraysExt.jl b/ext/SparseArraysBaseNamedDimsArraysExt/SparseArraysBaseNamedDimsArraysExt.jl new file mode 100644 index 0000000..d51071b --- /dev/null +++ b/ext/SparseArraysBaseNamedDimsArraysExt/SparseArraysBaseNamedDimsArraysExt.jl @@ -0,0 +1,20 @@ +module SparseArraysBaseNamedDimsArraysExt + +using NamedDimsArrays: AbstractNamedDimsArray, AbstractNamedUnitRange, + constructorof_nameddims, dename, inds, nameddims +using SparseArraysBase: SparseArraysBase, dense, oneelement + +function SparseArraysBase.dense(a::AbstractNamedDimsArray) + # TODO: Rewrite as `set_unnamed(a, dense(unname(a)))`. + # See also on DimensionalData.jl's interface: + # https://github.com/rafaqz/DimensionalData.jl/blob/v0.29.25/src/utils.jl#L93-L97 + return constructorof_nameddims(typeof(a))(dense(dename(a)), inds(a)) +end + +function SparseArraysBase.oneelement( + value, index::NTuple{N, Int}, ax::NTuple{N, AbstractNamedUnitRange} + ) where {N} + return nameddims(oneelement(value, index, only.(axes.(dename.(ax)))), ax) +end + +end diff --git a/test/Project.toml b/test/Project.toml index 4ac9c6c..8b26c3c 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -6,6 +6,7 @@ Dictionaries = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4" FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" JLArrays = "27aeb0d3-9eb9-45fb-866b-73c2ecf80fcb" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +NamedDimsArrays = "60cbd0c0-df58-4cb7-918c-6f5607b73fde" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" @@ -26,6 +27,7 @@ Dictionaries = "0.4.4" FillArrays = "1.13.0" JLArrays = "0.2.0, 0.3" LinearAlgebra = "<0.0.1, 1" +NamedDimsArrays = "0.10" Random = "<0.0.1, 1" SafeTestsets = "0.1.0" SparseArrays = "1.10" diff --git a/test/test_nameddimsarraysext.jl b/test/test_nameddimsarraysext.jl new file mode 100644 index 0000000..4a7e53d --- /dev/null +++ b/test/test_nameddimsarraysext.jl @@ -0,0 +1,40 @@ +using Adapt: adapt +using JLArrays: JLArray +using NamedDimsArrays: NamedDimsArray, dename, nameddims, namedoneto, inds +using SparseArraysBase: dense, oneelement, sparsezeros +using Test: @test, @testset + +@testset "SparseArraysBaseExt (eltype=$elt, arraytype=$arrayt)" for elt in (Float64, ComplexF64), + arrayt in (Array, JLArray) + + dev = adapt(arrayt) + @testset "oneelement" begin + i = namedoneto(3, "i") + a = oneelement(i => 2) + @test a isa NamedDimsArray{Bool} + @test ndims(a) == 1 + @test issetequal(inds(a), (i,)) + @test eltype(a) ≡ Bool + @test a[1] == 0 + @test a[2] == 1 + @test a[3] == 0 + + i = namedoneto(3, "i") + a = oneelement(elt, i => 2) + @test a isa NamedDimsArray{elt} + @test ndims(a) == 1 + @test issetequal(inds(a), (i,)) + @test eltype(a) ≡ elt + @test a[1] == 0 + @test a[2] == 1 + @test a[3] == 0 + end + @testset "dense" begin + s = sparsezeros(elt, 3, 4) + a = nameddims(s, (:a, :b)) + b = dense(a) + @test dename(b) == dense(dename(a)) + @test dename(b) isa Array{elt, 2} + @test inds(b) == inds(a) + end +end From 38aacef4e02f52ae5c41ad0dd342c9dc2287f6c3 Mon Sep 17 00:00:00 2001 From: mtfishman Date: Mon, 22 Dec 2025 17:01:01 -0500 Subject: [PATCH 2/6] Cleanup comment, bump version --- Project.toml | 2 +- .../SparseArraysBaseNamedDimsArraysExt.jl | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Project.toml b/Project.toml index 485b46b..6c10a69 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "SparseArraysBase" uuid = "0d5efcca-f356-4864-8770-e1ed8d78f208" authors = ["ITensor developers and contributors"] -version = "0.7.9" +version = "0.7.10" [deps] Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" diff --git a/ext/SparseArraysBaseNamedDimsArraysExt/SparseArraysBaseNamedDimsArraysExt.jl b/ext/SparseArraysBaseNamedDimsArraysExt/SparseArraysBaseNamedDimsArraysExt.jl index d51071b..f9f7e1f 100644 --- a/ext/SparseArraysBaseNamedDimsArraysExt/SparseArraysBaseNamedDimsArraysExt.jl +++ b/ext/SparseArraysBaseNamedDimsArraysExt/SparseArraysBaseNamedDimsArraysExt.jl @@ -5,9 +5,8 @@ using NamedDimsArrays: AbstractNamedDimsArray, AbstractNamedUnitRange, using SparseArraysBase: SparseArraysBase, dense, oneelement function SparseArraysBase.dense(a::AbstractNamedDimsArray) - # TODO: Rewrite as `set_unnamed(a, dense(unname(a)))`. - # See also on DimensionalData.jl's interface: - # https://github.com/rafaqz/DimensionalData.jl/blob/v0.29.25/src/utils.jl#L93-L97 + # TODO: Use `NamedDimsArrays.nameddimsof(a, dense(unname(a)))` once that is defined, + # see: https://github.com/ITensor/NamedDimsArrays.jl/issues/138 return constructorof_nameddims(typeof(a))(dense(dename(a)), inds(a)) end From 72742b60984ffac0ea0f0a592a22779960a33639 Mon Sep 17 00:00:00 2001 From: mtfishman Date: Mon, 22 Dec 2025 17:04:52 -0500 Subject: [PATCH 3/6] Simplify test --- test/test_nameddimsarraysext.jl | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/test/test_nameddimsarraysext.jl b/test/test_nameddimsarraysext.jl index 4a7e53d..efbac6b 100644 --- a/test/test_nameddimsarraysext.jl +++ b/test/test_nameddimsarraysext.jl @@ -1,13 +1,8 @@ -using Adapt: adapt -using JLArrays: JLArray using NamedDimsArrays: NamedDimsArray, dename, nameddims, namedoneto, inds using SparseArraysBase: dense, oneelement, sparsezeros using Test: @test, @testset -@testset "SparseArraysBaseExt (eltype=$elt, arraytype=$arrayt)" for elt in (Float64, ComplexF64), - arrayt in (Array, JLArray) - - dev = adapt(arrayt) +@testset "SparseArraysBaseExt (eltype=$elt)" for elt in (Float64, ComplexF64) @testset "oneelement" begin i = namedoneto(3, "i") a = oneelement(i => 2) From 290425d7247dea9a8627e836c9becb53f5bdba6b Mon Sep 17 00:00:00 2001 From: mtfishman Date: Mon, 22 Dec 2025 17:08:15 -0500 Subject: [PATCH 4/6] More downstream tests --- .github/workflows/IntegrationTest.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/IntegrationTest.yml b/.github/workflows/IntegrationTest.yml index 953852e..645aa74 100644 --- a/.github/workflows/IntegrationTest.yml +++ b/.github/workflows/IntegrationTest.yml @@ -19,6 +19,8 @@ jobs: pkg: - 'BlockSparseArrays' - 'DiagonalArrays' + - 'GradedArrays' + - 'FusionTensors' uses: "ITensor/ITensorActions/.github/workflows/IntegrationTest.yml@main" with: localregistry: "https://github.com/ITensor/ITensorRegistry.git" From 147b6f7730340744e26e6cba9d49f2e16257a04f Mon Sep 17 00:00:00 2001 From: Matt Fishman Date: Mon, 22 Dec 2025 17:14:29 -0500 Subject: [PATCH 5/6] Alphabetize downstream tests list --- .github/workflows/IntegrationTest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/IntegrationTest.yml b/.github/workflows/IntegrationTest.yml index 645aa74..cfee35c 100644 --- a/.github/workflows/IntegrationTest.yml +++ b/.github/workflows/IntegrationTest.yml @@ -19,8 +19,8 @@ jobs: pkg: - 'BlockSparseArrays' - 'DiagonalArrays' - - 'GradedArrays' - 'FusionTensors' + - 'GradedArrays' uses: "ITensor/ITensorActions/.github/workflows/IntegrationTest.yml@main" with: localregistry: "https://github.com/ITensor/ITensorRegistry.git" From 18c01e53eceec7bb03ffaae69e39d2013c3d2bef Mon Sep 17 00:00:00 2001 From: Matt Fishman Date: Mon, 22 Dec 2025 20:13:58 -0500 Subject: [PATCH 6/6] Simplify Project.toml --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 6c10a69..1049718 100644 --- a/Project.toml +++ b/Project.toml @@ -22,7 +22,7 @@ NamedDimsArrays = "60cbd0c0-df58-4cb7-918c-6f5607b73fde" TensorAlgebra = "68bd88dc-f39d-4e12-b2ca-f046b68fcc6a" [extensions] -SparseArraysBaseNamedDimsArraysExt = ["NamedDimsArrays"] +SparseArraysBaseNamedDimsArraysExt = "NamedDimsArrays" SparseArraysBaseTensorAlgebraExt = ["TensorAlgebra", "SparseArrays"] [compat]