T3Frame.has_numerically_minimal_ranks ===================================== .. py:method:: t3toolbox.frame_variations_format.T3Frame.has_numerically_minimal_ranks(atol = 1e-09) .. code-block:: python def has_numerically_minimal_ranks(self, atol: float = 1e-9) -> NDArray: # bool array, shape = stack_shape True (per stack element) if the frame is **numerically** minimal -- certified *without* an SVD. An orthonormal frame's cores are full-rank, so an **orthogonal + structurally-minimal** frame is automatically numerically minimal (no ``t3svd`` -- and a frame is not a tensor to SVD anyway). So this returns ``is_orthogonal(atol) and has_minimal_ranks``. A **non-orthogonal** frame returns ``False``: the SVD certification path for non-orthogonal frames is intentionally not implemented (frames that need numerical minimality are expected to be orthonormal). Distinct from the structural :py:attr:`has_minimal_ranks`; for tensors see :py:meth:`TuckerTensorTrain.has_numerically_minimal_ranks` (the SVD version). .. rubric:: Examples >>> import numpy as np >>> import t3toolbox.tucker_tensor_train as t3 >>> import t3toolbox.frame_variations_format as bvf >>> np.random.seed(0) >>> frame, _ = bvf.t3_orthogonal_representations( ... t3.TuckerTensorTrain.randn((6, 7, 5), (2, 2, 2), (1, 2, 2, 1))) # orthogonal + minimal >>> print(frame.has_numerically_minimal_ranks()) True >>> nb, _ = bvf.t3_orthogonal_representations( ... t3.TuckerTensorTrain.randn((10, 11, 12), (4, 5, 4), (1, 2, 3, 1))) # orthogonal, NON-minimal >>> print(nb.is_orthogonal(), nb.has_minimal_ranks, nb.has_numerically_minimal_ranks()) True False False