code: def cwt_coefficients(x, param):
      
  
      calculated_cwt = {}
      res = []
      indices = []
  
      for parameter_combination in param:
          widths = parameter_combination["widths"]
          w = parameter_combination["w"]
          coeff = parameter_combination["coeff"]
  
          if widths not in calculated_cwt:
              calculated_cwt[widths] = cwt(x, ricker, widths)
  
          calculated_cwt_for_widths = calculated_cwt[widths]
  
          indices += ["widths_{}__coeff_{}__w_{}".format(widths, coeff, w)]
  
          i = widths.index(w)
          if calculated_cwt_for_widths.shape[1] <= coeff:
              res += [np.NaN]
          else:
              res += [calculated_cwt_for_widths[i, coeff]]
  
      return zip(indices, res)
docs: Calculates a Continuous wavelet transform for the Ricker wavelet, also known as the "Mexican hat wavelet" which is
      defined by
  
      .. math::
          \\frac{2}{\\sqrt{3a} \\pi^{\\frac{1}{4}}} (1 - \\frac{x^2}{a^2}) exp(-\\frac{x^2}{2a^2})
  
      where :math:`a` is the width parameter of the wavelet function.
  
      This feature calculator takes three different parameter: widths, coeff and w. The feature calculater takes all the
      different widths arrays and then calculates the cwt one time for each different width array. Then the values for the
      different coefficient for coeff and width w are returned. (For each dic in param one feature is returned)
  
      :param x: the time series to calculate the feature of
      :type x: numpy.ndarray
      :param param: contains dictionaries {"widths":x, "coeff": y, "w": z} with x array of int and y,z int
      :type param: list
      :return: the different feature values
      :return type: pandas.Series