utv_retract#

t3toolbox.backend.utv_operations.utv_retract(frame_data, variations_data)#
def utv_retract(
        frame_data,       # UT3Frame .data:      supercore stack = C
        variations_data,  # UT3Variations .data: supercore stack = K + C
):  # -> retracted UniformTuckerTensorTrain .data (at the BASE point's ranks; stack = K + C)

Retract a uniform frame-variations tangent vector onto the fixed-rank manifold.

Forms the shifted doubled-rank embedding base point + v (utv_to_ut3() with include_shift=True) and truncates it back to the base point’s own ranks – the Tucker up ranks and left TT ranks read off the frame masks – via the mask-truncated uniform T3-SVD. The output is a UT3 at the frame padded dims (ut3svd truncates by max rank to a fixed shape, so no extra slice is needed), one retracted point per stack element. The uniform mirror of tv_operations.tv_retract() (the implicit T3-SVD / Algorithm 10, Alger et al. 2026).

Varying ranks across ``C`` work for free: the per-C frame ranks are the per-element truncation targets. The ``K`` (tangent) stack: the frame ranks have stack C while the shifted UT3 has stack K + C, so the frame ranks are broadcast over K (the K tangents share the frame, hence the same truncation targets).