class_docstr: Performs bottom up reconciliation, as defined `here <https://otexts.com/fpp3/reconciliation.html>`_.
code: def get_projection_matrix(series):
      leaves_seq = list(series.bottom_level_components)
      n, m = series.n_components, len(leaves_seq)
      leaves_indexes = {l: i for i, l in enumerate(leaves_seq)}
      G = np.zeros((m, n))
      for i, c in enumerate(series.components):
          if c in leaves_indexes:
              G[leaves_indexes[c], i] = 1.0
      return G
  
imports: from typing import Any, Mapping, Optional
  import numpy
  from darts.dataprocessing.transformers import BaseDataTransformer, FittableDataTransformer
  from darts.timeseries import TimeSeries
  from darts.utils.utils import raise_if_not
label_desc: Use image node_id 1 for calling the BottomUpReconciliator obj's underlying member method code with example usage: obj.get_projection_matrix(series) and returns: G