code: def make_fourier_series(n, period, order=3, shift=0):
      """Given time series length, cyclical period and order, return a set of fourier series.
  
      Parameters
      ----------
      n : int
          Length of time series
      period : int
          Length of a cyclical period. E.g., with daily data, `period = 7` means weekly seasonality.
      order : int
          Number of components for each sin() or cos() series.
      shift : int
          shift of time step/index to generate the series
      Returns
      -------
      2D array-like
          2D array where each column represents the series with a specific order fourier constructed by sin() or cos().
      Notes
      -----
          1. See https://otexts.com/fpp2/complexseasonality.html
          2. Original idea from https://github.com/facebook/prophet under
      """
      t = np.arange(1, n + 1) + shift
      out = list()
      for i in range(1, order + 1):
          x = 2.0 * i * np.pi * t / period
          out.append(np.cos(x))
          out.append(np.sin(x))
      out = np.column_stack(out)
      return out
  
file_path: orbit/orbit/utils/features.py
imports: import numpy
  import pandas
  from orbit.exceptions import IllegalArgument
label_desc: Use image node_id 1 for calling a global function with example usage: make_fourier_series(n, period, order, shift) and returns: out