code: def get_stoichiometry_factors(adsorbates, references):
      
      stoichiometry = get_atomic_stoichiometry(references)
      stoichiometry_factors = {}
      for adsorbate in adsorbates:
          for symbol in ase.symbols.string2symbols(adsorbate):
              symbol_index = list(
                  map(lambda _x: _x[0], references)).index(symbol)
  
              for (factor, (ref_symbol, ref_molecule)) in zip(
                      stoichiometry[symbol_index], references):
                  stoichiometry_factors.setdefault(
                      adsorbate,
                      {})[ref_molecule] = stoichiometry_factors.setdefault(
                      adsorbate,
                      {}).get(
                      ref_molecule,
                      0) + factor
  
          nonzero_factors = {}
          for key, value in stoichiometry_factors[adsorbate].items():
              if not np.isclose(value, 0.):
                  nonzero_factors[key] = value
          stoichiometry_factors[adsorbate] = nonzero_factors
  
      return stoichiometry_factors
docs: Take a list of adsorabtes and a corresponding reference
      system and return a list of dictionaries encoding the
      stoichiometry factors converting between adsorbates and
      reference molecules.