Source code for spindoctor.nav_model.stars.nav_model_stars_simulated

"""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']