T3Frame.has_minimal_ranks ========================= .. py:method:: t3toolbox.frame_variations_format.T3Frame.has_minimal_ranks() .. code-block:: python def has_minimal_ranks(self) -> bool: True if the frame has minimal ranks. Minimal-rank frame means: - ``left_ranks == right_ranks``, - ``up_ranks == down_ranks``, and - those ranks (tucker_ranks=up_ranks, tt_ranks=left_ranks) are minimal for a regular Tucker tensor train of this shape (see :py:meth:`TuckerTensorTrain.get_minimal_ranks`). This is the **structural** minimal-rank check (cheap integer arithmetic on the ranks); for the **numerical** one (no stored rank numerically redundant) see :py:meth:`has_numerically_minimal_ranks`. Empirically (``docs/numerical_contracts.md``) minimal rank is **not** a correctness precondition for any verified operation -- ``inner``/``norm``-as-HS and ``manifold_dim`` are exact on a non-minimal orthonormal frame, and ``retract`` only loses *strict* rank preservation (it drops the redundant rank, staying a valid retraction). So this is a non-enforcing checker; ``T3Frame`` does not require minimal ranks at construction. Minimal (non-degenerate) ranks and their connection to matricizations and matrix unfoldings are discussed in Appendix A.2 of Alger et al. (2026), "Tucker Tensor Train Taylor Series" (arXiv:2603.21141). .. rubric:: Examples >>> import numpy as np >>> import t3toolbox.tucker_tensor_train as t3 >>> import t3toolbox.frame_variations_format as bvf >>> np.random.seed(0) >>> x = t3.TuckerTensorTrain.randn((6, 7, 5), (2, 2, 2), (1, 2, 2, 1)) # minimal ranks >>> frame, _ = bvf.t3_orthogonal_representations(x) >>> print(frame.has_minimal_ranks) True >>> x2 = t3.TuckerTensorTrain.randn((14, 15, 16), (4, 5, 6), (1, 3, 2, 1)) # Tucker rank 4 > 1*3 >>> frame2, _ = bvf.t3_orthogonal_representations(x2) >>> print(frame2.has_minimal_ranks) False