code: def ser_iuwt_recomposition(in1, scale_adjust, smoothed_array):
      
  
      wavelet_filter = (1./16)*np.array([1,4,6,4,1])      # Filter-bank for use in the a trous algorithm.
  
      # Determines scale with adjustment and creates a zero array to store the output, unless smoothed_array is given.
  
      max_scale = in1.shape[0] + scale_adjust
  
      if smoothed_array is None:
          recomposition = np.zeros([in1.shape[1], in1.shape[2]])
      else:
          recomposition = smoothed_array
  
      # The following loops call the a trous algorithm code to recompose the input. The first loop assumes that there are
      # non-zero wavelet coefficients at scales above scale_adjust, while the second loop completes the recomposition
      # on the scales less than scale_adjust.
  
      for i in range(max_scale-1, scale_adjust-1, -1):
          recomposition = ser_a_trous(recomposition, wavelet_filter, i) + in1[i-scale_adjust,:,:]
  
      if scale_adjust>0:
          for i in range(scale_adjust-1, -1, -1):
              recomposition = ser_a_trous(recomposition, wavelet_filter, i)
  
      return recomposition
docs: This function calls the a trous algorithm code to recompose the input into a single array. This is the
      implementation of the isotropic undecimated wavelet transform recomposition for a single CPU core.
  
      INPUTS:
      in1             (no default):   Array containing wavelet coefficients.
      scale_adjust    (no default):   Indicates the number of truncated array pages.
      smoothed_array  (default=None): For a complete inverse transform, this must be the smoothest approximation.
  
      OUTPUTS:
      recomposition                   Array containing the reconstructed image.