rlmesh.adapters.Split
An ordered split of one flat numeric observation leaf into role fields.
Split(*fields: Field)A leaf, not a container: one tensor split into role fields, the
observation-side mirror of Action. Fields are laid
out in order, offsets accumulate, and the native join requires the field
widths to sum to the leaf width. Use it when an env returns a flat Box
whose fixed index ranges carry distinct semantics (e.g. Metaworld)::
Split(Field(EEF_POS, 3), Field(GRIPPER, 1))
Construction rejects a (role, part, provenance) declared by more than
one field (a role may repeat across parts or provenances, never within one
key). The
authoritative Rust codec enforces the same rule at the wire door;
duplicating it here is deliberate (the fail-fast-at-construction exception,
like Field’s dim >= 1 check), so the author’s own mistake surfaces
at the authoring line instead of at serialize/resolve.