utv_orthogonal_gauge_projection#
- t3toolbox.backend.utv_operations.utv_orthogonal_gauge_projection(frame_data, variations_data, shared_data=None)#
def utv_orthogonal_gauge_projection( frame_data, # UT3Frame .data variations_data, # UT3Variations .data shared_data: typ.Optional['sharing_module.SharedFrameData'] = None, # tied post-pass (SF-T3) ): # -> gauged variations .data (same masks; the tangent VECTOR changes)
Orthogonally project the variations onto the gauge-satisfying subspace (the uniform mirror of
tv_operations.tv_orthogonal_gauge_projection()). Removes the component of each Tucker variation parallel to its up-coreUand of each left-interior TT variation parallel to its left-coreP– the gauge conditions (48)-(49), Appendix A.3 of Alger et al. (2026). The represented tangent vector CHANGES (orthogonal, not oblique).Mask-once up front (the frame and variation padding zeroed), then mask-agnostic einsums vectorized over the leading mode axis
d(a per-core map); the last TT variation is left unchanged (the[:-1]boundary). The output carries the variation’s masks unchanged (gauge preserves the rank structure).With
shared_data(the frame’s uniform SF-T3 companion,ufv_shared_frame_data()), the tied post-pass fires after the gauge loops (P_tied = P_tied o P_gauge, tied within gauged), mirroring the ragged threading.- Parameters:
shared_data (t3toolbox.backend.common.typ.Optional[SharedFrameData])