code: def augment_gaussian_noise(
      data_sample: np.ndarray,
      noise_variance: Tuple[float, float] = (0, 0.1),
      p_per_channel: float = 1,
      per_channel: bool = False,
  ) -> np.ndarray:
      if not per_channel:
          variance = (
              noise_variance[0]
              if noise_variance[0] == noise_variance[1]
              else random.uniform(noise_variance[0], noise_variance[1])
          )
      else:
          variance = None
      for c in range(data_sample.shape[0]):
          if np.random.uniform() < p_per_channel:
              variance_here = (
                  variance
                  if variance is not None
                  else noise_variance[0]
                  if noise_variance[0] == noise_variance[1]
                  else random.uniform(
                      noise_variance[0], noise_variance[1]
                  )
              )
              data_sample[c] = data_sample[c] + np.random.normal(
                  0.0, variance_here, size=data_sample[c].shape
              )
      return data_sample
  
imports: from typing import List, Tuple, Union, Callable
  import collections
  import numbers
  import random
  import numpy
  import scipy
  import scipy.ndimage
  import SimpleITK
  from scipy.ndimage.filters import gaussian_filter, gaussian_gradient_magnitude
  from skimage.transform import resize
label_desc: Use image node_id 10 for calling a global function with example usage: augment_gaussian_noise(data_sample, noise_variance, p_per_channel, per_channel) and returns: data_sample