diff --git a/src/apply.jl b/src/apply.jl index 6be06756..c96e7ad2 100644 --- a/src/apply.jl +++ b/src/apply.jl @@ -27,7 +27,7 @@ using LinearAlgebra: eigen, norm, svd using NamedGraphs: NamedEdge, has_edge function full_update_bp( - o, + o::Union{NamedEdge,ITensor}, ψ, v⃗; envs, @@ -81,7 +81,9 @@ function full_update_bp( return ψᵥ₁, ψᵥ₂ end -function simple_update_bp_full(o, ψ, v⃗; envs, callback=Returns(nothing), apply_kwargs...) +function simple_update_bp_full( + o::Union{NamedEdge,ITensor}, ψ, v⃗; envs, callback=Returns(nothing), apply_kwargs... +) cutoff = 10 * eps(real(scalartype(ψ))) envs_v1 = filter(env -> hascommoninds(env, ψ[v⃗[1]]), envs) envs_v2 = filter(env -> hascommoninds(env, ψ[v⃗[2]]), envs) @@ -133,7 +135,9 @@ function simple_update_bp_full(o, ψ, v⃗; envs, callback=Returns(nothing), app end # Reduced version -function simple_update_bp(o, ψ, v⃗; envs, callback=Returns(nothing), apply_kwargs...) +function simple_update_bp( + o::Union{NamedEdge,ITensor}, ψ, v⃗; envs, callback=Returns(nothing), apply_kwargs... +) cutoff = 10 * eps(real(scalartype(ψ))) envs_v1 = filter(env -> hascommoninds(env, ψ[v⃗[1]]), envs) envs_v2 = filter(env -> hascommoninds(env, ψ[v⃗[2]]), envs) @@ -186,7 +190,7 @@ function simple_update_bp(o, ψ, v⃗; envs, callback=Returns(nothing), apply_kw end function ITensors.apply( - o, + o::Union{NamedEdge,ITensor}, ψ::AbstractITensorNetwork; envs=ITensor[], normalize=false, @@ -256,7 +260,7 @@ function ITensors.apply( end function ITensors.apply( - o⃗::Vector{ITensor}, + o⃗::Union{Vector{NamedEdge},Vector{ITensor}}, ψ::AbstractITensorNetwork; normalize=false, ortho=false, @@ -319,7 +323,9 @@ end #In the future we will try to unify this into apply() above but currently leave it mostly as a separate function """Apply() function for an ITN in the Vidal Gauge. Hence the bond tensors are required. Gate does not necessarily need to be passed. Can supply an edge to do an identity update instead. Uses Simple Update procedure assuming gate is two-site""" -function ITensors.apply(o, ψ::VidalITensorNetwork; normalize=false, apply_kwargs...) +function ITensors.apply( + o::Union{NamedEdge,ITensor}, ψ::VidalITensorNetwork; normalize=false, apply_kwargs... +) updated_ψ = copy(site_tensors(ψ)) updated_bond_tensors = copy(bond_tensors(ψ)) v⃗ = _gate_vertices(o, ψ) diff --git a/src/caches/abstractbeliefpropagationcache.jl b/src/caches/abstractbeliefpropagationcache.jl index 640bdadc..093acb5c 100644 --- a/src/caches/abstractbeliefpropagationcache.jl +++ b/src/caches/abstractbeliefpropagationcache.jl @@ -212,7 +212,9 @@ function set_message(bpc::AbstractBeliefPropagationCache, pe::PartitionEdge, mes bpc = copy(bpc) return set_message!(bpc, pe, message) end -function delete_messages!(bpc::AbstractBeliefPropagationCache, pes::Vector{<:PartitionEdge}) +function delete_messages!( + bpc::AbstractBeliefPropagationCache, pes::Vector{<:PartitionEdge}=keys(messages(bpc)) +) ms = messages(bpc) for pe in pes delete!(ms, pe) @@ -220,14 +222,16 @@ function delete_messages!(bpc::AbstractBeliefPropagationCache, pes::Vector{<:Par return bpc end function delete_message!(bpc::AbstractBeliefPropagationCache, pe::PartitionEdge) - return delete_message!(bpc, [pe]) + return delete_messages!(bpc, [pe]) end -function delete_messages(bpc::AbstractBeliefPropagationCache, pes::Vector{<:PartitionEdge}) +function delete_messages( + bpc::AbstractBeliefPropagationCache, pes::Vector{<:PartitionEdge}=keys(messages(bpc)) +) bpc = copy(bpc) return delete_messages!(bpc, pes) end function delete_message(bpc::AbstractBeliefPropagationCache, pe::PartitionEdge) - return delete_message(bpc, [pe]) + return delete_messages(bpc, [pe]) end """