Pytest-allclose released

The Nengo team at ABR is excited to announce the first release of pytest-allclose. pytest-allclose is made available under the open source MIT license so that all Python projects can make use of it to better test their numerical code.

What is pytest-allclose?

pytest-allclose provides the allclose fixture for pytest. The fixture is used just like numpy.allclose:

import numpy as np

def test_close(allclose):
    x = np.linspace(-1, 1)
    y = x + 0.001
    assert allclose(y, x, atol=0.002)
    assert not allclose(y, x, atol=0.0005)
    assert not allclose(y, x, rtol=0.002)

allclose has a few additional features for large numerical projects. You can pass in an xtol value to compare shifted arrays:

def test_close(allclose):
    x = np.linspace(-1, 1)

    assert allclose(x[1:], x[:-1], xtol=1)
    assert allclose(x[3:], x[:-3], xtol=3)

And using the pytest_allclose.report_rmses function, you can gather a summary of how close your allclose calls are across all tests, giving you a clue as to how code changes affect test accuracy:

$ pytest
======================= test session starts =======================

pytest_allclose/tests/test_allclose.py ............         [ 63%]
pytest_allclose/tests/test_pytest.py .......                [100%]

====== relative root mean squared error for allclose checks =======
mean relative RMSE: 0.32955 +/- 0.5432 (std)
==================== 19 passed in 0.92 seconds ====================

How do I use it?

To use the fixture, first install it with pip:

pip install pytest-allclose

then you can use it in your tests by putting allclose in the function signature, like other pytest fixtures. We recommend you add pytest-allclose your list of test requirements as well.

Where can I learn more?

For more details and advanced usage, see the full documentation.

Where can I get help?

If you have any questions, run into any bugs, or have suggestions for new features, please file an issue on Github.