Source code for httk.atomistic.models.formula.anonymous
"""The canonical anonymous chemical-formula value class."""
from fractions import Fraction
from typing import Self
from httk.atomistic.models.formula.backend import ChemicalFormulaBackend
from httk.atomistic.models.formula.notation import parse_anonymous_formula
[docs]
class AnonymousFormula(ChemicalFormulaBackend, str):
"""Store a strictly canonical OPTIMADE anonymous chemical formula.
:param formula: The canonical anonymous formula text.
"""
_coefficients: tuple[tuple[str, int], ...]
def __new__(cls, formula: str) -> Self:
if isinstance(formula, cls):
return formula
coefficients = parse_anonymous_formula(formula)
instance = super().__new__(cls, formula)
instance._coefficients = coefficients
return instance
def __repr__(self) -> str:
return f"{type(self).__name__}({str.__repr__(self)})"
@property
[docs]
def is_anonymous(self) -> bool:
"""Return whether the formula uses anonymous labels."""
return True
@property
[docs]
def amounts(self) -> tuple[tuple[str, Fraction], ...]:
"""Return the anonymous coefficients as exact amounts."""
return tuple((label, Fraction(count)) for label, count in self._coefficients)