diff --git a/tensorflow/python/kernel_tests/linalg/linear_operator_block_diag_test.py b/tensorflow/python/kernel_tests/linalg/linear_operator_block_diag_test.py index e0e6fedd34e..c18456c670d 100644 --- a/tensorflow/python/kernel_tests/linalg/linear_operator_block_diag_test.py +++ b/tensorflow/python/kernel_tests/linalg/linear_operator_block_diag_test.py @@ -144,6 +144,35 @@ class SquareLinearOperatorBlockDiagTest( self.assertTrue(operator.is_non_singular) self.assertFalse(operator.is_self_adjoint) + def test_is_x_parameters(self): + matrix = [[1., 0.], [1., 1.]] + sub_operator = linalg.LinearOperatorFullMatrix(matrix) + operator = block_diag.LinearOperatorBlockDiag( + [sub_operator], + is_positive_definite=True, + is_non_singular=True, + is_self_adjoint=False) + self.assertEqual( + operator.parameters, + { + "name": None, + "is_square": True, + "is_positive_definite": True, + "is_self_adjoint": False, + "is_non_singular": True, + "operators": [sub_operator], + }) + self.assertEqual( + sub_operator.parameters, + { + "is_non_singular": None, + "is_positive_definite": None, + "is_self_adjoint": None, + "is_square": None, + "matrix": matrix, + "name": "LinearOperatorFullMatrix", + }) + def test_block_diag_adjoint_type(self): matrix = [[1., 0.], [0., 1.]] operator = block_diag.LinearOperatorBlockDiag( diff --git a/tensorflow/python/kernel_tests/linalg/linear_operator_circulant_test.py b/tensorflow/python/kernel_tests/linalg/linear_operator_circulant_test.py index c3a3ae9fe8a..1d3313d6504 100644 --- a/tensorflow/python/kernel_tests/linalg/linear_operator_circulant_test.py +++ b/tensorflow/python/kernel_tests/linalg/linear_operator_circulant_test.py @@ -283,6 +283,18 @@ class LinearOperatorCirculantTestNonHermitianSpectrum( operator = linalg.LinearOperatorCirculant( lin_op_spectrum, input_output_dtype=dtype) + self.assertEqual( + operator.parameters, + { + "input_output_dtype": dtype, + "is_non_singular": None, + "is_positive_definite": None, + "is_self_adjoint": None, + "is_square": True, + "name": "LinearOperatorCirculant", + "spectrum": lin_op_spectrum, + }) + mat = self._spectrum_to_circulant_1d(spectrum, shape, dtype=dtype) return operator, mat @@ -526,6 +538,20 @@ class LinearOperatorCirculant2DTestHermitianSpectrum( is_self_adjoint=True if ensure_self_adjoint_and_pd else None, input_output_dtype=dtype) + self.assertEqual( + operator.parameters, + { + "input_output_dtype": dtype, + "is_non_singular": None, + "is_positive_definite": ( + True if ensure_self_adjoint_and_pd else None), + "is_self_adjoint": ( + True if ensure_self_adjoint_and_pd else None), + "is_square": True, + "name": "LinearOperatorCirculant2D", + "spectrum": lin_op_spectrum, + }) + mat = self._spectrum_to_circulant_2d(spectrum, shape, dtype=dtype) return operator, mat @@ -570,6 +596,19 @@ class LinearOperatorCirculant2DTestNonHermitianSpectrum( operator = linalg.LinearOperatorCirculant2D( lin_op_spectrum, input_output_dtype=dtype) + self.assertEqual( + operator.parameters, + { + "input_output_dtype": dtype, + "is_non_singular": None, + "is_positive_definite": None, + "is_self_adjoint": None, + "is_square": True, + "name": "LinearOperatorCirculant2D", + "spectrum": lin_op_spectrum, + } + ) + mat = self._spectrum_to_circulant_2d(spectrum, shape, dtype=dtype) return operator, mat @@ -675,6 +714,18 @@ class LinearOperatorCirculant3DTest(test.TestCase): operator = linalg.LinearOperatorCirculant3D(spectrum) self.assertAllEqual((2, 2 * 3 * 5, 2 * 3 * 5), operator.shape) + self.assertEqual( + operator.parameters, + { + "input_output_dtype": dtypes.complex64, + "is_non_singular": None, + "is_positive_definite": None, + "is_self_adjoint": None, + "is_square": True, + "name": "LinearOperatorCirculant3D", + "spectrum": spectrum, + }) + matrix_tensor = operator.to_dense() self.assertEqual(matrix_tensor.dtype, dtypes.complex64) matrix_h = linalg.adjoint(matrix_tensor) diff --git a/tensorflow/python/kernel_tests/linalg/linear_operator_test.py b/tensorflow/python/kernel_tests/linalg/linear_operator_test.py index 475cac212ce..0100eb4934b 100644 --- a/tensorflow/python/kernel_tests/linalg/linear_operator_test.py +++ b/tensorflow/python/kernel_tests/linalg/linear_operator_test.py @@ -43,6 +43,14 @@ class LinearOperatorShape(linalg.LinearOperator): is_self_adjoint=None, is_positive_definite=None, is_square=None): + parameters = dict( + shape=shape, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square + ) + self._stored_shape = shape super(LinearOperatorShape, self).__init__( dtype=dtypes.float32, @@ -50,7 +58,8 @@ class LinearOperatorShape(linalg.LinearOperator): is_non_singular=is_non_singular, is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, - is_square=is_square) + is_square=is_square, + parameters=parameters) def _shape(self): return tensor_shape.TensorShape(self._stored_shape) @@ -71,13 +80,22 @@ class LinearOperatorMatmulSolve(linalg.LinearOperator): is_self_adjoint=None, is_positive_definite=None, is_square=None): + parameters = dict( + matrix=matrix, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square + ) + self._matrix = ops.convert_to_tensor(matrix, name="matrix") super(LinearOperatorMatmulSolve, self).__init__( dtype=self._matrix.dtype, is_non_singular=is_non_singular, is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, - is_square=is_square) + is_square=is_square, + parameters=parameters) def _shape(self): return self._matrix.shape @@ -109,6 +127,14 @@ class LinearOperatorTest(test.TestCase): self.assertAllEqual((1, 2), operator.batch_shape) self.assertAllEqual(4, operator.domain_dimension) self.assertAllEqual(3, operator.range_dimension) + expected_parameters = { + "is_non_singular": None, + "is_positive_definite": None, + "is_self_adjoint": None, + "is_square": None, + "shape": (1, 2, 3, 4), + } + self.assertEqual(expected_parameters, operator.parameters) def test_all_shape_methods_defined_by_the_one_method_shape(self): with self.cached_session(): @@ -131,6 +157,19 @@ class LinearOperatorTest(test.TestCase): self.assertTrue(operator.is_self_adjoint) self.assertFalse(operator.is_positive_definite) + def test_nontrivial_parameters(self): + matrix = rng.randn(2, 3, 4) + matrix_ph = array_ops.placeholder_with_default(input=matrix, shape=None) + operator = LinearOperatorMatmulSolve(matrix_ph) + expected_parameters = { + "is_non_singular": None, + "is_positive_definite": None, + "is_self_adjoint": None, + "is_square": None, + "matrix": matrix_ph, + } + self.assertEqual(expected_parameters, operator.parameters) + def test_generic_to_dense_method_non_square_matrix_static(self): matrix = rng.randn(2, 3, 4) operator = LinearOperatorMatmulSolve(matrix) diff --git a/tensorflow/python/ops/linalg/linear_operator.py b/tensorflow/python/ops/linalg/linear_operator.py index cf14cdb6eae..08974f83ffb 100644 --- a/tensorflow/python/ops/linalg/linear_operator.py +++ b/tensorflow/python/ops/linalg/linear_operator.py @@ -146,6 +146,27 @@ class LinearOperator(module.Module): * If `is_X == False`, callers should expect the operator to not have `X`. * If `is_X == None` (the default), callers should have no expectation either way. + + #### Initialization parameters + + All subclasses of `LinearOperator` are expected to pass a `parameters` + argument to `super().__init__()`. This should be a `dict` containing + the unadulterated arguments passed to the subclass `__init__`. For example, + `MyLinearOperator` with an initializer should look like: + + ```python + def __init__(self, operator, is_square=False, name=None): + parameters = dict( + operator=operator, + is_square=is_square, + name=name + ) + ... + super().__init__(..., parameters=parameters) + ``` + + Users can then access `my_linear_operator.parameters` to see all arguments + passed to its initializer. """ # TODO(b/143910018) Remove graph_parents in V3. @@ -158,7 +179,8 @@ class LinearOperator(module.Module): is_self_adjoint=None, is_positive_definite=None, is_square=None, - name=None): + name=None, + parameters=None): r"""Initialize the `LinearOperator`. **This is a private method for subclass use.** @@ -179,6 +201,8 @@ class LinearOperator(module.Module): https://en.wikipedia.org/wiki/Positive-definite_matrix#Extension_for_non-symmetric_matrices is_square: Expect that this operator acts like square [batch] matrices. name: A name for this `LinearOperator`. + parameters: Python `dict` of parameters used to instantiate this + `LinearOperator`. Raises: ValueError: If any member of graph_parents is `None` or not a `Tensor`. @@ -210,6 +234,8 @@ class LinearOperator(module.Module): self._is_non_singular = is_non_singular self._is_self_adjoint = is_self_adjoint self._is_positive_definite = is_positive_definite + self._parameters = self._no_dependency(parameters) + self._parameters_sanitized = False self._name = name or type(self).__name__ @contextlib.contextmanager @@ -221,6 +247,11 @@ class LinearOperator(module.Module): with ops.name_scope(full_name) as scope: yield scope + @property + def parameters(self): + """Dictionary of parameters used to instantiate this `LinearOperator`.""" + return dict(self._parameters) + @property def dtype(self): """The `DType` of `Tensor`s handled by this `LinearOperator`.""" diff --git a/tensorflow/python/ops/linalg/linear_operator_adjoint.py b/tensorflow/python/ops/linalg/linear_operator_adjoint.py index 57c65647330..1af0ce9a008 100644 --- a/tensorflow/python/ops/linalg/linear_operator_adjoint.py +++ b/tensorflow/python/ops/linalg/linear_operator_adjoint.py @@ -112,6 +112,14 @@ class LinearOperatorAdjoint(linear_operator.LinearOperator): Raises: ValueError: If `operator.is_non_singular` is False. """ + parameters = dict( + operator=operator, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + name=name, + ) self._operator = operator @@ -150,6 +158,7 @@ class LinearOperatorAdjoint(linear_operator.LinearOperator): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) # TODO(b/143910018) Remove graph_parents in V3. self._set_graph_parents(operator.graph_parents) diff --git a/tensorflow/python/ops/linalg/linear_operator_block_diag.py b/tensorflow/python/ops/linalg/linear_operator_block_diag.py index 7afa15ae069..514b023ba82 100644 --- a/tensorflow/python/ops/linalg/linear_operator_block_diag.py +++ b/tensorflow/python/ops/linalg/linear_operator_block_diag.py @@ -163,6 +163,15 @@ class LinearOperatorBlockDiag(linear_operator.LinearOperator): TypeError: If all operators do not have the same `dtype`. ValueError: If `operators` is empty or are non-square. """ + parameters = dict( + operators=operators, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + name=name + ) + # Validate operators. check_ops.assert_proper_iterable(operators) operators = list(operators) @@ -224,6 +233,7 @@ class LinearOperatorBlockDiag(linear_operator.LinearOperator): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=True, + parameters=parameters, name=name) # TODO(b/143910018) Remove graph_parents in V3. diff --git a/tensorflow/python/ops/linalg/linear_operator_block_lower_triangular.py b/tensorflow/python/ops/linalg/linear_operator_block_lower_triangular.py index 84f2ff15345..43107c092e3 100644 --- a/tensorflow/python/ops/linalg/linear_operator_block_lower_triangular.py +++ b/tensorflow/python/ops/linalg/linear_operator_block_lower_triangular.py @@ -231,6 +231,15 @@ class LinearOperatorBlockLowerTriangular(linear_operator.LinearOperator): ValueError: If `operators` is empty, contains an erroneous number of elements, or contains operators with incompatible shapes. """ + parameters = dict( + operators=operators, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + name=name + ) + # Validate operators. check_ops.assert_proper_iterable(operators) for row in operators: @@ -256,6 +265,7 @@ class LinearOperatorBlockLowerTriangular(linear_operator.LinearOperator): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) def _validate_num_operators(self): diff --git a/tensorflow/python/ops/linalg/linear_operator_circulant.py b/tensorflow/python/ops/linalg/linear_operator_circulant.py index d4b671c53bd..31dd5b2967a 100644 --- a/tensorflow/python/ops/linalg/linear_operator_circulant.py +++ b/tensorflow/python/ops/linalg/linear_operator_circulant.py @@ -63,6 +63,7 @@ class _BaseLinearOperatorCirculant(linear_operator.LinearOperator): is_self_adjoint=None, is_positive_definite=None, is_square=True, + parameters=None, name="LinearOperatorCirculant"): r"""Initialize an `_BaseLinearOperatorCirculant`. @@ -83,6 +84,8 @@ class _BaseLinearOperatorCirculant(linear_operator.LinearOperator): https://en.wikipedia.org/wiki/Positive-definite_matrix\ #Extension_for_non_symmetric_matrices is_square: Expect that this operator acts like square [batch] matrices. + parameters: Python `dict` of parameters used to instantiate this + `LinearOperator`. name: A name to prepend to all ops created by this class. Raises: @@ -121,6 +124,7 @@ class _BaseLinearOperatorCirculant(linear_operator.LinearOperator): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) # TODO(b/143910018) Remove graph_parents in V3. self._set_graph_parents([self.spectrum]) @@ -744,6 +748,15 @@ class LinearOperatorCirculant(_BaseLinearOperatorCirculant): is_square: Expect that this operator acts like square [batch] matrices. name: A name to prepend to all ops created by this class. """ + parameters = dict( + spectrum=spectrum, + input_output_dtype=input_output_dtype, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + name=name + ) super(LinearOperatorCirculant, self).__init__( spectrum, block_depth=1, @@ -752,6 +765,7 @@ class LinearOperatorCirculant(_BaseLinearOperatorCirculant): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) def _eigvals(self): @@ -924,6 +938,15 @@ class LinearOperatorCirculant2D(_BaseLinearOperatorCirculant): is_square: Expect that this operator acts like square [batch] matrices. name: A name to prepend to all ops created by this class. """ + parameters = dict( + spectrum=spectrum, + input_output_dtype=input_output_dtype, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + name=name + ) super(LinearOperatorCirculant2D, self).__init__( spectrum, block_depth=2, @@ -932,6 +955,7 @@ class LinearOperatorCirculant2D(_BaseLinearOperatorCirculant): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) @@ -1074,6 +1098,15 @@ class LinearOperatorCirculant3D(_BaseLinearOperatorCirculant): is_square: Expect that this operator acts like square [batch] matrices. name: A name to prepend to all ops created by this class. """ + parameters = dict( + spectrum=spectrum, + input_output_dtype=input_output_dtype, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + name=name + ) super(LinearOperatorCirculant3D, self).__init__( spectrum, block_depth=3, @@ -1082,6 +1115,7 @@ class LinearOperatorCirculant3D(_BaseLinearOperatorCirculant): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) diff --git a/tensorflow/python/ops/linalg/linear_operator_composition.py b/tensorflow/python/ops/linalg/linear_operator_composition.py index 00ef86d5aba..ace7e85ddf6 100644 --- a/tensorflow/python/ops/linalg/linear_operator_composition.py +++ b/tensorflow/python/ops/linalg/linear_operator_composition.py @@ -143,6 +143,14 @@ class LinearOperatorComposition(linear_operator.LinearOperator): TypeError: If all operators do not have the same `dtype`. ValueError: If `operators` is empty. """ + parameters = dict( + operators=operators, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + name=name) + # Validate operators. check_ops.assert_proper_iterable(operators) operators = list(operators) @@ -182,6 +190,7 @@ class LinearOperatorComposition(linear_operator.LinearOperator): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) # TODO(b/143910018) Remove graph_parents in V3. self._set_graph_parents(graph_parents) diff --git a/tensorflow/python/ops/linalg/linear_operator_diag.py b/tensorflow/python/ops/linalg/linear_operator_diag.py index b5e81b267ce..3f298bce341 100644 --- a/tensorflow/python/ops/linalg/linear_operator_diag.py +++ b/tensorflow/python/ops/linalg/linear_operator_diag.py @@ -139,6 +139,14 @@ class LinearOperatorDiag(linear_operator.LinearOperator): TypeError: If `diag.dtype` is not an allowed type. ValueError: If `diag.dtype` is real, and `is_self_adjoint` is not `True`. """ + parameters = dict( + diag=diag, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + name=name + ) with ops.name_scope(name, values=[diag]): self._diag = linear_operator_util.convert_nonref_to_tensor( @@ -163,6 +171,7 @@ class LinearOperatorDiag(linear_operator.LinearOperator): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) # TODO(b/143910018) Remove graph_parents in V3. self._set_graph_parents([self._diag]) diff --git a/tensorflow/python/ops/linalg/linear_operator_full_matrix.py b/tensorflow/python/ops/linalg/linear_operator_full_matrix.py index b10822589d5..a616a8c09fe 100644 --- a/tensorflow/python/ops/linalg/linear_operator_full_matrix.py +++ b/tensorflow/python/ops/linalg/linear_operator_full_matrix.py @@ -133,6 +133,14 @@ class LinearOperatorFullMatrix(linear_operator.LinearOperator): Raises: TypeError: If `diag.dtype` is not an allowed type. """ + parameters = dict( + matrix=matrix, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + name=name + ) with ops.name_scope(name, values=[matrix]): self._matrix = linear_operator_util.convert_nonref_to_tensor( @@ -146,6 +154,7 @@ class LinearOperatorFullMatrix(linear_operator.LinearOperator): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) # TODO(b/143910018) Remove graph_parents in V3. self._set_graph_parents([self._matrix]) diff --git a/tensorflow/python/ops/linalg/linear_operator_householder.py b/tensorflow/python/ops/linalg/linear_operator_householder.py index 265c862ea03..cbb7a88a9ed 100644 --- a/tensorflow/python/ops/linalg/linear_operator_householder.py +++ b/tensorflow/python/ops/linalg/linear_operator_householder.py @@ -123,6 +123,14 @@ class LinearOperatorHouseholder(linear_operator.LinearOperator): ValueError: `is_self_adjoint` is not `True`, `is_positive_definite` is not `False` or `is_square` is not `True`. """ + parameters = dict( + reflection_axis=reflection_axis, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + name=name + ) with ops.name_scope(name, values=[reflection_axis]): self._reflection_axis = linear_operator_util.convert_nonref_to_tensor( @@ -152,6 +160,7 @@ class LinearOperatorHouseholder(linear_operator.LinearOperator): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) # TODO(b/143910018) Remove graph_parents in V3. self._set_graph_parents([self._reflection_axis]) diff --git a/tensorflow/python/ops/linalg/linear_operator_identity.py b/tensorflow/python/ops/linalg/linear_operator_identity.py index a0f7ead42d6..8d5d2c8a52a 100644 --- a/tensorflow/python/ops/linalg/linear_operator_identity.py +++ b/tensorflow/python/ops/linalg/linear_operator_identity.py @@ -252,6 +252,17 @@ class LinearOperatorIdentity(BaseLinearOperatorIdentity): `{is_self_adjoint, is_non_singular, is_positive_definite}`. TypeError: If `num_rows` or `batch_shape` is ref-type (e.g. Variable). """ + parameters = dict( + num_rows=num_rows, + batch_shape=batch_shape, + dtype=dtype, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + assert_proper_shapes=assert_proper_shapes, + name=name) + dtype = dtype or dtypes.float32 self._assert_proper_shapes = assert_proper_shapes @@ -272,6 +283,7 @@ class LinearOperatorIdentity(BaseLinearOperatorIdentity): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) linear_operator_util.assert_not_ref_type(num_rows, "num_rows") @@ -596,6 +608,16 @@ class LinearOperatorScaledIdentity(BaseLinearOperatorIdentity): ValueError: If `num_rows` is determined statically to be non-scalar, or negative. """ + parameters = dict( + num_rows=num_rows, + multiplier=multiplier, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + assert_proper_shapes=assert_proper_shapes, + name=name) + self._assert_proper_shapes = assert_proper_shapes with ops.name_scope(name, values=[multiplier, num_rows]): @@ -620,6 +642,7 @@ class LinearOperatorScaledIdentity(BaseLinearOperatorIdentity): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) self._num_rows = linear_operator_util.shape_tensor( diff --git a/tensorflow/python/ops/linalg/linear_operator_inversion.py b/tensorflow/python/ops/linalg/linear_operator_inversion.py index d6527e7c6d5..b2784c4d1e5 100644 --- a/tensorflow/python/ops/linalg/linear_operator_inversion.py +++ b/tensorflow/python/ops/linalg/linear_operator_inversion.py @@ -113,6 +113,14 @@ class LinearOperatorInversion(linear_operator.LinearOperator): Raises: ValueError: If `operator.is_non_singular` is False. """ + parameters = dict( + operator=operator, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + name=name + ) self._operator = operator @@ -163,6 +171,7 @@ class LinearOperatorInversion(linear_operator.LinearOperator): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) # TODO(b/143910018) Remove graph_parents in V3. self._set_graph_parents(operator.graph_parents) diff --git a/tensorflow/python/ops/linalg/linear_operator_kronecker.py b/tensorflow/python/ops/linalg/linear_operator_kronecker.py index 1fe68885bfe..b351bc5c507 100644 --- a/tensorflow/python/ops/linalg/linear_operator_kronecker.py +++ b/tensorflow/python/ops/linalg/linear_operator_kronecker.py @@ -167,6 +167,15 @@ class LinearOperatorKronecker(linear_operator.LinearOperator): TypeError: If all operators do not have the same `dtype`. ValueError: If `operators` is empty. """ + parameters = dict( + operators=operators, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + name=name + ) + # Validate operators. check_ops.assert_proper_iterable(operators) operators = list(operators) @@ -226,6 +235,7 @@ class LinearOperatorKronecker(linear_operator.LinearOperator): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) # TODO(b/143910018) Remove graph_parents in V3. self._set_graph_parents(graph_parents) diff --git a/tensorflow/python/ops/linalg/linear_operator_low_rank_update.py b/tensorflow/python/ops/linalg/linear_operator_low_rank_update.py index c141bb19f35..2f12c71b48a 100644 --- a/tensorflow/python/ops/linalg/linear_operator_low_rank_update.py +++ b/tensorflow/python/ops/linalg/linear_operator_low_rank_update.py @@ -182,6 +182,18 @@ class LinearOperatorLowRankUpdate(linear_operator.LinearOperator): Raises: ValueError: If `is_X` flags are set in an inconsistent way. """ + parameters = dict( + base_operator=base_operator, + u=u, + diag_update=diag_update, + v=v, + is_diag_update_positive=is_diag_update_positive, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + name=name + ) dtype = base_operator.dtype if diag_update is not None: @@ -253,6 +265,7 @@ class LinearOperatorLowRankUpdate(linear_operator.LinearOperator): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) self._set_graph_parents(graph_parents) diff --git a/tensorflow/python/ops/linalg/linear_operator_lower_triangular.py b/tensorflow/python/ops/linalg/linear_operator_lower_triangular.py index a4120102663..fbc1f531083 100644 --- a/tensorflow/python/ops/linalg/linear_operator_lower_triangular.py +++ b/tensorflow/python/ops/linalg/linear_operator_lower_triangular.py @@ -137,6 +137,14 @@ class LinearOperatorLowerTriangular(linear_operator.LinearOperator): Raises: ValueError: If `is_square` is `False`. """ + parameters = dict( + tril=tril, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + name=name + ) if is_square is False: raise ValueError( @@ -155,6 +163,7 @@ class LinearOperatorLowerTriangular(linear_operator.LinearOperator): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) self._set_graph_parents([self._tril]) diff --git a/tensorflow/python/ops/linalg/linear_operator_permutation.py b/tensorflow/python/ops/linalg/linear_operator_permutation.py index 9cc8e158a21..7f15941c473 100644 --- a/tensorflow/python/ops/linalg/linear_operator_permutation.py +++ b/tensorflow/python/ops/linalg/linear_operator_permutation.py @@ -140,6 +140,15 @@ class LinearOperatorPermutation(linear_operator.LinearOperator): ValueError: `is_self_adjoint` is not `True`, `is_positive_definite` is not `False` or `is_square` is not `True`. """ + parameters = dict( + perm=perm, + dtype=dtype, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + name=name + ) with ops.name_scope(name, values=[perm]): self._perm = linear_operator_util.convert_nonref_to_tensor( @@ -160,6 +169,7 @@ class LinearOperatorPermutation(linear_operator.LinearOperator): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) def _check_perm(self, perm): diff --git a/tensorflow/python/ops/linalg/linear_operator_toeplitz.py b/tensorflow/python/ops/linalg/linear_operator_toeplitz.py index 2d61a536e29..95546c25118 100644 --- a/tensorflow/python/ops/linalg/linear_operator_toeplitz.py +++ b/tensorflow/python/ops/linalg/linear_operator_toeplitz.py @@ -138,6 +138,15 @@ class LinearOperatorToeplitz(linear_operator.LinearOperator): is_square: Expect that this operator acts like square [batch] matrices. name: A name for this `LinearOperator`. """ + parameters = dict( + col=col, + row=row, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + name=name + ) with ops.name_scope(name, values=[row, col]): self._row = linear_operator_util.convert_nonref_to_tensor(row, name="row") @@ -155,7 +164,9 @@ class LinearOperatorToeplitz(linear_operator.LinearOperator): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) + self._set_graph_parents([self._row, self._col]) def _check_row_col(self, row, col): diff --git a/tensorflow/python/ops/linalg/linear_operator_tridiag.py b/tensorflow/python/ops/linalg/linear_operator_tridiag.py index 2ba310f75bf..b8c4027cc76 100644 --- a/tensorflow/python/ops/linalg/linear_operator_tridiag.py +++ b/tensorflow/python/ops/linalg/linear_operator_tridiag.py @@ -171,6 +171,15 @@ class LinearOperatorTridiag(linear_operator.LinearOperator): TypeError: If `diag.dtype` is not an allowed type. ValueError: If `diag.dtype` is real, and `is_self_adjoint` is not `True`. """ + parameters = dict( + diagonals=diagonals, + diagonals_format=diagonals_format, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + name=name + ) with ops.name_scope(name, values=[diagonals]): if diagonals_format not in _DIAGONAL_FORMATS: @@ -193,6 +202,7 @@ class LinearOperatorTridiag(linear_operator.LinearOperator): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) def _shape(self): diff --git a/tensorflow/python/ops/linalg/linear_operator_zeros.py b/tensorflow/python/ops/linalg/linear_operator_zeros.py index 7382ef51218..eded9bb713f 100644 --- a/tensorflow/python/ops/linalg/linear_operator_zeros.py +++ b/tensorflow/python/ops/linalg/linear_operator_zeros.py @@ -176,6 +176,19 @@ class LinearOperatorZeros(linear_operator.LinearOperator): ValueError: If any of the following is not `True`: `{is_self_adjoint, is_non_singular, is_positive_definite}`. """ + parameters = dict( + num_rows=num_rows, + num_columns=num_columns, + batch_shape=batch_shape, + dtype=dtype, + is_non_singular=is_non_singular, + is_self_adjoint=is_self_adjoint, + is_positive_definite=is_positive_definite, + is_square=is_square, + assert_proper_shapes=assert_proper_shapes, + name=name + ) + dtype = dtype or dtypes.float32 self._assert_proper_shapes = assert_proper_shapes @@ -194,6 +207,7 @@ class LinearOperatorZeros(linear_operator.LinearOperator): is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, + parameters=parameters, name=name) linear_operator_util.assert_not_ref_type(num_rows, "num_rows") diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-adjoint.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-adjoint.pbtxt index d26bde73d6e..cd2342fa17b 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-adjoint.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-adjoint.pbtxt @@ -54,6 +54,10 @@ tf_class { name: "operator" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-block-diag.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-block-diag.pbtxt index 4739f586002..37cab1cd949 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-block-diag.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-block-diag.pbtxt @@ -54,6 +54,10 @@ tf_class { name: "operators" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-block-lower-triangular.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-block-lower-triangular.pbtxt index f6573a08ab1..15548662969 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-block-lower-triangular.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-block-lower-triangular.pbtxt @@ -54,6 +54,10 @@ tf_class { name: "operators" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-circulant.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-circulant.pbtxt index 7c3a62bb067..96f3f456c22 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-circulant.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-circulant.pbtxt @@ -59,6 +59,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-circulant2-d.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-circulant2-d.pbtxt index ca1ca3678a2..82696611119 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-circulant2-d.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-circulant2-d.pbtxt @@ -59,6 +59,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-circulant3-d.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-circulant3-d.pbtxt index e91de61a7f5..fa9ff47a9ea 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-circulant3-d.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-circulant3-d.pbtxt @@ -59,6 +59,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-composition.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-composition.pbtxt index 14c5514be31..1f3a3e01534 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-composition.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-composition.pbtxt @@ -54,6 +54,10 @@ tf_class { name: "operators" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-diag.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-diag.pbtxt index 6198572ba4f..40aea957ecb 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-diag.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-diag.pbtxt @@ -54,6 +54,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-full-matrix.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-full-matrix.pbtxt index 9fe14ecc611..c23af284169 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-full-matrix.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-full-matrix.pbtxt @@ -50,6 +50,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-householder.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-householder.pbtxt index b71cda0a1be..ac861ce8131 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-householder.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-householder.pbtxt @@ -50,6 +50,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-identity.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-identity.pbtxt index e4051585a35..1c8a1071cca 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-identity.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-identity.pbtxt @@ -51,6 +51,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-inversion.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-inversion.pbtxt index ee9351e5bb4..6379a67eadb 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-inversion.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-inversion.pbtxt @@ -54,6 +54,10 @@ tf_class { name: "operator" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-kronecker.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-kronecker.pbtxt index 3c5b3a8c3db..fda61393e1a 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-kronecker.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-kronecker.pbtxt @@ -54,6 +54,10 @@ tf_class { name: "operators" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-low-rank-update.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-low-rank-update.pbtxt index bf32f07455e..c07a18eb61c 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-low-rank-update.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-low-rank-update.pbtxt @@ -66,6 +66,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-lower-triangular.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-lower-triangular.pbtxt index 2bf8383bc30..39e44edf3c2 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-lower-triangular.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-lower-triangular.pbtxt @@ -50,6 +50,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-permutation.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-permutation.pbtxt index 321b7004109..228bfd41be2 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-permutation.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-permutation.pbtxt @@ -50,6 +50,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "perm" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-scaled-identity.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-scaled-identity.pbtxt index a8a7a06fb51..358c0f88659 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-scaled-identity.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-scaled-identity.pbtxt @@ -55,6 +55,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-toeplitz.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-toeplitz.pbtxt index 15bae49eda0..7f863ce4170 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-toeplitz.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-toeplitz.pbtxt @@ -54,6 +54,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-tridiag.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-tridiag.pbtxt index 0609904bbb3..eadb8f066ec 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-tridiag.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-tridiag.pbtxt @@ -58,6 +58,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-zeros.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-zeros.pbtxt index 75777dc7745..f905de20b68 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-zeros.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator-zeros.pbtxt @@ -50,6 +50,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator.pbtxt index 2390fb26d9c..c9ee0301612 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.linalg.-linear-operator.pbtxt @@ -49,6 +49,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" @@ -75,7 +79,7 @@ tf_class { } member_method { name: "__init__" - argspec: "args=[\'self\', \'dtype\', \'graph_parents\', \'is_non_singular\', \'is_self_adjoint\', \'is_positive_definite\', \'is_square\', \'name\'], varargs=None, keywords=None, defaults=[\'None\', \'None\', \'None\', \'None\', \'None\', \'None\'], " + argspec: "args=[\'self\', \'dtype\', \'graph_parents\', \'is_non_singular\', \'is_self_adjoint\', \'is_positive_definite\', \'is_square\', \'name\', \'parameters\'], varargs=None, keywords=None, defaults=[\'None\', \'None\', \'None\', \'None\', \'None\', \'None\', \'None\'], " } member_method { name: "add_to_tensor" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-adjoint.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-adjoint.pbtxt index d26bde73d6e..cd2342fa17b 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-adjoint.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-adjoint.pbtxt @@ -54,6 +54,10 @@ tf_class { name: "operator" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-block-diag.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-block-diag.pbtxt index 4739f586002..37cab1cd949 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-block-diag.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-block-diag.pbtxt @@ -54,6 +54,10 @@ tf_class { name: "operators" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-block-lower-triangular.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-block-lower-triangular.pbtxt index f6573a08ab1..15548662969 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-block-lower-triangular.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-block-lower-triangular.pbtxt @@ -54,6 +54,10 @@ tf_class { name: "operators" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-circulant.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-circulant.pbtxt index 7c3a62bb067..96f3f456c22 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-circulant.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-circulant.pbtxt @@ -59,6 +59,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-circulant2-d.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-circulant2-d.pbtxt index ca1ca3678a2..82696611119 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-circulant2-d.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-circulant2-d.pbtxt @@ -59,6 +59,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-circulant3-d.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-circulant3-d.pbtxt index e91de61a7f5..fa9ff47a9ea 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-circulant3-d.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-circulant3-d.pbtxt @@ -59,6 +59,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-composition.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-composition.pbtxt index 14c5514be31..1f3a3e01534 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-composition.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-composition.pbtxt @@ -54,6 +54,10 @@ tf_class { name: "operators" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-diag.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-diag.pbtxt index 6198572ba4f..40aea957ecb 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-diag.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-diag.pbtxt @@ -54,6 +54,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-full-matrix.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-full-matrix.pbtxt index 9fe14ecc611..c23af284169 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-full-matrix.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-full-matrix.pbtxt @@ -50,6 +50,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-householder.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-householder.pbtxt index b71cda0a1be..ac861ce8131 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-householder.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-householder.pbtxt @@ -50,6 +50,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-identity.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-identity.pbtxt index e4051585a35..1c8a1071cca 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-identity.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-identity.pbtxt @@ -51,6 +51,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-inversion.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-inversion.pbtxt index ee9351e5bb4..6379a67eadb 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-inversion.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-inversion.pbtxt @@ -54,6 +54,10 @@ tf_class { name: "operator" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-kronecker.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-kronecker.pbtxt index 3c5b3a8c3db..fda61393e1a 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-kronecker.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-kronecker.pbtxt @@ -54,6 +54,10 @@ tf_class { name: "operators" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-low-rank-update.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-low-rank-update.pbtxt index bf32f07455e..c07a18eb61c 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-low-rank-update.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-low-rank-update.pbtxt @@ -66,6 +66,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-lower-triangular.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-lower-triangular.pbtxt index 2bf8383bc30..39e44edf3c2 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-lower-triangular.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-lower-triangular.pbtxt @@ -50,6 +50,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-permutation.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-permutation.pbtxt index 321b7004109..228bfd41be2 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-permutation.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-permutation.pbtxt @@ -50,6 +50,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "perm" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-scaled-identity.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-scaled-identity.pbtxt index a8a7a06fb51..358c0f88659 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-scaled-identity.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-scaled-identity.pbtxt @@ -55,6 +55,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-toeplitz.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-toeplitz.pbtxt index 15bae49eda0..7f863ce4170 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-toeplitz.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-toeplitz.pbtxt @@ -54,6 +54,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-tridiag.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-tridiag.pbtxt index 0609904bbb3..eadb8f066ec 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-tridiag.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-tridiag.pbtxt @@ -58,6 +58,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-zeros.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-zeros.pbtxt index 75777dc7745..f905de20b68 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-zeros.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator-zeros.pbtxt @@ -50,6 +50,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator.pbtxt index 2390fb26d9c..c9ee0301612 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.linalg.-linear-operator.pbtxt @@ -49,6 +49,10 @@ tf_class { name: "name_scope" mtype: "" } + member { + name: "parameters" + mtype: "" + } member { name: "range_dimension" mtype: "" @@ -75,7 +79,7 @@ tf_class { } member_method { name: "__init__" - argspec: "args=[\'self\', \'dtype\', \'graph_parents\', \'is_non_singular\', \'is_self_adjoint\', \'is_positive_definite\', \'is_square\', \'name\'], varargs=None, keywords=None, defaults=[\'None\', \'None\', \'None\', \'None\', \'None\', \'None\'], " + argspec: "args=[\'self\', \'dtype\', \'graph_parents\', \'is_non_singular\', \'is_self_adjoint\', \'is_positive_definite\', \'is_square\', \'name\', \'parameters\'], varargs=None, keywords=None, defaults=[\'None\', \'None\', \'None\', \'None\', \'None\', \'None\', \'None\'], " } member_method { name: "add_to_tensor"