diff options
author | Manjunath Kudlur <keveman@gmail.com> | 2015-11-06 16:27:58 -0800 |
---|---|---|
committer | Manjunath Kudlur <keveman@gmail.com> | 2015-11-06 16:27:58 -0800 |
commit | f41959ccb2d9d4c722fe8fc3351401d53bcf4900 (patch) | |
tree | ef0ca22cb2a5ac4bdec9d080d8e0788a53ed496d /tensorflow/python/ops/sparse_ops_test.py |
TensorFlow: Initial commit of TensorFlow library.
TensorFlow is an open source software library for numerical computation
using data flow graphs.
Base CL: 107276108
Diffstat (limited to 'tensorflow/python/ops/sparse_ops_test.py')
-rw-r--r-- | tensorflow/python/ops/sparse_ops_test.py | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/tensorflow/python/ops/sparse_ops_test.py b/tensorflow/python/ops/sparse_ops_test.py new file mode 100644 index 0000000000..07a5e6c6da --- /dev/null +++ b/tensorflow/python/ops/sparse_ops_test.py @@ -0,0 +1,212 @@ +"""Tests for Python ops defined in sparse_ops.""" + +import tensorflow.python.platform + +import numpy as np + +from tensorflow.python.framework import ops +from tensorflow.python.framework import test_util +from tensorflow.python.framework import types +from tensorflow.python.ops import constant_op +from tensorflow.python.ops import sparse_ops +from tensorflow.python.platform import googletest + + +class SparseToIndicatorTest(test_util.TensorFlowTestCase): + + def _SparseTensor_5x6(self, dtype): + ind = np.array([ + [0, 0], + [1, 0], [1, 3], [1, 4], + [3, 2], [3, 3]]) + val = np.array([0, 10, 13, 14, 32, 33]) + shape = np.array([5, 6]) + return ops.SparseTensor( + constant_op.constant(ind, types.int64), + constant_op.constant(val, dtype), + constant_op.constant(shape, types.int64)) + + def _SparseTensor_2x3x4(self, dtype): + ind = np.array([ + [0, 0, 1], + [0, 1, 0], [0, 1, 2], + [1, 0, 3], + [1, 1, 1], [1, 1, 3], + [1, 2, 2]]) + val = np.array([1, 10, 12, 103, 111, 113, 122]) + shape = np.array([2, 3, 4]) + return ops.SparseTensor( + constant_op.constant(ind, types.int64), + constant_op.constant(val, dtype), + constant_op.constant(shape, types.int64)) + + def testInt32(self): + with self.test_session(use_gpu=False): + sp_input = self._SparseTensor_5x6(types.int32) + output = sparse_ops.sparse_to_indicator(sp_input, 50).eval() + + expected_output = np.zeros((5, 50), dtype=np.bool) + expected_trues = ((0, 0), (1, 10), (1, 13), (1, 14), (3, 32), (3, 33)) + for expected_true in expected_trues: + expected_output[expected_true] = True + + self.assertAllEqual(output, expected_output) + + def testInt64(self): + with self.test_session(use_gpu=False): + sp_input = self._SparseTensor_5x6(types.int64) + output = sparse_ops.sparse_to_indicator(sp_input, 50).eval() + + expected_output = np.zeros((5, 50), dtype=np.bool) + expected_trues = [(0, 0), (1, 10), (1, 13), (1, 14), (3, 32), (3, 33)] + for expected_true in expected_trues: + expected_output[expected_true] = True + + self.assertAllEqual(output, expected_output) + + def testHigherRank(self): + with self.test_session(use_gpu=False): + sp_input = self._SparseTensor_2x3x4(types.int64) + output = sparse_ops.sparse_to_indicator(sp_input, 200).eval() + + expected_output = np.zeros((2, 3, 200), dtype=np.bool) + expected_trues = [(0, 0, 1), (0, 1, 10), (0, 1, 12), + (1, 0, 103), (1, 1, 111), (1, 1, 113), (1, 2, 122)] + for expected_true in expected_trues: + expected_output[expected_true] = True + + self.assertAllEqual(output, expected_output) + + +class SparseRetainTest(test_util.TensorFlowTestCase): + + def _SparseTensor_5x6(self): + ind = np.array([ + [0, 0], + [1, 0], [1, 3], [1, 4], + [3, 2], [3, 3]]) + val = np.array([0, 10, 13, 14, 32, 33]) + shape = np.array([5, 6]) + return ops.SparseTensor( + constant_op.constant(ind, types.int64), + constant_op.constant(val, types.int32), + constant_op.constant(shape, types.int64)) + + def testBasic(self): + with self.test_session(use_gpu=False) as sess: + sp_input = self._SparseTensor_5x6() + to_retain = np.array([1, 0, 0, 1, 1, 0], dtype=np.bool) + sp_output = sparse_ops.sparse_retain(sp_input, to_retain) + + output = sess.run(sp_output) + + self.assertAllEqual(output.indices, [[0, 0], [1, 4], [3, 2]]) + self.assertAllEqual(output.values, [0, 14, 32]) + self.assertAllEqual(output.shape, [5, 6]) + + def testRetainNone(self): + with self.test_session(use_gpu=False) as sess: + sp_input = self._SparseTensor_5x6() + to_retain = np.zeros((6,), dtype=np.bool) + sp_output = sparse_ops.sparse_retain(sp_input, to_retain) + + output = sess.run(sp_output) + + self.assertAllEqual(output.indices, np.array([]).reshape((0, 2))) + self.assertAllEqual(output.values, []) + self.assertAllEqual(output.shape, [5, 6]) + + def testMismatchedRetainShape(self): + with self.test_session(use_gpu=False): + sp_input = self._SparseTensor_5x6() + to_retain = np.array([1, 0, 0, 1, 0], dtype=np.bool) + with self.assertRaises(ValueError): + sparse_ops.sparse_retain(sp_input, to_retain) + + +class SparseFillEmptyRowsTest(test_util.TensorFlowTestCase): + + def _SparseTensor_5x6(self): + ind = np.array([ + [0, 0], + [1, 0], [1, 3], [1, 4], + [3, 2], [3, 3]]) + val = np.array([0, 10, 13, 14, 32, 33]) + shape = np.array([5, 6]) + return ops.SparseTensor( + constant_op.constant(ind, types.int64), + constant_op.constant(val, types.int32), + constant_op.constant(shape, types.int64)) + + def _SparseTensor_String5x6(self): + ind = np.array([ + [0, 0], + [1, 0], [1, 3], [1, 4], + [3, 2], [3, 3]]) + val = np.array(["a", "b", "c", "d", "e", "f"]) + shape = np.array([5, 6]) + return ops.SparseTensor( + constant_op.constant(ind, types.int64), + constant_op.constant(val, types.string), + constant_op.constant(shape, types.int64)) + + def _SparseTensor_2x6(self): + ind = np.array([[0, 0], [1, 0], [1, 3], [1, 4]]) + val = np.array([0, 10, 13, 14]) + shape = np.array([2, 6]) + return ops.SparseTensor( + constant_op.constant(ind, types.int64), + constant_op.constant(val, types.int32), + constant_op.constant(shape, types.int64)) + + def testFillNumber(self): + with self.test_session(use_gpu=False) as sess: + sp_input = self._SparseTensor_5x6() + sp_output, empty_row_indicator = ( + sparse_ops.sparse_fill_empty_rows(sp_input, -1)) + + output, empty_row_indicator_out = sess.run( + [sp_output, empty_row_indicator]) + + self.assertAllEqual( + output.indices, + [[0, 0], [1, 0], [1, 3], [1, 4], [2, 0], [3, 2], [3, 3], [4, 0]]) + self.assertAllEqual(output.values, [0, 10, 13, 14, -1, 32, 33, -1]) + self.assertAllEqual(output.shape, [5, 6]) + self.assertAllEqual(empty_row_indicator_out, + np.array([0, 0, 1, 0, 1]).astype(np.bool)) + + def testFillString(self): + with self.test_session(use_gpu=False) as sess: + sp_input = self._SparseTensor_String5x6() + sp_output, empty_row_indicator = ( + sparse_ops.sparse_fill_empty_rows(sp_input, "")) + + output, empty_row_indicator_out = sess.run( + [sp_output, empty_row_indicator]) + + self.assertAllEqual( + output.indices, + [[0, 0], [1, 0], [1, 3], [1, 4], [2, 0], [3, 2], [3, 3], [4, 0]]) + self.assertAllEqual(output.values, ["a", "b", "c", "d", "", "e", "f", ""]) + self.assertAllEqual(output.shape, [5, 6]) + self.assertAllEqual(empty_row_indicator_out, + np.array([0, 0, 1, 0, 1]).astype(np.bool)) + + def testNoEmptyRows(self): + with self.test_session(use_gpu=False) as sess: + sp_input = self._SparseTensor_2x6() + sp_output, empty_row_indicator = ( + sparse_ops.sparse_fill_empty_rows(sp_input, -1)) + + output, empty_row_indicator_out = sess.run( + [sp_output, empty_row_indicator]) + + self.assertAllEqual(output.indices, [[0, 0], [1, 0], [1, 3], [1, 4]]) + self.assertAllEqual(output.values, [0, 10, 13, 14]) + self.assertAllEqual(output.shape, [2, 6]) + self.assertAllEqual(empty_row_indicator_out, np.zeros(2).astype(np.bool)) + + +if __name__ == "__main__": + googletest.main() |