使用np.testing测试非严格不等式

时间:2018-09-18 07:37:37

标签: python numpy testing

np.testing.assert_array_less()测试严格的不平等性:

In [1]: np.testing.assert_array_less(1., 1.)
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-1-ea8ee0b762c3> in <module>()
----> 1 np.testing.assert_array_less(1., 1.)

AssertionError: 
Arrays are not less-ordered

显然,没有参数可以测试非严格不等式。

如何仍然依靠np.testing来解释其可解释的错误消息来对此进行测试? (我想避免使用assert (a <= b).all()

1 个答案:

答案 0 :(得分:1)

您注意到,显然非严格不平等不在numpy.testing中定义的测试用例之内。另外,没有记录方法可以扩展numpy.testing并包含更多测试用例。

从源头上看,很明显可以使用assert_array_compare来滚动自己的测试用例:

import operator

def assert_array_less_equal(x, y, err_msg='', verbose=True):
    from numpy.testing import assert_array_compare
    __tracebackhide__ = True  # Hide traceback for py.test
    assert_array_compare(operator.__le__, x, y, err_msg=err_msg,
                         verbose=verbose,
                         header='Arrays are not equal or less-ordered')

>>> assert_array_less_equal(1., 1.)
>>> assert_array_less_equal(1.1, 1.)
.
.
.
AssertionError: 
Arrays are not equal or less-ordered

(mismatch 100.0%)
 x: array(1.1)
 y: array(1.)

但是,如上所述,assert_array_compare未记录,而是numpy.testing中的辅助函数。因此,我猜想numpy更新时,它可能会随时更改和更新,而没有任何通知。这可能会无声地破坏您的代码。