ufv_kronecker_weights ===================== .. py:function:: t3toolbox.backend.ufv_operations.ufv_kronecker_weights(weights_A, weights_B) .. code-block:: python def ufv_kronecker_weights( weights_A: UT3FrameWeightsData, weights_B: UT3FrameWeightsData, ) -> UT3FrameWeightsData: # per-family Kronecker: padded widths multiply, masks Kronecker Per-edge Kronecker product of two frame-weight 4-tuples (the Hadamard combine; ranks multiply). Kronecker the weights, Kronecker the masks -- one operation applied twice, since the Kronecker product commutes with elementwise multiply (see ``ut3_kronecker_weights`` for the argument). A **last-axis outer product broadcasting the shared prefix**, A-major -- NOT ``np.kron``. Output masks are strided (gappy), which is correct.