"""Schema exception hierarchy — single source of truth. All schema-layer errors derive from `SchemaError` so callers can catch the family with one `except` when that's desired. The leaf classes additionally inherit from the semantically appropriate built-in (`ValueError` / `RuntimeError`) so pre-existing `except ValueError` / `except RuntimeError` code paths in the codebase keep working — this is backward-compat by design. `SchemaDiscoveryError` and `SchemaSpecError` are re-exported from `schema/dataset_schema.py` and `schema/registry.py` respectively for backward compat, but the canonical definitions live here. """ from __future__ import annotations class SchemaError(Exception): """Base class for every schema-layer exception. Catch this when you want to handle any schema failure uniformly (bad manifest, missing info.json, unresolved --dataset_schema spec, invalid layout, etc.). For finer control, catch one of the leaves below. """ class SchemaValidationError(SchemaError, ValueError): """Raised when a DatasetSchema / ArmLayoutSpec fails structural checks. Structural checks include: dim/length mismatches, gripper index out of bounds, gripper marked delta, unsupported arm DoF, duplicate annotation fields, etc. Anything caught by `validate_schema` / `validate_arm_layout`. Multiple inheritance with `ValueError` is intentional — existing callers that do `except ValueError` (a few places in adapters/config) continue to work. """ class SchemaDiscoveryError(SchemaError, RuntimeError): """Raised when schema discovery fails (manifest missing, info.json opaque, image_mapping mismatched, etc.). Multiple inheritance with `RuntimeError` preserves backward compat — adapters catch it explicitly via either type. """ class SchemaSpecError(SchemaError, ValueError): """Raised by `schema.registry.resolve(spec)` when `spec` cannot be mapped to any registered schema / dotted module / file path. Multiple inheritance with `ValueError` preserves backward compat for callers that catch `ValueError`. """ __all__ = [ "SchemaError", "SchemaValidationError", "SchemaDiscoveryError", "SchemaSpecError", ]