tv_apply_transpose_from_sweep ============================= .. py:function:: t3toolbox.backend.apply.tv_apply_transpose_from_sweep(c, ww, frame, frame_sweep, sum_over_probes = False) .. code-block:: python def tv_apply_transpose_from_sweep( c: NDArray, # residual, shape = W + K + C (K optional) ww: typ.Sequence[NDArray], # apply vectors (one-hot e_index for entries), len=d, elm_shape=W+(Ni,) frame: typ.Tuple[ typ.Sequence[NDArray], # up_tucker_cores U. len=d (unused; uniform call signature) typ.Sequence[NDArray], # down_tt_cores O. len=d typ.Sequence[NDArray], # left_tt_cores P. len=d (unused) typ.Sequence[NDArray], # right_tt_cores Q. len=d ], # frame order = T3Frame.data = (up, down, left, right) frame_sweep: typ.Tuple[ typ.Sequence[NDArray], # xis typ.Sequence[NDArray], # mus ], # = tv_precompute_apply_frame_sweep(frame, ww) (lean: no nu/eta) sum_over_probes: bool = False, ) -> typ.Tuple[typ.Sequence[NDArray], typ.Sequence[NDArray]]: # (dU_tildes, dG_tildes) = T3Variations.data Transpose of the all-modes apply reusing a precomputed frame sweep -- the bare ``𝒥ᵀ``, by the **adjoint-state** method (the scalar residual ``c`` seeds one reverse ``sigma_hat`` sweep; see :py:func:`_apply_transpose_adjoint`). Takes the **lean** ``(xis, mus)`` sweep + the frame cores ``O, Q`` (it recomputes the right context rather than storing ``nu``/``eta`` -- half the memory). Reuse hook for ``fitting.py`` (one frame sweep feeds the forward and this transpose). Full ``W + K + C`` (the residual ``c`` may carry the tangent stack ``K``). No gauge projector ``Π``. .. seealso:: :py:obj:`tv_precompute_apply_frame_sweep`, :py:obj:`tv_apply_transpose`