Skip to content

Commit 43ff72e

Browse files
authored
Account for BP edge case where network evaluates to 0 (#178)
1 parent 9d10b82 commit 43ff72e

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

src/caches/beliefpropagationcache.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ default_message_norm(m::ITensor) = norm(m)
1919
function default_message_update(contract_list::Vector{ITensor}; kwargs...)
2020
sequence = optimal_contraction_sequence(contract_list)
2121
updated_messages = contract(contract_list; sequence, kwargs...)
22-
updated_messages /= norm(updated_messages)
22+
message_norm = norm(updated_messages)
23+
if !iszero(message_norm)
24+
updated_messages /= message_norm
25+
end
2326
return ITensor[updated_messages]
2427
end
2528
@traitfn default_bp_maxiter(g::::(!IsDirected)) = is_tree(g) ? 1 : nothing

src/contract.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ function logscalar(
7373
denominator_terms
7474
end
7575

76+
any(iszero, denominator_terms) && return -Inf
7677
return sum(log.(numerator_terms)) - sum(log.((denominator_terms)))
7778
end
7879

test/test_belief_propagation.jl

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using Compat: Compat
33
using Graphs: vertices
44
# Trigger package extension.
5-
using GraphsFlows: GraphsFlows
65
using ITensorNetworks:
76
ITensorNetworks,
87
BeliefPropagationCache,
@@ -18,6 +17,7 @@ using ITensorNetworks:
1817
message,
1918
partitioned_tensornetwork,
2019
random_tensornetwork,
20+
scalar,
2121
siteinds,
2222
split_index,
2323
tensornetwork,
@@ -28,7 +28,7 @@ using ITensors: ITensors, ITensor, combiner, dag, inds, inner, op, prime, random
2828
using ITensorNetworks.ModelNetworks: ModelNetworks
2929
using ITensors.NDTensors: array
3030
using LinearAlgebra: eigvals, tr
31-
using NamedGraphs: NamedEdge
31+
using NamedGraphs: NamedEdge, NamedGraph
3232
using NamedGraphs.NamedGraphGenerators: named_comb_tree, named_grid
3333
using NamedGraphs.PartitionedGraphs: PartitionVertex, partitionedges
3434
using Random: Random
@@ -75,5 +75,12 @@ using Test: @test, @testset
7575

7676
@test all(eig -> imag(eig) 0, eigs)
7777
@test all(eig -> real(eig) >= -eps(eltype(eig)), eigs)
78+
79+
#Test edge case of network which evalutes to 0
80+
χ = 2
81+
g = named_grid((3, 1))
82+
ψ = random_tensornetwork(ComplexF64, g; link_space=χ)
83+
ψ[(1, 1)] = 0.0 * ψ[(1, 1)]
84+
@test iszero(scalar(ψ; alg="bp"))
7885
end
7986
end

0 commit comments

Comments
 (0)