SharedFrameData =============== .. py:class:: t3toolbox.backend.sharing.SharedFrameData The per-frame companion of the shared geometry: everything the tied projection, the shared retraction, and the group-spectrum diagnostics need, derived from an orthogonal frame by :py:func:`fv_shared_frame_data` (never stored inside a frame). All array fields carry the frame stack ``C`` leading; ``groups`` / ``row_splits`` are static structure (jax aux). One entry per NONTRIVIAL group (>= 2 modes), in canonical order; ``svd_*`` is the thin SVD of the stacked matrix ``M_g = concat_i(S_i^T)`` -- deliberately an SVD, never a Cholesky/Gram: the solve gets the intrinsic least-squares sensitivity, ``svd_s`` IS the group spectrum ``s_g`` at full (non-squared) accuracy, and the clipped pseudoinverse is well-defined at the rank-deficient points rank continuation visits. **What ``s_g`` is** (representation-independent -- a property of the represented tensor ``T`` and the partition alone): the singular values of the concatenated matricization ``[T_(i1) | ... | T_(ik)]`` over the group's modes; equivalently ``s_g^2 = eig(sum_i Gamma_i)`` (the summed mode Grams), equivalently the singular values of the Jacobian of ``T`` with respect to a gauged tied motion of the shared factor -- the exact analog of what a per-mode Tucker spectrum is to an unshared factor. Note the scale: every mode carries the full norm, so ``sum_j s_gj^2 = k * ||T||^2`` (a group of ``k`` modes inflates the spectrum by ``sqrt(k)``; the factor cancels in every condition-number ratio). Cf. Peshekhonov, Arzhantsev & Rakhuba (2024, SF-Tucker) and Molozhavenko & Rakhuba (2026, SF-ETT), whose algorithms compute this same object. .. py:attribute:: groups :type: tuple .. py:attribute:: row_splits :type: tuple .. py:attribute:: centers :type: tuple .. py:attribute:: svd_U :type: tuple .. py:attribute:: svd_s :type: tuple .. py:attribute:: svd_Vt :type: tuple