# StoppingCriterion¶

class probnum.StoppingCriterion

Bases: `abc.ABC`

Stopping criterion of a probabilistic numerical method.

Checks whether quantities tracked by the probabilistic numerical method meet a desired terminal condition.

Examples

Stopping criteria support binary arithmetic, which makes them easy to combine. Take the following example, where we define a custom solver state.

```>>> import dataclasses
>>> import numpy as np
>>> from probnum import StoppingCriterion
```
```>>> @dataclasses.dataclass
... class SolverState:
...     iters = 50
...     atol = 1e-12
...     rtol = 1e-3
```
```>>> state = SolverState()
```

Next we implement a few stopping criteria.

```>>> class MaxIterations(StoppingCriterion):
...     def __init__(self, maxiters):
...         self.maxiters = maxiters
...     def __call__(self, solver_state) -> bool:
...         return solver_state.iters >= self.maxiters
```
```>>> class AbsoluteResidualTolerance(StoppingCriterion):
...     def __init__(self, atol=1e-6):
...         self.atol = atol
...     def __call__(self, solver_state) -> bool:
...         return solver_state.atol < self.atol
```
```>>> class RelativeResidualTolerance(StoppingCriterion):
...     def __init__(self, rtol=1e-6):
...         self.rtol = rtol
...     def __call__(self, solver_state) -> bool:
...         return solver_state.rtol < self.rtol
```

Now let’s combine them by stopping when the solver has reached an absolute and relative tolerance, or a maximum number of iterations.

```>>> stopcrit = MaxIterations(maxiters=100) | (
...     AbsoluteResidualTolerance(atol=1e-6)
...     & RelativeResidualTolerance(rtol=1e-6)
... )
```
```>>> stopcrit(state)
False
```

Now let’s modify the state such that the solver has reached a maximum number of iterations.

```>>> state.iters = 1000
>>> stopcrit(state)
True
```

`LambdaStoppingCriterion`

Stopping criterion defined via an anonymous function.

`LinearSolverStoppingCriterion`

Stopping criterion of a probabilistic linear solver.

`FiltSmoothStoppingCriterion`

Stopping criterion of filters and smoothers.

Methods Summary

 `__call__`(*args, **kwargs) Check whether tracked quantities meet a desired terminal condition.

Methods Documentation

abstract __call__(*args, **kwargs)[source]

Check whether tracked quantities meet a desired terminal condition.

Return type

`bool`