"""Hot-path data types (ARCH-02).

`@dataclass(slots=True, frozen=True)` types used per-frame on the
critical path. Pydantic models stay at boundaries (REST/config/wire);
this package replaces the per-frame Pydantic models from `schemas/`.

Legacy import paths in `gps_denied.schemas.*` continue to work via
re-export shims (Plan 01-01 Task 3).

ARCH-02 canonical-name aliases:
- `IMUMeasurement` → `IMUSample`
- `VOEstimate`     → `RelativePose`
"""

from gps_denied.hot_types.alignment_result import (
    AlignmentResult,
    ChunkAlignmentResult,
    Sim3Transform,
)
from gps_denied.hot_types.eskf_state import ESKFState
from gps_denied.hot_types.frame_state import FrameState
from gps_denied.hot_types.imu_sample import IMUSample
from gps_denied.hot_types.position_estimate import PositionEstimate
from gps_denied.hot_types.rotation_result import RotationResult
from gps_denied.hot_types.satellite_anchor import (
    SatelliteAnchor,
    TileBounds,
    TileCoords,
)
from gps_denied.hot_types.vo_estimate import (
    Features,
    Matches,
    Motion,
    RelativePose,
    VOEstimate,
)

# ARCH-02 canonical-name aliases (legacy → new)
IMUMeasurement = IMUSample

__all__ = [
    # ARCH-02 mandated names
    "FrameState",
    "IMUSample",
    "PositionEstimate",
    "VOEstimate",
    "SatelliteAnchor",
    # VIO outputs
    "RelativePose",
    "Features",
    "Matches",
    "Motion",
    # ESKF
    "ESKFState",
    # Metric / alignment
    "AlignmentResult",
    "ChunkAlignmentResult",
    "Sim3Transform",
    # Rotation
    "RotationResult",
    # Satellite tile geometry
    "TileCoords",
    "TileBounds",
    # Legacy aliases
    "IMUMeasurement",
]
