Add support for array `atol` and `rtol` in `np.testing.assert_allclose` and `np.allclose`

Numpy version 1.24.0. The current behavior of `np.testing.assert_allclose` and `np.allclose` are still inconsistent with the docs, which specifies that `atol` and `rtol` must be a scalar. However, the current implementation of `np.allclose` allows passing in `atol` and `rtol` as an array, while `np.testing.assert_allclose` only raises error because of a string formatting line `header = f'Not equal to tolerance rtol={rtol:g}, atol={atol:g}'`. To make things less confusing, for BOTH `np.allclose()` and `np.testing.assert_allclose()`, we should either perform a check for the correct type of `atol` and `rtol`, or to actually support an array as `atol`. Indeed there are real use-cases for array `atol` and `rtol`. For example for `atol`: let's say we want to compare two 3D vectors x and y where the first two axis should have absolute tolerance of 0.1 while the third axis should have absolute tolerance of 1, because there are more stringent requirements on x and y. I believe this is the use case that many of us run into, and it is quite natural to write ```python3 import numpy as np x = [1, 2, 3] y = [1.1, 2.1, 5] np.allclose(x, y, atol=[0.1, 0.1, 1]) ``` [I have posted this as a comment on an issue](https://github.com/numpy/numpy/issues/14320#issuecomment-1482201277) [And there is already a proposed PR to support this change](https://github.com/numpy/numpy/pull/14343)
participants (1)
-
Quang Anh