class_docstr: Utilities for training and sampling diffusion models.
  
  Ported directly from here, and then adapted over time to further experimentation.
  https://github.com/hojonathanho/diffusion/blob/1e0dceb3b3495bbe19116a5e1b3596cd0706c543/diffusion_tf/diffusion_utils_2.py#L42
  
  :param betas: a 1-D numpy array of betas for each diffusion timestep,
                starting at T and going to 1.
  :param model_mean_type: a ModelMeanType determining what the model outputs.
  :param model_var_type: a ModelVarType determining how variance is output.
  :param loss_type: a LossType determining the loss function to use.
  :param rescale_timesteps: if True, pass floating point timesteps into the
                            model so that they are always scaled like in the
                            original paper (0 to 1000).
code: def _predict_xstart_from_xprev(self, x_t, t, xprev):
      assert x_t.shape == xprev.shape
      return (  # (xprev - coef2*x_t) / coef1
          _extract_into_tensor(
              1.0 / self.posterior_mean_coef1, t, x_t.shape
          )
          * xprev
          - _extract_into_tensor(
              self.posterior_mean_coef2 / self.posterior_mean_coef1,
              t,
              x_t.shape,
          )
          * x_t
      )
  
imports: import enum
  import math
  import numpy
  import torch
  from .nn import mean_flat
  from .losses import normal_kl, discretized_gaussian_log_likelihood
label_desc: Use image node_id 7 for calling the GaussianDiffusion obj's underlying member method code with example usage: obj._predict_xstart_from_xprev(x_t, t, xprev) and returns: unknown