docs: def build_agg_matrix(agg_vector, pos_dict=None):
      """ Agg. matrix based on mapping given in input as numerical or str vector.
  
      The aggregation matrix has the from nxm with
  
      -n  new classificaction
      -m  old classification
  
      Parameters
      ----------
          agg_vector : list or vector like numpy ndarray
              This can be row or column vector.
              Length m with position given for n and -1 if values
              should not be included
              or
              length m with id_string for the aggregation
  
          pos_dict : dictionary
              (only possible if agg_vector is given as string)
              output order for the new matrix
              must be given as dict with
              'string in agg_vector' = pos
              (as int, -1 if value should not be included in the aggregation)
  
      Example 1:
          input vector: np.array([0, 1, 1, 2]) or ['a', 'b', 'b', 'c']
  
          agg matrix:
  
             m0  m1  m2  m3
          n0 1   0   0   0
          n1 0   1   1   0
          n2 0   0   0   1
  
      Example 2:
          input vector: np.array([1, 0, 0, 2]) or
                        (['b', 'a', 'a', 'c'], dict(a=0,b=1,c=2))
  
          agg matrix:
  
             m0  m1  m2  m3
          n0 0   1   1   0
          n1 1   0   0   0
          n2 0   0   0   1
      """
      if isinstance(agg_vector, np.ndarray):
          agg_vector = agg_vector.flatten().tolist()
  
      if type(agg_vector[0]) == str:
          str_vector = agg_vector
          agg_vector = np.zeros(len(str_vector))
          if pos_dict:
              if len(pos_dict.keys()) != len(set(str_vector)):
                  raise ValueError(
                      'Posistion elements inconsistent with aggregation vector')
              seen = pos_dict
          else:
              seen = {}
          counter = 0
          for ind, item in enumerate(str_vector):
              if item not in seen:
                  seen[item] = counter
                  counter += 1
              agg_vector[ind] = seen[item]
  
      agg_vector = np.array(agg_vector, dtype=int)
      agg_vector = agg_vector.reshape((1, -1))
      row_corr = agg_vector
      col_corr = np.arange(agg_vector.size)
  
      agg_matrix = np.zeros((row_corr.max()+1, col_corr.max()+1))
      agg_matrix[row_corr, col_corr] = 1
  
      # set columns with -1 value to 0
      agg_matrix[np.tile(agg_vector == -1, (np.shape(agg_matrix)[0], 1))] = 0
  
      return agg_matrix