How to use compare method in autotest

Best Python code snippet using autotest_python

reduction_ops_test.py

Source:reduction_ops_test.py Github

copy

Full Screen

...108 data = np.random.rand(*shape).astype(dtype.as_numpy_dtype)109 if dtype.is_complex:110 data -= 2j * data111 return data112 def _compare(self, x, reduction_axes, keepdims, feed_dict=None):113 np_ans = self._np_reduce(x, reduction_axes, keepdims)114 with self.cached_session(use_gpu=True) as sess:115 tf_ans = self._tf_reduce(x, reduction_axes, keepdims)116 out = sess.run(tf_ans, feed_dict)117 self.assertAllClose(np_ans, out)118 self.assertShapeEqual(np_ans, tf_ans)119 def _compareAll(self, x, reduction_axes, feed_dict=None):120 if reduction_axes is not None and np.shape(reduction_axes) == (1,):121 # Test scalar reduction_axes argument122 self._compareAll(x, reduction_axes[0])123 self._compare(x, reduction_axes, keepdims=False, feed_dict=feed_dict)124 self._compare(x, reduction_axes, keepdims=True, feed_dict=feed_dict)125 def _compareAllAxes(self, x, feed_dict=None):126 self._compareAll(x, None)127 for axes in _powerset(range(x.ndim)):128 self._compareAll(x, axes, feed_dict)129 def _compareGradient(self, x, reduction_axes, rtol=1e-8, atol=1e-8):130 if reduction_axes is not None and np.shape(reduction_axes) == (1,):131 # Test scalar reduction_axes argument132 self._compareGradient(x, reduction_axes[0], rtol=rtol, atol=atol)133 with self.cached_session(use_gpu=True):134 t = ops.convert_to_tensor(x)135 su = self._tf_reduce(t, reduction_axes, False)136 jacob_t, jacob_n = gradient_checker.compute_gradient(137 t, x.shape, su, su.get_shape().as_list(), x_init_value=x, delta=1)138 self.assertAllClose(jacob_t, jacob_n, rtol=rtol, atol=atol)139 def _compareGradientAxes(self, x, rtol=1e-8, atol=1e-8):140 self._compareGradient(x, None, rtol=rtol, atol=atol)141 self._compareGradient(x, [], rtol=rtol, atol=atol)142 self._compareGradient(x, 0, rtol=rtol, atol=atol)143 self._compareGradient(x, [1], rtol=rtol, atol=atol)144 self._compareGradient(x, [2], rtol=rtol, atol=atol)145 self._compareGradient(x, [1, 2], rtol=rtol, atol=atol)146 self._compareGradient(x, [0, 1, 2, 3], rtol=rtol, atol=atol)147class SumReductionTest(BaseReductionTest):148 def _tf_reduce(self, x, reduction_axes, keepdims):149 return math_ops.reduce_sum(x, reduction_axes, keepdims)150 def _np_reduce(self, x, reduction_axes, keepdims):151 if isinstance(reduction_axes, list) or isinstance(reduction_axes,152 np.ndarray):153 reduction_axes = tuple(reduction_axes)154 return np.sum(x, axis=reduction_axes, keepdims=keepdims)155 def testAxesType(self):156 for dtype in [dtypes.int64, dtypes.int32]:157 with self.cached_session(use_gpu=True) as sess:158 v = math_ops.reduce_sum([0, 0], constant_op.constant(0, dtype=dtype))159 tf_v = self.evaluate(v)160 self.assertAllEqual(tf_v, 0)161 @test_util.run_deprecated_v1162 def testInfinity(self):163 for dtype in [np.float32, np.float64]:164 for special_value_x in [-np.inf, np.inf]:165 for special_value_y in [-np.inf, np.inf]:166 np_arr = np.array([special_value_x, special_value_y]).astype(dtype)167 self._compareAll(np_arr, None)168 @test_util.run_deprecated_v1169 def testInt32(self):170 for rank in range(1, _MAX_RANK + 1):171 np_arr = self._makeIncremental((2,) * rank, dtypes.int32)172 self._compareAllAxes(np_arr)173 @test_util.run_deprecated_v1174 def testFloat16(self):175 for rank in range(1, _MAX_RANK + 1):176 np_arr = self._makeIncremental((2,) * rank, dtypes.float16)177 self._compareAllAxes(np_arr)178 # test that mean doesn't overflow179 # only on GPU, since it has the more accurate implementation180 if not test.is_gpu_available():181 return182 arr = np.ones([68000], dtype=np.float16)183 with self.session(graph=ops.Graph(), use_gpu=True) as sess:184 tf_arr = variables.Variable(arr)185 variables.global_variables_initializer().run()186 tf_mean = math_ops.reduce_mean(tf_arr, 0, False)187 tf_out_mean = self.evaluate(tf_mean)188 self.assertAllClose(tf_out_mean, 1.)189 @test_util.run_deprecated_v1190 def testFloat32(self):191 for rank in range(1, _MAX_RANK + 1):192 np_arr = self._makeIncremental((2,) * rank, dtypes.float32)193 self._compareAllAxes(np_arr)194 for _ in range(10):195 size_x = int(2**np.random.uniform(0, 15))196 size_y = int(2**np.random.uniform(0, 15))197 if size_x * size_y > 1e7:198 size_y = int(1e7 / size_x)199 arr = np.ones([size_x, size_y], dtype=np.float32)200 col_sum = np.sum(arr, axis=0)201 row_sum = np.sum(arr, axis=1)202 with self.session(graph=ops.Graph(), use_gpu=True) as sess:203 tf_row_sum = self._tf_reduce(arr, 1, False)204 tf_col_sum = self._tf_reduce(arr, 0, False)205 tf_out_row, tf_out_col = self.evaluate([tf_row_sum, tf_col_sum])206 self.assertAllClose(col_sum, tf_out_col)207 self.assertAllClose(row_sum, tf_out_row)208 for size_x in [1, 3, 16, 33]:209 for size_y in [1, 3, 16, 33]:210 for size_z in [1, 3, 16, 33]:211 arr = np.ones([size_x, size_y, size_z], dtype=np.float32)212 sum_y = np.sum(arr, axis=1)213 sum_xz = np.sum(arr, axis=(0, 2))214 with self.session(graph=ops.Graph(), use_gpu=True) as sess:215 tf_sum_xz = self._tf_reduce(arr, [0, 2], False)216 tf_sum_y = self._tf_reduce(arr, 1, False)217 tf_out_sum_xz, tf_out_sum_y = self.evaluate([tf_sum_xz, tf_sum_y])218 self.assertAllClose(sum_y, tf_out_sum_y)219 self.assertAllClose(sum_xz, tf_out_sum_xz)220 @test_util.run_deprecated_v1221 def testFloat64(self):222 for rank in range(1, _MAX_RANK + 1):223 np_arr = self._makeIncremental((2,) * rank, dtypes.float64)224 self._compareAllAxes(np_arr)225 @test_util.run_deprecated_v1226 def testComplex64(self):227 for rank in range(1, _MAX_RANK + 1):228 np_arr = self._makeIncremental((2,) * rank, dtypes.complex64)229 self._compareAllAxes(np_arr)230 @test_util.run_deprecated_v1231 def testComplex128(self):232 for rank in range(1, _MAX_RANK + 1):233 np_arr = self._makeIncremental((2,) * rank, dtypes.complex128)234 self._compareAllAxes(np_arr)235 @test_util.run_deprecated_v1236 def testInvalidIndex(self):237 np_arr = np.arange(0, 10).reshape([2, 5]).astype(np.float32)238 input_tensor = ops.convert_to_tensor(np_arr)239 with self.assertRaisesWithPredicateMatch(240 ValueError, lambda e: "Invalid reduction dimension" in str(e)):241 math_ops.reduce_sum(input_tensor, [-3])242 with self.assertRaisesWithPredicateMatch(243 ValueError, lambda e: "Invalid reduction dimension" in str(e)):244 math_ops.reduce_sum(input_tensor, [2])245 with self.assertRaisesWithPredicateMatch(246 ValueError, lambda e: "Invalid reduction dimension" in str(e)):247 math_ops.reduce_sum(input_tensor, [0, 2])248 @test_util.run_deprecated_v1249 def testPartialShapes(self):250 np.random.seed(1618)251 # Input shape is unknown.252 reduction_axes = [1, 2]253 c_unknown = array_ops.placeholder(dtypes.float32)254 s_unknown = math_ops.reduce_sum(c_unknown, reduction_axes)255 self.assertEqual(tensor_shape.unknown_shape(), s_unknown.get_shape())256 np_input = np.random.randn(3, 3, 3)257 self._compareAll(np_input, reduction_axes, {c_unknown: np_input})258 # Input shape only has known rank.259 c_known_rank = array_ops.placeholder(dtypes.float32)260 c_known_rank.set_shape(tensor_shape.unknown_shape(rank=3))261 s_known_rank = math_ops.reduce_sum(262 c_known_rank, reduction_axes, keepdims=True)263 self.assertEqual(3, s_known_rank.get_shape().rank)264 np_input = np.random.randn(3, 3, 3)265 self._compareAll(np_input, reduction_axes, {c_known_rank: np_input})266 # Reduction indices are unknown.267 unknown_indices = array_ops.placeholder(dtypes.int32)268 c_unknown_indices = constant_op.constant([[10.0], [20.0]])269 s_unknown_indices = math_ops.reduce_sum(270 c_unknown_indices, unknown_indices, keepdims=False)271 self.assertEqual(tensor_shape.unknown_shape(),272 s_unknown_indices.get_shape())273 s_unknown_indices_keep = math_ops.reduce_sum(274 c_unknown_indices, unknown_indices, keepdims=True)275 self.assertEqual(2, s_unknown_indices_keep.get_shape().rank)276 @test_util.run_deprecated_v1277 def testWrongShapeForReductionIndices(self):278 reduction_axes = [[1], [2]]279 c_unknown = array_ops.placeholder(dtypes.float32)280 with self.assertRaisesWithPredicateMatch(ValueError,281 ".*must be at most rank 1.*"):282 math_ops.reduce_sum(c_unknown, reduction_axes)283 # Int64??284 @test_util.run_deprecated_v1285 def testGradient(self):286 for dtype in [287 dtypes.float32, dtypes.float64, dtypes.complex64, dtypes.complex128288 ]:289 x = self._makeIncremental([2, 3, 4, 2], dtype)290 self._compareGradientAxes(x)291 @test_util.run_deprecated_v1292 def testHighRank(self):293 # Do a bunch of random high dimensional reductions294 np.random.seed(42)295 for _ in range(20):296 rank = np.random.randint(4, 10 + 1)297 axes, = np.nonzero(np.random.randint(2, size=rank))298 shape = tuple(np.random.randint(1, 3 + 1, size=rank))299 data = np.random.randint(1024, size=shape)300 self._compareAll(data, axes)301 # Check some particular axis patterns302 for rank in 4, 7, 10:303 shape = tuple(np.random.randint(1, 3 + 1, size=rank))304 data = np.random.randint(1024, size=shape)305 for axes in ([], np.arange(rank), np.arange(0, rank, 2),306 np.arange(1, rank, 2)):307 self._compareAll(data, axes)308 @test_util.run_deprecated_v1309 def testExpand(self):310 # Reduce an empty tensor to a nonempty tensor311 x = np.zeros((5, 0))312 self._compareAll(x, [1])313 @test_util.run_deprecated_v1314 def testEmptyGradients(self):315 with self.session(use_gpu=True):316 x = array_ops.zeros([0, 3])317 y = math_ops.reduce_sum(x, [1])318 error = gradient_checker.compute_gradient_error(x, [0, 3], y, [0])319 self.assertEqual(error, 0)320 @test_util.run_deprecated_v1321 def testDegenerate(self):322 with self.session(use_gpu=True):323 for dtype in (dtypes.float16, dtypes.float32, dtypes.float64,324 dtypes.complex64, dtypes.complex128):325 # A large number is needed to get Eigen to die326 x = array_ops.zeros((0, 9938), dtype=dtype)327 y = math_ops.reduce_sum(x, [0])328 self.assertAllEqual(y.eval(), np.zeros(9938))329class MeanReductionTest(BaseReductionTest):330 def _tf_reduce(self, x, reduction_axes, keepdims):331 return math_ops.reduce_mean(x, reduction_axes, keepdims)332 def _np_reduce(self, x, reduction_axes, keepdims):333 if isinstance(reduction_axes, list) or isinstance(reduction_axes,334 np.ndarray):335 reduction_axes = tuple(reduction_axes)336 elif isinstance(reduction_axes, numbers.Integral):337 reduction_axes = (reduction_axes,)338 if reduction_axes is None:339 count = np.prod(x.shape)340 else:341 count = np.prod([x.shape[ax] for ax in reduction_axes])342 # np.mean automatically converts integer inputs to float, while TensorFlow's343 # reduce_mean does not. For integer inputs, we emulate TensorFlow's behavior344 # using np.sum and truncating division.345 np_sum = np.sum(x, axis=reduction_axes, keepdims=keepdims)346 if np.issubdtype(x.dtype, np.integer):347 return np_sum // count348 return np_sum / count349 def testAxesType(self):350 for dtype in [dtypes.int64, dtypes.int32]:351 with self.cached_session(use_gpu=True) as sess:352 v = math_ops.reduce_mean([0, 0], constant_op.constant(0, dtype=dtype))353 tf_v = self.evaluate(v)354 self.assertAllEqual(tf_v, 0)355 @test_util.run_deprecated_v1356 def testInfinity(self):357 for dtype in [np.float32, np.float64]:358 for special_value_x in [-np.inf, np.inf]:359 for special_value_y in [-np.inf, np.inf]:360 np_arr = np.array([special_value_x, special_value_y]).astype(dtype)361 self._compareAll(np_arr, None)362 @test_util.run_deprecated_v1363 def testInt32(self):364 for rank in range(1, _MAX_RANK + 1):365 np_arr = self._makeIncremental((2,) * rank, dtypes.int32)366 self._compareAllAxes(np_arr)367 @test_util.run_deprecated_v1368 def testUint8(self):369 for rank in range(1, _MAX_RANK + 1):370 np_arr = self._makeRandom((2,) * rank, dtypes.uint8)371 self._compareAllAxes(np_arr)372 # This tests the issue reported in b/145030710.373 @test_util.run_deprecated_v1374 def testSizeOverflowUint8(self):375 np_arr = self._makeRandom((2**8,), dtypes.uint8)376 self._compareAllAxes(np_arr)377 @test_util.run_deprecated_v1378 def testSizeOverflowInt8(self):379 np_arr = self._makeRandom((2**7,), dtypes.int8)380 self._compareAllAxes(np_arr)381 @test_util.run_deprecated_v1382 def testSizeOverflowUint16(self):383 np_arr = self._makeRandom((2**16,), dtypes.uint16)384 self._compareAllAxes(np_arr)385 @test_util.run_deprecated_v1386 def testSizeOverflowInt16(self):387 np_arr = self._makeRandom((2**15,), dtypes.int16)388 self._compareAllAxes(np_arr)389 @test_util.run_deprecated_v1390 def testFloat32(self):391 for rank in range(1, _MAX_RANK + 1):392 np_arr = self._makeIncremental((2,) * rank, dtypes.float32)393 self._compareAllAxes(np_arr)394 @test_util.run_deprecated_v1395 def testFloat64(self):396 for rank in range(1, _MAX_RANK + 1):397 np_arr = self._makeIncremental((2,) * rank, dtypes.float64)398 self._compareAllAxes(np_arr)399 @test_util.run_deprecated_v1400 def testComplex64(self):401 for rank in range(1, _MAX_RANK + 1):402 np_arr = self._makeIncremental((2,) * rank, dtypes.complex64)403 self._compareAllAxes(np_arr)404 @test_util.run_deprecated_v1405 def testComplex128(self):406 for rank in range(1, _MAX_RANK + 1):407 np_arr = self._makeIncremental((2,) * rank, dtypes.complex128)408 self._compareAllAxes(np_arr)409 @test_util.run_deprecated_v1410 def testGradient(self):411 s = [2, 3, 4, 2]412 for dtype in [dtypes.float32, dtypes.float64]:413 x = self._makeIncremental(s, dtype)414 self._compareGradientAxes(x, rtol=1e-3, atol=1e-3)415 @test_util.run_deprecated_v1416 def testEmptyGradients(self):417 with self.session(use_gpu=True):418 x = array_ops.zeros([0, 3])419 y = math_ops.reduce_mean(x, [1])420 error = gradient_checker.compute_gradient_error(x, [0, 3], y, [0])421 self.assertEqual(error, 0)422 @test_util.run_deprecated_v1423 def testDegenerate(self):424 with self.session(use_gpu=True):425 for dtype in (dtypes.float16, dtypes.float32, dtypes.float64):426 # A large number is needed to get Eigen to die427 x = array_ops.zeros((0, 9938), dtype=dtype)428 y = math_ops.reduce_mean(x, [0]).eval()429 self.assertEqual(y.shape, (9938,))430 self.assertTrue(np.all(np.isnan(y)))431class EuclideanNormReductionTest(BaseReductionTest):432 def _tf_reduce(self, x, reduction_axes, keepdims):433 return math_ops.reduce_euclidean_norm(x, reduction_axes, keepdims)434 def _np_reduce(self, x, reduction_axes, keepdims):435 if isinstance(reduction_axes, list) or isinstance(reduction_axes,436 np.ndarray):437 reduction_axes = tuple(reduction_axes)438 np_fro = np.sqrt(439 np.sum(x * np.conj(x), axis=reduction_axes, keepdims=keepdims))440 if np.issubdtype(x.dtype, np.integer):441 np_fro = np.floor(np_fro)442 return np_fro443 @test_util.run_deprecated_v1444 def testAxesType(self):445 for dtype in [dtypes.int64, dtypes.int32]:446 with self.cached_session(use_gpu=True):447 v = math_ops.reduce_mean([0, 0], constant_op.constant(0, dtype=dtype))448 tf_v = self.evaluate(v)449 self.assertAllEqual(tf_v, 0)450 @test_util.run_deprecated_v1451 def testInfinity(self):452 for dtype in [np.float32, np.float64]:453 for special_value_x in [-np.inf, np.inf]:454 for special_value_y in [-np.inf, np.inf]:455 np_arr = np.array([special_value_x, special_value_y]).astype(dtype)456 self._compareAll(np_arr, None)457 @test_util.run_deprecated_v1458 def testSingleton(self):459 for dtype in [np.float32, np.float64]:460 np_arr = np.array([-1.]).astype(dtype)461 self._compareAll(np_arr, None)462 @test_util.run_deprecated_v1463 def testInt32(self):464 for rank in range(1, _MAX_RANK + 1):465 np_arr = self._makeIncremental((2,) * rank, dtypes.int32)466 self._compareAllAxes(np_arr)467 @test_util.run_deprecated_v1468 def testFloat32(self):469 for rank in range(1, _MAX_RANK + 1):470 np_arr = self._makeIncremental((2,) * rank, dtypes.float32)471 self._compareAllAxes(np_arr)472 @test_util.run_deprecated_v1473 def testFloat64(self):474 for rank in range(1, _MAX_RANK + 1):475 np_arr = self._makeIncremental((2,) * rank, dtypes.float64)476 self._compareAllAxes(np_arr)477 @test_util.run_deprecated_v1478 def testComplex64(self):479 for rank in range(1, _MAX_RANK + 1):480 np_arr = self._makeIncremental((2,) * rank, dtypes.complex64)481 self._compareAllAxes(np_arr)482 @test_util.run_deprecated_v1483 def testComplex128(self):484 for rank in range(1, _MAX_RANK + 1):485 np_arr = self._makeIncremental((2,) * rank, dtypes.complex128)486 self._compareAllAxes(np_arr)487 with self.session(use_gpu=True):488 for dtype in (dtypes.float16, dtypes.float32, dtypes.float64):489 # A large number is needed to get Eigen to die490 x = array_ops.zeros((0, 9938), dtype=dtype)491 y = math_ops.reduce_euclidean_norm(x, [0]).eval()492 self.assertEqual(y.shape, (9938,))493 self.assertAllEqual(y, np.zeros(9938))494 @test_util.run_deprecated_v1495 def testGradient(self):496 shape = [2, 3, 4, 2]497 for dtype in [dtypes.float32, dtypes.float64]:498 # zero value entry will result NaN gradient if reduction doesn't happen.499 # e.g., `tf.math.reduce_sum([0, 1], axis=[])` so add one to avoid it.500 x = self._makeIncremental(shape, dtype) + 1.0501 self._compareGradientAxes(x, rtol=1e-2, atol=1e-2)502class ProdReductionTest(BaseReductionTest):503 def _tf_reduce(self, x, reduction_axes, keepdims):504 return math_ops.reduce_prod(x, reduction_axes, keepdims)505 def _np_reduce(self, x, reduction_axes, keepdims):506 if isinstance(reduction_axes, list) or isinstance(reduction_axes,507 np.ndarray):508 reduction_axes = tuple(reduction_axes)509 return np.prod(x, axis=reduction_axes, keepdims=keepdims)510 def testAxesType(self):511 for dtype in [dtypes.int64, dtypes.int32]:512 with self.cached_session(use_gpu=True) as sess:513 v = math_ops.reduce_prod([0, 0], constant_op.constant(0, dtype=dtype))514 tf_v = self.evaluate(v)515 self.assertAllEqual(tf_v, 0)516 @test_util.run_deprecated_v1517 def testInfinity(self):518 for dtype in [np.float32, np.float64]:519 for special_value_x in [-np.inf, np.inf]:520 for special_value_y in [-np.inf, np.inf]:521 np_arr = np.array([special_value_x, special_value_y]).astype(dtype)522 self._compareAll(np_arr, None)523 @test_util.run_deprecated_v1524 def testInt32(self):525 # Numpy automatically upgrades the type of np.prod from int32 to int64, so526 # Numpy does not overflow an int32 np.prod while TensorFlow does. To avoid527 # overflow, divide the incremental int32 array by 2.528 for rank in range(1, _MAX_RANK + 1):529 np_arr = self._makeIncremental((2,) * rank, dtypes.int32) / 2530 self._compareAllAxes(np_arr)531 @test_util.run_deprecated_v1532 def testFloat32(self):533 for rank in range(1, _MAX_RANK + 1):534 np_arr = self._makeIncremental((2,) * rank, dtypes.float32)535 self._compareAllAxes(np_arr)536 @test_util.run_deprecated_v1537 def testFloat64(self):538 for rank in range(1, _MAX_RANK + 1):539 np_arr = self._makeIncremental((2,) * rank, dtypes.float64)540 self._compareAllAxes(np_arr)541 @test_util.run_deprecated_v1542 def testComplex64(self):543 for rank in range(1, _MAX_RANK + 1):544 np_arr = self._makeIncremental((2,) * rank, dtypes.complex64)545 self._compareAllAxes(np_arr)546 @test_util.run_deprecated_v1547 def testComplex128(self):548 for rank in range(1, _MAX_RANK + 1):549 np_arr = self._makeIncremental((2,) * rank, dtypes.complex128)550 self._compareAllAxes(np_arr)551 @test_util.run_deprecated_v1552 def testGradientWithZeros(self):553 s = [2, 3, 4, 2]554 x = self._makeIncremental(s, dtypes.float32) / 20.555 # No zeros in input556 self._compareGradientAxes(x, rtol=1e-3, atol=1e-3)557 # Zero at beginning558 x1 = x.copy()559 x1[:, :, 0, :] = 0560 self._compareGradientAxes(x1, rtol=1e-3, atol=1e-3)561 # Zero at end562 x2 = x.copy()563 x2[:, :, -1, :] = 0564 self._compareGradientAxes(x2, rtol=1e-3, atol=1e-3)565 # Zero in middle566 x3 = x.copy()567 x3[:, :, 2, :] = 0568 self._compareGradientAxes(x3, rtol=1e-3, atol=1e-3)569 # All zeros570 x4 = x.copy()571 x4[:, :, :, :] = 0572 self._compareGradientAxes(x4, rtol=1e-3, atol=1e-3)573 @test_util.run_deprecated_v1574 def testEmptyGradients(self):575 with self.session(use_gpu=True):576 x = array_ops.zeros([0, 3])577 y = math_ops.reduce_prod(x, [1])578 error = gradient_checker.compute_gradient_error(x, [0, 3], y, [0])579 self.assertEqual(error, 0)580 @test_util.run_deprecated_v1581 def testDegenerate(self):582 with self.session(use_gpu=True):583 for dtype in (dtypes.float16, dtypes.float32, dtypes.float64):584 # A large number is needed to get Eigen to die585 x = array_ops.zeros((0, 9938), dtype=dtype)586 y = math_ops.reduce_prod(x, [0])587 self.assertAllEqual(y.eval(), np.ones(9938))588class MinReductionTest(test.TestCase):589 def _compare(self, x, reduction_axes, keepdims, use_gpu=False):590 np_ans = x591 if reduction_axes is None:592 np_ans = np.amin(np_ans, keepdims=keepdims)593 else:594 for ra in reduction_axes[::-1]:595 np_ans = np.amin(np_ans, axis=ra, keepdims=keepdims)596 with self.cached_session(use_gpu=use_gpu):597 if reduction_axes is not None:598 reduction_axes = np.array(reduction_axes).astype(np.int32)599 tf_ans = math_ops.reduce_min(x, reduction_axes, keepdims)600 out = self.evaluate(tf_ans)601 self.assertAllClose(np_ans, out)602 self.assertShapeEqual(np_ans, tf_ans)603 def _compareAll(self, x, reduction_axes):604 self._compare(x, reduction_axes, False, use_gpu=True)605 self._compare(x, reduction_axes, False, use_gpu=False)606 self._compare(x, reduction_axes, True, use_gpu=True)607 self._compare(x, reduction_axes, True, use_gpu=False)608 def testAxesType(self):609 for dtype in [dtypes.int64, dtypes.int32]:610 with self.cached_session(use_gpu=True) as sess:611 v = math_ops.reduce_min([0, 0], constant_op.constant(0, dtype=dtype))612 tf_v = self.evaluate(v)613 self.assertAllEqual(tf_v, 0)614 @test_util.run_deprecated_v1615 def testInfinity(self):616 for dtype in [np.float32, np.float64]:617 for special_value_x in [-np.inf, np.inf]:618 for special_value_y in [-np.inf, np.inf]:619 np_arr = np.array([special_value_x, special_value_y]).astype(dtype)620 self._compareAll(np_arr, None)621 def testFloatReduce3D(self):622 # Create a 3D array of floats and reduce across all possible623 # dimensions624 np_arr = np.arange(1, 31).reshape([2, 3, 5]).astype(np.float32)625 self._compareAll(np_arr, None)626 self._compareAll(np_arr, [])627 self._compareAll(np_arr, [0])628 self._compareAll(np_arr, [1])629 self._compareAll(np_arr, [2])630 self._compareAll(np_arr, [0, 1])631 self._compareAll(np_arr, [1, 2])632 self._compareAll(np_arr, [0, 2])633 self._compareAll(np_arr, [0, 1, 2])634 def testDoubleReduce3D(self):635 # Create a 3D array of doubles and reduce across all possible636 # dimensions637 np_arr = np.arange(1, 31).reshape([2, 3, 5]).astype(np.float64)638 self._compareAll(np_arr, None)639 self._compareAll(np_arr, [])640 self._compareAll(np_arr, [0])641 self._compareAll(np_arr, [1])642 self._compareAll(np_arr, [2])643 self._compareAll(np_arr, [0, 1])644 self._compareAll(np_arr, [1, 2])645 self._compareAll(np_arr, [0, 2])646 self._compareAll(np_arr, [0, 1, 2])647 @test_util.run_deprecated_v1648 def testGradient(self):649 s = [2, 3, 4, 2]650 x = np.arange(1.0, 49.0).reshape(s).astype(np.float64)651 with self.cached_session():652 t = ops.convert_to_tensor(x)653 su = math_ops.reduce_min(t, [1, 2])654 jacob_t, jacob_n = gradient_checker.compute_gradient(655 t, s, su, [2, 2], x_init_value=x, delta=1)656 self.assertAllClose(jacob_t, jacob_n, rtol=1e-8, atol=1e-8)657 @test_util.run_deprecated_v1658 def testGradient2(self):659 s = [2, 3, 4, 2]660 x = np.arange(1.0, 49.0).reshape(s).astype(np.float64)661 with self.cached_session():662 t = ops.convert_to_tensor(x)663 su = math_ops.reduce_min(t, [1])664 jacob_t, jacob_n = gradient_checker.compute_gradient(665 t, s, su, [2, 4, 2], x_init_value=x, delta=1)666 self.assertAllClose(jacob_t, jacob_n, rtol=1e-8, atol=1e-8)667 @test_util.run_deprecated_v1668 def testGradient3(self):669 s = [2, 3, 4, 2]670 x = np.arange(1.0, 49.0).reshape(s).astype(np.float64)671 with self.cached_session():672 t = ops.convert_to_tensor(x)673 su = math_ops.reduce_min(t, [2])674 jacob_t, jacob_n = gradient_checker.compute_gradient(675 t, s, su, [2, 3, 2], x_init_value=x, delta=1)676 self.assertAllClose(jacob_t, jacob_n, rtol=1e-8, atol=1e-8)677 @test_util.run_deprecated_v1678 def testGradient4(self):679 s = [2, 3, 4, 2]680 x = np.arange(1.0, 49.0).reshape(s).astype(np.float64)681 with self.cached_session():682 t = ops.convert_to_tensor(x)683 su = math_ops.reduce_min(t)684 jacob_t, jacob_n = gradient_checker.compute_gradient(685 t, s, su, [1], x_init_value=x, delta=1)686 self.assertAllClose(jacob_t, jacob_n, rtol=1e-8, atol=1e-8)687 @test_util.run_deprecated_v1688 def testEmptyGradients(self):689 with self.cached_session():690 x = array_ops.zeros([0, 3])691 y = math_ops.reduce_min(x, [1])692 error = gradient_checker.compute_gradient_error(x, [0, 3], y, [0])693 self.assertEqual(error, 0)694class MaxReductionTest(test.TestCase):695 def _compare(self, x, reduction_axes, keepdims, use_gpu=False):696 np_ans = x697 if reduction_axes is None:698 np_ans = np.amax(np_ans, keepdims=keepdims)699 else:700 for ra in reduction_axes[::-1]:701 np_ans = np.amax(np_ans, axis=ra, keepdims=keepdims)702 with self.cached_session(use_gpu=use_gpu):703 if reduction_axes is not None:704 reduction_axes = np.array(reduction_axes).astype(np.int32)705 tf_ans = math_ops.reduce_max(x, reduction_axes, keepdims)706 out = self.evaluate(tf_ans)707 self.assertAllClose(np_ans, out)708 self.assertShapeEqual(np_ans, tf_ans)709 def _compareAll(self, x, reduction_axes):710 self._compare(x, reduction_axes, False, use_gpu=True)711 self._compare(x, reduction_axes, False, use_gpu=False)712 self._compare(x, reduction_axes, True, use_gpu=True)713 self._compare(x, reduction_axes, True, use_gpu=False)714 def testAxesType(self):715 for dtype in [dtypes.int64, dtypes.int32]:716 with self.cached_session(use_gpu=True) as sess:717 v = math_ops.reduce_max([0, 0], constant_op.constant(0, dtype=dtype))718 tf_v = self.evaluate(v)719 self.assertAllEqual(tf_v, 0)720 @test_util.run_deprecated_v1721 def testInfinity(self):722 for dtype in [np.float32, np.float64]:723 for special_value_x in [-np.inf, np.inf]:724 for special_value_y in [-np.inf, np.inf]:725 np_arr = np.array([special_value_x, special_value_y]).astype(dtype)726 self._compareAll(np_arr, None)727 def testInt64Reduce3D(self):728 # Create a 3D array of int64s and reduce across all possible729 # dimensions730 np_arr = np.arange(-31, -1).reshape([2, 3, 5]).astype(np.int64)731 self._compareAll(np_arr, None)732 self._compareAll(np_arr, [])733 self._compareAll(np_arr, [0])734 self._compareAll(np_arr, [1])735 self._compareAll(np_arr, [2])736 self._compareAll(np_arr, [0, 1])737 self._compareAll(np_arr, [1, 2])738 self._compareAll(np_arr, [0, 2])739 self._compareAll(np_arr, [0, 1, 2])740 def testFloatReduce3D(self):741 # Create a 3D array of floats and reduce across all possible742 # dimensions743 np_arr = np.arange(-31, -1).reshape([2, 3, 5]).astype(np.float32)744 self._compareAll(np_arr, None)745 self._compareAll(np_arr, [])746 self._compareAll(np_arr, [0])747 self._compareAll(np_arr, [1])748 self._compareAll(np_arr, [2])749 self._compareAll(np_arr, [0, 1])750 self._compareAll(np_arr, [1, 2])751 self._compareAll(np_arr, [0, 2])752 self._compareAll(np_arr, [0, 1, 2])753 def testDoubleReduce3D(self):754 # Create a 3D array of doubles and reduce across all possible755 # dimensions756 np_arr = np.arange(-31, -1).reshape([2, 3, 5]).astype(np.float64)757 self._compareAll(np_arr, None)758 self._compareAll(np_arr, [])759 self._compareAll(np_arr, [0])760 self._compareAll(np_arr, [1])761 self._compareAll(np_arr, [2])762 self._compareAll(np_arr, [0, 1])763 self._compareAll(np_arr, [1, 2])764 self._compareAll(np_arr, [0, 2])765 self._compareAll(np_arr, [0, 1, 2])766 @test_util.run_deprecated_v1767 def testGradient(self):768 s = [2, 3, 4, 2]769 x = np.arange(-49.0, -1.0).reshape(s).astype(np.float64)770 with self.cached_session():771 t = ops.convert_to_tensor(x)772 su = math_ops.reduce_max(t, [1, 2])773 jacob_t, jacob_n = gradient_checker.compute_gradient(774 t, s, su, [2, 2], x_init_value=x, delta=1)775 self.assertAllClose(jacob_t, jacob_n, rtol=1e-8, atol=1e-8)776 @test_util.run_deprecated_v1777 def testGradient2(self):778 s = [2, 3, 4, 2]779 x = np.arange(-49.0, -1.0).reshape(s).astype(np.float64)780 with self.cached_session():781 t = ops.convert_to_tensor(x)782 su = math_ops.reduce_max(t, [1])783 jacob_t, jacob_n = gradient_checker.compute_gradient(784 t, s, su, [2, 4, 2], x_init_value=x, delta=1)785 self.assertAllClose(jacob_t, jacob_n, rtol=1e-8, atol=1e-8)786 @test_util.run_deprecated_v1787 def testGradient3(self):788 s = [2, 3, 4, 2]789 x = np.arange(-49.0, -1.0).reshape(s).astype(np.float64)790 with self.cached_session():791 t = ops.convert_to_tensor(x)792 su = math_ops.reduce_max(t, [2])793 jacob_t, jacob_n = gradient_checker.compute_gradient(794 t, s, su, [2, 3, 2], x_init_value=x, delta=1)795 self.assertAllClose(jacob_t, jacob_n, rtol=1e-8, atol=1e-8)796 @test_util.run_deprecated_v1797 def testGradient4(self):798 s = [2, 3, 4, 2]799 x = np.arange(-49.0, -1.0).reshape(s).astype(np.float64)800 with self.cached_session():801 t = ops.convert_to_tensor(x)802 su = math_ops.reduce_max(t)803 jacob_t, jacob_n = gradient_checker.compute_gradient(804 t, s, su, [1], x_init_value=x, delta=1)805 self.assertAllClose(jacob_t, jacob_n, rtol=1e-8, atol=1e-8)806 @test_util.run_deprecated_v1807 def testEmptyGradients(self):808 with self.cached_session():809 x = array_ops.zeros([0, 3])810 y = math_ops.reduce_max(x, [1])811 error = gradient_checker.compute_gradient_error(x, [0, 3], y, [0])812 self.assertEqual(error, 0)813class AllReductionTest(test.TestCase):814 def _compare(self, x, reduction_axes, keepdims, use_gpu=False):815 np_ans = x816 if reduction_axes is None:817 np_ans = np.all(np_ans, keepdims=keepdims)818 else:819 for ra in reduction_axes[::-1]:820 np_ans = np.all(np_ans, axis=ra, keepdims=keepdims)821 with self.cached_session(use_gpu=use_gpu):822 if reduction_axes is not None:823 reduction_axes = np.array(reduction_axes).astype(np.int32)824 tf_ans = math_ops.reduce_all(x, reduction_axes, keepdims)825 out = self.evaluate(tf_ans)826 self.assertAllEqual(np_ans, out)827 self.assertShapeEqual(np_ans, tf_ans)828 def _compareAll(self, x, reduction_axes):829 self._compare(x, reduction_axes, False, use_gpu=True)830 self._compare(x, reduction_axes, False, use_gpu=False)831 self._compare(x, reduction_axes, True, use_gpu=True)832 self._compare(x, reduction_axes, True, use_gpu=False)833 def testAxesType(self):834 for dtype in [dtypes.int64, dtypes.int32]:835 with self.session(use_gpu=True) as sess:836 v = math_ops.reduce_all([True, True],837 constant_op.constant(0, dtype=dtype))838 tf_v = self.evaluate(v)839 self.assertAllEqual(tf_v, True)840 def testAll3D(self):841 # Create a 3D array of bools and reduce across all possible842 # dimensions843 np_arr = (np.random.uniform(0, 1, 30) > 0.1).reshape([2, 3, 5])844 self._compareAll(np_arr, None)845 self._compareAll(np_arr, [])846 self._compareAll(np_arr, [0])847 self._compareAll(np_arr, [1])848 self._compareAll(np_arr, [2])849 self._compareAll(np_arr, [0, 1])850 self._compareAll(np_arr, [1, 2])851 self._compareAll(np_arr, [0, 2])852 self._compareAll(np_arr, [0, 1, 2])853 def testEmpty(self):854 self._compareAll([], [0])855class AnyReductionTest(test.TestCase):856 def _compare(self, x, reduction_axes, keepdims, use_gpu=False):857 np_ans = x858 if reduction_axes is None:859 np_ans = np.any(np_ans, keepdims=keepdims)860 else:861 for ra in reduction_axes[::-1]:862 np_ans = np.any(np_ans, axis=ra, keepdims=keepdims)863 with self.cached_session(use_gpu=use_gpu):864 if reduction_axes is not None:865 reduction_axes = np.array(reduction_axes).astype(np.int32)866 tf_ans = math_ops.reduce_any(x, reduction_axes, keepdims)867 out = self.evaluate(tf_ans)868 self.assertAllEqual(np_ans, out)869 self.assertShapeEqual(np_ans, tf_ans)870 def _compareAll(self, x, reduction_axes):871 self._compare(x, reduction_axes, False, use_gpu=True)872 self._compare(x, reduction_axes, False, use_gpu=False)873 self._compare(x, reduction_axes, True, use_gpu=True)874 self._compare(x, reduction_axes, True, use_gpu=False)875 def testAxesType(self):876 for dtype in [dtypes.int64, dtypes.int32]:877 with self.session(use_gpu=True) as sess:878 v = math_ops.reduce_any([True, True],879 constant_op.constant(0, dtype=dtype))880 tf_v = self.evaluate(v)881 self.assertAllEqual(tf_v, True)882 def testAll3D(self):883 # Create a 3D array of bools and reduce across all possible884 # dimensions885 np_arr = (np.random.uniform(0, 1, 30) > 0.9).reshape([2, 3, 5])886 self._compareAll(np_arr, None)887 self._compareAll(np_arr, [])888 self._compareAll(np_arr, [0])889 self._compareAll(np_arr, [1])890 self._compareAll(np_arr, [2])891 self._compareAll(np_arr, [0, 1])892 self._compareAll(np_arr, [1, 2])893 self._compareAll(np_arr, [0, 2])894 self._compareAll(np_arr, [0, 1, 2])895 def testEmpty(self):896 self._compareAll([], [0])897class CountNonzeroReductionTest(test.TestCase):898 def _compare(self, x, reduction_axes, keepdims, use_gpu=False, zero=0,899 feed_dict=None):900 np_ans = (x != zero).astype(np.int32)901 if reduction_axes is None:902 np_ans = np.sum(np_ans, keepdims=keepdims)903 else:904 reduction_axes = np.array(reduction_axes).astype(np.int32)905 for ra in reduction_axes.ravel()[::-1]:906 np_ans = np.sum(np_ans, axis=ra, keepdims=keepdims)907 with self.cached_session(use_gpu=use_gpu) as sess:908 tf_ans = math_ops.count_nonzero(x, reduction_axes, keepdims)909 out = sess.run(tf_ans, feed_dict)910 self.assertAllClose(np_ans, out)911 self.assertShapeEqual(np_ans, tf_ans)912 def _compareAll(self, x, reduction_axes, feed_dict=None):913 if reduction_axes is not None and np.shape(reduction_axes) == (1,):914 # Test scalar reduction_axes argument915 self._compareAll(x, reduction_axes[0])916 self._compare(x, reduction_axes, False, use_gpu=True, feed_dict=feed_dict)917 self._compare(x, reduction_axes, False, use_gpu=False, feed_dict=feed_dict)918 self._compare(x, reduction_axes, True, use_gpu=True, feed_dict=feed_dict)919 self._compare(x, reduction_axes, True, use_gpu=False, feed_dict=feed_dict)920 @test_util.run_deprecated_v1921 def testBoolReduce1D(self):922 # Create a 1D array of floats923 np_arr = np.asarray([False, False, True, False, False, True])924 self._compareAll(np_arr, None)925 self._compareAll(np_arr, [])926 self._compareAll(np_arr, [0])927 @test_util.run_deprecated_v1928 def testFloatReduce1D(self):929 # Create a 1D array of floats930 np_arr = np.asarray([0.0, 1.0, -1.0, 0.0, 0.0, 3.0]).astype(np.float32)931 self._compareAll(np_arr, [0])932 @test_util.run_deprecated_v1933 def testFloatReduce4D(self):934 # Create a 4D array of floats and reduce across some935 # dimensions936 np_arr = np.floor(np.arange(0.0, 210.0) / 100.0).reshape([2, 3, 5,937 7]).astype(938 np.float32)939 self._compareAll(np_arr, None)940 self._compareAll(np_arr, [])941 self._compareAll(np_arr, [0])942 self._compareAll(np_arr, [1])943 self._compareAll(np_arr, [2])944 self._compareAll(np_arr, [0, 1])945 self._compareAll(np_arr, [1, 2])946 # Need specialization for reduce(4D, [0, 2])947 # self._compareAll(np_arr, [0, 2])948 self._compareAll(np_arr, [0, 1, 2])949 self._compareAll(np_arr, [1, 2, 3])950 self._compareAll(np_arr, [0, 1, 2, 3])951 @test_util.run_deprecated_v1952 def testExpand(self):953 # Reduce an empty tensor to a nonempty tensor954 x = np.zeros((5, 0))955 self._compareAll(x, [1])956 @test_util.run_deprecated_v1957 def testDegenerate(self):958 for use_gpu in False, True:959 with self.cached_session(use_gpu=use_gpu):960 for dtype in (dtypes.bool,):961 # A large number is needed to get Eigen to die962 x = array_ops.zeros((0, 9938), dtype=dtype)963 y = math_ops.count_nonzero(x, [0])964 self.assertAllEqual(y.eval(), np.zeros(9938))965 def testStringReduce(self):966 # Test case for GitHub issue 18712967 with self.cached_session() as sess:968 v = math_ops.count_nonzero(constant_op.constant(["test"]))969 self.assertAllClose(self.evaluate(v), 1)970 @test_util.run_deprecated_v1971 def testStringReduce1D(self):972 # Create a 1D array of strings973 x = np.asarray(["", "", "a", "", "", "b"])974 self._compare(x, None, keepdims=False, zero=np.str(""))975 self._compare(x, [], keepdims=False, zero=np.str(""))976 self._compare(x, [0], keepdims=False, zero=np.str(""))977 self._compare(x, None, keepdims=True, zero=np.str(""))978 self._compare(x, [], keepdims=True, zero=np.str(""))979 self._compare(x, [0], keepdims=True, zero=np.str(""))980 @test_util.run_deprecated_v1981 def testStringReduce2D(self):982 # Create a 2D array of strings983 x = np.asarray([["", "", "a", "", "", "b"],984 ["", "c", "", "d", "", ""],985 ["e", "", "f", "", "", ""]])986 self._compare(x, None, keepdims=False, zero=np.str(""))987 self._compare(x, [], keepdims=False, zero=np.str(""))988 self._compare(x, [0], keepdims=False, zero=np.str(""))989 self._compare(x, [1], keepdims=False, zero=np.str(""))990 self._compare(x, [0, 1], keepdims=False, zero=np.str(""))991 self._compare(x, None, keepdims=True, zero=np.str(""))992 self._compare(x, [], keepdims=True, zero=np.str(""))993 self._compare(x, [0], keepdims=True, zero=np.str(""))994 self._compare(x, [0, 1], keepdims=True, zero=np.str(""))995if __name__ == "__main__":...

