utv_oblique_gauge_projection ============================ .. py:function:: t3toolbox.backend.utv_operations.utv_oblique_gauge_projection(frame_data, variations_data) .. code-block:: python def utv_oblique_gauge_projection( frame_data, # UT3Frame .data variations_data, # UT3Variations .data ): # -> gauged variations .data (same masks; the tangent VECTOR is PRESERVED) Project the variations onto the gauge-satisfying subspace while PRESERVING the tangent vector (the uniform mirror of :py:func:`tv_operations.tv_oblique_gauge_projection`). The Tucker perturbation is made perpendicular to ``U`` (compensating through the down core ``O``), then the TT variations are made left-perpendicular (compensating through the right core ``Q``). The Tucker step is independent per core -> vectorized over ``d``. The TT step carries a correction forward to the next core (a left-to-right sweep), implemented as an ``xscan`` over ``d`` -- NOT a Python loop: an unrolled loop bakes ``d`` copies of the step into the jit graph (compile time superlinear in the tensor order ``d``), while a scan compiles the body once. Mask-once up front. Enforces the gauge conditions (48)-(49), Appendix A.3 of Alger et al. (2026).