quimb.experimental.belief_propagation.d2bp

Classes

oset

An ordered set which stores elements as the keys of dict (ordered as of

BeliefPropagationCommon

Common interfaces for belief propagation algorithms.

D2BP

Dense (as in one tensor per site) 2-norm (as in for wavefunctions and

Functions

combine_local_contractions(tvals, mvals, backend[, ...])

contract_d2bp(tn[, messages, output_inds, optimize, ...])

Estimate the norm squared of tn using dense 2-norm belief

compress_d2bp(tn, max_bond[, cutoff, cutoff_mode, ...])

Compress the tensor network tn using dense 2-norm belief

sample_d2bp(tn[, output_inds, messages, ...])

Sample a configuration from tn using dense 2-norm belief

Module Contents

class quimb.experimental.belief_propagation.d2bp.oset(it=())

An ordered set which stores elements as the keys of dict (ordered as of python 3.6). ‘A few times’ slower than using a set directly for small sizes, but makes everything deterministic.

__slots__ = ('_d',)
classmethod _from_dict(d)
classmethod from_dict(d)

Public method makes sure to copy incoming dictionary.

copy()
__deepcopy__(memo)
add(k)
discard(k)
remove(k)
clear()
update(*others)
union(*others)
intersection_update(*others)
intersection(*others)
difference_update(*others)
difference(*others)
popleft()
popright()
pop
__eq__(other)

Return self==value.

__or__(other)
__ior__(other)
__and__(other)
__iand__(other)
__sub__(other)
__isub__(other)
__len__()
__iter__()
__contains__(x)
__repr__()

Return repr(self).

class quimb.experimental.belief_propagation.d2bp.BeliefPropagationCommon

Common interfaces for belief propagation algorithms.

Parameters:
  • max_iterations (int, optional) – The maximum number of iterations to perform.

  • tol (float, optional) – The convergence tolerance for messages.

  • progbar (bool, optional) – Whether to show a progress bar.

run(max_iterations=1000, tol=5e-06, info=None, progbar=False)
quimb.experimental.belief_propagation.d2bp.combine_local_contractions(tvals, mvals, backend, strip_exponent=False, check_for_zero=True)
class quimb.experimental.belief_propagation.d2bp.D2BP(tn, messages=None, output_inds=None, optimize='auto-hq', damping=0.0, update='sequential', local_convergence=True, **contract_opts)

Bases: quimb.experimental.belief_propagation.bp_common.BeliefPropagationCommon

Dense (as in one tensor per site) 2-norm (as in for wavefunctions and operators) belief propagation. Allows messages reuse. This version assumes no hyper indices (i.e. a standard PEPS like tensor network).

Potential use cases for D2BP and a PEPS like tensor network are:

  • globally compressing it from bond dimension D to D'

  • eagerly applying gates and locally compressing back to D

  • sampling configurations

  • estimating the norm of the tensor network

Parameters:
  • tn (TensorNetwork) – The tensor network to form the 2-norm of and run BP on.

  • messages (dict[(str, int), array_like], optional) – The initial messages to use, effectively defaults to all ones if not specified.

  • output_inds (set[str], optional) – The indices to consider as output (dangling) indices of the tn. Computed automatically if not specified.

  • optimize (str or PathOptimizer, optional) – The path optimizer to use when contracting the messages.

  • damping (float, optional) – The damping factor to use, 0.0 means no damping.

  • update ({'parallel', 'sequential'}, optional) – Whether to update all messages in parallel or sequentially.

  • local_convergence (bool, optional) – Whether to allow messages to locally converge - i.e. if all their input messages have converged then stop updating them.

  • contract_opts – Other options supplied to cotengra.array_contract.

update_touched_from_tids(*tids)

Specify that the messages for the given tids have changed.

update_touched_from_tags(tags, which='any')

Specify that the messages for the messages touching tags have changed.

update_touched_from_inds(inds, which='any')

Specify that the messages for the messages touching inds have changed.

iterate(tol=5e-06)

Perform a single iteration of dense 2-norm belief propagation.

compute_marginal(ind)

Compute the marginal for the index ind.

contract(strip_exponent=False)

Estimate the total contraction, i.e. the 2-norm.

Parameters:

strip_exponent (bool, optional) – Whether to strip the exponent from the final result. If True then the returned result is (mantissa, exponent).

Return type:

scalar or (scalar, float)

compress(max_bond, cutoff=0.0, cutoff_mode=4, renorm=0, inplace=False)

Compress the initial tensor network using the current messages.

quimb.experimental.belief_propagation.d2bp.contract_d2bp(tn, messages=None, output_inds=None, optimize='auto-hq', damping=0.0, update='sequential', local_convergence=True, max_iterations=1000, tol=5e-06, strip_exponent=False, info=None, progbar=False, **contract_opts)

Estimate the norm squared of tn using dense 2-norm belief propagation.

Parameters:
  • tn (TensorNetwork) – The tensor network to form the 2-norm of and run BP on.

  • messages (dict[(str, int), array_like], optional) – The initial messages to use, effectively defaults to all ones if not specified.

  • max_iterations (int, optional) – The maximum number of iterations to perform.

  • tol (float, optional) – The convergence tolerance for messages.

  • output_inds (set[str], optional) – The indices to consider as output (dangling) indices of the tn. Computed automatically if not specified.

  • optimize (str or PathOptimizer, optional) – The path optimizer to use when contracting the messages.

  • damping (float, optional) – The damping parameter to use, defaults to no damping.

  • update ({'parallel', 'sequential'}, optional) – Whether to update all messages in parallel or sequentially.

  • local_convergence (bool, optional) – Whether to allow messages to locally converge - i.e. if all their input messages have converged then stop updating them.

  • strip_exponent (bool, optional) – Whether to strip the exponent from the final result. If True then the returned result is (mantissa, exponent).

  • info (dict, optional) – If specified, update this dictionary with information about the belief propagation run.

  • progbar (bool, optional) – Whether to show a progress bar.

  • contract_opts – Other options supplied to cotengra.array_contract.

Return type:

scalar or (scalar, float)

quimb.experimental.belief_propagation.d2bp.compress_d2bp(tn, max_bond, cutoff=0.0, cutoff_mode='rsum2', renorm=0, messages=None, output_inds=None, optimize='auto-hq', damping=0.0, update='sequential', local_convergence=True, max_iterations=1000, tol=5e-06, inplace=False, info=None, progbar=False, **contract_opts)

Compress the tensor network tn using dense 2-norm belief propagation.

Parameters:
  • tn (TensorNetwork) – The tensor network to form the 2-norm of, run BP on and then compress.

  • max_bond (int) – The maximum bond dimension to compress to.

  • cutoff (float, optional) – The cutoff to use when compressing.

  • cutoff_mode (int, optional) – The cutoff mode to use when compressing.

  • messages (dict[(str, int), array_like], optional) – The initial messages to use, effectively defaults to all ones if not specified.

  • max_iterations (int, optional) – The maximum number of iterations to perform.

  • tol (float, optional) – The convergence tolerance for messages.

  • output_inds (set[str], optional) – The indices to consider as output (dangling) indices of the tn. Computed automatically if not specified.

  • optimize (str or PathOptimizer, optional) – The path optimizer to use when contracting the messages.

  • damping (float, optional) – The damping parameter to use, defaults to no damping.

  • update ({'parallel', 'sequential'}, optional) – Whether to update all messages in parallel or sequentially.

  • local_convergence (bool, optional) – Whether to allow messages to locally converge - i.e. if all their input messages have converged then stop updating them.

  • inplace (bool, optional) – Whether to perform the compression inplace.

  • info (dict, optional) – If specified, update this dictionary with information about the belief propagation run.

  • progbar (bool, optional) – Whether to show a progress bar.

  • contract_opts – Other options supplied to cotengra.array_contract.

Return type:

TensorNetwork

quimb.experimental.belief_propagation.d2bp.sample_d2bp(tn, output_inds=None, messages=None, max_iterations=100, tol=0.01, bias=None, seed=None, local_convergence=True, progbar=False, **contract_opts)

Sample a configuration from tn using dense 2-norm belief propagation.

Parameters:
  • tn (TensorNetwork) – The tensor network to sample from.

  • output_inds (set[str], optional) – Which indices to sample.

  • messages (dict[(str, int), array_like], optional) – The initial messages to use, effectively defaults to all ones if not specified.

  • max_iterations (int, optional) – The maximum number of iterations to perform, per marginal.

  • tol (float, optional) – The convergence tolerance for messages.

  • bias (float, optional) – Bias the sampling towards more locally likely bit-strings. This is done by raising the probability of each bit-string to this power.

  • seed (int, optional) – A random seed for reproducibility.

  • local_convergence (bool, optional) – Whether to allow messages to locally converge - i.e. if all their input messages have converged then stop updating them.

  • progbar (bool, optional) – Whether to show a progress bar.

  • contract_opts – Other options supplied to cotengra.array_contract.

Returns:

  • config (dict[str, int]) – The sampled configuration, a mapping of output indices to values.

  • tn_config (TensorNetwork) – The tensor network with the sampled configuration applied.

  • omega (float) – The BP probability of the sampled configuration.