#579 lands charts of the self-motion manifold: SelfMotionManifold / Chart, q(t), tangent by implicit differentiation, frame(t, metric), in_limits subdomains, arc-length length / sample, sheets / gap / escape / locate, branch label and tracking with monodromy, solve_path, a native mirror, and 0-D charts for ikgeo.three_parallel.
This issue is what remains.
API gaps
Coverage gaps
Charts today exist only for seven_r.spherical_shoulder, seven_r.srs and ikgeo.three_parallel. Everything else raises NotImplementedError.
Contracts to settle
Cross-cutting
#579 lands charts of the self-motion manifold:
SelfMotionManifold/Chart,q(t),tangentby implicit differentiation,frame(t, metric),in_limitssubdomains, arc-lengthlength/sample,sheets/gap/escape/locate, branchlabeland tracking with monodromy,solve_path, a native mirror, and 0-D charts forikgeo.three_parallel.This issue is what remains.
API gaps
pullback_metric(t, metric): exposeg_phi = Dphi^T G Dphi.lengthandsamplealready compute it internally, and it is what a null-space-optimization caller needs.Manipulator.charts(T)returns a manifold, so callers writearm.charts(T).charts(). Preferarm.self_motion(T).Coverage gaps
Charts today exist only for
seven_r.spherical_shoulder,seven_r.srsandikgeo.three_parallel. Everything else raisesNotImplementedError.ikgeo.general_6r, Husty-Pfurner,spherical_two_parallel: no chart at all. Relevant to M7, which targetsgeneral_6r(see Define independent IK soundness, recovery, and branch-completeness contracts #573).Contracts to settle
labelsemantics: universal stable identity, or explicitly family-scoped? The tracking design depends on it, and the families above cannot all provide the same guarantee. Decide before more consumers rely on it.Dphi.Cross-cutting
Charthere. Rename one before both exist in the codebase (General 6R: multi-chart reconstruction and end-to-end representation selection #572 is cheaper).respect_limits: bool | Literal["wrap"]to a typed enum, withboolkept as a deprecated alias.