Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "ITensorNetworks"
uuid = "2919e153-833c-4bdc-8836-1ea460a35fc7"
authors = ["Matthew Fishman <[email protected]>, Joseph Tindall <[email protected]> and contributors"]
version = "0.12.2"
version = "0.13.0"

[deps]
AbstractTrees = "1520ce14-60c1-5f80-bbc7-55ef81b5835c"
Expand All @@ -13,7 +13,6 @@ Dictionaries = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4"
Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6"
ITensorMPS = "0d1a4710-d33b-49a5-8f18-73bdf49b47e2"
ITensors = "9136182c-28ba-11e9-034c-db9fb085ebd5"
IsApprox = "28f27b66-4bd8-47e7-9110-e2746eb8bed7"
IterTools = "c8e1da08-722c-5040-9ed9-7db0dc04731e"
Expand Down Expand Up @@ -63,7 +62,6 @@ DocStringExtensions = "0.9"
EinExprs = "0.6.4"
Graphs = "1.8"
GraphsFlows = "0.1.1"
ITensorMPS = "0.3"
ITensors = "0.7, 0.8"
IsApprox = "0.1, 1, 2"
IterTools = "1.4.0"
Expand Down
2 changes: 1 addition & 1 deletion docs/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ Literate = "98b081ad-f1c9-55d3-8b20-4c87d4299306"

[compat]
Documenter = "1.10.0"
ITensorNetworks = "0.12.0"
ITensorNetworks = "0.13.0"
Literate = "2.20.1"
2 changes: 1 addition & 1 deletion examples/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
ITensorNetworks = "2919e153-833c-4bdc-8836-1ea460a35fc7"

[compat]
ITensorNetworks = "0.12.0"
ITensorNetworks = "0.13.0"
1 change: 0 additions & 1 deletion src/ITensorNetworks.jl
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ include("contract_approx/partition.jl")
include("contract_approx/binary_tree_partition.jl")
include("contract.jl")
include("specialitensornetworks.jl")
include("boundarymps.jl")
include("partitioneditensornetwork.jl")
include("edge_sequences.jl")
include("caches/abstractbeliefpropagationcache.jl")
Expand Down
23 changes: 13 additions & 10 deletions src/abstractitensornetwork.jl
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@
settags,
sim,
swaptags
using ITensorMPS: ITensorMPS, add, linkdim, linkinds, siteinds
using .ITensorsExtensions: ITensorsExtensions, indtype, promote_indtype
using LinearAlgebra: LinearAlgebra, factorize
using MacroTools: @capture
Expand Down Expand Up @@ -255,7 +254,7 @@

# TODO: Output a `VertexDataGraph`? Unfortunately
# `IndsNetwork` doesn't allow iterating over vertex data.
function ITensorMPS.siteinds(tn::AbstractITensorNetwork)
function siteinds(tn::AbstractITensorNetwork)
is = IndsNetwork(underlying_graph(tn))
for v in vertices(tn)
is[v] = uniqueinds(tn, v)
Expand All @@ -268,7 +267,7 @@
return identity.(flatten(map(v -> siteinds(tn, v), vertices(tn))))
end

function ITensorMPS.linkinds(tn::AbstractITensorNetwork)
function linkinds(tn::AbstractITensorNetwork)

Check warning on line 270 in src/abstractitensornetwork.jl

View check run for this annotation

Codecov / codecov/patch

src/abstractitensornetwork.jl#L270

Added line #L270 was not covered by tests
is = IndsNetwork(underlying_graph(tn))
for e in edges(tn)
is[e] = commoninds(tn, e)
Expand Down Expand Up @@ -302,7 +301,11 @@
return uniqueinds(tn, edgetype(tn)(edge))
end

function ITensors.siteinds(tn::AbstractITensorNetwork, vertex)
function siteinds(tn::AbstractITensorNetwork, vertex)
return uniqueinds(tn, vertex)
end
# Fix ambiguity error with IndsNetwork constructor.
function siteinds(tn::AbstractITensorNetwork, vertex::Int)
return uniqueinds(tn, vertex)
end

