class_docstr: Maps the Cholesky factor of `M` to the Cholesky factor of `M^{-1}`.
  
  The `forward` and `inverse` calculations are conceptually identical to:
  
  ```python
  def forward(x):
    return tf.linalg.cholesky(tf.linalg.inv(tf.matmul(x, x, adjoint_b=True)))
  
  inverse = forward
  ```
  
  or, similarly,
  
  ```python
  tfb = tfp.bijectors
  CholeskyToInvCholesky = tfb.Chain([
      tfb.Invert(tfb.CholeskyOuterProduct()),
      tfb.MatrixInverse(),
      tfb.CholeskyOuterProduct(),
  ])
  ```
  
  However, the actual calculations exploit the triangular structure of the
  matrices.
class_docstr_tok: ["Maps","the","Cholesky","factor","of","`","M","`","to","the","Cholesky","factor","of","`","M^","{","-1","}","`",".","The","`","forward","`","and","`","inverse","`","calculations","are","conceptually","identical","to",":","``","`","python","def","forward","(","x",")",":","return","tf.linalg.cholesky","(","tf.linalg.inv","(","tf.matmul","(","x",",","x",",","adjoint_b=True",")",")",")","inverse","=","forward","``","`","or",",","similarly",",","``","`","python","tfb","=","tfp.bijectors","CholeskyToInvCholesky","=","tfb.Chain","(","[","tfb.Invert","(","tfb.CholeskyOuterProduct","(",")",")",",","tfb.MatrixInverse","(",")",",","tfb.CholeskyOuterProduct","(",")",",","]",")","``","`","However",",","the","actual","calculations","exploit","the","triangular","structure","of","the","matrices","."]
code: def __init__(
      self, validate_args=False, name="cholesky_to_inv_cholesky"
  ):
      parameters = dict(locals())
      with tf.name_scope(name) as name:
          self._cholesky = CholeskyOuterProduct()
          super(CholeskyToInvCholesky, self).__init__(
              forward_min_event_ndims=2,
              validate_args=validate_args,
              parameters=parameters,
              name=name,
          )
  
file_path: probability/tensorflow_probability/python/bijectors/cholesky_to_inv_cholesky.py
imports: import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import bijector
  from tensorflow_probability.python.bijectors.cholesky_outer_product import CholeskyOuterProduct
  from tensorflow_probability.python.internal import assert_util
  from tensorflow_probability.python.internal import dtype_util
  from tensorflow_probability.python.internal import prefer_static
label_desc: Use image node_id 1 to create a new CholeskyToInvCholesky object from inherited base classes: bijector with example: obj = CholeskyToInvCholesky(validate_args, name)