UniformManifoldGeometry.project_ambient ======================================= .. py:method:: t3toolbox.uniform_manifold.UniformManifoldGeometry.project_ambient(frame, grad) .. code-block:: python def project_ambient( self, frame: ubv.UT3Frame, # orthogonal base point of the tangent space grad: ut3.UniformTuckerTensorTrain, # ambient gradient as a uniform Tucker tensor train ) -> UT3Tangent: # the Riemannian gradient (gauged projection of grad) at frame Project an ambient gradient onto ``T_xM`` -- the Riemannian gradient. ``grad`` is the Euclidean/ambient gradient as a :py:class:`UniformTuckerTensorTrain`. Returns the gauged tangent ``P_T(grad)`` (the residual ``grad - P_T(grad)`` is orthogonal to the tangent space). Requires an **orthogonal** ``frame`` (minimal rank not required); enforced in safe mode (skipped under ``safety.unsafe()`` / a jax trace). Unlike the ragged :py:meth:`~t3toolbox.manifold.ManifoldGeometry.project_ambient`, the uniform layer has **no native dense-array path** (the uniform layer is a performance layer; working dense here defeats its purpose). For a dense gradient, go via the ragged geometry and the cross-layer converters (:py:meth:`UT3Frame.to_t3frame` -> ``MANIFOLD.project_ambient`` -> :py:meth:`UT3Tangent.from_t3tangent`).