docstr: Multistep solver DPM-Solver-3 from time `t_prev_list[-1]` to time `t`.
  
  Args:
      x: A pytorch tensor. The initial value at time `s`.
      model_prev_list: A list of pytorch tensor. The previous computed model values.
      t_prev_list: A list of pytorch tensor. The previous times, each time has the shape (1,)
      t: A pytorch tensor. The ending time, with the shape (1,).
      solver_type: either 'dpmsolver' or 'taylor'. The type for the high-order solvers.
          The type slightly impacts the performance. We recommend to use 'dpmsolver' type.
  Returns:
      x_t: A pytorch tensor. The approximated solution at time `t`.
docstr_tok: ["Multistep","solver","DPM-Solver-3","from","time","`","t_prev_list","[","-1","]","`","to","time","`","t","`",".","Args",":","x",":","A","pytorch","tensor",".","The","initial","value","at","time","`","s","`",".","model_prev_list",":","A","list","of","pytorch","tensor",".","The","previous","computed","model","values",".","t_prev_list",":","A","list","of","pytorch","tensor",".","The","previous","times",",","each","time","has","the","shape","(","1",",",")","t",":","A","pytorch","tensor",".","The","ending","time",",","with","the","shape","(","1",",",")",".","solver_type",":","either","'dpmsolver","'","or","'taylor","'",".","The","type","for","the","high-order","solvers",".","The","type","slightly","impacts","the","performance",".","We","recommend","to","use","'dpmsolver","'","type",".","Returns",":","x_t",":","A","pytorch","tensor",".","The","approximated","solution","at","time","`","t","`","."]
code: def multistep_dpm_solver_third_update(
      self, x, model_prev_list, t_prev_list, t, solver_type="dpmsolver"
  ):
      """
      Multistep solver DPM-Solver-3 from time `t_prev_list[-1]` to time `t`.
  
      Args:
          x: A pytorch tensor. The initial value at time `s`.
          model_prev_list: A list of pytorch tensor. The previous computed model values.
          t_prev_list: A list of pytorch tensor. The previous times, each time has the shape (1,)
          t: A pytorch tensor. The ending time, with the shape (1,).
          solver_type: either 'dpmsolver' or 'taylor'. The type for the high-order solvers.
              The type slightly impacts the performance. We recommend to use 'dpmsolver' type.
      Returns:
          x_t: A pytorch tensor. The approximated solution at time `t`.
      """
      ns = self.noise_schedule
      model_prev_2, model_prev_1, model_prev_0 = model_prev_list
      t_prev_2, t_prev_1, t_prev_0 = t_prev_list
      lambda_prev_2, lambda_prev_1, lambda_prev_0, lambda_t = (
          ns.marginal_lambda(t_prev_2),
          ns.marginal_lambda(t_prev_1),
          ns.marginal_lambda(t_prev_0),
          ns.marginal_lambda(t),
      )
      log_alpha_prev_0, log_alpha_t = ns.marginal_log_mean_coeff(
          t_prev_0
      ), ns.marginal_log_mean_coeff(t)
      sigma_prev_0, sigma_t = ns.marginal_std(
          t_prev_0
      ), ns.marginal_std(t)
      alpha_t = torch.exp(log_alpha_t)
  
      h_1 = lambda_prev_1 - lambda_prev_2
      h_0 = lambda_prev_0 - lambda_prev_1
      h = lambda_t - lambda_prev_0
      r0, r1 = h_0 / h, h_1 / h
      D1_0 = (1.0 / r0) * (model_prev_0 - model_prev_1)
      D1_1 = (1.0 / r1) * (model_prev_1 - model_prev_2)
      D1 = D1_0 + (r0 / (r0 + r1)) * (D1_0 - D1_1)
      D2 = (1.0 / (r0 + r1)) * (D1_0 - D1_1)
      if self.algorithm_type == "dpmsolver++":
          phi_1 = torch.expm1(-h)
          phi_2 = phi_1 / h + 1.0
          phi_3 = phi_2 / h - 0.5
          x_t = (
              (sigma_t / sigma_prev_0) * x
              - (alpha_t * phi_1) * model_prev_0
              + (alpha_t * phi_2) * D1
              - (alpha_t * phi_3) * D2
          )
      else:
          phi_1 = torch.expm1(h)
          phi_2 = phi_1 / h - 1.0
          phi_3 = phi_2 / h - 0.5
          x_t = (
              (torch.exp(log_alpha_t - log_alpha_prev_0)) * x
              - (sigma_t * phi_1) * model_prev_0
              - (sigma_t * phi_2) * D1
              - (sigma_t * phi_3) * D2
          )
      return x_t
  
imports: import math
  import torch
label_desc: Use image node_id 13 for calling the DPM_Solver obj's underlying member method code with example usage: obj.multistep_dpm_solver_third_update(x, model_prev_list, t_prev_list, t, solver_type) and returns: x_t