Source code for pyetsimul.simulation.eye_position

"""Eye 3D position variations."""

import math
from collections.abc import Iterable

from ..core import Eye
from ..types import Position3D
from .core import EyeParameterVariation
from .grid_base import RegularGrid


[docs] class EyePositionVariation(EyeParameterVariation): """Varies eye position in space using grid generation."""
[docs] def __init__( self, center: Position3D, dx: list[float], dy: list[float], dz: list[float], grid_size: list[int] ) -> None: """Initialize eye position variation. Args: center: Center position for grid dx: X-axis displacement ranges dy: Y-axis displacement ranges dz: Z-axis displacement ranges grid_size: Number of steps in each dimension """ super().__init__("eye_position") self.grid = RegularGrid(center=center, dx=dx, dy=dy, dz=dz, grid_size=grid_size)
def __len__(self) -> int: """Return the total number of eye positions.""" return math.prod(self.grid.grid_size)
[docs] def generate_values(self) -> Iterable[Position3D]: """Generate all eye positions using the grid system.""" yield from self.grid.generate_positions()
[docs] def describe(self) -> str: """Return a human-readable description of eye position variation.""" total_positions = len(self) return f"eye position across {total_positions} spatial locations"
[docs] def apply_to_eye(self, eye: Eye, value: Position3D) -> None: # noqa: PLR6301 """Set eye position to the specified location.""" eye.position = value