Full Screen

Full Screen

cwise_ops_binary_test.py

Source:cwise_ops_binary_test.py Github

copy

Full Screen

...729 for y in data:730 self.assertEqual(self._compareScalar(math_ops.equal, x, y, t), x == y)731 self.assertEqual(732 self._compareScalar(math_ops.not_equal, x, y, t), x != y)733 def _compare(self, x, y, np_func, tf_func):734 np_ans = np_func(x, y)735 with test_util.use_gpu():736 out = tf_func(ops.convert_to_tensor(x), ops.convert_to_tensor(y))737 tf_ans = self.evaluate(out)738 self.assertAllEqual(np_ans, tf_ans)739 def testTensorCompareTensor(self):740 x = np.linspace(-15, 15, 6).reshape(1, 3, 2)741 y = np.linspace(20, -10, 6).reshape(1, 3, 2)742 for t in [np.float16, np.float32, np.float64, np.int32, np.int64]:743 xt = x.astype(t)744 yt = y.astype(t)745 self._compare(xt, yt, np.less, math_ops.less)746 self._compare(xt, yt, np.less_equal, math_ops.less_equal)747 self._compare(xt, yt, np.greater, math_ops.greater)748 self._compare(xt, yt, np.greater_equal, math_ops.greater_equal)749 self._compare(xt, yt, np.equal, math_ops.equal)750 self._compare(xt, yt, np.not_equal, math_ops.not_equal)751 # Complex types do not support ordering but do support equality tests.752 for t in [np.complex64, np.complex128]:753 xt = x.astype(t)754 xt -= 1j * xt755 yt = y.astype(t)756 yt -= 1j * yt757 self._compare(xt, yt, np.equal, math_ops.equal)758 self._compare(xt, yt, np.not_equal, math_ops.not_equal)759 def _compareBCast(self, xs, ys, dtype, np_func, tf_func):760 x = np.linspace(-15, 15, np.prod(xs)).astype(dtype).reshape(xs)761 y = np.linspace(20, -10, np.prod(ys)).astype(dtype).reshape(ys)762 if dtype in (np.complex64, np.complex128):763 x -= 1j * x764 y -= 1j * y765 self._compare(x, y, np_func, tf_func)766 self._compare(y, x, np_func, tf_func)767 def _testBCastByFunc(self, np_func, tf_func, include_complex=False):768 shapes = [769 ([1, 3, 2], [1]),770 ([1, 3, 2], [2]),771 ([1, 3, 2], [3, 2]),772 ([1, 3, 2], [3, 1]),773 ([1, 3, 2], [1, 3, 2]),774 ([1, 3, 2], [2, 3, 1]),775 ([1, 3, 2], [2, 1, 1]),776 ([1, 3, 2], [1, 3, 1]),777 ([2, 1, 5], [2, 3, 1]),778 ([2, 0, 5], [2, 0, 1]),779 ([2, 3, 0], [2, 3, 1]),780 ]...

