def test_allclose(Qs): for q in Qs[Qs_nonnan]: assert quaternion.allclose(q, q, rtol=0.0, atol=0.0) assert quaternion.allclose(Qs[Qs_nonnan], Qs[Qs_nonnan], rtol=0.0, atol=0.0) for q in Qs[Qs_finitenonzero]: assert quaternion.allclose(q, q*(1+1e-13), rtol=1.1e-13, atol=0.0) assert ~quaternion.allclose(q, q*(1+1e-13), rtol=0.9e-13, atol=0.0) for e in [quaternion.one, quaternion.x, quaternion.y, quaternion.z]: assert quaternion.allclose(q, q+(1e-13*e), rtol=0.0, atol=1.1e-13) assert ~quaternion.allclose(q, q+(1e-13*e), rtol=0.0, atol=0.9e-13) assert quaternion.allclose(Qs[Qs_finitenonzero], Qs[Qs_finitenonzero]*(1+1e-13), rtol=1.1e-13, atol=0.0) assert ~quaternion.allclose(Qs[Qs_finitenonzero], Qs[Qs_finitenonzero]*(1+1e-13), rtol=0.9e-13, atol=0.0) for e in [quaternion.one, quaternion.x, quaternion.y, quaternion.z]: assert quaternion.allclose(Qs[Qs_finite], Qs[Qs_finite]+(1e-13*e), rtol=0.0, atol=1.1e-13) assert ~quaternion.allclose(Qs[Qs_finite], Qs[Qs_finite]+(1e-13*e), rtol=0.0, atol=0.9e-13) assert quaternion.allclose(Qs[Qs_zero], Qs[Qs_zero]*2, rtol=0.0, atol=1.1e-13) for qnan in Qs[Qs_nan]: assert ~quaternion.allclose(qnan, qnan, rtol=1.0, atol=1.0) for q in Qs: assert ~quaternion.allclose(q, qnan, rtol=1.0, atol=1.0)
def allclose(*args, **kwargs): kwargs.update({'verbose': True}) return quaternion.allclose(*args, **kwargs)