From 04d71a7f7a95c5fc1817845d3766a7fc3337aa6c Mon Sep 17 00:00:00 2001 From: mtfishman Date: Thu, 30 Jan 2025 12:53:57 -0500 Subject: [PATCH] Generalize Index constructor to allow ranges, define `hastag` --- Project.toml | 2 +- src/index.jl | 11 ++++++++++- test/test_basics.jl | 23 ++++++++++++++++++----- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/Project.toml b/Project.toml index b25b39c..b1326a1 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "ITensorBase" uuid = "4795dd04-0d67-49bb-8f44-b89c448a1dc7" authors = ["ITensor developers and contributors"] -version = "0.1.12" +version = "0.1.13" [deps] Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" diff --git a/src/index.jl b/src/index.jl index 8b0f6a8..4fd152e 100644 --- a/src/index.jl +++ b/src/index.jl @@ -25,6 +25,8 @@ plev(n::IndexName) = n.plev settags(n::IndexName, tags) = @set n.tags = tags +hastag(n::IndexName, tagname::String) = haskey(tags(n), tagname) + gettag(n::IndexName, tagname::String) = tags(n)[tagname] gettag(n::IndexName, tagname::String, default) = get(tags(n), tagname, default) function settag(n::IndexName, tagname::String, tag::String) @@ -69,8 +71,12 @@ struct Index{T,Value<:AbstractUnitRange{T}} <: AbstractNamedUnitRange{T,Value,In name::IndexName end +function Index(r::AbstractUnitRange; kwargs...) + return Index(r, IndexName(; kwargs...)) +end + function Index(length::Int; kwargs...) - return Index(Base.OneTo(length), IndexName(; kwargs...)) + return Index(Base.OneTo(length); kwargs...) end # TODO: Define for `NamedDimsArrays.NamedViewIndex`. @@ -78,6 +84,9 @@ id(i::Index) = id(name(i)) tags(i::Index) = tags(name(i)) plev(i::Index) = plev(name(i)) +# TODO: Define for `NamedDimsArrays.NamedViewIndex`. +hastag(i::Index, tagname::String) = hastag(name(i), tagname) + # TODO: Define for `NamedDimsArrays.NamedViewIndex`. gettag(i::Index, tagname::String) = gettag(name(i), tagname) gettag(i::Index, tagname::String, default) = gettag(name(i), tagname, default) diff --git a/test/test_basics.jl b/test/test_basics.jl index d1c0ea2..c2c0e1b 100644 --- a/test/test_basics.jl +++ b/test/test_basics.jl @@ -1,6 +1,7 @@ -using ITensorBase: ITensorBase, ITensor, Index, gettag, inds, plev, prime, settag, unsettag +using ITensorBase: + ITensorBase, ITensor, Index, gettag, hastag, inds, plev, prime, settag, tags, unsettag using DiagonalArrays: δ, delta, diagview -using NamedDimsArrays: unname +using NamedDimsArrays: dename, name, named using Test: @test, @test_broken, @testset @testset "ITensorBase" begin @@ -8,19 +9,31 @@ using Test: @test, @test_broken, @testset i, j = Index.((2, 2)) x = randn(2, 2) for a in (ITensor(x, i, j), ITensor(x, (i, j))) - @test unname(a) == x + @test dename(a) == x @test plev(i) == 0 @test plev(prime(i)) == 1 + @test length(tags(i)) == 0 a′ = prime(a) - @test unname(a′) == x + @test dename(a′) == x @test issetequal(inds(a′), (prime(i), prime(j))) end i = Index(2) i = settag(i, "X", "x") + @test hastag(i, "X") + @test !hastag(i, "Y") @test gettag(i, "X") == "x" i = unsettag(i, "X") @test isnothing(gettag(i, "X", nothing)) + @test !hastag(i, "X") + @test !hastag(i, "Y") + + i = Index(Base.OneTo(2)) + @test length(i) == named(2, name(i)) + @test dename(length(i)) == 2 + @test dename(i) == 1:2 + @test plev(i) == 0 + @test length(tags(i)) == 0 end @testset "delta" begin i, j = Index.((2, 2)) @@ -37,7 +50,7 @@ using Test: @test, @test_broken, @testset @test eltype(a) === Bool # TODO: Fix this. @test_broken diagview(a) - @test diagview(unname(a)) == ones(2) + @test diagview(dename(a)) == ones(2) end end end