Expand All @@ -311,7 +314,7 @@
return commoninds(tn[src(e)], tn[dst(e)])
end

function ITensorMPS.linkinds(tn::AbstractITensorNetwork, edge)
function linkinds(tn::AbstractITensorNetwork, edge)
return commoninds(tn, edge)
end

Expand Down Expand Up @@ -807,24 +810,24 @@
# Link dimensions
#

function ITensorMPS.maxlinkdim(tn::AbstractITensorNetwork)
function maxlinkdim(tn::AbstractITensorNetwork)
md = 1
for e in edges(tn)
md = max(md, linkdim(tn, e))
end
return md
end

function ITensorMPS.linkdim(tn::AbstractITensorNetwork, edge::Pair)
function linkdim(tn::AbstractITensorNetwork, edge::Pair)

Check warning on line 821 in src/abstractitensornetwork.jl

View check run for this annotation

Codecov / codecov/patch

src/abstractitensornetwork.jl#L821

Added line #L821 was not covered by tests
return linkdim(tn, edgetype(tn)(edge))
end

function ITensorMPS.linkdim(tn::AbstractITensorNetwork{V}, edge::AbstractEdge{V}) where {V}
function linkdim(tn::AbstractITensorNetwork{V}, edge::AbstractEdge{V}) where {V}
ls = linkinds(tn, edge)
return prod([isnothing(l) ? 1 : dim(l) for l in ls])
end

function ITensorMPS.linkdims(tn::AbstractITensorNetwork{V}) where {V}
function linkdims(tn::AbstractITensorNetwork{V}) where {V}
ld = DataGraph{V}(
copy(underlying_graph(tn)); vertex_data_eltype=Nothing, edge_data_eltype=Int
)
Expand Down Expand Up @@ -882,7 +885,7 @@
is_multi_edge(tn::AbstractITensorNetwork) = Base.Fix1(is_multi_edge, tn)

"""Add two itensornetworks together by growing the bond dimension. The network structures need to be have the same vertex names, same site index on each vertex """
function ITensorMPS.add(tn1::AbstractITensorNetwork, tn2::AbstractITensorNetwork)
function add(tn1::AbstractITensorNetwork, tn2::AbstractITensorNetwork)
@assert issetequal(vertices(tn1), vertices(tn2))

tn1 = combine_linkinds(tn1; edges=filter(is_multi_edge(tn1), edges(tn1)))
Expand Down
1 change: 0 additions & 1 deletion src/apply.jl
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ using ITensors:
unioninds,
uniqueinds
using ITensors.ContractionSequenceOptimization: optimal_contraction_sequence
using ITensorMPS: siteinds
using KrylovKit: linsolve
using LinearAlgebra: eigen, norm, svd
using NamedGraphs: NamedEdge, has_edge
Expand Down
16 changes: 0 additions & 16 deletions src/boundarymps.jl

This file was deleted.

3 changes: 1 addition & 2 deletions src/caches/abstractbeliefpropagationcache.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ using Graphs: IsDirected
using SplitApplyCombine: group
using LinearAlgebra: diag, dot
using ITensors: dir
using ITensorMPS: ITensorMPS
using NamedGraphs.PartitionedGraphs:
PartitionedGraphs,
PartitionedGraph,
Expand Down Expand Up @@ -140,7 +139,7 @@ for f in [
:(PartitionedGraphs.partitionvertices),
:(PartitionedGraphs.vertices),
:(PartitionedGraphs.boundary_partitionedges),
:(ITensorMPS.linkinds),
:(linkinds),
]
@eval begin
function $f(bpc::AbstractBeliefPropagationCache, args...; kwargs...)
Expand Down
1 change: 0 additions & 1 deletion src/caches/beliefpropagationcache.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ using Graphs: IsDirected
using SplitApplyCombine: group
using LinearAlgebra: diag, dot
using ITensors: dir
using ITensorMPS: ITensorMPS
using NamedGraphs.PartitionedGraphs:
PartitionedGraphs,
PartitionedGraph,
Expand Down
19 changes: 7 additions & 12 deletions src/expect.jl
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
using Dictionaries: Dictionary, set!
using ITensors: Op, op, contract, siteinds, which_op
using ITensorMPS: ITensorMPS, expect
using ITensors: Op, op, contract, which_op

