class_docstr: Base class for normalizing flow layers.
  
  This is an abstract base class for implementing new normalizing flow
  layers that are not available in tfb. It should not be called directly.
  
  A normalizing flow transforms random variables into new random variables.
  Each learnable layer is a bijection, an invertible
  transformation between two probability distributions. A simple initial
  density is pushed through the normalizing flow to produce a richer,
  more multi-modal distribution. Normalizing flows have three main operations:
  
  1. Forward
      Transform a distribution. Useful for generating new samples.
  2. Inverse
      Reverse a transformation, useful for computing conditional probabilities.
  3. Log(|det(Jacobian)|) [LDJ]
      Compute the determinant of the Jacobian of the transformation,
      which is a scaling that conserves the probability "volume" to equal 1.
  
  For examples of customized normalizing flows applied to toy problems,
  see [1]_.
  
  References
  ----------
  .. [1] Saund, Brad. "Normalizing Flows." (2020). https://github.com/bsaund/normalizing_flows.
  
  Notes
  -----
  - A sequence of normalizing flows is a normalizing flow.
  - The Jacobian is the matrix of first-order derivatives of the transform.
class_docstr_tok: ["Base","class","for","normalizing","flow","layers",".","This","is","an","abstract","base","class","for","implementing","new","normalizing","flow","layers","that","are","not","available","in","tfb",".","It","should","not","be","called","directly",".","A","normalizing","flow","transforms","random","variables","into","new","random","variables",".","Each","learnable","layer","is","a","bijection",",","an","invertible","transformation","between","two","probability","distributions",".","A","simple","initial","density","is","pushed","through","the","normalizing","flow","to","produce","a","richer",",","more","multi-modal","distribution",".","Normalizing","flows","have","three","main","operations",":","1",".","Forward","Transform","a","distribution",".","Useful","for","generating","new","samples",".","2",".","Inverse","Reverse","a","transformation",",","useful","for","computing","conditional","probabilities",".","3",".","Log","(","|det","(","Jacobian",")","|",")","[","LDJ","]","Compute","the","determinant","of","the","Jacobian","of","the","transformation",",","which","is","a","scaling","that","conserves","the","probability","``","volume","''","to","equal","1",".","For","examples","of","customized","normalizing","flows","applied","to","toy","problems",",","see","[","1","]","_.","References","--","--","--","--","--","..","[","1","]","Saund",",","Brad",".","``","Normalizing","Flows",".","''","(","2020",")",".","https",":","\/\/github.com\/bsaund\/normalizing_flows",".","Notes","--","--","-","-","A","sequence","of","normalizing","flows","is","a","normalizing","flow",".","-","The","Jacobian","is","the","matrix","of","first-order","derivatives","of","the","transform","."]
docstr: Inverse transformation.
  
  x = g^{-1}(y)
  
  Parameters
  ----------
  y: tf.Tensor
      Input tensor.
  
  Returns
  -------
  inv_y: tf.Tensor
      Inverted tensor.
docstr_tok: ["Inverse","transformation",".","x","=","g^","{","-1","}","(","y",")","Parameters","--","--","--","--","--","y",":","tf.Tensor","Input","tensor",".","Returns","--","--","--","-","inv_y",":","tf.Tensor","Inverted","tensor","."]
code: def _inverse(self, y: tf.Tensor) -> tf.Tensor:
      """Inverse transformation.
  
      x = g^{-1}(y)
  
      Parameters
      ----------
      y: tf.Tensor
          Input tensor.
  
      Returns
      -------
      inv_y: tf.Tensor
          Inverted tensor.
  
      """
  
      raise NotImplementedError("Inverse transform must be defined.")
  
imports: import logging
  from typing import List, Optional, Sequence, Callable
  import tensorflow
  from deepchem.models.keras_model import KerasModel
  from deepchem.utils.typing import OneOrMany
  from deepchem.utils.data_utils import load_from_disk, save_to_disk
label_desc: Use image node_id 3 for calling the NormalizingFlowLayer obj's underlying member method code with example usage: obj._inverse(y) without return types