Source code for optika.vectors._vectors_field

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

__all__ = [
    "AbstractFieldVectorArray",
    "FieldVectorArray",
]

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


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