Source code for optika.vectors._vectors_pupil

from __future__ import annotations
from typing import TypeVar, Generic
import abc
import dataclasses
import named_arrays as na

__all__ = [
    "AbstractPupilVectorArray",
    "PupilVectorArray",
]

PupilT = TypeVar("PupilT", bound=na.AbstractCartesian2dVectorArray)


[docs] @dataclasses.dataclass(eq=False, repr=False) class AbstractPupilVectorArray( na.AbstractCartesianVectorArray, ): """An interface describing a pupil position.""" @property @abc.abstractmethod def pupil(self) -> na.AbstractCartesian2dVectorArray: """ A point on the pupil. """ @property def type_abstract(self) -> type[AbstractPupilVectorArray]: return AbstractPupilVectorArray @property def type_explicit(self) -> type[PupilVectorArray]: return PupilVectorArray @property def type_matrix(self) -> type[na.PositionalMatrixArray]: raise NotImplementedError @property def explicit(self) -> PupilVectorArray: return super().explicit
[docs] @dataclasses.dataclass(eq=False, repr=False) class PupilVectorArray( AbstractPupilVectorArray, na.AbstractExplicitCartesianVectorArray, Generic[PupilT], ): """A vector describing a pupil position.""" pupil: PupilT = 0 """A point on the pupil."""
[docs] @classmethod def from_scalar( cls, scalar: na.ScalarLike, like: None | PupilVectorArray = None, ) -> PupilVectorArray: if like is None: type_like = cls else: type_like = type(like) return type_like( pupil=scalar, )