code: def _apply_probability_distribution(
      waveform: Tensor, density_function: str = "TPDF"
  ) -> Tensor:
      r"""Apply a probability distribution function on a waveform.
  
      Triangular probability density function (TPDF) dither noise has a
      triangular distribution; values in the center of the range have a higher
      probability of occurring.
  
      Rectangular probability density function (RPDF) dither noise has a
      uniform distribution; any value in the specified range has the same
      probability of occurring.
  
      Gaussian probability density function (GPDF) has a normal distribution.
      The relationship of probabilities of results follows a bell-shaped,
      or Gaussian curve, typical of dither generated by analog sources.
      Args:
          waveform (Tensor): Tensor of audio of dimension (..., time)
          density_function (str, optional): The density function of a
             continuous random variable (Default: ``"TPDF"``)
             Options: Triangular Probability Density Function - `TPDF`
                      Rectangular Probability Density Function - `RPDF`
                      Gaussian Probability Density Function - `GPDF`
      Returns:
          Tensor: waveform dithered with TPDF
      """
  
      # pack batch
      shape = waveform.size()
      waveform = waveform.reshape(-1, shape[-1])
  
      channel_size = waveform.size()[0] - 1
      time_size = waveform.size()[-1] - 1
  
      random_channel = (
          int(
              torch.randint(
                  channel_size,
                  [
                      1,
                  ],
              ).item()
          )
          if channel_size > 0
          else 0
      )
      random_time = (
          int(
              torch.randint(
                  time_size,
                  [
                      1,
                  ],
              ).item()
          )
          if time_size > 0
          else 0
      )
  
      number_of_bits = 16
      up_scaling = 2 ** (number_of_bits - 1) - 2
      signal_scaled = waveform * up_scaling
      down_scaling = 2 ** (number_of_bits - 1)
  
      signal_scaled_dis = waveform
      if density_function == "RPDF":
          RPDF = waveform[random_channel][random_time] - 0.5
  
          signal_scaled_dis = signal_scaled + RPDF
      elif density_function == "GPDF":
          # TODO Replace by distribution code once
          # https://github.com/pytorch/pytorch/issues/29843 is resolved
          # gaussian = torch.distributions.normal.Normal(torch.mean(waveform, -1), 1).sample()
  
          num_rand_variables = 6
  
          gaussian = waveform[random_channel][random_time]
          for ws in num_rand_variables * [time_size]:
              rand_chan = int(
                  torch.randint(
                      channel_size,
                      [
                          1,
                      ],
                  ).item()
              )
              gaussian += waveform[rand_chan][
                  int(
                      torch.randint(
                          ws,
                          [
                              1,
                          ],
                      ).item()
                  )
              ]
  
          signal_scaled_dis = signal_scaled + gaussian
      else:
          # dtype needed for https://github.com/pytorch/pytorch/issues/32358
          TPDF = torch.bartlett_window(
              time_size + 1,
              dtype=signal_scaled.dtype,
              device=signal_scaled.device,
          )
          TPDF = TPDF.repeat((channel_size + 1), 1)
          signal_scaled_dis = signal_scaled + TPDF
  
      quantised_signal_scaled = torch.round(signal_scaled_dis)
      quantised_signal = quantised_signal_scaled / down_scaling
  
      # unpack batch
      return quantised_signal.reshape(
          shape[:-1] + quantised_signal.shape[-1:]
      )
  
imports: import math
  import warnings
  from typing import Optional
  import torch
  from torch import Tensor
  from torchaudio._extension import _IS_TORCHAUDIO_EXT_AVAILABLE
label_desc: Use image node_id 13 for calling a global function with example usage: _apply_probability_distribution(waveform, density_function) and returns: quantised_signal