Source code for itergp.methods.stopping_criteria._maxiter

"""Stopping criterion based on a maximum number of iterations."""
from __future__ import annotations

from typing import Optional

from probnum.linalg.solvers.stopping_criteria import LinearSolverStoppingCriterion


class MaxIterationsStoppingCriterion(LinearSolverStoppingCriterion):
    r"""Stop after a maximum number of iterations.

    Stop when the solver has taken a maximum number of steps. The maximum number of iterations
    can either be specified in absolute terms or relative to the problem size.

    Parameters
    ----------
    maxiter
        Maximum number of steps the solver should take.
    problem_size_factor
        If ``maxiter`` is None, stops after ``problem_size_factor * problem_size`` steps, where
        ``problem_size`` is the dimension of the solution to the linear system. Will be ignored
        otherwise.
    """

    def __init__(self, maxiter: Optional[int] = None, problem_size_factor: int = 10):
        self._maxiter = maxiter
        self._problem_size_factor = problem_size_factor

[docs] def __call__( self, solver_state: "probnum.linalg.solvers.LinearSolverState" ) -> bool: """Check whether the maximum number of iterations has been reached. Parameters ---------- solver_state Current state of the linear solver. """ if self.maxiter is None: return ( solver_state.step >= solver_state.problem.A.shape[0] * self.problem_size_factor ) return solver_state.step >= self.maxiter
@property def maxiter(self) -> int: """Maximum number of steps.""" return self._maxiter @property def problem_size_factor(self) -> int: """Problem size factor. If ``maxiter`` is None, stops after ``problem_size_factor * problem_size`` steps, where ``problem_size`` is the dimension of the solution to the linear system. Will be ignored otherwise. """ return self._problem_size_factor