Full Screen

Full Screen

cwise_ops_unary_test.py

Source:cwise_ops_unary_test.py Github

copy

Full Screen

1# Copyright 2018 The TensorFlow Authors. All Rights Reserved.2#3# Licensed under the Apache License, Version 2.0 (the "License");4# you may not use this file except in compliance with the License.5# You may obtain a copy of the License at6#7# http://www.apache.org/licenses/LICENSE-2.08#9# Unless required by applicable law or agreed to in writing, software10# distributed under the License is distributed on an "AS IS" BASIS,11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.12# See the License for the specific language governing permissions and13# limitations under the License.14# ==============================================================================15"""Functional tests for unary coefficient-wise operations."""16from __future__ import absolute_import17from __future__ import division18from __future__ import print_function19import math20import numpy as np21from tensorflow.python.eager import backprop22from tensorflow.python.framework import constant_op23from tensorflow.python.framework import dtypes as dtypes_lib24from tensorflow.python.framework import ops25from tensorflow.python.framework import sparse_tensor26from tensorflow.python.framework import test_util27from tensorflow.python.ops import gen_math_ops28from tensorflow.python.ops import gradient_checker29from tensorflow.python.ops import gradient_checker_v230from tensorflow.python.ops import math_ops31from tensorflow.python.ops import nn_grad # pylint: disable=unused-import32from tensorflow.python.platform import test33from tensorflow.python.platform import tf_logging34_NEG = lambda x: -x35_ABS = abs36# TODO(zongheng): it'd be great to factor out this function and various random37# SparseTensor gen funcs.38def _sparsify(x, thresh=0.5, index_dtype=np.int64):39 x[x < thresh] = 040 non_zero = np.where(x)41 x_indices = np.vstack(non_zero).astype(index_dtype).T42 x_values = x[non_zero]43 x_shape = x.shape44 return sparse_tensor.SparseTensor(45 indices=x_indices, values=x_values, dense_shape=x_shape), x_values46def _default_tolerance(dtype):47 """Returns a sensible default tolerance for comparing results of a given type.48 Args:49 dtype: A datatype.50 """51 if dtype == np.float16:52 return 5e-353 elif dtype in (np.float32, np.complex64):54 return 1e-355 elif dtype in (np.float64, np.complex128):56 return 1e-557 else:58 return None # Fail fast for unexpected types59class UnaryOpTest(test.TestCase):60 def _compareCpu(self, x, np_func, tf_func, grad_rtol=None, grad_atol=None):61 if grad_rtol is None:62 grad_rtol = _default_tolerance(x.dtype)63 if grad_atol is None:64 grad_atol = _default_tolerance(x.dtype)65 np_ans = np_func(x)66 with self.cached_session(use_gpu=False):67 inx = ops.convert_to_tensor(x)68 if x.dtype in (np.float32, np.float64,69 dtypes_lib.bfloat16.as_numpy_dtype):70 y = 1.1 * tf_func(inx)71 np_ans *= 1.172 else:73 y = tf_func(inx)74 tf_cpu = self.evaluate(y)75 self.assertShapeEqual(np_ans, y)76 if x.dtype == np.float16:77 self.assertAllClose(np_ans, tf_cpu, rtol=1e-3, atol=1e-3)78 elif x.dtype == dtypes_lib.bfloat16.as_numpy_dtype:79 self.assertAllClose(np_ans, tf_cpu, rtol=1e-2, atol=1e-2)80 else:81 self.assertAllClose(np_ans, tf_cpu)82 if x.dtype in (np.complex64, np.complex128) and tf_func == math_ops.sign:83 return # Return early84 if x.dtype == np.float16:85 s = list(np.shape(x))86 jacob_t, _ = gradient_checker.compute_gradient(87 inx, s, y, s, x_init_value=x)88 xf = x.astype(np.float)89 inxf = ops.convert_to_tensor(xf)90 yf = tf_func(inxf)91 _, jacob_n = gradient_checker.compute_gradient(92 inxf, s, yf, s, x_init_value=xf, delta=1e-2)93 jacob_n = jacob_n.astype(np.float16)94 self.assertAllClose(jacob_t, jacob_n, rtol=grad_rtol, atol=grad_atol)95 elif x.dtype in (np.float32, np.complex64):96 s = list(np.shape(x))97 jacob_t, jacob_n = gradient_checker.compute_gradient(98 inx, s, y, s, x_init_value=x, delta=1e-3)99 self.assertAllClose(jacob_t, jacob_n, rtol=grad_rtol, atol=grad_atol)100 elif x.dtype in (np.float64, np.complex128):101 s = list(np.shape(x))102 jacob_t, jacob_n = gradient_checker.compute_gradient(103 inx, s, y, s, x_init_value=x, delta=1e-5)104 self.assertAllClose(jacob_t, jacob_n, rtol=grad_rtol, atol=grad_atol)105 def _check(self, result_tensor, result_np, input_sp_t, tol):106 self.assertTrue(isinstance(result_tensor, sparse_tensor.SparseTensor))107 self.assertTrue(isinstance(input_sp_t, sparse_tensor.SparseTensor))108 self.assertAllEqual(input_sp_t.indices, result_tensor.indices)109 self.assertAllEqual(input_sp_t.dense_shape, result_tensor.dense_shape)110 if tol is None:111 self.assertAllClose(result_np, result_tensor.values)112 else:113 self.assertAllClose(result_np, result_tensor.values, rtol=tol, atol=tol)114 def _compareSparseCpu(self, x, np_func, tf_func, tol):115 x_sp, x_sp_vals = _sparsify(x)116 res_np = np_func(x_sp_vals)117 with test_util.force_cpu():118 self._check(tf_func(x_sp), res_np, x_sp, tol)119 def _compareGpu(self, x, np_func, tf_func):120 np_ans = np_func(x)121 with test_util.use_gpu():122 result = tf_func(ops.convert_to_tensor(x))123 tf_gpu = self.evaluate(result)124 if x.dtype == np.float16:125 self.assertAllClose(np_ans, tf_gpu, rtol=1e-3, atol=1e-3)126 else:127 self.assertAllClose(np_ans, tf_gpu)128 # TODO(zhifengc/ke): make gradient checker work on GPU.129 def _compareSparseGpu(self, x, np_func, tf_func, tol):130 x_sp, x_sp_vals = _sparsify(x)131 res_np = np_func(x_sp_vals)132 with test_util.use_gpu():133 self._check(tf_func(x_sp), res_np, x_sp, tol)134 def _compareBoth(self, x, np_func, tf_func):135 self._compareCpu(x, np_func, tf_func)136 self._compareGpu(x, np_func, tf_func)137 def _compareBothSparse(self, x, np_func, tf_func, tol=None):138 self._compareSparseCpu(x, np_func, tf_func, tol)139 self._compareSparseGpu(x, np_func, tf_func, tol)140 def _inv(self, x):141 return 1.0 / x142 def _rsqrt(self, x):143 return self._inv(np.sqrt(x))144 def _sigmoid(self, x):145 return 1.0 / (1.0 + np.exp(-x))146 def _log_sigmoid(self, x):147 return np.log(self._sigmoid(x))148 def _replace_domain_error_with_inf(self, fn):149 def func(x):150 try:151 return fn(x)152 except ValueError as e:153 if "domain error" in str(e):154 return np.inf * np.ones_like(x)155 else:156 raise e157 return func158 @test_util.run_deprecated_v1159 def testFloatBasic(self):160 x = np.arange(-3, 3).reshape(1, 3, 2).astype(np.float32)161 w = x - x.min() + 1.02 # all greater than 1162 y = (x + .5).astype(np.float32) # no zero163 z = (x + 15.5).astype(np.float32) # all positive164 k = np.arange(-0.90, 0.90, 0.25).astype(np.float32) # between -1 and 1165 self._compareBoth(x, np.abs, math_ops.abs)166 self._compareBoth(x, np.abs, _ABS)167 self._compareBoth(x, np.negative, math_ops.negative)168 self._compareBoth(x, np.negative, _NEG)169 self._compareBoth(y, self._inv, math_ops.reciprocal)170 self._compareBoth(x, np.square, math_ops.square)171 self._compareBoth(z, np.sqrt, math_ops.sqrt)172 self._compareBoth(z, self._rsqrt, math_ops.rsqrt)173 self._compareBoth(x, np.exp, math_ops.exp)174 self._compareBoth(x, np.expm1, math_ops.expm1)175 self._compareBoth(z, np.log, math_ops.log)176 self._compareBoth(z, np.log1p, math_ops.log1p)177 self._compareBoth(x, np.sinh, math_ops.sinh)178 self._compareBoth(x, np.cosh, math_ops.cosh)179 self._compareBoth(x, np.tanh, math_ops.tanh)180 self._compareBoth(x, np.arcsinh, math_ops.asinh)181 self._compareBoth(w, np.arccosh, math_ops.acosh)182 self._compareBoth(k, np.arctanh, math_ops.atanh)183 self._compareBoth(x, self._sigmoid, math_ops.sigmoid)184 self._compareBoth(x, self._log_sigmoid, math_ops.log_sigmoid)185 self._compareBoth(y, np.sign, math_ops.sign)186 self._compareBoth(x, np.sin, math_ops.sin)187 self._compareBoth(x, np.cos, math_ops.cos)188 self._compareBoth(k, np.arcsin, math_ops.asin)189 self._compareBoth(k, np.arccos, math_ops.acos)190 self._compareBoth(x, np.arctan, math_ops.atan)191 self._compareBoth(x, np.tan, math_ops.tan)192 self._compareBoth(193 y, np.vectorize(self._replace_domain_error_with_inf(math.lgamma)),194 math_ops.lgamma)195 self._compareBoth(x, np.vectorize(math.erf), math_ops.erf)196 self._compareBoth(x, np.vectorize(math.erfc), math_ops.erfc)197 try:198 from scipy import special # pylint: disable=g-import-not-at-top199 self._compareBoth(x, special.i0e, math_ops.bessel_i0e)200 self._compareBoth(x, special.i1e, math_ops.bessel_i1e)201 except ImportError as e:202 tf_logging.warn("Cannot test special functions: %s" % str(e))203 self._compareBothSparse(x, np.abs, math_ops.abs)204 self._compareBothSparse(x, np.negative, math_ops.negative)205 self._compareBothSparse(x, np.square, math_ops.square)206 self._compareBothSparse(z, np.sqrt, math_ops.sqrt, tol=1e-3)207 self._compareBothSparse(x, np.tanh, math_ops.tanh)208 self._compareBothSparse(y, np.sign, math_ops.sign)209 self._compareBothSparse(x, np.vectorize(math.erf), math_ops.erf)210 @test_util.run_deprecated_v1211 def testFloatTanhEdge(self):212 x = np.arange(40, 40 + 6).reshape(6).astype(np.float32)213 self._compareBoth(x, np.tanh, math_ops.tanh)214 x = np.arange(-40, -40 + 6).reshape(6).astype(np.float32)215 self._compareBoth(x, np.tanh, math_ops.tanh)216 @test_util.run_deprecated_v1217 def testFloatEmpty(self):218 x = np.empty((2, 0, 5), dtype=np.float32)219 self._compareBoth(x, np.abs, math_ops.abs)220 self._compareBoth(x, np.abs, _ABS)221 self._compareBoth(x, np.negative, math_ops.negative)222 self._compareBoth(x, np.negative, _NEG)223 self._compareBoth(x, self._inv, math_ops.reciprocal)224 self._compareBoth(x, np.square, math_ops.square)225 self._compareBoth(x, np.sqrt, math_ops.sqrt)226 self._compareBoth(x, self._rsqrt, math_ops.rsqrt)227 self._compareBoth(x, np.exp, math_ops.exp)228 self._compareBoth(x, np.expm1, math_ops.expm1)229 self._compareBoth(x, np.log, math_ops.log)230 self._compareBoth(x, np.log1p, math_ops.log1p)231 self._compareBoth(x, np.sinh, math_ops.sinh)232 self._compareBoth(x, np.arcsinh, math_ops.asinh)233 self._compareBoth(x, np.cosh, math_ops.cosh)234 self._compareBoth(x, np.tanh, math_ops.tanh)235 self._compareBoth(x, self._sigmoid, math_ops.sigmoid)236 self._compareBoth(x, np.sign, math_ops.sign)237 self._compareBoth(x, np.sin, math_ops.sin)238 self._compareBoth(x, np.cos, math_ops.cos)239 # Can't use vectorize below, so just use some arbitrary function240 self._compareBoth(x, np.sign, math_ops.lgamma)241 self._compareBoth(x, np.sign, math_ops.erf)242 self._compareBoth(x, np.sign, math_ops.erfc)243 self._compareBoth(x, np.tan, math_ops.tan)244 self._compareBoth(x, np.arcsin, math_ops.asin)245 self._compareBoth(x, np.arccos, math_ops.acos)246 self._compareBoth(x, np.arctan, math_ops.atan)247 try:248 from scipy import special # pylint: disable=g-import-not-at-top249 self._compareBoth(x, special.i0e, math_ops.bessel_i0e)250 self._compareBoth(x, special.i1e, math_ops.bessel_i1e)251 except ImportError as e:252 tf_logging.warn("Cannot test special functions: %s" % str(e))253 self._compareBothSparse(x, np.abs, math_ops.abs)254 self._compareBothSparse(x, np.negative, math_ops.negative)255 self._compareBothSparse(x, np.square, math_ops.square)256 self._compareBothSparse(x, np.sqrt, math_ops.sqrt, tol=1e-3)257 self._compareBothSparse(x, np.tanh, math_ops.tanh)258 self._compareBothSparse(x, np.sign, math_ops.sign)259 self._compareBothSparse(x, np.sign, math_ops.erf)260 @test_util.run_deprecated_v1261 def testDoubleBasic(self):262 x = np.arange(-3, 3).reshape(1, 3, 2).astype(np.float64)263 w = x - x.min() + 1.02 # all greater than 1264 y = (x + .5).astype(np.float64) # no zero265 z = (x + 15.5).astype(np.float64) # all positive266 k = np.arange(-0.90, 0.90,267 0.35).reshape(1, 3, 2).astype(np.float64) # between -1 and 1268 self._compareBoth(x, np.abs, math_ops.abs)269 self._compareBoth(x, np.abs, _ABS)270 self._compareBoth(x, np.negative, math_ops.negative)271 self._compareBoth(x, np.negative, _NEG)272 self._compareBoth(y, self._inv, math_ops.reciprocal)273 self._compareBoth(x, np.square, math_ops.square)274 self._compareBoth(z, np.sqrt, math_ops.sqrt)275 self._compareBoth(z, self._rsqrt, math_ops.rsqrt)276 self._compareBoth(x, np.exp, math_ops.exp)277 self._compareBoth(x, np.expm1, math_ops.expm1)278 self._compareBoth(z, np.log, math_ops.log)279 self._compareBoth(z, np.log1p, math_ops.log1p)280 self._compareBoth(x, np.sinh, math_ops.sinh)281 self._compareBoth(x, np.cosh, math_ops.cosh)282 self._compareBoth(x, np.tanh, math_ops.tanh)283 self._compareBoth(x, np.arcsinh, math_ops.asinh)284 self._compareBoth(w, np.arccosh, math_ops.acosh)285 self._compareBoth(k, np.arctanh, math_ops.atanh)286 self._compareBoth(x, self._sigmoid, math_ops.sigmoid)287 self._compareBoth(y, np.sign, math_ops.sign)288 self._compareBoth(x, np.sin, math_ops.sin)289 self._compareBoth(x, np.cos, math_ops.cos)290 self._compareBoth(291 y, np.vectorize(self._replace_domain_error_with_inf(math.lgamma)),292 math_ops.lgamma)293 self._compareBoth(x, np.vectorize(math.erf), math_ops.erf)294 self._compareBoth(x, np.vectorize(math.erfc), math_ops.erfc)295 self._compareBoth(x, np.arctan, math_ops.atan)296 self._compareBoth(k, np.arcsin, math_ops.asin)297 self._compareBoth(k, np.arccos, math_ops.acos)298 self._compareBoth(k, np.tan, math_ops.tan)299 try:300 from scipy import special # pylint: disable=g-import-not-at-top301 self._compareBoth(x, special.i0e, math_ops.bessel_i0e)302 self._compareBoth(x, special.i1e, math_ops.bessel_i1e)303 except ImportError as e:304 tf_logging.warn("Cannot test special functions: %s" % str(e))305 self._compareBothSparse(x, np.abs, math_ops.abs)306 self._compareBothSparse(x, np.negative, math_ops.negative)307 self._compareBothSparse(x, np.square, math_ops.square)308 self._compareBothSparse(z, np.sqrt, math_ops.sqrt, tol=1e-3)309 self._compareBothSparse(x, np.tanh, math_ops.tanh)310 self._compareBothSparse(y, np.sign, math_ops.sign)311 self._compareBothSparse(x, np.vectorize(math.erf), math_ops.erf)312 @test_util.run_deprecated_v1313 def testHalfBasic(self):314 x = np.arange(-3, 3).reshape(1, 3, 2).astype(np.float16)315 y = (x + .5).astype(np.float16) # no zero316 z = (x + 15.5).astype(np.float16) # all positive317 self._compareBoth(x, np.abs, math_ops.abs)318 self._compareBoth(x, np.abs, _ABS)319 self._compareBoth(x, np.negative, math_ops.negative)320 self._compareBoth(x, np.negative, _NEG)321 self._compareBoth(y, self._inv, math_ops.reciprocal)322 self._compareBoth(x, np.square, math_ops.square)323 self._compareBoth(z, np.sqrt, math_ops.sqrt)324 self._compareBoth(z, self._rsqrt, math_ops.rsqrt)325 self._compareBoth(x, np.exp, math_ops.exp)326 self._compareBoth(x, np.expm1, math_ops.expm1)327 self._compareBoth(z, np.log, math_ops.log)328 self._compareBoth(z, np.log1p, math_ops.log1p)329 self._compareBoth(x, np.tanh, math_ops.tanh)330 self._compareBoth(x, self._sigmoid, math_ops.sigmoid)331 self._compareBoth(y, np.sign, math_ops.sign)332 self._compareBoth(x, np.sin, math_ops.sin)333 self._compareBoth(x, np.cos, math_ops.cos)334 self._compareBoth(335 y, np.vectorize(self._replace_domain_error_with_inf(math.lgamma)),336 math_ops.lgamma)337 self._compareBoth(x, np.vectorize(math.erf), math_ops.erf)338 self._compareBoth(x, np.vectorize(math.erfc), math_ops.erfc)339 try:340 from scipy import special # pylint: disable=g-import-not-at-top341 self._compareBoth(x, special.i0e, math_ops.bessel_i0e)342 self._compareBoth(x, special.i1e, math_ops.bessel_i1e)343 except ImportError as e:344 tf_logging.warn("Cannot test special functions: %s" % str(e))345 self._compareBothSparse(x, np.abs, math_ops.abs)346 self._compareBothSparse(x, np.negative, math_ops.negative)347 self._compareBothSparse(x, np.square, math_ops.square)348 self._compareBothSparse(z, np.sqrt, math_ops.sqrt, tol=1e-3)349 self._compareBothSparse(x, np.tanh, math_ops.tanh)350 self._compareBothSparse(y, np.sign, math_ops.sign)351 self._compareBothSparse(x, np.vectorize(math.erf), math_ops.erf, tol=1e-3)352 def testBFloat16Basic(self):353 x = np.arange(-6, 6,354 2).reshape(1, 3, 2).astype(dtypes_lib.bfloat16.as_numpy_dtype)355 self._compareCpu(x, np.abs, math_ops.abs)356 self._compareCpu(x, np.abs, _ABS)357 def testInt8Basic(self):358 x = np.arange(-6, 6, 2).reshape(1, 3, 2).astype(np.int8)359 self._compareCpu(x, np.abs, math_ops.abs)360 self._compareCpu(x, np.abs, _ABS)361 def testInt16Basic(self):362 x = np.arange(-6, 6, 2).reshape(1, 3, 2).astype(np.int16)363 self._compareCpu(x, np.abs, math_ops.abs)364 self._compareCpu(x, np.abs, _ABS)365 def testInt32Basic(self):366 x = np.arange(-6, 6, 2).reshape(1, 3, 2).astype(np.int32)367 self._compareCpu(x, np.abs, math_ops.abs)368 self._compareCpu(x, np.abs, _ABS)369 self._compareBoth(x, np.negative, math_ops.negative)370 self._compareBoth(x, np.negative, _NEG)371 self._compareBoth(x, np.square, math_ops.square)372 self._compareCpu(x, np.sign, math_ops.sign)373 self._compareBothSparse(x, np.abs, math_ops.abs)374 self._compareBothSparse(x, np.negative, math_ops.negative)375 self._compareBothSparse(x, np.square, math_ops.square)376 self._compareBothSparse(x, np.sign, math_ops.sign)377 def testInt64Basic(self):378 x = np.arange(-6 << 40, 6 << 40, 2 << 40).reshape(1, 3, 2).astype(np.int64)379 self._compareCpu(x, np.abs, math_ops.abs)380 self._compareCpu(x, np.abs, _ABS)381 self._compareCpu(x, np.negative, math_ops.negative)382 self._compareCpu(x, np.negative, _NEG)383 self._compareCpu(x, np.sign, math_ops.sign)384 self._compareBothSparse(x, np.abs, math_ops.abs)385 self._compareBothSparse(x, np.negative, math_ops.negative)386 self._compareBothSparse(x, np.sign, math_ops.sign)387 def testInt64Square(self):388 x = np.arange(-6 << 20, 6 << 20, 2 << 20).reshape(1, 3, 2).astype(np.int64)389 self._compareCpu(x, np.square, math_ops.square)390 self._compareBothSparse(x, np.square, math_ops.square)391 @test_util.run_deprecated_v1392 def testComplex64Basic(self):393 x = np.complex(1, 1) * np.arange(-3, 3).reshape(1, 3, 2).astype(394 np.complex64)395 y = x + np.complex(0.5, 0.5) # no zeros396 self._compareBoth(x, np.abs, math_ops.abs)397 self._compareBoth(x, np.abs, _ABS)398 self._compareBoth(x, np.negative, math_ops.negative)399 self._compareBoth(x, np.negative, _NEG)400 self._compareCpu(y, self._inv, math_ops.reciprocal)401 self._compareCpu(x, np.square, math_ops.square)402 self._compareCpu(y, np.sqrt, math_ops.sqrt)403 self._compareCpu(y, self._rsqrt, math_ops.rsqrt)404 self._compareBoth(x, np.exp, math_ops.exp)405 self._compareCpu(x, np.expm1, math_ops.expm1)406 self._compareCpu(y, np.log, math_ops.log)407 self._compareCpu(y, np.log1p, math_ops.log1p)408 self._compareCpu(x, np.sinh, math_ops.sinh)409 self._compareCpu(x, np.cosh, math_ops.cosh)410 self._compareCpu(x, np.tanh, math_ops.tanh)411 # Complex64 versions of asinh() and acosh() in libstdc++ only have 6 digits412 # of precision.413 # Small gradient values + low precision --> High relative error414 self._compareCpu(y, np.arcsinh, math_ops.asinh, grad_rtol=1e-2)415 self._compareCpu(y, np.arccosh, math_ops.acosh, grad_rtol=1e-2)416 self._compareCpu(y, np.arctanh, math_ops.atanh)417 self._compareCpu(x, self._sigmoid, math_ops.sigmoid)418 self._compareCpu(x, np.sin, math_ops.sin)419 self._compareCpu(x, np.cos, math_ops.cos)420 self._compareBothSparse(x, np.abs, math_ops.abs)421 self._compareBothSparse(x, np.negative, math_ops.negative)422 self._compareBothSparse(x, np.square, math_ops.square)423 self._compareBothSparse(x, np.sqrt, math_ops.sqrt, 1e-3)424 self._compareBothSparse(x, np.tanh, math_ops.tanh)425 # Numpy uses an incorrect definition of sign; use the right one instead.426 def complex_sign(x):427 return x / np.abs(x)428 self._compareBoth(y, complex_sign, math_ops.sign)429 self._compareBothSparse(y, complex_sign, math_ops.sign)430 @test_util.run_deprecated_v1431 def testComplex128Basic(self):432 x = np.complex(1, 1) * np.arange(-3, 3).reshape(1, 3, 2).astype(433 np.complex128)434 y = x + np.complex(0.5, 0.5) # no zeros435 self._compareBoth(x, np.abs, math_ops.abs)436 self._compareBoth(x, np.abs, _ABS)437 self._compareBoth(x, np.negative, math_ops.negative)438 self._compareBoth(x, np.negative, _NEG)439 self._compareCpu(y, self._inv, math_ops.reciprocal)440 self._compareCpu(x, np.square, math_ops.square)441 self._compareCpu(y, np.sqrt, math_ops.sqrt)442 self._compareCpu(y, self._rsqrt, math_ops.rsqrt)443 self._compareBoth(x, np.exp, math_ops.exp)444 self._compareCpu(x, np.expm1, math_ops.expm1)445 self._compareCpu(y, np.log, math_ops.log)446 self._compareCpu(y, np.log1p, math_ops.log1p)447 self._compareCpu(x, np.sinh, math_ops.sinh)448 self._compareCpu(x, np.cosh, math_ops.cosh)449 self._compareCpu(x, np.tanh, math_ops.tanh)450 self._compareCpu(y, np.arcsinh, math_ops.asinh)451 self._compareCpu(y, np.arccosh, math_ops.acosh)452 self._compareCpu(y, np.arctanh, math_ops.atanh)453 self._compareCpu(x, self._sigmoid, math_ops.sigmoid)454 self._compareCpu(x, np.sin, math_ops.sin)455 self._compareCpu(x, np.cos, math_ops.cos)456 self._compareBothSparse(x, np.abs, math_ops.abs)457 self._compareBothSparse(x, np.negative, math_ops.negative)458 self._compareBothSparse(x, np.square, math_ops.square)459 self._compareBothSparse(x, np.sqrt, math_ops.sqrt, 1e-3)460 self._compareBothSparse(x, np.tanh, math_ops.tanh)461 # Numpy uses an incorrect definition of sign; use the right one instead.462 def complex_sign(x):463 return x / np.abs(x)464 self._compareBoth(y, complex_sign, math_ops.sign)465 self._compareBothSparse(y, complex_sign, math_ops.sign)466 @test_util.run_deprecated_v1467 def testGradGrad(self):468 np.random.seed(7)469 shape = (5,)470 dtype_tols = [(np.float32, 5e-4), (np.float64, 1e-6), (np.complex64, 5e-4),471 (np.complex128, 1e-6)]472 op_range = [473 (gen_math_ops.reciprocal_grad, [-2, 2]),474 (gen_math_ops.rsqrt_grad, [0.1, 3]),475 (gen_math_ops.sigmoid_grad, [-2, 2]),476 (gen_math_ops.sqrt_grad, [0.1, 3]),477 (gen_math_ops.tanh_grad, [-2, 2]),478 ]479 def rand(dtype, real_range):480 x = np.random.uniform(481 real_range[0], real_range[1], size=shape[0]).astype(dtype)482 if dtype in (np.complex64, np.complex128):483 x += 1j * np.random.uniform(-2, 2, size=shape[0]).astype(dtype)484 return x485 for op, real_range in op_range:486 with self.cached_session():487 for dtype, tol in dtype_tols:488 x = constant_op.constant(rand(dtype, real_range))489 y = constant_op.constant(rand(dtype, real_range))490 z = op(x, y)491 grads = gradient_checker.compute_gradient(492 [x, y], [shape, shape],493 z,494 shape,495 x_init_value=[rand(dtype, real_range),496 rand(dtype, real_range)])497 if isinstance(grads, tuple):498 grads = [grads]499 for analytical, numerical in grads:500 self.assertAllClose(analytical, numerical, rtol=tol, atol=tol)501 @test_util.run_in_graph_and_eager_modes502 def testComplexAbsGradGrad(self):503 def f(x):504 real = math_ops.cos(x)505 imag = ops.convert_to_tensor(1.)506 return math_ops.abs(math_ops.complex(real, imag))507 def g(x):508 with backprop.GradientTape() as t:509 t.watch(x)510 y = f(x)511 return t.gradient(y, x)512 err = gradient_checker_v2.max_error(513 *gradient_checker_v2.compute_gradient(g, [ops.convert_to_tensor(2.0)]))514 self.assertLess(err, 1e-3)515if __name__ == "__main__":...

