docs: def smooth_1D(arr, n=10, smooth_type="flat") -> np.ndarray:
      """Smooth 1D data using a window function.
      
      Edge effects will be present. 
  
      Parameters
      ----------
      arr : array_like
          Input array, 1D.
      n : int (optional)
          Window length.
      smooth_type : {'flat', 'hanning', 'hamming', 'bartlett', 'blackman'} (optional)
          Type of window function to convolve data with.
          'flat' window will produce a moving average smoothing.
          
      Returns
      -------
      array_like
          Smoothed 1D array.
      """
  
      # check array input
      if arr.ndim != 1:
          raise wt_exceptions.DimensionalityError(1, arr.ndim)
      if arr.size < n:
          message = "Input array size must be larger than window size."
          raise wt_exceptions.ValueError(message)
      if n < 3:
          return arr
      # construct window array
      if smooth_type == "flat":
          w = np.ones(n, dtype=arr.dtype)
      elif smooth_type == "hanning":
          w = np.hanning(n)
      elif smooth_type == "hamming":
          w = np.hamming(n)
      elif smooth_type == "bartlett":
          w = np.bartlett(n)
      elif smooth_type == "blackman":
          w = np.blackman(n)
      else:
          message = "Given smooth_type, {0}, not available.".format(str(smooth_type))
          raise wt_exceptions.ValueError(message)
      # convolve reflected array with window function
      out = np.convolve(w / w.sum(), arr, mode="same")
      return out