def get_chemical_formula( self, mode: str = 'hill', empirical: bool = False, ) -> str: """Get chemical formula. See documentation of ase.atoms.Atoms.get_chemical_formula().""" # XXX Delegate the work to the Formula object! if mode in ('reduce', 'all') and empirical: warnings.warn("Empirical chemical formula not available " "for mode '{}'".format(mode)) if len(self) == 0: return '' numbers = self.numbers if mode == 'reduce': n = len(numbers) changes = np.concatenate( ([0], np.arange(1, n)[numbers[1:] != numbers[:-1]])) symbols = [chemical_symbols[e] for e in numbers[changes]] counts = np.append(changes[1:], n) - changes tokens = [] for s, c in zip(symbols, counts): tokens.append(s) if c > 1: tokens.append(str(c)) formula = ''.join(tokens) elif mode == 'all': formula = ''.join([chemical_symbols[n] for n in numbers]) else: symbols = [chemical_symbols[Z] for Z in numbers] f = Formula('', _tree=[(symbols, 1)]) if empirical: f, _ = f.reduce() if mode in {'hill', 'metal'}: formula = f.format(mode) else: raise ValueError( "Use mode = 'all', 'reduce', 'hill' or 'metal'.") return formula
def get_latex_symbol(self): """Returns latex-formatted symbol string.""" s = self.symbol s = Formula(s) return s.format("latex")