Source code for m4opt.models.core

from dataclasses import dataclass
from typing import Optional

from astropy.coordinates import SkyCoord
from astropy.time import Time
from astropy.utils.state import ScienceState

error = """\
Unknown target. Please evaluate the model by providing the position and \
observing time in a `with:` statement, like this:
    from m4opt.models import state
    with state.set_observing(target_coord=coord, obstime=time):
        ...  # evaluate model here\
"""


@dataclass
class ObservingState:
    obstime: Optional[Time] = None
    target_coord: Optional[SkyCoord] = None


[docs] class state(ScienceState): """Context manager for global target coordinates and observing time.""" _value = None
[docs] @classmethod def validate(cls, value): if value is None: raise ValueError(error) return value
[docs] @classmethod def set_observing(cls, *args, **kwargs): return cls.set(ObservingState(*args, **kwargs))