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).
class_docstr_tok: ["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",")","."]
docstr: Get the distribution q(x_t | x_0).
  
  :param x_start: the [N x C x ...] tensor of noiseless inputs.
  :param t: the number of diffusion steps (minus 1). Here, 0 means one step.
  :return: A tuple (mean, variance, log_variance), all of x_start's shape.
docstr_tok: ["Get","the","distribution","q","(","x_t","|","x_0",")",".",":","param","x_start",":","the","[","N","x","C","x","...","]","tensor","of","noiseless","inputs",".",":","param","t",":","the","number","of","diffusion","steps","(","minus","1",")",".","Here",",","0","means","one","step",".",":","return",":","A","tuple","(","mean",",","variance",",","log_variance",")",",","all","of","x_start","'s","shape","."]
code: def q_mean_variance(self, x_start, t):
      """
      Get the distribution q(x_t | x_0).
  
      :param x_start: the [N x C x ...] tensor of noiseless inputs.
      :param t: the number of diffusion steps (minus 1). Here, 0 means one step.
      :return: A tuple (mean, variance, log_variance), all of x_start's shape.
      """
      mean = (
          _extract_into_tensor(
              self.sqrt_alphas_cumprod, t, x_start.shape
          )
          * x_start
      )
      variance = _extract_into_tensor(
          1.0 - self.alphas_cumprod, t, x_start.shape
      )
      log_variance = _extract_into_tensor(
          self.log_one_minus_alphas_cumprod, t, x_start.shape
      )
      return mean, variance, log_variance
  
imports: import enum
  import math
  import numpy
  import torch
  import torch
  from tqdm import tqdm
  from TTS.tts.layers.tortoise.dpm_solver import DPM_Solver, NoiseScheduleVP, model_wrapper
label_desc: Use image node_id 2 for calling the GaussianDiffusion obj's underlying member method code with example usage: obj.q_mean_variance(x_start, t) and returns: mean,  variance,  log_variance