Composition and Inverses ======================== Use spatial operations to compose poses/transforms, apply poses to points, rotate free vectors, and convert transforms into frameless pose offsets. In Python, ``*`` composes poses/transforms or applies them to points. In TypeScript, use ``multiply()`` for composition and ``apply()`` for points. ``Pose * Pose`` chains frameless poses; ``Transform * Pose`` re-expresses a pose in a new frame; ``Transform * Transform`` chains stamped transforms when frame ids match (empty ids act as wildcards). ``inverse()`` undoes a pose or transform; for :class:`~olo.spatial.Transform` the frame ids are swapped as well. ``as_pose()`` / ``asPose()`` returns the equivalent frameless :class:`~olo.spatial.Pose`. Use ``rotate()`` for :class:`~olo.spatial.Vector` values when translation should not be applied. .. tab-set:: :sync-group: sdk-language .. tab-item:: Python :sync: python .. literalinclude:: scripts/spatial-compose.py :language: python .. tab-item:: TypeScript :sync: typescript .. literalinclude:: scripts/spatial-compose.ts :language: typescript