class_docstr: Piecewise Aggregate Approximation.
  
  Parameters
  ----------
  window_size : int, float or None (default = 1)
      Length of the sliding window. If float, it represents
      a percentage of the size of each time series and must be
      between 0 and 1.
  
  output_size : int, float or None (default = None)
      Size of the returned time series. If float, it represents
      a percentage of the size of each time series and must be
      between 0. and 1. Ignored if ``window_size`` is not None.
      It can't be None if ``window_size`` is None. If you want to use
      ``output_size`` over ``window_size``, you must set
      ``window_size=None``.
  
  overlapping : bool (default = True)
      When ``window_size=None``, ``output_size`` is used to derive the window
      size; the window size is fixed if ``overlapping=True`` and may vary
      if ``overlapping=False``. Ignored if ``window_size`` is specified.
  
  References
  ----------
  .. [1] E. Keogh, K. Chakrabarti, M. Pazzani, and S. Mehrotra,
         "Dimensionality reduction for fast similarity search in large
         time series databases". Knowledge and information Systems,
         3(3), 263-286 (2001).
  
  Examples
  --------
  >>> from pyts.approximation import PiecewiseAggregateApproximation
  >>> X = [[0, 4, 2, 1, 7, 6, 3, 5],
  ...      [2, 5, 4, 5, 3, 4, 2, 3]]
  >>> transformer = PiecewiseAggregateApproximation(window_size=2)
  >>> transformer.transform(X)
  array([[2. , 1.5, 6.5, 4. ],
         [3.5, 4.5, 3.5, 2.5]])
class_docstr_tok: ["Piecewise","Aggregate","Approximation",".","Parameters","--","--","--","--","--","window_size",":","int",",","float","or","None","(","default","=","1",")","Length","of","the","sliding","window",".","If","float",",","it","represents","a","percentage","of","the","size","of","each","time","series","and","must","be","between","0","and","1.","output_size",":","int",",","float","or","None","(","default","=","None",")","Size","of","the","returned","time","series",".","If","float",",","it","represents","a","percentage","of","the","size","of","each","time","series","and","must","be","between","0.","and","1",".","Ignored","if","``","window_size","``","is","not","None",".","It","ca","n't","be","None","if","``","window_size","``","is","None",".","If","you","want","to","use","``","output_size","``","over","``","window_size","``",",","you","must","set","``","window_size=None","``",".","overlapping",":","bool","(","default","=","True",")","When","``","window_size=None","``",",","``","output_size","``","is","used","to","derive","the","window","size",";","the","window","size","is","fixed","if","``","overlapping=True","``","and","may","vary","if","``","overlapping=False","``",".","Ignored","if","``","window_size","``","is","specified",".","References","--","--","--","--","--","..","[","1","]","E.","Keogh",",","K.","Chakrabarti",",","M.","Pazzani",",","and","S.","Mehrotra",",","``","Dimensionality","reduction","for","fast","similarity","search","in","large","time","series","databases","''",".","Knowledge","and","information","Systems",",","3","(","3",")",",","263-286","(","2001",")",".","Examples","--","--","--","--",">",">",">","from","pyts.approximation","import","PiecewiseAggregateApproximation",">",">",">","X","=","[","[","0",",","4",",","2",",","1",",","7",",","6",",","3",",","5","]",",","...","[","2",",","5",",","4",",","5",",","3",",","4",",","2",",","3","]","]",">",">",">","transformer","=","PiecewiseAggregateApproximation","(","window_size=2",")",">",">",">","transformer.transform","(","X",")","array","(","[","[","2.",",","1.5",",","6.5",",","4",".","]",",","[","3.5",",","4.5",",","3.5",",","2.5","]","]",")"]
code: def _check_params(self, n_timestamps):
      if self.window_size is None and self.output_size is None:
          raise TypeError(
              "'window_size' and 'output_size' cannot be " "both None."
          )
      if self.window_size is not None:
          if not isinstance(
              self.window_size, (int, np.integer, float, np.floating)
          ):
              raise TypeError(
                  "If specified, 'window_size' must be an "
                  "integer or a float."
              )
          if isinstance(self.window_size, (int, np.integer)):
              if not 1 <= self.window_size <= n_timestamps:
                  raise ValueError(
                      "If 'window_size' is an integer, it must be greater "
                      "than or equal to 1 and lower than or equal to "
                      "n_timestamps (got {0}).".format(self.window_size)
                  )
              window_size = self.window_size
          else:
              if not 0 < self.window_size <= 1:
                  raise ValueError(
                      "If 'window_size' is a float, it must be greater "
                      "than 0 and lower than or equal to 1 "
                      "(got {0}).".format(self.window_size)
                  )
              window_size = ceil(self.window_size * n_timestamps)
          output_size = None
      else:
          if not isinstance(
              self.output_size, (int, np.integer, float, np.floating)
          ):
              raise TypeError(
                  "If specified, 'output_size' must be an "
                  "integer or a float."
              )
          if isinstance(self.output_size, (int, np.integer)):
              if not 1 <= self.output_size <= n_timestamps:
                  raise ValueError(
                      "If 'output_size' is an integer, it must be greater "
                      "than or equal to 1 and lower than or equal to "
                      "n_timestamps (got {0}).".format(self.output_size)
                  )
              output_size = self.output_size
          else:
              if not 0 < self.output_size <= 1.0:
                  raise ValueError(
                      "If 'output_size' is a float, it must be greater "
                      "than 0 and lower than or equal to 1 "
                      "(got {0}).".format(self.output_size)
                  )
              output_size = ceil(self.output_size * n_timestamps)
          window_size, remainder = divmod(n_timestamps, output_size)
          if remainder != 0:
              window_size += 1
      return window_size, output_size
  
file_path: pyts/pyts/approximation/paa.py
imports: import numpy
  from math import ceil
  from numba import njit, prange
  from sklearn.base import BaseEstimator
  from sklearn.utils.validation import check_array
  from ..base import UnivariateTransformerMixin
  from ..utils import segmentation
label_desc: Use image node_id 4 for calling the PiecewiseAggregateApproximation obj's underlying member method code with example usage: obj._check_params(n_timestamps) and returns: window_size,  output_size