compute_deta_jets ================= .. py:function:: t3toolbox.backend.sampling_derivatives.compute_deta_jets(var_tt_cores, left_tt_cores, right_tt_cores, mu_jets, nu_jets, sigma_jets, tau_jets, trs) .. code-block:: python def compute_deta_jets( var_tt_cores: typ.Sequence[NDArray], # dG. len=d, elm_shape=K+C+(rLi,nUi,rR(i+1)) left_tt_cores: typ.Sequence[NDArray], # P. len=d, elm_shape=C+(rLi,nUi,rL(i+1)) right_tt_cores: typ.Sequence[NDArray], # Q. len=d, elm_shape=C+(rRi,nUi,rR(i+1)) mu_jets: typ.Sequence[NDArray], # len=d, elm_shape=(order+1,)+W+C+(rLi,) nu_jets: typ.Sequence[NDArray], # len=d, elm_shape=(order+1,)+W+C+(rR(i+1),) sigma_jets: typ.Sequence[NDArray], # len=d, elm_shape=(order+1,)+W+K+C+(rR(i+1),) tau_jets: typ.Sequence[NDArray], # len=d, elm_shape=(order+1,)+W+K+C+(rL(i+1),) trs: NDArray, # binomial tensor, shape=(order+1,order+1,order+1) ) -> typ.Tuple[NDArray, ...]: # deta_jets. len=d, elm_shape=(order+1,)+W+K+C+(nUi,) Tangent combine at each free mode (standard order-scan form). Dense reference: :py:func:`compute_deta_jets_trs` (equal to tolerance). The three-term tangent analog of :py:func:`compute_eta_jets`: ``deta_i = sigma Q nu + mu dG nu + mu P tau``, three FULL convolutions (mode ``i`` free). The dense uniform d-einsum forms the ``(order+1)*W*K*r^2`` spatial product for every core at once; this scans the input order ``r`` (one order slice of ``jetL . core`` live at a time) and folds in all of the right jet + the binomial weights -- peak ``W*K*r^2``. The K tangent stack sits on a *different* operand in each term (sigma / dG / tau), so several of the grouped contractions need ``len_C`` (the W|C split is not pinned by their operands). Memory win needs the uniform path (real ``lax.map``/``lax.scan``); see :py:func:`compute_eta_jets`. Verified equal to :py:func:`compute_deta_jets_trs` to 1e-12.