Skip to content

Commit 59afbf3

Browse files
Remove size type parameter from ITensor and IndexSet (#591)
* Remove size type parameter from ITensor and IndexSet, use Vector as storage for IndexSet * Remove Order-based set functions * Add ability to add and subtract emptyITensor() (replaces using emptyITensor(Any) for this purpose) Co-authored-by: Miles Stoudenmire <[email protected]>
1 parent 1496770 commit 59afbf3

17 files changed

+289
-453
lines changed

benchmark/bench_indexset.jl

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@ suite["constructor"]["function"] = @benchmarkable IndexSet($(n -> i^(n-1)), $(Or
1515
suite["filter"] = BenchmarkGroup()
1616

1717
suite["filter"]["kwargs"] = @benchmarkable filter($is; plev = 3)
18-
suite["filter"]["order_kwargs"] = @benchmarkable filter($(Order(1)), $is; plev = 3)
1918
suite["filter"]["function"] = @benchmarkable filter($(i -> plev(i) < 2), $is)
20-
suite["filter"]["function_order"] = @benchmarkable filter($(i -> plev(i) < 2), $(Order(2)), $is)
2119

2220
i,j,k,l = Index.(2, ("i", "j", "k", "l"))
2321

@@ -33,11 +31,6 @@ suite["uniqueinds"]["nofilter0"] = @benchmarkable uniqueinds($Iij, $Iijk)
3331
suite["uniqueinds"]["filter_tags"] = @benchmarkable uniqueinds($Iijk, $Ikl; tags = $(ts"i"))
3432
suite["uniqueinds"]["filter_not_tags"] = @benchmarkable uniqueinds($Iijk, $Ikl; tags = $(not("i")))
3533
suite["uniqueinds"]["3_inputs"] = @benchmarkable uniqueinds($Iijk, $Ijl, $Ikl)
36-
suite["uniqueinds"]["order2"] = @benchmarkable uniqueinds($(Order(2)), $Iijk, $Ikl)
37-
suite["uniqueinds"]["order0"] = @benchmarkable uniqueinds($(Order(0)), $Iij, $Iijk)
38-
suite["uniqueinds"]["order_filter_tags"] = @benchmarkable uniqueinds($(Order(1)), $Iijk, $Ikl; tags = $(ts"i"))
39-
suite["uniqueinds"]["order_filter_not_tags"] = @benchmarkable uniqueinds($(Order(1)), $Iijk, $Ikl; tags = $(not("i")))
40-
suite["uniqueinds"]["order_3_inputs"] = @benchmarkable uniqueinds($(Order(1)), $Iijk, $Ijl, $Ikl)
4134

4235
end
4336

docs/src/AdvancedUsageGuide.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -756,8 +756,8 @@ Advanced users might notice something strange about the definition
756756
of the ITensor type, that it is often not "type stable". Some of
757757
this is by design. The definition for ITensor is:
758758
```julia
759-
mutable struct ITensor{N}
760-
inds::IndexSet{N}
759+
mutable struct ITensor
760+
inds::IndexSet
761761
store::TensorStorage
762762
end
763763
```
@@ -774,7 +774,7 @@ julia> A = randomITensor(i, i');
774774
julia> @code_warntype A[i=>1, i'=>2]
775775
Variables
776776
#self#::Core.Compiler.Const(getindex, false)
777-
T::ITensor{1}
777+
T::ITensor
778778
ivs::Tuple{Pair{Index{Int64},Int64}}
779779
p::Tuple{Union{Nothing, Int64}}
780780
vals::Tuple{Any}
@@ -789,7 +789,7 @@ Body::Number
789789
%7 = Base.broadcasted(ITensors.val, ivs)::Base.Broadcast.Broadcasted{Base.Broadcast.Style{Tuple},Nothing,typeof(val),Tuple{Tuple{Pair{Index{Int64},Int64}}}}
790790
%8 = Base.materialize(%7)::Tuple{Int64}
791791
│ (vals = (%6)(%8, p))
792-
%10 = Core.tuple(T)::Tuple{ITensor{1}}
792+
%10 = Core.tuple(T)::Tuple{ITensor}
793793
%11 = Core._apply_iterate(Base.iterate, Base.getindex, %10, vals)::Number
794794
%12 = Core.typeassert(%11, ITensors.Number)::Number
795795
└── return %12

docs/src/ITensorType.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,17 @@ delta(::Type{<:Number}, ::QN, ::ITensors.Indices)
5353
## Convert to Array
5454

5555
```@docs
56-
Array{ElT, N}(::ITensor{N}, ::Vararg{Index, N}) where {ElT, N}
56+
Array{ElT, N}(::ITensor, ::Vararg{Index, N}) where {ElT, N}
5757
array(::ITensor)
58-
matrix(::ITensor{2})
59-
vector(::ITensor{1})
58+
matrix(::ITensor)
59+
vector(::ITensor)
6060
```
6161

6262
## Getting and setting elements
6363

6464
```@docs
6565
getindex(::ITensor, ::Any...)
66-
getindex(::ITensor{N}, ::Vararg{Int,N}) where {N}
66+
getindex(::ITensor, ::Vararg{Int,N}) where {N}
6767
setindex!(::ITensor, ::Number, ::Any...)
6868
setindex!(::ITensor, ::Number, ::Int...)
6969
```

docs/src/index.md

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ It originates in physics with the purpose of finding
299299
eigenvectors of Hamiltonian (energy) matrices which model
300300
the behavior of quantum systems.
301301

302-
```jldoctest; output=false, filter=[r"After sweep [1-5] energy=\-[0-9]{3}\.[0-9]{10,16} maxlinkdim=[0-9]{1,3} time=[0-9]{1,2}\.[0-9]{3}", r"Final energy = \-138\.[0-9]{10,16}"]
302+
```jldoctest; output=false, filter=[r"After sweep [1-5] energy=\-[0-9]{3}\.[0-9]{10,16} maxlinkdim=[0-9]{1,3} maxerr=[0-9]{1,2}\.[0-9]{1,3}E\-[0-9]{1,2} time=[0-9]{1,2}\.[0-9]{3}", r"Final energy = \-138\.[0-9]{10,16}"]
303303
using ITensors
304304
let
305305
# Create 100 spin-one indices
@@ -347,11 +347,10 @@ sweeps = Sweeps
347347
4 cutoff=1.0E-10, maxdim=100, mindim=1, noise=0.0E+00
348348
5 cutoff=1.0E-10, maxdim=200, mindim=1, noise=0.0E+00
349349
350-
After sweep 1 energy=-137.845841178879 maxlinkdim=9 time=8.538
351-
After sweep 2 energy=-138.935378608196 maxlinkdim=20 time=0.316
352-
After sweep 3 energy=-138.940079710492 maxlinkdim=88 time=1.904
353-
After sweep 4 energy=-138.940086018149 maxlinkdim=100 time=4.179
354-
After sweep 5 energy=-138.940086075413 maxlinkdim=96 time=4.184
355-
Final energy = -138.94008607296038
350+
After sweep 1 energy=-137.954199761732 maxlinkdim=9 maxerr=2.43E-16 time=9.356
351+
After sweep 2 energy=-138.935058943878 maxlinkdim=20 maxerr=4.97E-06 time=0.671
352+
After sweep 3 energy=-138.940080155429 maxlinkdim=92 maxerr=1.00E-10 time=4.522
353+
After sweep 4 energy=-138.940086009318 maxlinkdim=100 maxerr=1.05E-10 time=11.644
354+
After sweep 5 energy=-138.940086058840 maxlinkdim=96 maxerr=1.00E-10 time=12.771
355+
Final energy = -138.94008605883985
356356
```
357-

src/ITensors.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ end
140140
# (generated from precompile/make_precompile.jl
141141
# using SnoopCompile.jl)
142142
#
143-
include("../precompile/precompile.jl")
144-
_precompile_()
143+
#include("../precompile/precompile.jl")
144+
#_precompile_()
145145

146146
end # module ITensors

src/decomp.jl

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11

22
"""
3-
TruncSVD{N}
3+
TruncSVD
44
55
ITensor factorization type for a truncated singular-value
66
decomposition, returned by `svd`.
77
"""
8-
struct TruncSVD{N1,N2}
9-
U::ITensor{N1}
10-
S::ITensor{2}
11-
V::ITensor{N2}
8+
struct TruncSVD
9+
U::ITensor
10+
S::ITensor
11+
V::ITensor
1212
spec::Spectrum
1313
u::Index
1414
v::Index
@@ -126,15 +126,15 @@ end
126126

127127

128128
"""
129-
TruncEigen{N}
129+
TruncEigen
130130
131131
ITensor factorization type for a truncated eigenvalue
132132
decomposition, returned by `eigen`.
133133
"""
134-
struct TruncEigen{N}
135-
D::ITensor{2}
136-
V::ITensor{N}
137-
Vt::ITensor{N}
134+
struct TruncEigen
135+
D::ITensor
136+
V::ITensor
137+
Vt::ITensor
138138
spec::Spectrum
139139
l::Index
140140
r::Index
@@ -148,17 +148,18 @@ iterate(E::TruncEigen, ::Val{:l}) = (E.l, Val(:r))
148148
iterate(E::TruncEigen, ::Val{:r}) = (E.r, Val(:done))
149149
iterate(E::TruncEigen, ::Val{:done}) = nothing
150150

151-
function eigen(A::ITensor{N}, Linds, Rinds; kwargs...) where {N}
151+
function eigen(A::ITensor, Linds, Rinds; kwargs...)
152152
@debug_check begin
153153
if hasqns(A)
154154
@assert flux(A) == QN()
155155
end
156156
end
157157

158-
NL = length(Linds)
159-
NR = length(Rinds)
160-
NL != NR && error("Must have equal number of left and right indices")
161-
N != NL + NR && error("Number of left and right indices must add up to total number of indices")
158+
N = ndims(A)
159+
NL = length(Linds)
160+
NR = length(Rinds)
161+
NL != NR && error("Must have equal number of left and right indices")
162+
N != NL + NR && error("Number of left and right indices must add up to total number of indices")
162163

163164
ishermitian::Bool = get(kwargs, :ishermitian, false)
164165

0 commit comments

Comments
 (0)