class_docstr: Prepare hierarchical data, including aggregate levels, from bottom level.
  
  This transformer adds aggregate levels via summation to a DataFrame with a
  multiindex. The aggregate levels are included with the special tag "__total"
  in the index. The aggregate nodes are discovered from top-to-bottom from
  the input data multiindex.
  
  Parameters
  ----------
  flatten_single_level : boolean (default=True)
      Remove aggregate nodes, i.e. ("__total"), where there is only a single
      child to the level
  
  See Also
  --------
  ReconcilerForecaster
  Reconciler
  
  References
  ----------
  .. [1] https://otexts.com/fpp3/hierarchical.html
  
  Examples
  --------
  >>> from sktime.transformations.hierarchical.aggregate import Aggregator
  >>> from sktime.utils._testing.hierarchical import _bottom_hier_datagen
  >>> agg = Aggregator()
  >>> y = _bottom_hier_datagen(
  ...     no_bottom_nodes=3,
  ...     no_levels=1,
  ...     random_seed=123,
  ... )
  >>> y = agg.fit_transform(y)
docstr: Inverse transform, inverse operation to transform.
  
  private _inverse_transform containing core logic, called from inverse_transform
  
  Parameters
  ----------
  X : Panel of pd.DataFrame data to be inverse transformed.
  y : Ignored argument for interface compatibility.
  
  Returns
  -------
  Inverse transformed version of X.
code: def _inverse_transform(self, X, y=None):
      """Inverse transform, inverse operation to transform.
  
      private _inverse_transform containing core logic, called from inverse_transform
  
      Parameters
      ----------
      X : Panel of pd.DataFrame data to be inverse transformed.
      y : Ignored argument for interface compatibility.
  
      Returns
      -------
      Inverse transformed version of X.
      """
      if X.index.nlevels == 1:
          warn(
              "Aggregator is intended for use with X.index.nlevels > 1. "
              "Returning X unchanged.",
              obj=self,
          )
          return X
      if _check_index_no_total(X):
          warn(
              "Inverse is intended to be used with aggregated data. "
              "Returning X unchanged.",
              obj=self,
          )
      else:
          for i in range(X.index.nlevels - 1):
              X = X.drop(index="__total", level=i)
      return X
  
file_path: sktime/sktime/transformations/hierarchical/aggregate.py
imports: import numpy
  import pandas
  from sktime.transformations.base import BaseTransformer
  from sktime.utils.warnings import warn
label_desc: Use image node_id 3 for calling the Aggregator obj's underlying member method code with example usage: obj._inverse_transform(X, y) and returns: X, X