diff --git a/.github/workflows/IntegrationTest.yml b/.github/workflows/IntegrationTest.yml index 953852e..cfee35c 100644 --- a/.github/workflows/IntegrationTest.yml +++ b/.github/workflows/IntegrationTest.yml @@ -19,6 +19,8 @@ jobs: pkg: - 'BlockSparseArrays' - 'DiagonalArrays' + - 'FusionTensors' + - 'GradedArrays' uses: "ITensor/ITensorActions/.github/workflows/IntegrationTest.yml@main" with: localregistry: "https://github.com/ITensor/ITensorRegistry.git" diff --git a/Project.toml b/Project.toml index 1b7cb4d..1049718 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" @@ -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..f9f7e1f --- /dev/null +++ b/ext/SparseArraysBaseNamedDimsArraysExt/SparseArraysBaseNamedDimsArraysExt.jl @@ -0,0 +1,19 @@ +module SparseArraysBaseNamedDimsArraysExt + +using NamedDimsArrays: AbstractNamedDimsArray, AbstractNamedUnitRange, + constructorof_nameddims, dename, inds, nameddims +using SparseArraysBase: SparseArraysBase, dense, oneelement + +function SparseArraysBase.dense(a::AbstractNamedDimsArray) + # 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 + +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..efbac6b --- /dev/null +++ b/test/test_nameddimsarraysext.jl @@ -0,0 +1,35 @@ +using NamedDimsArrays: NamedDimsArray, dename, nameddims, namedoneto, inds +using SparseArraysBase: dense, oneelement, sparsezeros +using Test: @test, @testset + +@testset "SparseArraysBaseExt (eltype=$elt)" for elt in (Float64, ComplexF64) + @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