code: def iuwt_decomposition(in1, scale_count, scale_adjust=0, mode='ser', core_count=2, store_smoothed=False,
                         store_on_gpu=False):
      
  
      if mode=='ser':
          return ser_iuwt_decomposition(in1, scale_count, scale_adjust, store_smoothed)
      elif mode=='mp':
          return mp_iuwt_decomposition(in1, scale_count, scale_adjust, store_smoothed, core_count)
      elif mode=='gpu':
          return gpu_iuwt_decomposition(in1, scale_count, scale_adjust, store_smoothed, store_on_gpu)
docs: This function serves as a handler for the different implementations of the IUWT decomposition. It allows the
      different methods to be used almost interchangeably.
  
      INPUTS:
      in1                 (no default):       Array on which the decomposition is to be performed.
      scale_count         (no default):       Maximum scale to be considered.
      scale_adjust        (default=0):        Adjustment to scale value if first scales are of no interest.
      mode                (default='ser'):    Implementation of the IUWT to be used - 'ser', 'mp' or 'gpu'.
      core_count          (default=1):        Additional option for multiprocessing - specifies core count.
      store_smoothed      (default=False):    Boolean specifier for whether the smoothed image is stored or not.
      store_on_gpu        (default=False):    Boolean specifier for whether the decomposition is stored on the gpu or not.
  
      OUTPUTS:
      Returns the decomposition with the additional smoothed coefficients if specified.