default_expect_alg() = "bp"

function ITensorMPS.expect(
function expect(
ψIψ::AbstractFormNetwork, op::Op; contract_kwargs=(; sequence="automatic"), kwargs...
)
v = only(op.sites)
Expand All @@ -18,7 +17,7 @@
return numerator / denominator
end

function ITensorMPS.expect(
function expect(
alg::Algorithm,
ψ::AbstractITensorNetwork,
ops;
Expand All @@ -40,25 +39,21 @@
return map(op -> expect(ψIψ, op; alg, cache!, update_cache=false, kwargs...), ops)
end

function ITensorMPS.expect(alg::Algorithm"exact", ψ::AbstractITensorNetwork, ops; kwargs...)
function expect(alg::Algorithm"exact", ψ::AbstractITensorNetwork, ops; kwargs...)
ψIψ = inner_network(ψ, ψ)
return map(op -> expect(ψIψ, op; alg, kwargs...), ops)
end

function ITensorMPS.expect(
ψ::AbstractITensorNetwork, op::Op; alg=default_expect_alg(), kwargs...
)
function expect(ψ::AbstractITensorNetwork, op::Op; alg=default_expect_alg(), kwargs...)

Check warning on line 47 in src/expect.jl

View check run for this annotation

Codecov / codecov/patch

src/expect.jl#L47

Added line #L47 was not covered by tests
return expect(Algorithm(alg), ψ, [op]; kwargs...)
end

function ITensorMPS.expect(
function expect(
ψ::AbstractITensorNetwork, op::String, vertices; alg=default_expect_alg(), kwargs...
)
return expect(Algorithm(alg), ψ, [Op(op, vertex) for vertex in vertices]; kwargs...)
end

function ITensorMPS.expect(
ψ::AbstractITensorNetwork, op::String; alg=default_expect_alg(), kwargs...
)
function expect(ψ::AbstractITensorNetwork, op::String; alg=default_expect_alg(), kwargs...)
return expect(ψ, op, vertices(ψ); alg, kwargs...)
end
13 changes: 6 additions & 7 deletions src/inner.jl
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using ITensors: inner, scalar
using ITensorMPS: ITensorMPS, loginner
using LinearAlgebra: norm, norm_sqr

default_contract_alg(tns::Tuple) = "bp"
Expand Down Expand Up @@ -54,7 +53,7 @@
return scalar(tn; sequence)
end

function ITensorMPS.loginner(
function loginner(
ϕ::AbstractITensorNetwork,
ψ::AbstractITensorNetwork;
alg=default_contract_alg((ϕ, ψ)),
Expand All @@ -63,7 +62,7 @@
return loginner(Algorithm(alg), ϕ, ψ; kwargs...)
end

function ITensorMPS.loginner(
function loginner(
ϕ::AbstractITensorNetwork,
A::AbstractITensorNetwork,
ψ::AbstractITensorNetwork;
Expand All @@ -73,13 +72,13 @@
return loginner(Algorithm(alg), ϕ, A, ψ; kwargs...)
end

function ITensorMPS.loginner(
function loginner(

Check warning on line 75 in src/inner.jl

View check run for this annotation

Codecov / codecov/patch

src/inner.jl#L75

Added line #L75 was not covered by tests
alg::Algorithm"exact", ϕ::AbstractITensorNetwork, ψ::AbstractITensorNetwork; kwargs...
)
return log(inner(alg, ϕ, ψ); kwargs...)
end

function ITensorMPS.loginner(
function loginner(

Check warning on line 81 in src/inner.jl

View check run for this annotation

Codecov / codecov/patch

src/inner.jl#L81

Added line #L81 was not covered by tests
alg::Algorithm"exact",
ϕ::AbstractITensorNetwork,
A::AbstractITensorNetwork,
Expand All @@ -89,7 +88,7 @@
return log(inner(alg, ϕ, A, ψ); kwargs...)
end

function ITensorMPS.loginner(
function loginner(
alg::Algorithm,
ϕ::AbstractITensorNetwork,
ψ::AbstractITensorNetwork;
Expand All @@ -100,7 +99,7 @@
return logscalar(alg, tn; kwargs...)
end

function ITensorMPS.loginner(
function loginner(
alg::Algorithm,
ϕ::AbstractITensorNetwork,
A::AbstractITensorNetwork,
Expand Down
20 changes: 0 additions & 20 deletions src/mpo_mps_compatibility.jl

This file was deleted.

3 changes: 1 addition & 2 deletions src/partitioneditensornetwork.jl
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
using Graphs: dst, src
using ITensors: commoninds
using ITensorMPS: ITensorMPS
using NamedGraphs.GraphsExtensions: subgraph
using NamedGraphs.PartitionedGraphs: PartitionedGraph, PartitionEdge

function ITensorMPS.linkinds(pitn::PartitionedGraph, edge::PartitionEdge)
function linkinds(pitn::PartitionedGraph, edge::PartitionEdge)
src_e_itn = subgraph(pitn, src(edge))
dst_e_itn = subgraph(pitn, dst(edge))
return commoninds(src_e_itn, dst_e_itn)
Expand Down
11 changes: 8 additions & 3 deletions src/sitetype.jl
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using Dictionaries: Dictionary
using Graphs: AbstractGraph, nv, vertices
using ITensors: ITensors, Index, siteind, siteinds
using ITensors: ITensors, Index, siteind

function ITensors.siteind(sitetype::String, v::Tuple; kwargs...)
return addtags(siteind(sitetype; kwargs...), vertex_tag(v))
Expand All @@ -16,17 +16,22 @@ function to_siteinds_callable(x::AbstractDictionary)
return Base.Fix1(getindex, x) ∘ keytype(x)
end

function ITensors.siteinds(x, g::AbstractGraph; kwargs...)
function siteinds(x, g::AbstractGraph; kwargs...)
return siteinds(to_siteinds_callable(x), g; kwargs...)
end

# Convenient syntax for path graph.
function siteinds(x, nv::Int; kwargs...)
return siteinds(x, path_graph(nv); kwargs...)
end

function to_siteind(x, vertex; kwargs...)
return [siteind(x, vertex_tag(vertex); kwargs...)]
end

to_siteind(x::Index, vertex; kwargs...) = [x]

function ITensors.siteinds(f::Function, g::AbstractGraph; kwargs...)
function siteinds(f::Function, g::AbstractGraph; kwargs...)
is = IndsNetwork(g)
for v in vertices(g)
is[v] = to_siteind(f(v), v; kwargs...)
Expand Down
1 change: 0 additions & 1 deletion src/solvers/alternating_update/alternating_update.jl
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using ITensors: state
using ITensorMPS: linkind
using NamedGraphs.GraphsExtensions: GraphsExtensions

function alternating_update(
Expand Down
1 change: 0 additions & 1 deletion src/solvers/contract.jl
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using Graphs: nv, vertices
using ITensors: ITensors, sim
using ITensorMPS: linkinds
using ITensors.NDTensors: Algorithm, @Algorithm_str, contract
using NamedGraphs: vertextype

Expand Down
1 change: 0 additions & 1 deletion src/solvers/defaults.jl
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using Printf: @printf, @sprintf
using ITensorMPS: maxlinkdim
default_outputlevel() = 0
default_nsites() = 2
default_nsweeps() = 1 #? or nothing?
Expand Down
9 changes: 1 addition & 8 deletions src/solvers/dmrg.jl
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
using ITensorMPS: ITensorMPS, dmrg
using KrylovKit: KrylovKit

"""
Overload of `ITensors.ITensorMPS.dmrg`.
"""
function ITensorMPS.dmrg(
function dmrg(
operator,
init_state;
nsweeps,
Expand All @@ -24,7 +20,4 @@ function ITensorMPS.dmrg(
return eigval, state
end

"""
Overload of `KrylovKit.eigsolve`.
"""
KrylovKit.eigsolve(H, init::AbstractTTN; kwargs...) = dmrg(H, init; kwargs...)
Loading
Loading