class_docstr: Base class for normalizing flow.
  
  The purpose of a normalizing flow is to map a simple distribution (that is
  easy to sample from and evaluate probability densities for) to a more
  complex distribution that is learned from data. The base distribution
  p(x) is transformed by the associated normalizing flow y=g(x) to model the
  distribution p(y).
  
  Normalizing flows combine the advantages of autoregressive models
  (which provide likelihood estimation but do not learn features) and
  variational autoencoders (which learn feature representations but
  do not provide marginal likelihoods).
class_docstr_tok: ["Base","class","for","normalizing","flow",".","The","purpose","of","a","normalizing","flow","is","to","map","a","simple","distribution","(","that","is","easy","to","sample","from","and","evaluate","probability","densities","for",")","to","a","more","complex","distribution","that","is","learned","from","data",".","The","base","distribution","p","(","x",")","is","transformed","by","the","associated","normalizing","flow","y=g","(","x",")","to","model","the","distribution","p","(","y",")",".","Normalizing","flows","combine","the","advantages","of","autoregressive","models","(","which","provide","likelihood","estimation","but","do","not","learn","features",")","and","variational","autoencoders","(","which","learn","feature","representations","but","do","not","provide","marginal","likelihoods",")","."]
code: def __call__(self, *inputs, training=True):
      return self.flow.bijector.forward(*inputs)
  
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 2 for calling the NormalizingFlow obj's underlying member method code with example usage: obj.__call__() and returns: self