tv_precompute_probe_frame_sweep =============================== .. py:function:: t3toolbox.backend.probing.tv_precompute_probe_frame_sweep(frame, ww) .. code-block:: python def tv_precompute_probe_frame_sweep( frame: typ.Tuple[ typ.Sequence[NDArray], # up_tucker_cores U. len=d typ.Sequence[NDArray], # down_tt_cores O. len=d typ.Sequence[NDArray], # left_tt_cores P. len=d typ.Sequence[NDArray], # right_tt_cores Q. len=d ], # frame order = T3Frame.data = (up, down, left, right) ww: typ.Sequence[NDArray], # probe vectors, len=d, elm_shape=W+(Ni,) ) -> typ.Tuple[ typ.Sequence[NDArray], # xis. len=d, elm_shape=W+C+(nUi,) typ.Sequence[NDArray], # mus. len=d, elm_shape=W+C+(rLi,) typ.Sequence[NDArray], # nus. len=d, elm_shape=W+C+(rR(i+1),) typ.Sequence[NDArray], # etas. len=d, elm_shape=W+C+(nOi,) ]: # full frame sweep -- (xis, mus, nus, etas) The **probe** frame sweep (full): all four frame edge variables ``(xi, mu, nu, eta)``. The probe leaves one mode free, so its transpose's per-mode (vector) residual must be propagated through both the left ``mu`` and right ``nu`` sweeps + the central ``eta`` combine -- it cannot use the scalar-residual adjoint-state shortcut that lets apply/entries drop ``nu``/``eta`` (:py:func:`tv_precompute_apply_frame_sweep`). Reused across the probe forward / transpose of an inner solve. §6.2.2 of Alger et al. (2026); no gauge projector ``Π``. .. seealso:: :py:obj:`tv_probe_jacobian_from_sweep`, :py:obj:`tv_probe_transpose_from_sweep`, :py:obj:`tv_precompute_apply_frame_sweep`