Skip to content

Commit 88f1b8c

Browse files
emstoudenmiremtfishmanpre-commit-ci[bot]jack-dunhamJack Dunham
authored
Network solvers redesign (#242)
Co-authored-by: Matt Fishman <[email protected]> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Jack Dunham <[email protected]> Co-authored-by: Jack Dunham <[email protected]>
1 parent 3ae1202 commit 88f1b8c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+1536
-2523
lines changed

Project.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
name = "ITensorNetworks"
22
uuid = "2919e153-833c-4bdc-8836-1ea460a35fc7"
33
authors = ["Matthew Fishman <[email protected]>, Joseph Tindall <[email protected]> and contributors"]
4-
version = "0.14.2"
4+
version = "0.15.0"
55

66
[deps]
77
AbstractTrees = "1520ce14-60c1-5f80-bbc7-55ef81b5835c"
8+
Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697"
89
Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
910
Combinatorics = "861a8166-3701-5b0c-9a16-15d98fcdc6aa"
1011
Compat = "34da2185-b29b-5c13-b0c7-acf172513d20"
12+
ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
1113
DataGraphs = "b5a273c3-7e6c-41f6-98bd-8d7f1525a36a"
1214
DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
1315
Dictionaries = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4"
@@ -49,9 +51,11 @@ ITensorNetworksTensorOperationsExt = "TensorOperations"
4951

5052
[compat]
5153
AbstractTrees = "0.4.4"
54+
Accessors = "0.1.42"
5255
Adapt = "4"
5356
Combinatorics = "1"
5457
Compat = "3, 4"
58+
ConstructionBase = "1.6.0"
5559
DataGraphs = "0.2.3"
5660
DataStructures = "0.18, 0.19"
5761
Dictionaries = "0.4"

docs/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ Literate = "98b081ad-f1c9-55d3-8b20-4c87d4299306"
55

66
[compat]
77
Documenter = "1.10.0"
8-
ITensorNetworks = "0.14.0"
8+
ITensorNetworks = "0.15.0"
99
Literate = "2.20.1"

examples/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
ITensorNetworks = "2919e153-833c-4bdc-8836-1ea460a35fc7"
33

44
[compat]
5-
ITensorNetworks = "0.14.0"
5+
ITensorNetworks = "0.15.0"

src/ITensorNetworks.jl

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,7 @@ include("formnetworks/quadraticformnetwork.jl")
3434
include("gauging.jl")
3535
include("utils.jl")
3636
include("update_observer.jl")
37-
include("solvers/local_solvers/eigsolve.jl")
38-
include("solvers/local_solvers/exponentiate.jl")
39-
include("solvers/local_solvers/dmrg_x.jl")
40-
include("solvers/local_solvers/contract.jl")
41-
include("solvers/local_solvers/linsolve.jl")
37+
4238
include("treetensornetworks/abstracttreetensornetwork.jl")
4339
include("treetensornetworks/treetensornetwork.jl")
4440
include("treetensornetworks/opsum_to_ttn/matelem.jl")
@@ -48,18 +44,29 @@ include("treetensornetworks/projttns/abstractprojttn.jl")
4844
include("treetensornetworks/projttns/projttn.jl")
4945
include("treetensornetworks/projttns/projttnsum.jl")
5046
include("treetensornetworks/projttns/projouterprodttn.jl")
51-
include("solvers/solver_utils.jl")
52-
include("solvers/defaults.jl")
53-
include("solvers/insert/insert.jl")
54-
include("solvers/extract/extract.jl")
55-
include("solvers/alternating_update/alternating_update.jl")
56-
include("solvers/alternating_update/region_update.jl")
57-
include("solvers/tdvp.jl")
58-
include("solvers/dmrg.jl")
59-
include("solvers/dmrg_x.jl")
60-
include("solvers/contract.jl")
61-
include("solvers/linsolve.jl")
62-
include("solvers/sweep_plans/sweep_plans.jl")
47+
48+
include("solvers/local_solvers/eigsolve.jl")
49+
include("solvers/local_solvers/exponentiate.jl")
50+
include("solvers/local_solvers/runge_kutta.jl")
51+
include("solvers/truncation_parameters.jl")
52+
include("solvers/iterators.jl")
53+
include("solvers/adapters.jl")
54+
include("solvers/sweep_solve.jl")
55+
include("solvers/region_plans/dfs_plans.jl")
56+
include("solvers/region_plans/euler_tour.jl")
57+
include("solvers/region_plans/euler_plans.jl")
58+
include("solvers/region_plans/tdvp_region_plans.jl")
59+
include("solvers/extract.jl")
60+
include("solvers/insert.jl")
61+
include("solvers/subspace/subspace.jl")
62+
include("solvers/subspace/densitymatrix.jl")
63+
include("solvers/align_indices.jl")
64+
include("solvers/operator_map.jl")
65+
include("solvers/abstract_problem.jl")
66+
include("solvers/eigsolve.jl")
67+
include("solvers/applyexp.jl")
68+
include("solvers/fitting.jl")
69+
6370
include("apply.jl")
6471
include("inner.jl")
6572
include("normalize.jl")

src/itensornetwork.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using DataGraphs: DataGraphs, DataGraph
22
using Dictionaries: Indices, dictionary
3-
using ITensors: ITensors, ITensor, op, state
3+
using ITensors: ITensors, ITensor, op
44
using .ITensorsExtensions: trivial_space
55
using NamedGraphs: NamedGraphs, NamedEdge, NamedGraph, vertextype
66

@@ -180,7 +180,7 @@ function generic_state(x::Op, inds::NamedTuple)
180180
end
181181
function generic_state(s::AbstractString, inds::NamedTuple)
182182
# TODO: Figure out what to do if there is more than one site.
183-
site_tensors = [state(s, only(inds.siteinds))]
183+
site_tensors = [ITensors.state(s, only(inds.siteinds))]
184184
link_tensors = [[onehot(i => 1) for i in inds.linkinds[e]] for e in keys(inds.linkinds)]
185185
return contract(reduce(vcat, link_tensors; init=site_tensors))
186186
end

src/solvers/abstract_problem.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
abstract type AbstractProblem end
3+
4+
set_truncation_info!(P::AbstractProblem, args...; kws...) = P

src/solvers/adapters.jl

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
"""
2+
struct PauseAfterIncrement{S<:AbstractNetworkIterator}
3+
4+
Iterator wrapper whos `compute!` function simply returns itself, doing nothing in the
5+
process. This allows one to manually call a custom `compute!` or insert their own code it in
6+
the loop body in place of `compute!`.
7+
"""
8+
struct IncrementOnly{S<:AbstractNetworkIterator} <: AbstractNetworkIterator
9+
parent::S
10+
end
11+
12+
islaststep(adapter::IncrementOnly) = islaststep(adapter.parent)
13+
state(adapter::IncrementOnly) = state(adapter.parent)
14+
increment!(adapter::IncrementOnly) = increment!(adapter.parent)
15+
compute!(adapter::IncrementOnly) = adapter
16+
17+
IncrementOnly(adapter::IncrementOnly) = adapter
18+
19+
"""
20+
struct EachRegion{SweepIterator} <: AbstractNetworkIterator
21+
22+
Adapter that flattens each region iterator in the parent sweep iterator into a single
23+
iterator.
24+
"""
25+
struct EachRegion{SI<:SweepIterator} <: AbstractNetworkIterator
26+
parent::SI
27+
end
28+
29+
# In keeping with Julia convention.
30+
eachregion(iter::SweepIterator) = EachRegion(iter)
31+
32+
# Essential definitions
33+
function islaststep(adapter::EachRegion)
34+
region_iter = region_iterator(adapter.parent)
35+
return islaststep(adapter.parent) && islaststep(region_iter)
36+
end
37+
function increment!(adapter::EachRegion)
38+
region_iter = region_iterator(adapter.parent)
39+
islaststep(region_iter) ? increment!(adapter.parent) : increment!(region_iter)
40+
return adapter
41+
end
42+
function compute!(adapter::EachRegion)
43+
region_iter = region_iterator(adapter.parent)
44+
compute!(region_iter)
45+
return adapter
46+
end

src/solvers/align_indices.jl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
2+
function align_indices(tn)
3+
si = siteinds(tn)
4+
ptn = copy(tn)
5+
for v in vertices(tn)
6+
is = inds(tn[v])
7+
ls = setdiff(is, si[v])
8+
isempty(ls) && continue
9+
new_is = [first(ls), si[v]...]
10+
if length(ls) >= 2
11+
new_is = vcat(new_is, ls[2:end])
12+
end
13+
ptn[v] = permute(tn[v], new_is)
14+
end
15+
return ptn
16+
end

src/solvers/alternating_update/alternating_update.jl

Lines changed: 0 additions & 143 deletions
This file was deleted.

0 commit comments

Comments
 (0)