Source code for tolerancing.compensator

"""Compensator Module

This module contains a class for compensating perturbations in an optical
system. The CompensatorOptimizer class is used to optimize a set of variables
to compensate for perturbations in an optical system.

Kramer Harrison, 2024
"""

from __future__ import annotations

from optiland.optimization import LeastSquares, OptimizationProblem, OptimizerGeneric


[docs] class CompensatorOptimizer(OptimizationProblem): """A class representing a compensator for a tolerancing problem. This class optimizes a set of variables to compensate for perturbations in an optical system. Args: method (str): The type of optimizer to use. Default is 'generic'. Other options: 'least_squares' tol (float): The tolerance for the optimizer. Default is 1e-5. Attributes: method (str): The type of optimizer to use. Default is 'generic'. Other options include 'least_squares'. tol (float): The tolerance for the optimizer. Default is 1e-5. _optimizer_map (dict): A mapping of optimizer types to their respective classes. """ def __init__(self, method="generic", tol=1e-5): super().__init__() self.method = method self.tol = tol self._optimizer_map = { "generic": OptimizerGeneric, "least_squares": LeastSquares, }
[docs] def get_optimizer(self): if self.method not in self._optimizer_map: raise ValueError(f'Invalid optimizer method "{self.method}".') return self._optimizer_map[self.method]
@property def has_variables(self): """Check if the optimizer has variables. If no variables are present, then the optimizer will not run. Returns: bool: True if the optimizer has variables, False otherwise. """ return bool(self.variables)
[docs] def run(self): """Run the optimizer for compensation. Returns: scipy.optimize.OptimizeResult: The result of the optimizer run. """ optimizer = self.get_optimizer()(self) return optimizer.optimize(tol=self.tol)