Skip to content

Commit 4b837c2

Browse files
authored
Store tags in a dictionary (#20)
1 parent 810a8c6 commit 4b837c2

File tree

3 files changed

+33
-27
lines changed

3 files changed

+33
-27
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "ITensorBase"
22
uuid = "4795dd04-0d67-49bb-8f44-b89c448a1dc7"
33
authors = ["ITensor developers <[email protected]> and contributors"]
4-
version = "0.1.9"
4+
version = "0.1.10"
55

66
[deps]
77
Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697"

src/index.jl

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,11 @@ using NamedDimsArrays:
1010
randname,
1111
setname
1212

13-
const Tag = String
14-
const TagSet = Set{Tag}
15-
16-
tagset(tags::String) = Set(filter(!isempty, String.(strip.(split(tags, ",")))))
17-
tagset(tags::TagSet) = tags
18-
19-
function tagsstring(tags::TagSet)
20-
str = ""
21-
length(tags) == 0 && return str
22-
tags_vec = collect(tags)
23-
for n in 1:(length(tags_vec) - 1)
24-
str *= "$(tags_vec[n]),"
25-
end
26-
str *= "$(tags_vec[end])"
27-
return str
28-
end
13+
tagsstring(tags::Dict{String,String}) = string(tags)
2914

3015
@kwdef struct IndexName <: AbstractName
3116
id::UInt64 = rand(UInt64)
32-
tags::TagSet = TagSet()
17+
tags::Dict{String,String} = Dict{String,String}()
3318
plev::Int = 0
3419
end
3520
NamedDimsArrays.randname(n::IndexName) = IndexName(; tags=tags(n), plev=plev(n))
@@ -39,7 +24,19 @@ tags(n::IndexName) = n.tags
3924
plev(n::IndexName) = n.plev
4025

4126
settags(n::IndexName, tags) = @set n.tags = tags
42-
addtags(n::IndexName, ts) = settags(n, tags(n) tagset(ts))
27+
28+
gettag(n::IndexName, tagname::String) = tags(n)[tagname]
29+
gettag(n::IndexName, tagname::String, default) = get(tags(n), tagname, default)
30+
function settag(n::IndexName, tagname::String, tag::String)
31+
newtags = copy(tags(n))
32+
newtags[tagname] = tag
33+
return settags(n, newtags)
34+
end
35+
function unsettag(n::IndexName, tagname::String)
36+
newtags = copy(tags(n))
37+
delete!(newtags, tagname)
38+
return settags(n, newtags)
39+
end
4340

4441
setprime(n::IndexName, plev) = @set n.plev = plev
4542
prime(n::IndexName) = setprime(n, plev(n) + 1)
@@ -72,11 +69,8 @@ struct Index{T,Value<:AbstractUnitRange{T}} <: AbstractNamedUnitRange{T,Value,In
7269
name::IndexName
7370
end
7471

75-
function Index(length::Int; tags=TagSet(), kwargs...)
76-
return Index(Base.OneTo(length), IndexName(; tags=tagset(tags), kwargs...))
77-
end
78-
function Index(length::Int, tags::String; kwargs...)
79-
return Index(Base.OneTo(length), IndexName(; kwargs..., tags=tagset(tags)))
72+
function Index(length::Int; kwargs...)
73+
return Index(Base.OneTo(length), IndexName(; kwargs...))
8074
end
8175

8276
# TODO: Define for `NamedDimsArrays.NamedViewIndex`.
@@ -85,12 +79,18 @@ tags(i::Index) = tags(name(i))
8579
plev(i::Index) = plev(name(i))
8680

8781
# TODO: Define for `NamedDimsArrays.NamedViewIndex`.
88-
addtags(i::Index, tags) = setname(i, addtags(name(i), tags))
82+
gettag(i::Index, tagname::String) = gettag(name(i), tagname)
83+
gettag(i::Index, tagname::String, default) = gettag(name(i), tagname, default)
84+
settag(i::Index, tagname::String, tag::String) = setname(i, settag(name(i), tagname, tag))
85+
unsettag(i::Index, tagname::String) = setname(i, unsettag(name(i), tagname))
86+
8987
prime(i::Index) = setname(i, prime(name(i)))
90-
Base.adjoint(i::Index) = prime(i)
9188
noprime(i::Index) = setname(i, noprime(name(i)))
9289
sim(i::Index) = setname(i, sim(name(i)))
9390

91+
# TODO: Delete this definition?
92+
Base.adjoint(i::Index) = prime(i)
93+
9494
# Interface
9595
# TODO: Overload `Base.parent` instead.
9696
NamedDimsArrays.dename(i::Index) = i.value

test/basics/test_basics.jl renamed to test/test_basics.jl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using ITensorBase: ITensorBase, ITensor, Index, inds, plev, prime
1+
using ITensorBase: ITensorBase, ITensor, Index, gettag, inds, plev, prime, settag, unsettag
22
using NamedDimsArrays: unname
33
using Test: @test, @testset
44

@@ -12,4 +12,10 @@ using Test: @test, @testset
1212
a′ = prime(a)
1313
@test unname(a′) == x
1414
@test issetequal(inds(a′), (prime(i), prime(j)))
15+
16+
i = Index(2)
17+
i = settag(i, "X", "x")
18+
@test gettag(i, "X") == "x"
19+
i = unsettag(i, "X")
20+
@test isnothing(gettag(i, "X", nothing))
1521
end

0 commit comments

Comments
 (0)