Skip to content
This repository was archived by the owner on Nov 17, 2023. It is now read-only.
This repository was archived by the owner on Nov 17, 2023. It is now read-only.

test_np_round #19081

Description

@leezu
[2020-09-02T00:02:22.521Z] ================================== FAILURES ===================================
[2020-09-02T00:02:22.521Z] ________________________________ test_np_round ________________________________
[2020-09-02T00:02:22.521Z] [gw3] win32 -- Python 3.7.3 C:\Python37\python.exe
[2020-09-02T00:02:22.521Z] 
[2020-09-02T00:02:22.521Z]     @with_seed()
[2020-09-02T00:02:22.521Z]     @use_np
[2020-09-02T00:02:22.521Z]     def test_np_round():
[2020-09-02T00:02:22.521Z]         class TestRound(HybridBlock):
[2020-09-02T00:02:22.521Z]             def __init__(self, func, decimals):
[2020-09-02T00:02:22.521Z]                 super(TestRound, self).__init__()
[2020-09-02T00:02:22.521Z]                 self.func = func
[2020-09-02T00:02:22.521Z]                 self.decimals = decimals
[2020-09-02T00:02:22.521Z]     
[2020-09-02T00:02:22.521Z]             def hybrid_forward(self, F, x):
[2020-09-02T00:02:22.521Z]                 return getattr(F.np, self.func)(x, self.decimals)
[2020-09-02T00:02:22.521Z]     
[2020-09-02T00:02:22.521Z]         shapes = [(), (1, 2, 3), (1, 0)]
[2020-09-02T00:02:22.521Z]         types = ['int32', 'int64', 'float32', 'float64']
[2020-09-02T00:02:22.521Z]         funcs = ['round', 'round_']
[2020-09-02T00:02:22.521Z]         for hybridize, oneType, func in itertools.product([True, False], types, funcs):
[2020-09-02T00:02:22.521Z]             rtol, atol = 1e-3, 1e-5
[2020-09-02T00:02:22.521Z]             for shape in shapes:
[2020-09-02T00:02:22.521Z]                 for d in range(-5, 6):
[2020-09-02T00:02:22.521Z]                     test_round = TestRound(func, d)
[2020-09-02T00:02:22.521Z]                     if hybridize:
[2020-09-02T00:02:22.521Z]                         test_round.hybridize()
[2020-09-02T00:02:22.521Z]                     x = rand_ndarray(shape, dtype=oneType).as_np_ndarray()
[2020-09-02T00:02:22.521Z]                     np_out = getattr(_np, func)(x.asnumpy(), d)
[2020-09-02T00:02:22.521Z]                     mx_out = test_round(x)
[2020-09-02T00:02:22.521Z]                     assert mx_out.shape == np_out.shape
[2020-09-02T00:02:22.521Z] >                   assert_almost_equal(mx_out.asnumpy(), np_out, rtol=rtol, atol=atol)
[2020-09-02T00:02:22.521Z] 
[2020-09-02T00:02:22.521Z] tests\python\unittest\test_numpy_op.py:7691: 
[2020-09-02T00:02:22.521Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
[2020-09-02T00:02:22.521Z] 
[2020-09-02T00:02:22.521Z] a = array([[[ 1.029    , -0.371    ,  1.11     ],
[2020-09-02T00:02:22.521Z]         [ 1.4289999, -0.636    , -0.306    ]]], dtype=float32)
[2020-09-02T00:02:22.521Z] b = array([[[ 1.029, -0.371,  1.11 ],
[2020-09-02T00:02:22.521Z]         [ 1.429, -0.636, -0.307]]], dtype=float32)
[2020-09-02T00:02:22.521Z] rtol = 0.001, atol = 1e-05, names = ('a', 'b'), equal_nan = False
[2020-09-02T00:02:22.521Z] use_broadcast = True, mismatches = (10, 10)
[2020-09-02T00:02:22.521Z] 
[2020-09-02T00:02:22.521Z]     def assert_almost_equal(a, b, rtol=None, atol=None, names=('a', 'b'), equal_nan=False,
[2020-09-02T00:02:22.521Z]                             use_broadcast=True, mismatches=(10, 10)):
[2020-09-02T00:02:22.521Z]         """Test that two numpy arrays are almost equal. Raise exception message if not.
[2020-09-02T00:02:22.521Z]     
[2020-09-02T00:02:22.521Z]         Parameters
[2020-09-02T00:02:22.521Z]         ----------
[2020-09-02T00:02:22.521Z]         a : np.ndarray or mx.nd.array
[2020-09-02T00:02:22.521Z]         b : np.ndarray or mx.nd.array
[2020-09-02T00:02:22.521Z]         rtol : None or float or dict of dtype -> float
[2020-09-02T00:02:22.521Z]             The relative threshold. Default threshold will be used if set to ``None``.
[2020-09-02T00:02:22.521Z]         atol : None or float or dict of dtype -> float
[2020-09-02T00:02:22.521Z]             The absolute threshold. Default threshold will be used if set to ``None``.
[2020-09-02T00:02:22.521Z]         names : tuple of names, optional
[2020-09-02T00:02:22.521Z]             The names used in error message when an exception occurs
[2020-09-02T00:02:22.521Z]         equal_nan : boolean, optional
[2020-09-02T00:02:22.521Z]             The flag determining how to treat NAN values in comparison
[2020-09-02T00:02:22.521Z]         mismatches : tuple of mismatches
[2020-09-02T00:02:22.521Z]             Maximum number of mismatches to be printed (mismatches[0]) and determine (mismatches[1])
[2020-09-02T00:02:22.521Z]         """
[2020-09-02T00:02:22.521Z]         if not use_broadcast:
[2020-09-02T00:02:22.521Z]             checkShapes(a, b)
[2020-09-02T00:02:22.521Z]     
[2020-09-02T00:02:22.521Z]         rtol, atol = get_tols(a, b, rtol, atol)
[2020-09-02T00:02:22.521Z]     
[2020-09-02T00:02:22.521Z]         if isinstance(a, mx.numpy.ndarray):
[2020-09-02T00:02:22.521Z]             a = a.asnumpy()
[2020-09-02T00:02:22.521Z]         if isinstance(b, mx.numpy.ndarray):
[2020-09-02T00:02:22.521Z]             b = b.asnumpy()
[2020-09-02T00:02:22.521Z]         use_np_allclose = isinstance(a, np.ndarray) and isinstance(b, np.ndarray)
[2020-09-02T00:02:22.521Z]         if not use_np_allclose:
[2020-09-02T00:02:22.521Z]             if not (hasattr(a, 'ctx') and hasattr(b, 'ctx') and a.ctx == b.ctx and a.dtype == b.dtype):
[2020-09-02T00:02:22.521Z]                 use_np_allclose = True
[2020-09-02T00:02:22.521Z]                 if isinstance(a, mx.nd.NDArray):
[2020-09-02T00:02:22.521Z]                     a = a.asnumpy()
[2020-09-02T00:02:22.521Z]                 if isinstance(b, mx.nd.NDArray):
[2020-09-02T00:02:22.521Z]                     b = b.asnumpy()
[2020-09-02T00:02:22.521Z]     
[2020-09-02T00:02:22.521Z]         if use_np_allclose:
[2020-09-02T00:02:22.521Z]             if hasattr(a, 'dtype') and a.dtype == np.bool_ and hasattr(b, 'dtype') and b.dtype == np.bool_:
[2020-09-02T00:02:22.521Z]                 np.testing.assert_equal(a, b)
[2020-09-02T00:02:22.521Z]                 return
[2020-09-02T00:02:22.521Z]             if almost_equal(a, b, rtol, atol, equal_nan=equal_nan):
[2020-09-02T00:02:22.521Z]                 return
[2020-09-02T00:02:22.521Z]         else:
[2020-09-02T00:02:22.521Z]             output = mx.nd.contrib.allclose(a, b, rtol, atol, equal_nan)
[2020-09-02T00:02:22.521Z]             if output.asnumpy() == 1:
[2020-09-02T00:02:22.521Z]                 return
[2020-09-02T00:02:22.521Z]     
[2020-09-02T00:02:22.521Z]             a = a.asnumpy()
[2020-09-02T00:02:22.521Z]             b = b.asnumpy()
[2020-09-02T00:02:22.521Z]     
[2020-09-02T00:02:22.521Z]         index, rel = _find_max_violation(a, b, rtol, atol)
[2020-09-02T00:02:22.521Z]         if index != ():
[2020-09-02T00:02:22.521Z]             # a, b are the numpy arrays
[2020-09-02T00:02:22.521Z]             indexErr = index
[2020-09-02T00:02:22.521Z]             relErr = rel
[2020-09-02T00:02:22.521Z]     
[2020-09-02T00:02:22.521Z]             print('\n*** Maximum errors for vector of size {}:  rtol={}, atol={}\n'.format(a.size, rtol, atol))
[2020-09-02T00:02:22.521Z]             aTmp = a.copy()
[2020-09-02T00:02:22.521Z]             bTmp = b.copy()
[2020-09-02T00:02:22.521Z]             i = 1
[2020-09-02T00:02:22.521Z]             while i <= a.size:
[2020-09-02T00:02:22.521Z]                 if i <= mismatches[0]:
[2020-09-02T00:02:22.521Z]                     print("%3d: Error %f  %s" %(i, rel, locationError(a, b, index, names)))
[2020-09-02T00:02:22.521Z]     
[2020-09-02T00:02:22.521Z]                 aTmp[index] = bTmp[index] = 0
[2020-09-02T00:02:22.521Z]                 if almost_equal(aTmp, bTmp, rtol, atol, equal_nan=equal_nan):
[2020-09-02T00:02:22.521Z]                     break
[2020-09-02T00:02:22.521Z]     
[2020-09-02T00:02:22.521Z]                 i += 1
[2020-09-02T00:02:22.521Z]                 if i <= mismatches[1] or mismatches[1] <= 0:
[2020-09-02T00:02:22.521Z]                     index, rel = _find_max_violation(aTmp, bTmp, rtol, atol)
[2020-09-02T00:02:22.521Z]                 else:
[2020-09-02T00:02:22.521Z]                     break
[2020-09-02T00:02:22.521Z]     
[2020-09-02T00:02:22.521Z]             mismatchDegree = "at least " if mismatches[1] > 0 and i > mismatches[1] else ""
[2020-09-02T00:02:22.521Z]             errMsg = "Error %f exceeds tolerance rtol=%e, atol=%e (mismatch %s%f%%).\n%s" % \
[2020-09-02T00:02:22.521Z]                      (relErr, rtol, atol, mismatchDegree, 100*i/a.size, \
[2020-09-02T00:02:22.521Z]                       locationError(a, b, indexErr, names, maxError=True))
[2020-09-02T00:02:22.521Z]         else:
[2020-09-02T00:02:22.521Z]             errMsg = "Error %f exceeds tolerance rtol=%e, atol=%e.\n" % (rel, rtol, atol)
[2020-09-02T00:02:22.521Z]     
[2020-09-02T00:02:22.521Z]         np.set_printoptions(threshold=4, suppress=True)
[2020-09-02T00:02:22.521Z]         msg = npt.build_err_msg([a, b], err_msg=errMsg)
[2020-09-02T00:02:22.521Z]     
[2020-09-02T00:02:22.521Z] >       raise AssertionError(msg)
[2020-09-02T00:02:22.521Z] E       AssertionError: 
[2020-09-02T00:02:22.521Z] E       Items are not equal:
[2020-09-02T00:02:22.521Z] E       Error 3.154627 exceeds tolerance rtol=1.000000e-03, atol=1.000000e-05 (mismatch 16.666667%).
[2020-09-02T00:02:22.521Z] E       Location of maximum error: (0, 1, 2), a=-0.30599999, b=-0.30700001
[2020-09-02T00:02:22.521Z] E        ACTUAL: array([[[ 1.029    , -0.371    ,  1.11     ],
[2020-09-02T00:02:22.521Z] E               [ 1.4289999, -0.636    , -0.306    ]]], dtype=float32)
[2020-09-02T00:02:22.521Z] E        DESIRED: array([[[ 1.029, -0.371,  1.11 ],
[2020-09-02T00:02:22.521Z] E               [ 1.429, -0.636, -0.307]]], dtype=float32)
[2020-09-02T00:02:22.521Z] 
[2020-09-02T00:02:22.521Z] windows_package\python\mxnet\test_utils.py:735: AssertionError

https://jenkins.mxnet-ci.amazon-ml.com/blue/organizations/jenkins/mxnet-validation%2Fwindows-gpu/detail/PR-19034/5/pipeline/

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions