class_docstr: Implementation of the AbstractAggregator interface for data aggregation.
  
  DataAggregator differs from DataPointSelector in that it doesn't select data points,
  but rather aggregates the data (e.g., mean).
  As such, the `_aggregate` method is responsible for aggregating the data, and thus
  returns a tuple of the aggregated x and y values.
  
  Concrete implementations of this class must implement the `_aggregate` method, and
  have full responsibility on how they deal with other high-frequency properties, such
  as `hovertext`, `marker_size`, 'marker_color`, etc ...
docstr: Aggregate the data.
  
  Parameters
  ----------
  x, y: np.ndarray
      The x and y data of the to-be-aggregated series.
      The x array is optional (i.e., if only 1 array is passed, it is assumed to
      be the y array).
      The array(s) must be 1-dimensional, and have the same length (if x is
      passed).
      These cannot be passed as keyword arguments, as they are positional-only.
  n_out: int
      The number of samples which the downsampled series should contain.
      This should be passed as a keyword argument.
  
  Returns
  -------
  Tuple[np.ndarray, np.ndarray]
      The aggregated x and y data, respectively.
docstr_tok: ["Aggregate","the","data",".","Parameters","--","--","--","--","--","x",",","y",":","np.ndarray","The","x","and","y","data","of","the","to-be-aggregated","series",".","The","x","array","is","optional","(","i.e.",",","if","only","1","array","is","passed",",","it","is","assumed","to","be","the","y","array",")",".","The","array","(","s",")","must","be","1-dimensional",",","and","have","the","same","length","(","if","x","is","passed",")",".","These","can","not","be","passed","as","keyword","arguments",",","as","they","are","positional-only",".","n_out",":","int","The","number","of","samples","which","the","downsampled","series","should","contain",".","This","should","be","passed","as","a","keyword","argument",".","Returns","--","--","--","-","Tuple","[","np.ndarray",",","np.ndarray","]","The","aggregated","x","and","y","data",",","respectively","."]
code: def aggregate(
      self,
      *args,
      n_out: int,
  ) -> Tuple[np.ndarray, np.ndarray]:
      """Aggregate the data.
  
      Parameters
      ----------
      x, y: np.ndarray
          The x and y data of the to-be-aggregated series.
          The x array is optional (i.e., if only 1 array is passed, it is assumed to
          be the y array).
          The array(s) must be 1-dimensional, and have the same length (if x is
          passed).
          These cannot be passed as keyword arguments, as they are positional-only.
      n_out: int
          The number of samples which the downsampled series should contain.
          This should be passed as a keyword argument.
  
      Returns
      -------
      Tuple[np.ndarray, np.ndarray]
          The aggregated x and y data, respectively.
  
      """
      # Check n_out
      assert n_out is not None
  
      # Get x and y
      x, y = DataPointSelector._process_args(*args)
  
      # Check x and y
      self._check_x_y(x, y)
  
      return self._aggregate(x=x, y=y, n_out=n_out)
  
imports: from __future__ import annotations
  import re
  from abc import ABC, abstractmethod
  from typing import List, Optional, Tuple
  import numpy
label_desc: Use image node_id 2 for calling the DataAggregator obj's underlying member method code with example usage: obj.aggregate() and returns: self