'Success criteria for trust-constr

The trust-constr algorithm from scipy.optimize.minimize defines 4 stop criteria:

Termination status:

0 : The maximum number of function evaluations is exceeded. 
1 : gtol termination condition is satisfied. 
2 : xtol termination condition is satisfied. 
3 : callback function requested termination.

From here

The OptimizeResult object returned also contains a field success, which is filled in as follows:

# Status 3 occurs when the callback function requests termination,
# this is assumed to not be a success.
result.success = True if result.status in (1, 2) else False

From here

I understand why status 1 is considered success (infinity norm of Lagrangian gradient and the constraint violation are smaller than gtol), but why is status 2 also considered success? The xtol criterium is satisfied when the trust region radius drops below xtol, 1e-8 by default, but it doesn't check the Lagrangian gradient to see if an extremum was reached or the constraint violation to see if the constraints are satisfied. It seems this criterium stops the algorithm because it doesn't make sense to iterate further, not because it reached a solution. What am I missing?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source