t3toolbox.manifold.tangent_randn#

t3toolbox.manifold.tangent_randn(base: t3toolbox.basis_coordinates_format.T3Base | t3toolbox.OLD_uniform.UniformT3Base, masks: t3toolbox.OLD_uniform.UniformEdgeWeights | t3toolbox.OLD_uniform.UniformBVEdgeWeights = (None, None, None), apply_gauge_projection: bool = True, randn: Callable[Ellipsis, NDArray] = np.random.randn, use_jax: bool = False) t3toolbox.basis_coordinates_format.T3Variation | t3toolbox.OLD_uniform.UniformT3Variation#

Draw a random T3Variation.

Parameters:
  • orthogonal_base (T3Base) – Representations of base point on manifold where tangent space is attached.

  • randn (typ.Callable[[..., NDArray]) – Function for creating random arrays. Arguments are a sequence of ints defining the shape of the array. Default: np.random.randn (numpy)

Returns:

  • T3Tangent – Random tangent vector. If base is orthogonal, ranks are minimal, and gauge projection is applied, then the random tangent vector is distributed according to a standard multivariate distribution on the tangent space.

  • use_jax (bool) – If True, return jax arrays, if False return numpy. Should update this to use pure jax, rather than converting numpy->jax.

  • apply_gauge_projection (bool) – Default: True. If False, gauge projection is not applied and vector is not i.i.d. N(0,1) on the tangent space

See also

t3tangent_zeros

Examples

Apply Gauge projection (default):

>>> import numpy as np
>>> import t3toolbox.tucker_tensor_train as t3
>>> import t3toolbox.manifold as t3m
>>> import t3toolbox.orthogonalization as orth
>>> p = t3.t3_corewise_randn(((14,15,16), (4,5,6), (1,3,2,1)))
>>> base, vars0 = orth.orthogonal_representations(p)
>>> v = t3m.tangent_randn(base) # Random tangent vector, gauged.

Don’t apply Gauge projection:

>>> import numpy as np
>>> import t3toolbox.tucker_tensor_train as t3
>>> import t3toolbox.manifold as t3m
>>> import t3toolbox.orthogonalization as orth
>>> p = t3.t3_corewise_randn(((14,15,16), (4,5,6), (1,3,2,1)))
>>> base, vars0 = orth.orthogonal_representations(p)
>>> v = t3m.tangent_randn(base, apply_gauge_projection=False) # Random tangent vector, ungauged