"""Shared visualization panels — train + deploy both call these.

Every viz returns a numpy uint8 image (or a list of images for per-T
panels). Callers decide where to log:

- Training: pass to wandb.Image / wandb.log.
- Deploy:   pass to rr.log("path/to/panel", rr.Image(arr)).

This is what keeps wandb and rerun panels visually identical.
"""

from .bin_grids import bin_grid_panel
from .feature_pca import (PCABasis, apply_pca_basis, feature_pca_panel,
                            fit_pca_basis, shared_feature_pca_panels)
from .height_curve import height_curve_panel
from .heatmap import marginal_heatmap_panel, marginal_heatmap_grid
from .keypoints import keypoints_overlay
from .overlay import compose_render_over_live, compose_mask_over_live
from .trajectory import project_world_to_image

__all__ = [
    "bin_grid_panel",
    "PCABasis",
    "apply_pca_basis",
    "feature_pca_panel",
    "fit_pca_basis",
    "shared_feature_pca_panels",
    "height_curve_panel",
    "marginal_heatmap_panel",
    "marginal_heatmap_grid",
    "keypoints_overlay",
    "compose_render_over_live",
    "compose_mask_over_live",
    "project_world_to_image",
]
