utv_sum_tangent_stack#

t3toolbox.backend.utv_operations.utv_sum_tangent_stack(variations_data, n_tangent, axis=None)#
def utv_sum_tangent_stack(
        variations_data,         # variations .data, supercore stack = K + C
        n_tangent:   int,        # |K|
        axis:        typ.Optional[int] = None,  # 0-based index WITHIN K (None = the whole tangent stack)
):  # -> variations .data with the summed K axes removed (stack = C, or K-with-one-axis-removed)

Sum the variations over the tangent stack K (a batch of tangents at one frame -> their sum; corewise == the tangent sum, by linearity). The frame stack C is preserved.

The supercores sum via xnp; the masks OR over the same axes (host np). Because a K stack shares one frame, its masks are constant along K, so the OR is a no-op (the summed tangent carries the frame’s gauge masks) – but it is the correct reduction in general. axis indexes within K.

Parameters:
  • n_tangent (int)

  • axis (t3toolbox.backend.common.typ.Optional[int])