code: def get_atomic_stoichiometry(references):
      
      n = len(references)
      stoichiometry = np.ndarray((n, n), float)
      stoichiometry[:] = 0.
      key_index = {}
      for i, (key, species) in enumerate(references):
          # in case species uses a suffix like _gas
          species = species.split('_')[0]
          key_index[key] = i
  
      for i, (key, species) in enumerate(references):
          composition = ase.symbols.string2symbols(species)
          for j, symbol in enumerate(composition):
              stoichiometry[i, key_index[symbol]] += 1
      istoichiometry = np.linalg.inv(stoichiometry)
  
      return istoichiometry.tolist()
docs: Given a list of references (tuples of (symbol, molecule))
      return stoichiometry matrix that connects atomic symbols
      to its molecular references.