utv_weighted_inner ================== .. py:function:: t3toolbox.backend.utv_operations.utv_weighted_inner(variations_a, variations_b, weights, n_stack) .. code-block:: python def utv_weighted_inner( variations_a: typ.Tuple, # UT3Variations .data of A, stack = K + C variations_b: typ.Tuple, # UT3Variations .data of B, stack = K + C (same frame as A) weights: typ.Tuple, # ONE metric: UT3FrameWeights .data, stack = C n_stack: int, # leading K+C stack axes to keep; 0 -> a single scalar ) -> NDArray: # weighted coordinate inner product, shape = stack_shape[:n_stack] Weighted coordinate inner product ```` w.r.t. **one** metric -- absorb into both tangents' variations and dot. Uniform twin of ``fv_weighted_inner``. The caller checks same-frame; the frontend also checks the metric against the frame.