Index
Description
ITensors.Index
— TypeAn Index
represents a single tensor index with fixed dimension dim
. Copies of an Index compare equal unless their tags
are different.
An Index carries a TagSet
, a set of tags which are small strings that specify properties of the Index
to help distinguish it from other Indices. There is a special tag which is referred to as the integer tag or prime level which can be incremented or decremented with special priming functions.
Internally, an Index
has a fixed id
number, which is how the ITensor library knows two indices are copies of a single original Index
. Index
objects must have the same id
, as well as the tags
to compare equal.
ITensors.QNIndex
— TypeA QN Index is an Index with QN block storage instead of just an integer dimension. The QN block storage is a vector of pairs of QNs and block dimensions. The total dimension of a QN Index is the sum of the dimensions of the blocks of the Index.
Constructors
ITensors.Index
— MethodIndex(dim::Int; tags::Union{AbstractString, TagSet} = "",
plev::Int = 0)
Create an Index
with a unique id
, a TagSet given by tags
, and a prime level plev
.
Examples
julia> i = Index(2; tags = "l", plev = 1)
(dim=2|id=818|"l")'
julia> dim(i)
2
julia> plev(i)
1
julia> tags(i)
"l"
ITensors.Index
— MethodIndex(dim::Integer, tags::Union{AbstractString, TagSet}; plev::Int = 0)
Create an Index
with a unique id
and a tagset given by tags
.
Examples
julia> i = Index(2, "l,tag")
(dim=2|id=58|"l,tag")
julia> dim(i)
2
julia> plev(i)
0
julia> tags(i)
"l,tag"
ITensors.Index
— MethodIndex(qnblocks::Pair{QN, Int64}...; dir::Arrow = Out,
tags = "",
plev::Integer = 0)
Construct a QN Index from a list of pairs of QN and block dimensions.
Example
Index(QN("Sz", -1) => 1, QN("Sz", 1) => 1; tags = "i")
ITensors.Index
— MethodIndex(qnblocks::Vector{Pair{QN, Int64}}; dir::Arrow = Out,
tags = "",
plev::Integer = 0)
Construct a QN Index from a Vector of pairs of QN and block dimensions.
Note: in the future, this may enforce that all blocks have the same QNs (which would allow for some optimizations, for example when constructing random QN ITensors).
Example
Index([QN("Sz", -1) => 1, QN("Sz", 1) => 1]; tags = "i")
ITensors.Index
— MethodIndex(qnblocks::Vector{Pair{QN, Int64}}, tags; dir::Arrow = Out,
plev::Integer = 0)
Construct a QN Index from a Vector of pairs of QN and block dimensions.
Example
Index([QN("Sz", -1) => 1, QN("Sz", 1) => 1], "i"; dir = In)
Properties
ITensors.id
— Methodid(i::Index)
Obtain the id of an Index, which is a unique 64 digit integer.
ITensors.hasid
— Methodhasid(i::Index, id::ITensors.IDType)
Check if an Index
i
has the provided id.
Examples
julia> i = Index(2)
(dim=2|id=321)
julia> hasid(i, id(i))
true
julia> j = Index(2)
(dim=2|id=17)
julia> hasid(i, id(j))
false
ITensors.tags
— Methodtags(i::Index)
Obtain the TagSet of an Index.
ITensors.hastags
— Methodhastags(i::Index, ts::Union{AbstractString,TagSet})
Check if an Index
i
has the provided tags, which can be a string of comma-separated tags or a TagSet object.
Examples
julia> i = Index(2, "SpinHalf,Site,n=3")
(dim=2|id=861|"Site,SpinHalf,n=3")
julia> hastags(i, "SpinHalf,Site")
true
julia> hastags(i, "Link")
false
ITensors.plev
— Methodplev(i::Index)
Obtain the prime level of an Index.
ITensors.hasplev
— Methodhasplev(i::Index, plev::Int)
Check if an Index
i
has the provided prime level.
Examples
julia> i = Index(2; plev=2)
(dim=2|id=543)''
julia> hasplev(i, 2)
true
julia> hasplev(i, 1)
false
NDTensors.dim
— Methoddim(i::Index)
Obtain the dimension of an Index.
For a QN Index, this is the sum of the block dimensions.
Base.:==
— Method==(i1::Index, i1::Index)
Compare indices for equality. First the id's are compared, then the prime levels are compared, and finally the tags are compared.
ITensors.dir
— Methoddir(i::Index)
Obtain the direction of an Index (In, Out, or Neither).
ITensors.hasqns
— Methodhasqns(::Index)
Checks of the Index has QNs or not.
Priming and tagging methods
ITensors.prime
— Methodprime(i::Index, plinc::Int = 1)
Return a copy of Index i
with its prime level incremented by the amount plinc
Base.adjoint
— Methodadjoint(i::Index)
Prime an Index using the notation i'
.
Base.:^
— Method^(i::Index, pl::Int)
Prime an Index using the notation i^3
.
ITensors.setprime
— Methodsetprime(i::Index, plev::Int)
Return a copy of Index i
with its prime level set to plev
ITensors.noprime
— Methodnoprime(i::Index)
Return a copy of Index i
with its prime level set to zero.
ITensors.settags
— Methodsettags(i::Index, ts)
Return a copy of Index i
with tags replaced by the ones given The ts
argument can be a comma-separated string of tags or a TagSet.
Examples
julia> i = Index(2, "SpinHalf,Site,n=3")
(dim=2|id=543|"Site,SpinHalf,n=3")
julia> hastags(i, "Link")
false
julia> j = settags(i,"Link,n=4")
(dim=2|id=543|"Link,n=4")
julia> hastags(j, "Link")
true
julia> hastags(j, "n=4,Link")
true
ITensors.addtags
— Methodaddtags(i::Index,ts)
Return a copy of Index i
with the specified tags added to the existing ones. The ts
argument can be a comma-separated string of tags or a TagSet.
ITensors.removetags
— Methodremovetags(i::Index, ts)
Return a copy of Index i
with the specified tags removed. The ts
argument can be a comma-separated string of tags or a TagSet.
ITensors.replacetags
— Methodreplacetags(i::Index, tsold, tsnew)
replacetags(i::Index, tsold => tsnew)
If the tag set of i
contains the tags specified by tsold
, replaces these with the tags specified by tsnew
, preserving any other tags. The arguments tsold
and tsnew
can be comma-separated strings of tags, or TagSet objects.
Examples
julia> i = Index(2; tags = "l,x", plev = 1)
(dim=2|id=83|"l,x")'
julia> replacetags(i, "l", "m")
(dim=2|id=83|"m,x")'
julia> replacetags(i, "l" => "m")
(dim=2|id=83|"m,x")'
Methods
NDTensors.sim
— Methodsim(i::Index; tags = tags(i), plev = plev(i), dir = dir(i))
Produces an Index
with the same properties (dimension or QN structure) but with a new id
.
ITensors.dag
— Methoddag(i::Index)
Copy an index i
and reverse its direction.
ITensors.removeqns
— Methodremoveqns(::Index)
Removes the QNs from the Index, if it has any.
Iterating
Base.iterate
— MethodIterating over Index I
gives the IndexVals I(1)
through I(dim(I))
.