1- using NamedDimsArrays: NamedDimsArrays, AbstractNamedDimsArray, NamedDimsArray, denamed ,
2- dimnames, inds, mapinds
1+ using NamedDimsArrays: NamedDimsArrays, AbstractNamedDimsArray, LittleSet, NamedDimsArray ,
2+ denamed, dimnames, inds, mapinds
33
44abstract type AbstractITensor <: AbstractNamedDimsArray{Any, Any} end
55
@@ -8,21 +8,16 @@ NamedDimsArrays.nameddimsconstructor(::Type{<:IndexName}) = ITensor
88Base. ndims (:: Type{<:AbstractITensor} ) = Any
99
1010struct ITensor <: AbstractITensor
11- parent:: AbstractArray
12- inds
13- function ITensor (parent:: AbstractArray , dims)
14- # This checks the shapes of the inputs.
15- inds = NamedDimsArrays. to_inds (parent, dims)
16- return new (parent, inds)
11+ denamed:: AbstractArray
12+ dimnames
13+ function ITensor (denamed:: AbstractArray , dimnames)
14+ ndims (denamed) == length (dimnames) ||
15+ throw (ArgumentError (" Number of named dims must match ndims." ))
16+ all (dimname -> dimname isa IndexName, dimnames) ||
17+ throw (ArgumentError (" All dimnames must be of type IndexName." ))
18+ return new (denamed, dimnames)
1719 end
1820end
19- Base. parent (a:: ITensor ) = getfield (a, :parent )
20- NamedDimsArrays. inds (a:: ITensor ) = getfield (a, :inds )
21- NamedDimsArrays. denamed (a:: ITensor ) = parent (a)
22-
23- function ITensor (parent:: AbstractArray , i1:: Index , i_rest:: Index... )
24- return ITensor (parent, (i1, i_rest... ))
25- end
26- function ITensor (parent:: AbstractArray )
27- return ITensor (parent, ())
28- end
21+ NamedDimsArrays. dimnames (a:: ITensor ) = LittleSet (a. dimnames)
22+ NamedDimsArrays. denamed (a:: ITensor ) = a. denamed
23+ Base. parent (a:: ITensor ) = denamed (a)
0 commit comments