class_docstr: DPM-Solver. See https://arxiv.org/abs/2206.00927.
class_docstr_tok: ["DPM-Solver",".","See","https",":","\/\/arxiv.org\/abs\/2206.00927","."]
code: def dpm_solver_fast(
      self,
      x,
      t_start,
      t_end,
      nfe,
      eta=0.0,
      s_noise=1.0,
      noise_sampler=None,
  ):
      noise_sampler = (
          default_noise_sampler(x)
          if noise_sampler is None
          else noise_sampler
      )
      if not t_end > t_start and eta:
          raise ValueError("eta must be 0 for reverse sampling")
  
      m = math.floor(nfe / 3) + 1
      ts = torch.linspace(t_start, t_end, m + 1, device=x.device)
  
      if nfe % 3 == 0:
          orders = [3] * (m - 2) + [2, 1]
      else:
          orders = [3] * (m - 1) + [nfe % 3]
  
      for i in range(len(orders)):
          eps_cache = {}
          t, t_next = ts[i], ts[i + 1]
          if eta:
              sd, su = get_ancestral_step(
                  self.sigma(t), self.sigma(t_next), eta
              )
              t_next_ = torch.minimum(t_end, self.t(sd))
              su = (
                  self.sigma(t_next) ** 2 - self.sigma(t_next_) ** 2
              ) ** 0.5
          else:
              t_next_, su = t_next, 0.0
  
          eps, eps_cache = self.eps(eps_cache, "eps", x, t)
          denoised = x - self.sigma(t) * eps
          if self.info_callback is not None:
              self.info_callback(
                  {
                      "x": x,
                      "i": i,
                      "t": ts[i],
                      "t_up": t,
                      "denoised": denoised,
                  }
              )
  
          if orders[i] == 1:
              x, eps_cache = self.dpm_solver_1_step(
                  x, t, t_next_, eps_cache=eps_cache
              )
          elif orders[i] == 2:
              x, eps_cache = self.dpm_solver_2_step(
                  x, t, t_next_, eps_cache=eps_cache
              )
          else:
              x, eps_cache = self.dpm_solver_3_step(
                  x, t, t_next_, eps_cache=eps_cache
              )
  
          x = x + su * s_noise * noise_sampler(
              self.sigma(t), self.sigma(t_next)
          )
  
      return x
  
imports: import math
  import torch
  import torchsde
  from scipy import integrate
  from torch import nn
  from torchdiffeq import odeint
  from tqdm.auto import tqdm, trange
label_desc: Use image node_id 8 for calling the DPMSolver obj's underlying member method code with example usage: obj.dpm_solver_fast(x, t_start, t_end, nfe, eta, s_noise, noise_sampler) and returns: x