code: def peak_signal_noise_ratio(
      preds: Tensor,
      target: Tensor,
      data_range: Optional[Union[float, Tuple[float, float]]] = None,
      base: float = 10.0,
      reduction: Literal[
          "elementwise_mean", "sum", "none", None
      ] = "elementwise_mean",
      dim: Optional[Union[int, Tuple[int, ...]]] = None,
  ) -> Tensor:
      """Compute the peak signal-to-noise ratio.
  
      Args:
          preds: estimated signal
          target: groun truth signal
          data_range:
              the range of the data. If None, it is determined from the data (max - min). If a tuple is provided then
              the range is calculated as the difference and input is clamped between the values.
              The ``data_range`` must be given when ``dim`` is not None.
          base: a base of a logarithm to use
          reduction: a method to reduce metric score over labels.
  
              - ``'elementwise_mean'``: takes the mean (default)
              - ``'sum'``: takes the sum
              - ``'none'`` or None``: no reduction will be applied
  
          dim:
              Dimensions to reduce PSNR scores over provided as either an integer or a list of integers. Default is
              None meaning scores will be reduced across all dimensions.
  
      Return:
          Tensor with PSNR score
  
      Raises:
          ValueError:
              If ``dim`` is not ``None`` and ``data_range`` is not provided.
  
      Example:
          >>> from torchmetrics.functional.image import peak_signal_noise_ratio
          >>> pred = torch.tensor([[0.0, 1.0], [2.0, 3.0]])
          >>> target = torch.tensor([[3.0, 2.0], [1.0, 0.0]])
          >>> peak_signal_noise_ratio(pred, target)
          tensor(2.5527)
  
      .. note::
          Half precision is only support on GPU for this metric
  
      """
      if dim is None and reduction != "elementwise_mean":
          rank_zero_warn(
              f"The `reduction={reduction}` will not have any effect when `dim` is None."
          )
  
      if data_range is None:
          if dim is not None:
              # Maybe we could use `torch.amax(target, dim=dim) - torch.amin(target, dim=dim)` in PyTorch 1.7 to calculate
              # `data_range` in the future.
              raise ValueError(
                  "The `data_range` must be given when `dim` is not None."
              )
  
          data_range = target.max() - target.min()
      elif isinstance(data_range, tuple):
          preds = torch.clamp(
              preds, min=data_range[0], max=data_range[1]
          )
          target = torch.clamp(
              target, min=data_range[0], max=data_range[1]
          )
          data_range = tensor(data_range[1] - data_range[0])
      else:
          data_range = tensor(float(data_range))
  
      sum_squared_error, num_obs = _psnr_update(preds, target, dim=dim)
      return _psnr_compute(
          sum_squared_error,
          num_obs,
          data_range,
          base=base,
          reduction=reduction,
      )
  
imports: from typing import Optional, Tuple, Union
  import torch
  from torch import Tensor, tensor
  from typing_extensions import Literal
  from torchmetrics.utilities import rank_zero_warn, reduce
label_desc: Use image node_id 3 for calling a global function with example usage: peak_signal_noise_ratio(preds, target, data_range, base, reduction, dim) and returns: _psnr_compute