code: def recalc_M(S, D_cba, Y, nr_sectors):
      
  
      Y_diag = ioutil.diagonalize_blocks(Y.values, blocksize=nr_sectors)
      Y_inv = np.linalg.inv(Y_diag)
      M = D_cba.dot(Y_inv)
      if type(D_cba) is pd.DataFrame:
          M.columns = D_cba.columns
          M.index = D_cba.index
  
      return M
docs: Calculate Multipliers based on footprints.
  
      Parameters
      ----------
      D_cba : pandas.DataFrame or numpy array
          Footprint per sector and country
      Y : pandas.DataFrame or numpy array
          Final demand: aggregated across categories or just one category, one
          column per country. This will be diagonalized per country block.
          The diagonolized form must be invertable for this method to work.
      nr_sectors : int
          Number of sectors in the MRIO
  
      Returns
      -------
  
      pandas.DataFrame or numpy.array
          Multipliers M
          The type is determined by the type of D_cba.
          If DataFrame index/columns as D_cba