11module ITensorBase
22
3+ using Accessors: @set
34using MapBroadcast: Mapped
45using NamedDimsArrays:
56 NamedDimsArrays,
@@ -14,16 +15,29 @@ using NamedDimsArrays:
1415 name,
1516 named,
1617 nameddimsindices,
18+ setname,
1719 unname
1820
21+ const Tag = String
22+ const TagSet = Set{Tag}
23+
24+ tagset (tags:: String ) = Set (filter (! isempty, String .(strip .(split (tags, " ," )))))
25+
1926@kwdef struct IndexName <: AbstractName
2027 id:: UInt64 = rand (UInt64)
2128 plev:: Int = 0
22- tags:: Set{String} = Set {String} ()
23- namedtags:: Dict{Symbol,String} = Dict {Symbol,String} ()
29+ tags:: TagSet = TagSet ()
2430end
2531NamedDimsArrays. randname (n:: IndexName ) = IndexName ()
2632
33+ tags (n:: IndexName ) = n. tags
34+ settags (n:: IndexName , tags) = @set n. tags = tags
35+ addtags (n:: IndexName , ts) = settags (n, tags (n) ∪ tagset (ts))
36+
37+ plev (n:: IndexName ) = n. plev
38+ setprime (n:: IndexName , plev) = @set n. plev = plev
39+ prime (n:: IndexName ) = setprime (n, plev (n) + 1 )
40+
2741struct IndexVal{Value<: Integer } <: AbstractNamedInteger{Value,IndexName}
2842 value:: Value
2943 name:: IndexName
@@ -41,7 +55,15 @@ struct Index{T,Value<:AbstractUnitRange{T}} <: AbstractNamedUnitRange{T,Value,In
4155 name:: IndexName
4256end
4357
44- Index (length:: Int ) = Index (Base. OneTo (length), IndexName ())
58+ Index (length:: Int ; kwargs... ) = Index (Base. OneTo (length), IndexName (; kwargs... ))
59+ function Index (length:: Int , tags:: String ; kwargs... )
60+ return Index (Base. OneTo (length), IndexName (; kwargs... , tags= tagset (tags)))
61+ end
62+
63+ tags (i:: Index ) = tags (name (i))
64+ addtags (i:: Index , tags) = setname (i, addtags (name (i), tags))
65+ prime (i:: Index ) = setname (i, prime (name (i)))
66+ Base. adjoint (i:: Index ) = prime (i)
4567
4668# Interface
4769# TODO : Overload `Base.parent` instead.
@@ -127,9 +149,21 @@ using Accessors: @set
127149setdenamed (a:: ITensor , denamed) = (@set a. parent = denamed)
128150setdenamed! (a:: ITensor , denamed) = (a. parent = denamed)
129151
152+ function ITensor (elt:: Type , I1:: Index , I_rest:: Index... )
153+ I = (I1, I_rest... )
154+ # TODO : Use `FillArrays.Zeros`.
155+ return ITensor (zeros (elt, length .(dename .(I))... ), I)
156+ end
157+
130158function ITensor (I1:: Index , I_rest:: Index... )
131159 I = (I1, I_rest... )
132160 return ITensor (Zeros {UnspecifiedZero} (length .(dename .(I))... ), I)
133161end
134162
163+ function ITensor ()
164+ return ITensor (Zeros {UnspecifiedZero} (), ())
165+ end
166+
167+ include (" quirks.jl" )
168+
135169end
0 commit comments