class_docstr: Computes average
  `Peak signal-to-noise ratio (PSNR) <https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio>`_.
  
  .. math::
      \text{PSNR}(I, J) = 10 * \log_{10}\left(\frac{ MAX_{I}^2 }{ \text{ MSE } }\right)
  
  where :math:`\text{MSE}` is `mean squared error <https://en.wikipedia.org/wiki/Mean_squared_error>`_.
  
  - ``update`` must receive output of the form ``(y_pred, y)``.
  - `y_pred` and `y` **must** have (batch_size, ...) shape.
  - `y_pred` and `y` **must** have same dtype and same shape.
  
  Args:
      data_range: The data range of the target image (distance between minimum
          and maximum possible values).
          For other data types, please set the data range, otherwise an exception will be raised.
      output_transform: A callable that is used to transform the Engine’s
          process_function’s output into the form expected by the metric.
      device: specifies which device updates are accumulated on.
          Setting the metric’s device to be the same as your update arguments ensures
          the update method is non-blocking. By default, CPU.
  
  Examples:
      To use with ``Engine`` and ``process_function``, simply attach the metric instance to the engine.
      The output of the engine's ``process_function`` needs to be in format of
      ``(y_pred, y)`` or ``{'y_pred': y_pred, 'y': y, ...}``. If not, ``output_tranform`` can be added
      to the metric to transform the output into the form expected by the metric.
  
      For more information on how metric works with :class:`~ignite.engine.engine.Engine`,
      visit :ref:`attach-engine`.
  
      .. include:: defaults.rst
          :start-after: :orphan:
  
      .. testcode::
  
          psnr = PSNR(data_range=1.0)
          psnr.attach(default_evaluator, 'psnr')
          preds = torch.rand([4, 3, 16, 16])
          target = preds * 0.75
          state = default_evaluator.run([[preds, target]])
          print(state.metrics['psnr'])
  
      .. testoutput::
  
          16.8671405...
  
      This metric by default accepts Grayscale or RGB images. But if you have YCbCr or YUV images, only
      Y channel is needed for computing PSNR. And, this can be done with ``output_transform``. For instance,
  
      .. testcode::
  
          def get_y_channel(output):
              y_pred, y = output
              # y_pred and y are (B, 3, H, W) and YCbCr or YUV images
              # let's select y channel
              return y_pred[:, 0, ...], y[:, 0, ...]
  
          psnr = PSNR(data_range=219, output_transform=get_y_channel)
          psnr.attach(default_evaluator, 'psnr')
          preds = 219 * torch.rand([4, 3, 16, 16])
          target = preds * 0.75
          state = default_evaluator.run([[preds, target]])
          print(state.metrics['psnr'])
  
      .. testoutput::
  
          16.7027966...
  
  .. versionadded:: 0.4.3
code: def compute(self) -> float:
      if self._num_examples == 0:
          raise NotComputableError(
              "PSNR must have at least one example before it can be computed."
          )
      return (self._sum_of_batchwise_psnr / self._num_examples).item()
  
file_path: ignite/ignite/metrics/psnr.py
imports: from typing import Callable, Sequence, Union
  import torch
  from ignite.exceptions import NotComputableError
  from ignite.metrics.metric import Metric, reinit__is_reduced, sync_all_reduce
label_desc: Use image node_id 5 for calling the PSNR obj's underlying member method code with example usage: obj.compute() and returns: unknown