docs: def formula(mol):
      """Chemical formula.
      Atoms should be arranged in order of C, H and other atoms.
      Molecules should be arranged in order of length of formula text.
      """
      mol.require("Valence")
      mol.require("Topology")
      total_cntr = Counter()
      for m in sorted(mols_iter(mol), key=len, reverse=True):
          cntr = Counter()
          for i in m:
              cntr += mol.atom(i).composition()
          text = []
          Cs = cntr.pop("C", 0)
          if Cs:
              text.append("C")
              if Cs > 1:
                  text.append(str(Cs))
          Hs = cntr.pop("H", 0)
          if Hs:
              text.append("H")
              if Hs > 1:
                  text.append(str(Hs))
          heteros = sorted(cntr.items(), key=lambda x: atom_number(x[0]))
          for k, v in heteros:
              text.append(k)
              if v > 1:
                  text.append(str(v))
          total_cntr["".join(text)] += 1
      total = sorted(total_cntr.items(), key=lambda x: len(x[0]), reverse=True)
      total_text = []
      for k, v in total:
          if v > 1:
              total_text.append(str(v) + k)
          else:
              total_text.append(k)
      return ".".join(total_text)