class_docstr: Utilities for training and sampling diffusion models.
  Original ported from this codebase:
  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.
class_docstr_tok: ["Utilities","for","training","and","sampling","diffusion","models",".","Original","ported","from","this","codebase",":","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","."]
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
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