code: def calc_features(wind_sig, dict_features, fs, **kwargs):
      """Extraction of time series features.
  
      Parameters
      ----------
      wind_sig: list
          Input from which features are computed, window
      dict_features : dict
          Dictionary with features
      fs : float or None
          Sampling frequency
      \**kwargs:
          * *features_path* (``string``) --
              Directory of script with personal features
  
           * *header_names* (``list or array``) --
              Names of each column window
  
      Returns
      -------
      DataFrame
          Extracted features
  
      """
  
      features_path = kwargs.get("features_path", None)
      names = kwargs.get("header_names", None)
      feat_val = calc_window_features(
          dict_features,
          wind_sig,
          fs,
          features_path=features_path,
          header_names=names,
      )
      feat_val.reset_index(drop=True)
  
      return feat_val
  
file_path: tsfel/tsfel/feature_extraction/calc_features.py
imports: import glob
  import importlib
  import multiprocessing
  import numbers
  import os
  import pathlib
  import sys
  import warnings
  from functools import partial
  from pathlib import Path
  import numpy
  import pandas
  from IPython import get_ipython
  from IPython.display import display
  from tsfel.utils.progress_bar import display_progress_bar, progress_bar_notebook
  from tsfel.utils.signal_processing import merge_time_series, signal_window_splitter
label_desc: Use image node_id 2 for calling a global function with example usage: calc_features(wind_sig, dict_features, fs) and returns: feat_val