class_docstr: Class to select appropriate window size to catch periodicity for time series analysis.
  There are two group of algorithms implemented:
  Whole-Series-Based (WSB):
      1. WindowSizeSelectorMethodsEnum.HAC - highest_autocorrelation
      2. WindowSizeSelectorMethodsEnum.DFF - dominant_fourier_frequency
  Subsequence-based (SB):
      1. WindowSizeSelectorMethodsEnum.MWF - multi_window_finder
      2. WindowSizeSelectorMethodsEnum.SSS - summary_statistics_subsequence
  Args:
      method: by ``default``, it is WindowSizeSelectorMethodsEnum.DFF.
      window_range: % of time series length, by ``default`` it is (5, 50).
  Attributes:
      length_ts(int): length of the time_series.
      window_max(int): maximum window size in real values.
      window_min(int): minimum window size in real values.
      dict_methods(dict): dictionary with all implemented methods.
  Example:
      To find window size for single time series::
          ts = np.random.rand(1000)
          ws_selector = WindowSizeSelector(method='hac')
          window_size = ws_selector.get_window_size(time_series=ts)
      To find window size for multiple time series::
          ts = np.random.rand(1000, 10)
          ws_selector = WindowSizeSelector(method='hac')
          window_size = ws_selector.apply(time_series=ts, average='median')
  Reference:
      (c) "Windows Size Selection in Unsupervised Time Series Analytics: A Review and Benchmark. Arik Ermshaus,
      Patrick Schafer, and Ulf Leser. 2022"
class_docstr_tok: ["Class","to","select","appropriate","window","size","to","catch","periodicity","for","time","series","analysis",".","There","are","two","group","of","algorithms","implemented",":","Whole-Series-Based","(","WSB",")",":","1",".","WindowSizeSelectorMethodsEnum.HAC","-","highest_autocorrelation","2",".","WindowSizeSelectorMethodsEnum.DFF","-","dominant_fourier_frequency","Subsequence-based","(","SB",")",":","1",".","WindowSizeSelectorMethodsEnum.MWF","-","multi_window_finder","2",".","WindowSizeSelectorMethodsEnum.SSS","-","summary_statistics_subsequence","Args",":","method",":","by","``","default","``",",","it","is","WindowSizeSelectorMethodsEnum.DFF",".","window_range",":","%","of","time","series","length",",","by","``","default","``","it","is","(","5",",","50",")",".","Attributes",":","length_ts","(","int",")",":","length","of","the","time_series",".","window_max","(","int",")",":","maximum","window","size","in","real","values",".","window_min","(","int",")",":","minimum","window","size","in","real","values",".","dict_methods","(","dict",")",":","dictionary","with","all","implemented","methods",".","Example",":","To","find","window","size","for","single","time","series",":",":","ts","=","np.random.rand","(","1000",")","ws_selector","=","WindowSizeSelector","(","method='hac","'",")","window_size","=","ws_selector.get_window_size","(","time_series=ts",")","To","find","window","size","for","multiple","time","series",":",":","ts","=","np.random.rand","(","1000",",","10",")","ws_selector","=","WindowSizeSelector","(","method='hac","'",")","window_size","=","ws_selector.apply","(","time_series=ts",",","average='median","'",")","Reference",":","(","c",")","``","Windows","Size","Selection","in","Unsupervised","Time","Series","Analytics",":","A","Review","and","Benchmark",".","Arik","Ermshaus",",","Patrick","Schafer",",","and","Ulf","Leser",".","2022","''"]
code: def __init__(
      self,
      method: WindowSizeSelectorMethodsEnum = WindowSizeSelectorMethodsEnum.DFF,
      window_range: tuple = (5, 50),
  ):
      if window_range[0] >= window_range[1]:
          raise ValueError(
              "Upper bound of window range should be bigger than lower bound"
          )
      if window_range[0] < 0:
          raise ValueError(
              "Lower bound of window range should be bigger or equal to 0"
          )
      if window_range[1] > 100:
          raise ValueError(
              "Upper bound of window range should be lower or equal to 100"
          )
  
      self.dict_methods = {
          WindowSizeSelectorMethodsEnum.HAC: self.autocorrelation,
          WindowSizeSelectorMethodsEnum.DFF: self.dominant_fourier_frequency,
          WindowSizeSelectorMethodsEnum.MWF: self.mwf,
          WindowSizeSelectorMethodsEnum.SSS: self.summary_statistics_subsequence,
      }
      self.wss_algorithm = method
      self.window_range = window_range
      self.window_max = None
      self.window_min = None
      self.length_ts = None
  
file_path: FEDOT/fedot/utilities/window_size_selector.py
imports: import math
  from enum import Enum, auto
  import numpy
  import pandas
  from scipy.signal import find_peaks
  from statsmodels.tsa.stattools import acf
label_desc: Use image node_id 1 to create a new WindowSizeSelector object  with example: obj = WindowSizeSelector(method, window_range)