diff --git a/Project.toml b/Project.toml index 6b3c6f1..ffea523 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "QuantumOperatorDefinitions" uuid = "826dd319-6fd5-459a-a990-3a4f214664bf" authors = ["ITensor developers and contributors"] -version = "0.2.1" +version = "0.2.2" [deps] LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" @@ -19,7 +19,7 @@ QuantumOperatorDefinitionsGradedArraysExt = ["BlockArrays", "GradedArrays"] [compat] BlockArrays = "1.3.0" -GradedArrays = "0.3" +GradedArrays = "0.4" ITensorBase = "0.2" LinearAlgebra = "1.10" NamedDimsArrays = "0.7" diff --git a/ext/QuantumOperatorDefinitionsGradedArraysExt/QuantumOperatorDefinitionsGradedArraysExt.jl b/ext/QuantumOperatorDefinitionsGradedArraysExt/QuantumOperatorDefinitionsGradedArraysExt.jl index fcc76d5..28f7927 100644 --- a/ext/QuantumOperatorDefinitionsGradedArraysExt/QuantumOperatorDefinitionsGradedArraysExt.jl +++ b/ext/QuantumOperatorDefinitionsGradedArraysExt/QuantumOperatorDefinitionsGradedArraysExt.jl @@ -1,9 +1,8 @@ module QuantumOperatorDefinitionsGradedArraysExt -using BlockArrays: blocklasts, blocklengths -using GradedArrays: AbstractGradedUnitRange, GradedOneTo, gradedrange -using GradedArrays.LabelledNumbers: label, labelled, unlabel -using GradedArrays.SymmetrySectors: SectorProduct, U1, Z, ×, dual +using BlockArrays: blocklasts, blocklength, blocklengths +using GradedArrays: + AbstractGradedUnitRange, GradedOneTo, SectorProduct, U1, Z, ×, dual, gradedrange, sectors using QuantumOperatorDefinitions: QuantumOperatorDefinitions, @GradingType_str, @@ -19,12 +18,15 @@ end sortedunion(a, b) = sort(union(a, b)) function QuantumOperatorDefinitions.combine_axes(a1::GradedOneTo, a2::GradedOneTo) + blocklength(a1) == blocklength(a2) || + throw(ArgumentError("Axes must have the same number of blocks.")) + nblocks = blocklength(a1) return gradedrange( - map(blocklengths(a1), blocklengths(a2)) do s1, s2 - l1 = unlabel(s1) - l2 = unlabel(s2) - @assert l1 == l2 - labelled(l1, label(s1) × label(s2)) + map(Base.OneTo(nblocks)) do i + l1 = blocklengths(a1)[i] + l2 = blocklengths(a2)[i] + l1 == l2 || throw(ArgumentError("Blocks must have the same length.")) + return sectors(a1)[i] × sectors(a2)[i] => l1 end, ) end diff --git a/test/Project.toml b/test/Project.toml index f0e7ff3..1e96cc5 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -15,8 +15,8 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [compat] Aqua = "0.8.9" BlockArrays = "1" -BlockSparseArrays = "0.4" -GradedArrays = "0.3" +BlockSparseArrays = "0.5" +GradedArrays = "0.4" ITensorBase = "0.2" NamedDimsArrays = "0.7" QuantumOperatorDefinitions = "0.2" diff --git a/test/test_gradedarraysext.jl b/test/test_gradedarraysext.jl index ad8cf01..20dd60d 100644 --- a/test/test_gradedarraysext.jl +++ b/test/test_gradedarraysext.jl @@ -1,7 +1,6 @@ using BlockArrays: AbstractBlockArray, blocklengths using BlockSparseArrays: BlockSparseArray -using GradedArrays: blocklabels, dual, isdual -using GradedArrays.SymmetrySectors: SectorProduct, U1, Z +using GradedArrays: SectorProduct, U1, Z, dual, isdual, sectors using ITensorBase: ITensor, Index, gettag, prime, settag using NamedDimsArrays: dename using QuantumOperatorDefinitions: OpName, SiteType, StateName, op, state @@ -11,13 +10,13 @@ using Test: @test, @testset t = SiteType("S=1/2"; gradings=("Sz",)) r = AbstractUnitRange(t) @test r == 1:2 - @test blocklabels(r) == [SectorProduct((; Sz=U1(0))), SectorProduct((; Sz=U1(1)))] + @test sectors(r) == [SectorProduct((; Sz=U1(0))), SectorProduct((; Sz=U1(1)))] @test blocklengths(r) == [1, 1] t = SiteType("Electron"; gradings=("Nf", "Sz")) r = AbstractUnitRange(t) @test r == 1:4 - @test blocklabels(r) == [ + @test sectors(r) == [ SectorProduct((; Nf=U1(0), Sz=U1(0))), SectorProduct((; Nf=U1(1), Sz=U1(1))), SectorProduct((; Nf=U1(1), Sz=U1(-1))), @@ -28,7 +27,7 @@ using Test: @test, @testset t = SiteType("Electron"; gradings=("Nf" => "NfA", "Sz" => "SzA")) r = AbstractUnitRange(t) @test r == 1:4 - @test blocklabels(r) == [ + @test sectors(r) == [ SectorProduct((; NfA=U1(0), SzA=U1(0))), SectorProduct((; NfA=U1(1), SzA=U1(1))), SectorProduct((; NfA=U1(1), SzA=U1(-1))), @@ -39,7 +38,7 @@ using Test: @test, @testset t = SiteType("Electron"; gradings=("NfParity", "Sz")) r = AbstractUnitRange(t) @test r == 1:4 - @test blocklabels(r) == [ + @test sectors(r) == [ SectorProduct((; NfParity=Z{2}(0), Sz=U1(0))), SectorProduct((; NfParity=Z{2}(1), Sz=U1(1))), SectorProduct((; NfParity=Z{2}(1), Sz=U1(-1))), @@ -49,9 +48,9 @@ using Test: @test, @testset t = SiteType("S=1/2"; gradings=("Sz",)) (r1, r2) = axes(OpName("σ⁺"), (t,)) - @test blocklabels(r1) == [SectorProduct((; Sz=U1(0))), SectorProduct((; Sz=U1(1)))] + @test sectors(r1) == [SectorProduct((; Sz=U1(0))), SectorProduct((; Sz=U1(1)))] @test blocklengths(r1) == [1, 1] - @test blocklabels(r2) == [SectorProduct((; Sz=U1(0))), SectorProduct((; Sz=U1(-1)))] + @test sectors(r2) == [SectorProduct((; Sz=U1(0))), SectorProduct((; Sz=U1(1)))] @test blocklengths(r2) == [1, 1] t = SiteType("S=1/2"; gradings=("Sz",)) @@ -64,7 +63,7 @@ using Test: @test, @testset @test a == [2, 0] @test a isa BlockSparseArray (r1,) = axes(a) - @test blocklabels(r1) == [SectorProduct((; Sz=U1(0))), SectorProduct((; Sz=U1(1)))] + @test sectors(r1) == [SectorProduct((; Sz=U1(0))), SectorProduct((; Sz=U1(1)))] @test blocklengths(r1) == [1, 1] t = SiteType("S=1/2"; gradings=("Sz",)) @@ -72,9 +71,9 @@ using Test: @test, @testset @test a == [0 2; 0 0] @test a isa BlockSparseArray (r1, r2) = axes(a) - @test blocklabels(r1) == [SectorProduct((; Sz=U1(0))), SectorProduct((; Sz=U1(1)))] + @test sectors(r1) == [SectorProduct((; Sz=U1(0))), SectorProduct((; Sz=U1(1)))] @test blocklengths(r1) == [1, 1] - @test blocklabels(r2) == [SectorProduct((; Sz=U1(0))), SectorProduct((; Sz=U1(-1)))] + @test sectors(r2) == [SectorProduct((; Sz=U1(0))), SectorProduct((; Sz=U1(1)))] @test blocklengths(r2) == [1, 1] end @@ -83,7 +82,7 @@ end @test gettag(i, "sitetype") == "S=1/2" # TODO: Test without denaming. @test dename(i) == 1:2 - @test blocklabels(dename(i)) == [SectorProduct((; Sz=U1(0))), SectorProduct((; Sz=U1(1)))] + @test sectors(dename(i)) == [SectorProduct((; Sz=U1(0))), SectorProduct((; Sz=U1(1)))] @test blocklengths(dename(i)) == [1, 1] i′ = prime(i) @@ -94,8 +93,8 @@ end @test a′ isa BlockSparseArray # TODO: Test these without denaming `a`. (r1, r2) = axes(a′) - @test blocklabels(r1) == [SectorProduct((; Sz=U1(0))), SectorProduct((; Sz=U1(1)))] + @test sectors(r1) == [SectorProduct((; Sz=U1(0))), SectorProduct((; Sz=U1(1)))] @test blocklengths(r1) == [1, 1] - @test blocklabels(r2) == [SectorProduct((; Sz=U1(0))), SectorProduct((; Sz=U1(-1)))] + @test sectors(r2) == [SectorProduct((; Sz=U1(0))), SectorProduct((; Sz=U1(1)))] @test blocklengths(r2) == [1, 1] end