"""Simulated-scene star NavModel.
Emits STAR ``NavFeature`` instances for a simulated frame exactly the way
:class:`~spindoctor.nav_model.stars.nav_model_stars.NavModelStars` does for a real
frame -- same predicted-SNR, covariance, reliability, and annotation
machinery -- but builds its star list from the scene's catalog entries in
the filtered idealized view (``obs.nav_params``) rather than reducing real
catalogs. The renderer's output star records never cross the information
boundary: the navigator knows the catalog, not what was drawn.
The scene renders each star at its catalog ``(v, u)`` shifted by the planted
offset; this model predicts the unshifted catalog position, so a star
technique that detects the shifted peak recovers the planted offset -- the
same prediction/observation split a real navigation has, which is why the
recovery transfers.
"""
from __future__ import annotations
from typing import TYPE_CHECKING
from oops import Observation
from spindoctor.nav_model.nav_model import NavModel
from spindoctor.nav_model.stars.nav_model_stars import (
NavModelStars,
_star_short_info,
_star_summary,
)
from spindoctor.sim.star_records import star_record_from_params
from spindoctor.support.time import now_dt
if TYPE_CHECKING: # pragma: no cover - typing-only import
from spindoctor.config import Config
from spindoctor.support.types import MutableStar
__all__ = ['NavModelStarsSimulated']