class_docstr: Performs top down reconciliation, as defined `here <https://otexts.com/fpp3/reconciliation.html>`_.
  
  This estimator computes the proportions (of the base components w.r.t. the top component)
  based on the TimeSeries provided to the method :meth:`fit()`. If the historical series
  is provided, then the historical proportions will be used.
code: def get_projection_matrix(series):
      n, m = series.n_components, len(series.bottom_level_components)
  
      # compute sum of total component
      sum_total = (
          series[series.top_level_component]
          .all_values(copy=False)
          .flatten()
          .sum()
      )
  
      base_forecasts = series.bottom_level_series
  
      # compute sum of base components
      sum_base = (
          base_forecasts.all_values(copy=False).sum(axis=2).sum(axis=0)
      )
  
      # compute proportions for each base component
      proportions = sum_base / sum_total
      top_level_index = list(series.components).index(
          series.top_level_component
      )
      G = np.zeros((m, n))
      G[:, top_level_index] = proportions
  
      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 3 for calling the TopDownReconciliator obj's underlying member method code with example usage: obj.get_projection_matrix(series) and returns: G