"""Core parameter variation architecture for pure data generation."""
from abc import ABC, abstractmethod
from collections.abc import Iterable
from typing import Any
from ..core import Eye
[docs]
class ParameterVariation(ABC):
"""Base class for all parameter variations - pure data generation only."""
[docs]
def __init__(self, param_name: str) -> None:
"""Initialize parameter variation.
Args:
param_name: Name of the parameter to vary
"""
self.param_name = param_name
[docs]
@abstractmethod
def generate_values(self) -> Iterable[Any]:
"""Generate all values for this parameter variation."""
@abstractmethod
def __len__(self) -> int:
"""Return the total number of variation values."""
[docs]
@abstractmethod
def describe(self) -> str:
"""Return a human-readable description of this variation."""
[docs]
class EyeParameterVariation(ParameterVariation):
"""Base class for variations that modify eye objects."""
[docs]
@abstractmethod
def apply_to_eye(self, eye: Eye, value: Any) -> None: # noqa: ANN401
"""Apply variation value to Eye object."""
[docs]
class TargetVariation(ParameterVariation):
"""Base class for variations that provide gaze targets."""
[docs]
def get_targets(self) -> list[Any]:
"""Get all target values for this variation."""
return list(self.generate_values())
[docs]
class VariationStrategy(ABC):
"""Base strategy for using parameter variations."""
[docs]
@abstractmethod
def execute(self, variation: ParameterVariation) -> Any: # noqa: ANN401
"""Execute strategy over all variation values."""