t3_left_orthogonal_norm_sq#

t3toolbox.backend.geometry.t3_left_orthogonal_norm_sq(x_cores)#
def t3_left_orthogonal_norm_sq(
        x_cores:  typ.Tuple,   # (tucker_cores, tt_cores) -- a LEFT-orthogonal T3 (a frame's (U,P), or a retracted point)
) -> NDArray:                  # ‖X‖²_HS, shape = stack C (a 0-d scalar for C=()); PER-ELEMENT over the stack

‖X‖²_HS = ‖last TT core‖² – exact for a left-orthogonal T3 (the frame’s (U,P) or a t3svd retraction output), so no dense tensor and no re-orthogonalization. The left-orthogonal precondition is check-free here (backend) and is the caller’s responsibility: on a raw point the value is simply wrong (measured 3 vs 1400 on a randn point – the 2026-08-22 review). Use ManifoldGeometryOps.point_norm_sq() for an arbitrary point; verify a point with t3toolbox.backend.t3_orthogonalization.t3_orthogonality_residual(). (docs/contributor/fitting_internals.md §”The base point as a tangent”.)

Parameters:

x_cores (t3toolbox.backend.common.typ.Tuple)

Return type:

NDArray