code: def evaluate_function(f,X):
      '''
      Returns the evaluation of a function *f* and the time per evaluation
      '''
      num_data, dim_data = X.shape
      Y_eval = np.zeros((num_data, dim_data))
      Y_time = np.zeros((num_data, 1))
      for i in range(num_data):
          time_zero = time.time()
          Y_eval[i,:] = f(X[i,:])
          Y_time[i,:] = time.time() - time_zero
      return Y_eval, Y_timf evaluate_function(f,X):
      '''
      Returns the evaluation of a function *f* and the time per evaluation
      '''
      num_data, dim_data = X.shape
      Y_eval = np.zeros((num_data, dim_data))
      Y_time = np.zeros((num_data, 1))
      for i in range(num_data):
          time_zero = time.time()
          Y_eval[i,:] = f(X[i,:])
          Y_time[i,:] = time.time() - time_zero
      return Y_eval, Y_time
docs: Returns the evaluation of a function *f* and the time per evaluation