class_docstr: `LinearOperator` that wraps a [batch] matrix.
  
  This operator wraps a [batch] matrix `A` (which is a `Tensor`) with shape
  `[B1,...,Bb, M, N]` for some `b >= 0`.  The first `b` indices index a
  batch member.  For every batch index `(i1,...,ib)`, `A[i1,...,ib, : :]` is
  an `M x N` matrix.
  
  ```python
  # Create a 2 x 2 linear operator.
  matrix = [[1., 2.], [3., 4.]]
  operator = LinearOperatorFullMatrix(matrix)
  
  operator.to_dense()
  ==> [[1., 2.]
       [3., 4.]]
  
  operator.shape
  ==> [2, 2]
  
  operator.log_abs_determinant()
  ==> scalar Tensor
  
  x = ... Shape [2, 4] Tensor
  operator.matmul(x)
  ==> Shape [2, 4] Tensor
  
  # Create a [2, 3] batch of 4 x 4 linear operators.
  matrix = tf.random.normal(shape=[2, 3, 4, 4])
  operator = LinearOperatorFullMatrix(matrix)
  ```
  
  #### Shape compatibility
  
  This operator acts on [batch] matrix with compatible shape.
  `x` is a batch matrix with compatible shape for `matmul` and `solve` if
  
  ```
  operator.shape = [B1,...,Bb] + [M, N],  with b >= 0
  x.shape =        [B1,...,Bb] + [N, R],  with R >= 0.
  ```
  
  #### Performance
  
  `LinearOperatorFullMatrix` has exactly the same performance as would be
  achieved by using standard `TensorFlow` matrix ops.  Intelligent choices are
  made based on the following initialization hints.
  
  * If `dtype` is real, and `is_self_adjoint` and `is_positive_definite`, a
    Cholesky factorization is used for the determinant and solve.
  
  In all cases, suppose `operator` is a `LinearOperatorFullMatrix` of shape
  `[M, N]`, and `x.shape = [N, R]`.  Then
  
  * `operator.matmul(x)` is `O(M * N * R)`.
  * If `M=N`, `operator.solve(x)` is `O(N^3 * R)`.
  * If `M=N`, `operator.determinant()` is `O(N^3)`.
  
  If instead `operator` and `x` have shape `[B1,...,Bb, M, N]` and
  `[B1,...,Bb, N, R]`, every operation increases in complexity by `B1*...*Bb`.
  
  #### Matrix property hints
  
  This `LinearOperator` is initialized with boolean flags of the form `is_X`,
  for `X = non_singular, self_adjoint, positive_definite, square`.
  These have the following meaning:
  
  * If `is_X == True`, callers should expect the operator to have the
    property `X`.  This is a promise that should be fulfilled, but is *not* a
    runtime assert.  For example, finite floating point precision may result
    in these promises being violated.
  * 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.
class_docstr_tok: ["`","LinearOperator","`","that","wraps","a","[","batch","]","matrix",".","This","operator","wraps","a","[","batch","]","matrix","`","A","`","(","which","is","a","`","Tensor","`",")","with","shape","`","[","B1",",","...",",","Bb",",","M",",","N","]","`","for","some","`","b",">","=","0","`",".","The","first","`","b","`","indices","index","a","batch","member",".","For","every","batch","index","`","(","i1",",","...",",","ib",")","`",",","`","A","[","i1",",","...",",","ib",",",":",":","]","`","is","an","`","M","x","N","`","matrix",".","``","`","python","#","Create","a","2","x","2","linear","operator",".","matrix","=","[","[","1.",",","2",".","]",",","[","3.",",","4",".","]","]","operator","=","LinearOperatorFullMatrix","(","matrix",")","operator.to_dense","(",")","==",">","[","[","1.",",","2",".","]","[","3.",",","4",".","]","]","operator.shape","==",">","[","2",",","2","]","operator.log_abs_determinant","(",")","==",">","scalar","Tensor","x","=","...","Shape","[","2",",","4","]","Tensor","operator.matmul","(","x",")","==",">","Shape","[","2",",","4","]","Tensor","#","Create","a","[","2",",","3","]","batch","of","4","x","4","linear","operators",".","matrix","=","tf.random.normal","(","shape=","[","2",",","3",",","4",",","4","]",")","operator","=","LinearOperatorFullMatrix","(","matrix",")","``","`","#","#","#","#","Shape","compatibility","This","operator","acts","on","[","batch","]","matrix","with","compatible","shape",".","`","x","`","is","a","batch","matrix","with","compatible","shape","for","`","matmul","`","and","`","solve","`","if","``","`","operator.shape","=","[","B1",",","...",",","Bb","]","+","[","M",",","N","]",",","with","b",">","=","0","x.shape","=","[","B1",",","...",",","Bb","]","+","[","N",",","R","]",",","with","R",">","=","0",".","``","`","#","#","#","#","Performance","`","LinearOperatorFullMatrix","`","has","exactly","the","same","performance","as","would","be","achieved","by","using","standard","`","TensorFlow","`","matrix","ops",".","Intelligent","choices","are","made","based","on","the","following","initialization","hints",".","*","If","`","dtype","`","is","real",",","and","`","is_self_adjoint","`","and","`","is_positive_definite","`",",","a","Cholesky","factorization","is","used","for","the","determinant","and","solve",".","In","all","cases",",","suppose","`","operator","`","is","a","`","LinearOperatorFullMatrix","`","of","shape","`","[","M",",","N","]","`",",","and","`","x.shape","=","[","N",",","R","]","`",".","Then","*","`","operator.matmul","(","x",")","`","is","`","O","(","M","*","N","*","R",")","`",".","*","If","`","M=N","`",",","`","operator.solve","(","x",")","`","is","`","O","(","N^3","*","R",")","`",".","*","If","`","M=N","`",",","`","operator.determinant","(",")","`","is","`","O","(","N^3",")","`",".","If","instead","`","operator","`","and","`","x","`","have","shape","`","[","B1",",","...",",","Bb",",","M",",","N","]","`","and","`","[","B1",",","...",",","Bb",",","N",",","R","]","`",",","every","operation","increases","in","complexity","by","`","B1","*","...","*","Bb","`",".","#","#","#","#","Matrix","property","hints","This","`","LinearOperator","`","is","initialized","with","boolean","flags","of","the","form","`","is_X","`",",","for","`","X","=","non_singular",",","self_adjoint",",","positive_definite",",","square","`",".","These","have","the","following","meaning",":","*","If","`","is_X","==","True","`",",","callers","should","expect","the","operator","to","have","the","property","`","X","`",".","This","is","a","promise","that","should","be","fulfilled",",","but","is","*","not","*","a","runtime","assert",".","For","example",",","finite","floating","point","precision","may","result","in","these","promises","being","violated",".","*","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","."]
code: def _shape_tensor(self):
      return array_ops.shape(self._matrix)
  
file_path: tensorflow-upstream/tensorflow/python/ops/linalg/linear_operator_full_matrix.py
imports: from tensorflow.python.framework import dtypes
  from tensorflow.python.framework import ops
  from tensorflow.python.framework import tensor_conversion
  from tensorflow.python.ops import array_ops
  from tensorflow.python.ops import math_ops
  from tensorflow.python.ops.linalg import linear_operator
  from tensorflow.python.ops.linalg import linear_operator_util
  from tensorflow.python.util.tf_export import tf_export
label_desc: Use image node_id 5 for calling the LinearOperatorFullMatrix obj's underlying member method code with example usage: obj._shape_tensor() and returns: array_ops