Full Screen

Full Screen

buildTestData.py

Source:buildTestData.py Github

copy

Full Screen

1#-******************************************************************************2#3# Copyright (c) 2012,4# Sony Pictures Imageworks Inc. and5# Industrial Light & Magic, a division of Lucasfilm Entertainment Company Ltd.6#7# All rights reserved.8#9# Redistribution and use in source and binary forms, with or without10# modification, are permitted provided that the following conditions are11# met:12# * Redistributions of source code must retain the above copyright13# notice, this list of conditions and the following disclaimer.14# * Redistributions in binary form must reproduce the above15# copyright notice, this list of conditions and the following disclaimer16# in the documentation and/or other materials provided with the17# distribution.18# * Neither the name of Sony Pictures Imageworks, nor19# Industrial Light & Magic, nor the names of their contributors may be used20# to endorse or promote products derived from this software without specific21# prior written permission.22#23# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS24# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT25# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR26# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT27# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,28# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT29# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,30# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY31# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT32# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE33# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.34#35#-******************************************************************************36from imath import *37from alembic.AbcCoreAbstract import *38from alembic.Abc import *39from alembic.AbcGeom import *40from alembic.Util import *41C3c = Color3c42C3f = Color3f43C4c = Color4c44C4f = Color4f45# Test data for number type traits46ScalarTraitsData = {}47SmallArrayTraitsData = {}48ArrayTraitsData = {}49# Comparison measures for number type traits50TraitsComparison = {}51# -----------------------------------------------------------------52# Test helper functions53# -----------------------------------------------------------------54# Comparison functions for various data types55EPS = 0.01 56def compareExact (a0, a1):57 return a0 == a158def compareEPS (a0, a1):59 return abs (a0 - a1) <= EPS60def compareVec3Exact (a0, a1):61 return a0[0] == a1[0] and a0[1] == a1[1] and a0[2] == a1[2]62def compareVec4Exact (a0, a1):63 return a0[0] == a1[0] and a0[1] == a1[1] and a0[2] == a1[2] and \64 a0[3] == a1[3]65def compareVecEPS (a0, a1):66 return a0.equalWithRelError (a1, EPS)67def compareBoxExact (a0, a1):68 return compareExact (a0.min(), a1.min()) and \69 compareExact (a0.max(), a1.max())70def compareBoxEPS (a0, a1):71 return compareVecEPS (a0.min(), a1.min()) and \72 compareVecEPS (a0.max(), a1.max())73def compareQuatEPS (a0, a1):74 return compareEPS (a0.angle(), a1.angle()) and \75 compareVecEPS (a0.axis(), a1.axis())76def compareC3EPS (a0, a1):77 return compareEPS (a0[0], a1[0]) and compareEPS (a0[1], a1[1]) and \78 compareEPS (a0[2], a1[2])79def compareC4EPS (a0, a1):80 return compareEPS (a0[0], a1[0]) and compareEPS (a0[1], a1[1]) and \81 compareEPS (a0[2], a1[2]) and compareEPS (a0[3], a1[3])82def WRITES( *iArgs ):83 iTraits = iArgs[0];84 name = iTraits.__name__85 ScalarTraitsData[name] = iArgs86def WRITESA( iTraits, *iArgs ):87 name = iTraits.__name__88 SmallArrayTraitsData[name] = iTraits, createArray( iTraits.arrayType, iArgs )89def createArray( iArray, iList ):90 a = iArray( len( iList ) )91 for i in range( len( iList ) ):92 a[i] = iList[i]93 return a94def WRITEA( iTraits, *iArgs ):95 name = iTraits.__name__96 ArrayTraitsData[name] = iTraits, createArray( iTraits.arrayType, iArgs )97def buildTestScalarData():98 # Scalar DataType99 100 # POD types101 # extent 1102 WRITES (BooleanTPTraits, 0, 1, 0)103 WRITES (Uint8TPTraits, 3, 4)104 WRITES (Int8TPTraits, -5 )105 WRITES (Uint16TPTraits, 6 )106 WRITES (Int16TPTraits, -7, 8 )107 WRITES (Uint32TPTraits, 9, 10, 11, 12 )108 WRITES (Int32TPTraits, -13, 14, -15 )109 WRITES (Uint64TPTraits, 16 )110 WRITES (Float16TPTraits, 1.234, 6.789)111 WRITES (Float32TPTraits, -1234.5678)112 WRITES (Float64TPTraits, 1234.5678)113 WRITES (StringTPTraits, "abc", "def")114 WRITES (WstringTPTraits, u"asdf" )115 # Compound Types116 # extent 2117 # vector2118 WRITES (V2sTPTraits, V2s (1, 2), V2s (-1, 0))119 WRITES (V2iTPTraits, V2i (3, 4))120 WRITES (V2fTPTraits, V2f (1.2, 3.4), V2f (5.6, 0))121 WRITES (V2dTPTraits, V2d (5.6, 7.8))122 # point2123 WRITES (P2sTPTraits, V2s (10, 20), V2s (-10, 0))124 WRITES (P2iTPTraits, V2i (30, 40))125 WRITES (P2fTPTraits, V2f (1.02, 3.04), V2f (5.06, 0))126 WRITES (P2dTPTraits, V2d (5.06, 7.08))127 # normal2128 WRITES (N2fTPTraits, V2f (1.1, 1.2), V2f (-1.1, 0.1))129 WRITES (N2dTPTraits, V2d (3.4, 4.4))130 # extent 3131 # color3132 WRITES (C3cTPTraits, Color3c (1, 2, 3))133 # TODO: Color3h types are not wrapped. C3f is used instead.134 WRITES (C3hTPTraits, Color3f (0.1, 0.2, 0.3))135 WRITES (C3fTPTraits, Color3f (15.6, 7.8, 9.0))136 # vector3137 WRITES (V3sTPTraits, V3s (4, 5, 6))138 WRITES (V3iTPTraits, V3i (7, 8, 9))139 WRITES (V3fTPTraits, V3f (25.6, 7.8, 9.0))140 WRITES (V3dTPTraits, V3d (35.6, 7.8, 14.2))141 # point3142 WRITES (P3sTPTraits, V3s (40, 50, 60))143 WRITES (P3iTPTraits, V3i (70, 80, 90))144 WRITES (P3fTPTraits, V3f (25.06, 7.08, 90.0))145 WRITES (P3dTPTraits, V3d (35.06, 7.08, 14.02))146 # normal3147 WRITES (N3fTPTraits, V3f (11.1, 11.2, 11.3), V3f (-11.1, 0.11, 0.22))148 WRITES (N3dTPTraits, V3d (31.4, 41.4, 41.5))149 # extent 4150 # color4151 WRITES (C4cTPTraits, Color4c (1, 2, 3, 4) )152 # TODO: Color4h types are not wrapped. C4f is used instead.153 WRITES (C4hTPTraits, Color4f (5.6, 7.8, 1.2, 3.4) )154 WRITES (C4fTPTraits, Color4f (1.111, 2.222, 3.333, 4.444) )155 # box2156 WRITES (Box2sTPTraits, Box2s (V2s (0, 0), V2s (1, 1)));157 WRITES (Box2iTPTraits, Box2i (V2i (0, 0), V2i (2, 2)));158 WRITES (Box2fTPTraits, Box2f (V2f (0, 0), V2f (0.3, 0.3)));159 WRITES (Box2dTPTraits, Box2d (V2d (0, 0), V2d (0.4, 0.4)));160 # quat161 WRITES (QuatfTPTraits, Quatf (-1.0, 2.0, 3.0, -4.0))162 WRITES (QuatdTPTraits, Quatd (0.5, 0.6, -0.7, -0.8))163 # extent 6164 # box3165 WRITES (Box3sTPTraits, Box3s (V3s (-1, -1, -1), V3s (1, 1, 1)))166 WRITES (Box3iTPTraits, Box3i (V3i (0, 0, 0), V3i (1, 1, 1)))167 WRITES (Box3fTPTraits, Box3f (V3f(1.2, 3.4, 5.6), V3f(-1.2, 3.4, -5.6)))168 WRITES (Box3dTPTraits, Box3d (V3d(0, 0, 0), V3d(5.6, 7.8, 9.0)))169 # extent 9170 # matrix33171 WRITES (M33fTPTraits, M33f(1)*2)172 WRITES (M33dTPTraits, M33d(1)*3)173 # extent 16174 # matrix44175 WRITES (M44fTPTraits, M44f(1)*4)176 WRITES (M44dTPTraits, M44d(1)*5)177 178def buildTestSmallArrayData():179 # Scalar DataType180 181 # POD types182 # extent > 1183 WRITESA (BooleanTPTraits, 0, 0, 1)184 WRITESA (Uint8TPTraits, 1, 2, 3, 4, 5, 6)185 WRITESA (Int8TPTraits, -1, 2, -3, 4, -5, 6)186 WRITESA (Uint16TPTraits, 10, 20, 30, 40, 50, 60)187 WRITESA (Int16TPTraits, -10, 20, -30, 40, -50, 60)188 WRITESA (Uint32TPTraits, 11, 22, 33, 44, 55, 66)189 WRITESA (Int32TPTraits, -11, 22, -33, 44, -55, 66)190 WRITESA (Uint64TPTraits, 13, 23, 33, 43, 53)191 WRITESA (Int64TPTraits, -13, 23, -33, 43, -53)192 WRITESA (Float16TPTraits, 1.23, 2.34, 3.45, 4.56)193 WRITESA (Float32TPTraits, 1.234, 2.345, 3.456, 4.567)194 WRITESA (Float64TPTraits, 1.2345, 2.3456, 3.4567, 4.5678)195 WRITESA (StringTPTraits, "a", "b", "c", "d", "e")196 WRITESA (WstringTPTraits, u"A", u"B", u"C", u"D", u"E")197def buildTestArrayData():198 # POD types199 # extent 1200 WRITEA (BooleanTPTraits, 0, 0, 1)201 WRITEA (Uint8TPTraits, 1, 2, 3, 4, 5, 6)202 WRITEA (Int8TPTraits, -1, 2, -3, 4, -5, 6)203 WRITEA (Uint16TPTraits, 10, 20, 30, 40, 50, 60)204 WRITEA (Int16TPTraits, -10, 20, -30, 40, -50, 60)205 WRITEA (Uint32TPTraits, 11, 22, 33, 44, 55, 66)206 WRITEA (Int32TPTraits, -11, 22, -33, 44, -55, 66)207 WRITEA (Uint64TPTraits, 13, 23, 33, 43, 53)208 WRITEA (Int64TPTraits, -13, 23, -33, 43, -53)209 WRITEA (Float16TPTraits, 1.23, 2.34, 3.45, 4.56)210 WRITEA (Float32TPTraits, 1.234, 2.345, 3.456, 4.567)211 WRITEA (Float64TPTraits, 1.2345, 2.3456, 3.4567, 4.5678)212 WRITEA (StringTPTraits, "a", "b", "c", "d", "e");213 WRITEA (WstringTPTraits, u"A", u"B", u"C", u"D", u"E");214 # Compound Types215 # extent 2216 # vector2217 WRITEA (V2sTPTraits, V2s (1, 2), V2s (-1, 1))218 WRITEA (V2iTPTraits, V2i (3, 4), V2i (5, 6))219 WRITEA (V2fTPTraits, V2f (1.2, 3.4), V2f (5.6, 7.8))220 WRITEA (V2dTPTraits, V2d (5.6, 7.8), V2d (9.10, 10.11))221 # point2222 WRITEA (P2sTPTraits, V2s (10, 20), V2s (-10, 0))223 WRITEA (P2iTPTraits, V2i (30, 40), V2i (10, 20))224 WRITEA (P2fTPTraits, V2f (1.02, 3.04), V2f (5.06, 0.11))225 WRITEA (P2dTPTraits, V2d (5.06, 7.08), V2d (-102.4, -9.5))226 # normal2227 WRITEA (N2fTPTraits, V2f (1.1, 1.2), V2f (-1.1, 0.1))228 WRITEA (N2dTPTraits, V2d (3.4, 4.4), V2d (-104.2, 104.2))229 # extent 3230 # color3231 WRITEA (C3cTPTraits, C3c (1, 2, 3), C3c (4, 5, 6))232 # TODO: C3h types are not wrapped. C3f is used instead.233 WRITEA (C3hTPTraits, C3f (0.1, 0.2, 0.3), C3f(0.4, 0.5, 0.6))234 WRITEA (C3fTPTraits, C3f (15.6, 7.8, 9.0), C3f(-1.4, -235.2, 11.1))235 # vector3236 WRITEA (V3sTPTraits, V3s (4, 5, 6), V3s (14, 132, 13))237 WRITEA (V3iTPTraits, V3i (7, 8, 9), V3i (-1, -14, 32))238 WRITEA (V3fTPTraits, V3f (25.6, 7.8, 9.0), V3f (-0.2, -1.3, 1.5))239 WRITEA (V3dTPTraits, V3d (35.6, 7.8, 14.2), V3d (13.2, 1403, -12.3))240 # point3241 WRITEA (P3sTPTraits, V3s (40, 50, 60), V3s(1, 2, 3))242 WRITEA (P3iTPTraits, V3i (70, 80, 90), V3i(-1, -2, -3))243 WRITEA (P3fTPTraits, V3f (25.06, 7.08, 90.0), V3f(-0.1, -0.2, -0.3))244 WRITEA (P3dTPTraits, V3d (35.06, 7.08, 14.02), V3d(-0.3, -0.4, -0.5))245 # normal3246 WRITEA (N3fTPTraits, V3f (11.1, 11.2, 11.3), V3f (-11.1, 0.11, 0.22))247 WRITEA (N3dTPTraits, V3d (31.4, 41.4, 41.5), V3d (-0.1, -0.2, -0.4))248 # extent 4249 # color4250 WRITEA (C4cTPTraits, C4c (1, 2, 3, 4) )251 # TODO: C4h types are not wrapped. C4f is used instead.252 WRITEA (C4hTPTraits, C4f (5.6, 7.8, 1.2, 3.4) )253 WRITEA (C4fTPTraits, C4f (1.111, 2.222, 3.333, 4.444) )254 # box2255 WRITEA (Box2sTPTraits, Box2s (V2s (0, 0), V2s (1, 1)));256 WRITEA (Box2iTPTraits, Box2i (V2i (0, 0), V2i (2, 2)));257 WRITEA (Box2fTPTraits, Box2f (V2f (0, 0), V2f (0.3, 0.3)));258 WRITEA (Box2dTPTraits, Box2d (V2d (0, 0), V2d (0.4, 0.4)));259 # quat260 WRITEA (QuatfTPTraits, Quatf (-1.0, 2.0, 3.0, -4.0))261 WRITEA (QuatdTPTraits, Quatd (0.5, 0.6, -0.7, -0.8))262 # extent 6263 # box3264 WRITEA (Box3sTPTraits, Box3s (V3s (-1, -1, -1), V3s (1, 1, 1)))265 WRITEA (Box3iTPTraits, Box3i (V3i (0, 0, 0), V3i (1, 1, 1)))266 WRITEA (Box3fTPTraits, Box3f (V3f (1.2, 3.4, 5.6), V3f (1.2, 4.4, 5.6)))267 WRITEA (Box3dTPTraits, Box3d (V3d (0, 0, 0), V3d (5.6, 7.8, 9.0)))268 # extent 9269 # matrix33270 WRITEA (M33fTPTraits, M33f (1)*2, M33f (0.1))271 WRITEA (M33dTPTraits, M33d (1)*3, M33d (3.4))272 # extent 16273 # matrix44274 WRITEA (M44fTPTraits, M44f (1)*4, M44f (1.2))275 WRITEA (M44dTPTraits, M44d (1)*5, M44d (5.6))276def buildComparisonMeasure():277 # Assign the property name and proper comparison function278 # for each type279 TraitsComparison[BooleanTPTraits.__name__] = compareExact280 TraitsComparison[Uint8TPTraits.__name__] = compareExact281 TraitsComparison[Int8TPTraits.__name__] = compareExact282 TraitsComparison[Uint16TPTraits.__name__] = compareExact283 TraitsComparison[Int16TPTraits.__name__] = compareExact284 TraitsComparison[Uint32TPTraits.__name__] = compareExact285 TraitsComparison[Int32TPTraits.__name__] = compareExact286 TraitsComparison[Uint64TPTraits.__name__] = compareExact287 TraitsComparison[Int64TPTraits.__name__] = compareExact288 TraitsComparison[Float16TPTraits.__name__] = compareEPS289 TraitsComparison[Float32TPTraits.__name__] = compareEPS290 TraitsComparison[Float64TPTraits.__name__] = compareEPS291 TraitsComparison[StringTPTraits.__name__] = compareExact292 TraitsComparison[WstringTPTraits.__name__] = compareExact293 TraitsComparison[V2sTPTraits.__name__] = compareExact294 TraitsComparison[V2iTPTraits.__name__] = compareExact295 TraitsComparison[V2fTPTraits.__name__] = compareVecEPS296 TraitsComparison[V2dTPTraits.__name__] = compareVecEPS297 TraitsComparison[P2sTPTraits.__name__] = compareExact298 TraitsComparison[P2iTPTraits.__name__] = compareExact 299 TraitsComparison[P2fTPTraits.__name__] = compareVecEPS300 TraitsComparison[P2dTPTraits.__name__] = compareVecEPS301 TraitsComparison[N2fTPTraits.__name__] = compareVecEPS302 TraitsComparison[N2dTPTraits.__name__] = compareVecEPS303 TraitsComparison[C3cTPTraits.__name__] = compareVec3Exact304 TraitsComparison[C3hTPTraits.__name__] = compareVecEPS305 TraitsComparison[C3fTPTraits.__name__] = compareC3EPS306 TraitsComparison[V3sTPTraits.__name__] = compareExact307 TraitsComparison[V3iTPTraits.__name__] = compareExact308 TraitsComparison[V3fTPTraits.__name__] = compareVecEPS309 TraitsComparison[V3dTPTraits.__name__] = compareVecEPS310 TraitsComparison[P3sTPTraits.__name__] = compareExact311 TraitsComparison[P3iTPTraits.__name__] = compareExact312 TraitsComparison[P3fTPTraits.__name__] = compareVecEPS313 TraitsComparison[P3dTPTraits.__name__] = compareVecEPS314 TraitsComparison[N3fTPTraits.__name__] = compareVecEPS315 TraitsComparison[N3dTPTraits.__name__] = compareVecEPS316 TraitsComparison[C4cTPTraits.__name__] = compareVec4Exact317 TraitsComparison[C4hTPTraits.__name__] = compareC4EPS318 TraitsComparison[C4fTPTraits.__name__] = compareC4EPS319 TraitsComparison[Box2sTPTraits.__name__] = compareBoxExact320 TraitsComparison[Box2iTPTraits.__name__] = compareBoxExact321 TraitsComparison[Box2fTPTraits.__name__] = compareBoxEPS322 TraitsComparison[Box2dTPTraits.__name__] = compareBoxEPS323 TraitsComparison[QuatfTPTraits.__name__] = compareQuatEPS324 TraitsComparison[QuatdTPTraits.__name__] = compareQuatEPS325 TraitsComparison[Box3sTPTraits.__name__] = compareBoxExact326 TraitsComparison[Box3iTPTraits.__name__] = compareBoxExact327 TraitsComparison[Box3fTPTraits.__name__] = compareBoxEPS328 TraitsComparison[Box3dTPTraits.__name__] = compareBoxEPS329 TraitsComparison[M33fTPTraits.__name__] = compareVecEPS330 TraitsComparison[M33dTPTraits.__name__] = compareVecEPS331 TraitsComparison[M44fTPTraits.__name__] = compareVecEPS332 TraitsComparison[M44dTPTraits.__name__] = compareVecEPS333# -------------------------------------------------------------------------334# Main loop335buildTestScalarData()336buildTestSmallArrayData()337buildTestArrayData()...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run autotest automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful