Source code for cbp.builder.potential_utils

import numpy as np
from scipy import signal


[docs]def diagonal_potential(d_1: int, d_2: int, rng: np.random.RandomState) -> np.ndarray: factor_potential = rng.randint(4, 6, size=(d_1, d_2)) * 1.0 dim = np.min([d_1, d_2]) identity = np.eye(dim) if rng.normal(size=1) > 1: identity = np.flip(identity, axis=0) if d_2 > d_1: diagonal = np.concatenate([identity, np.zeros(dim, d_2 - dim)], axis=1) elif d_2 < d_1: diagonal = np.concatenate([identity, np.zeros(d_1 - dim, dim)], axis=0) else: diagonal = identity #diagonal = rng.permutation(diagonal) diagonal_dominance = np.exp(factor_potential) + diagonal * 50000 return diagonal_dominance / np.mean(diagonal_dominance)
[docs]def diagonal_potential_different(d_1: int, d_2: int, rng: np.random.RandomState) -> np.ndarray: factor_potential = rng.randint(4, 10, size=(d_1, d_2)) * 1.0 dim = np.min([d_1, d_2]) identity = np.eye(dim) if rng.normal(size=1) > 1: identity = np.flip(identity, axis=0) if d_2 > d_1: diagonal = np.concatenate([identity, np.zeros(dim, d_2 - dim)], axis=1) elif d_2 < d_1: diagonal = np.concatenate([identity, np.zeros(d_1 - dim, dim)], axis=0) else: diagonal = identity #diagonal = rng.permutation(diagonal) diagonal_dominance = np.exp(factor_potential) + diagonal * 50000 return diagonal_dominance / np.mean(diagonal_dominance)
[docs]def diagonal_potential_conv(d_1: int, d_2: int, rng: np.random.RandomState) -> np.ndarray: kernel = np.array([[0.5, 1, 0.5]]) factor_potential = rng.randint(4, 10, size=(d_1, d_2)) * 1.0 dim = np.min([d_1, d_2]) identity = np.eye(dim) if rng.normal(size=1) > 1: identity = np.flip(identity, axis=0) if d_2 > d_1: diagonal = np.concatenate([identity, np.zeros(dim, d_2 - dim)], axis=1) elif d_2 < d_1: diagonal = np.concatenate([identity, np.zeros(d_1 - dim, dim)], axis=0) else: diagonal = identity diagonal = rng.permutation(diagonal) diagonal_dominance = np.exp(factor_potential) + diagonal * 50000 diagonal_dominance /= np.mean(diagonal_dominance) # return diagonal_dominance / np.mean(diagonal_dominance) return signal.convolve2d(diagonal_dominance, kernel, mode="same")
[docs]def identity_potential(d_1: int, d_2: int, rng: np.random.RandomState) -> np.ndarray: # pylint: disable=unused-argument dim = np.min([d_1, d_2]) identity = np.eye(dim) if d_2 > d_1: diagonal = np.concatenate([identity, np.zeros(dim, d_2 - dim)], axis=1) elif d_2 < d_1: diagonal = np.concatenate([identity, np.zeros(d_1 - dim, dim)], axis=0) else: diagonal = identity return diagonal