class_docstr: Pipeline for unconditional image generation.
  
  This model inherits from [`DiffusionPipeline`]. Check the superclass documentation for the generic methods
  implemented for all pipelines (downloading, saving, running on a particular device, etc.).
  
  Parameters:
      unet ([`UNet2DModel`]):
          A `UNet2DModel` to denoise the encoded image latents.
      scheduler ([`PNDMScheduler`]):
          A `PNDMScheduler` to be used in combination with `unet` to denoise the encoded image.
docstr: The call function to the pipeline for generation.
  
  Args:
      batch_size (`int`, `optional`, defaults to 1):
          The number of images to generate.
      num_inference_steps (`int`, `optional`, defaults to 50):
          The number of denoising steps. More denoising steps usually lead to a higher quality image at the
          expense of slower inference.
      generator (`torch.Generator`, `optional`):
          A [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) to make
          generation deterministic.
      output_type (`str`, `optional`, defaults to `"pil"`):
          The output format of the generated image. Choose between `PIL.Image` or `np.array`.
      return_dict (`bool`, *optional*, defaults to `True`):
          Whether or not to return a [`ImagePipelineOutput`] instead of a plain tuple.
  
  Example:
  
  ```py
  >>> from diffusers import PNDMPipeline
  
  >>> # load model and scheduler
  >>> pndm = PNDMPipeline.from_pretrained("google/ddpm-cifar10-32")
  
  >>> # run pipeline in inference (sample random noise and denoise)
  >>> image = pndm().images[0]
  
  >>> # save image
  >>> image.save("pndm_generated_image.png")
  ```
  
  Returns:
      [`~pipelines.ImagePipelineOutput`] or `tuple`:
          If `return_dict` is `True`, [`~pipelines.ImagePipelineOutput`] is returned, otherwise a `tuple` is
          returned where the first element is a list with the generated images.
docstr_tok: ["The","call","function","to","the","pipeline","for","generation",".","Args",":","batch_size","(","`","int","`",",","`","optional","`",",","defaults","to","1",")",":","The","number","of","images","to","generate",".","num_inference_steps","(","`","int","`",",","`","optional","`",",","defaults","to","50",")",":","The","number","of","denoising","steps",".","More","denoising","steps","usually","lead","to","a","higher","quality","image","at","the","expense","of","slower","inference",".","generator","(","`","torch.Generator","`",",","`","optional","`",")",":","A","[","`","torch.Generator","`","]","(","https",":","\/\/pytorch.org\/docs\/stable\/generated\/torch.Generator.html",")","to","make","generation","deterministic",".","output_type","(","`","str","`",",","`","optional","`",",","defaults","to","`","``","pil","''","`",")",":","The","output","format","of","the","generated","image",".","Choose","between","`","PIL.Image","`","or","`","np.array","`",".","return_dict","(","`","bool","`",",","*","optional","*",",","defaults","to","`","True","`",")",":","Whether","or","not","to","return","a","[","`","ImagePipelineOutput","`","]","instead","of","a","plain","tuple",".","Example",":","``","`","py",">",">",">","from","diffusers","import","PNDMPipeline",">",">",">","#","load","model","and","scheduler",">",">",">","pndm","=","PNDMPipeline.from_pretrained","(","``","google\/ddpm-cifar10-32","''",")",">",">",">","#","run","pipeline","in","inference","(","sample","random","noise","and","denoise",")",">",">",">","image","=","pndm","(",")",".images","[","0","]",">",">",">","#","save","image",">",">",">","image.save","(","``","pndm_generated_image.png","''",")","``","`","Returns",":","[","`","~pipelines.ImagePipelineOutput","`","]","or","`","tuple","`",":","If","`","return_dict","`","is","`","True","`",",","[","`","~pipelines.ImagePipelineOutput","`","]","is","returned",",","otherwise","a","`","tuple","`","is","returned","where","the","first","element","is","a","list","with","the","generated","images","."]
code: def __call__(
      self,
      batch_size: int = 1,
      num_inference_steps: int = 50,
      generator: Optional[
          Union[torch.Generator, List[torch.Generator]]
      ] = None,
      output_type: Optional[str] = "pil",
      return_dict: bool = True,
      **kwargs,
  ) -> Union[ImagePipelineOutput, Tuple]:
      r"""
      The call function to the pipeline for generation.
  
      Args:
          batch_size (`int`, `optional`, defaults to 1):
              The number of images to generate.
          num_inference_steps (`int`, `optional`, defaults to 50):
              The number of denoising steps. More denoising steps usually lead to a higher quality image at the
              expense of slower inference.
          generator (`torch.Generator`, `optional`):
              A [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) to make
              generation deterministic.
          output_type (`str`, `optional`, defaults to `"pil"`):
              The output format of the generated image. Choose between `PIL.Image` or `np.array`.
          return_dict (`bool`, *optional*, defaults to `True`):
              Whether or not to return a [`ImagePipelineOutput`] instead of a plain tuple.
  
      Example:
  
      ```py
      >>> from diffusers import PNDMPipeline
  
      >>> # load model and scheduler
      >>> pndm = PNDMPipeline.from_pretrained("google/ddpm-cifar10-32")
  
      >>> # run pipeline in inference (sample random noise and denoise)
      >>> image = pndm().images[0]
  
      >>> # save image
      >>> image.save("pndm_generated_image.png")
      ```
  
      Returns:
          [`~pipelines.ImagePipelineOutput`] or `tuple`:
              If `return_dict` is `True`, [`~pipelines.ImagePipelineOutput`] is returned, otherwise a `tuple` is
              returned where the first element is a list with the generated images.
      """
      # For more information on the sampling method you can take a look at Algorithm 2 of
      # the official paper: https://arxiv.org/pdf/2202.09778.pdf
  
      # Sample gaussian noise to begin loop
      image = randn_tensor(
          (
              batch_size,
              self.unet.config.in_channels,
              self.unet.config.sample_size,
              self.unet.config.sample_size,
          ),
          generator=generator,
          device=self.device,
      )
  
      self.scheduler.set_timesteps(num_inference_steps)
      for t in self.progress_bar(self.scheduler.timesteps):
          model_output = self.unet(image, t).sample
  
          image = self.scheduler.step(
              model_output, t, image
          ).prev_sample
  
      image = (image / 2 + 0.5).clamp(0, 1)
      image = image.cpu().permute(0, 2, 3, 1).numpy()
      if output_type == "pil":
          image = self.numpy_to_pil(image)
  
      if not return_dict:
          return (image,)
  
      return ImagePipelineOutput(images=image)
  
file_path: diffusers/src/diffusers/pipelines/deprecated/pndm/pipeline_pndm.py
imports: from typing import List, Optional, Tuple, Union
  import torch
  from ....models import UNet2DModel
  from ....schedulers import PNDMScheduler
  from ....utils.torch_utils import randn_tensor
  from ...pipeline_utils import DiffusionPipeline, ImagePipelineOutput
label_desc: Use image node_id 2 for calling the PNDMPipeline obj's underlying member method code with example usage: obj.__call__(batch_size, num_inference_steps, generator, output_type, return_dict) and returns: ImagePipelineOutput, image