"""Chemical element symbols and atomic numbers, 1 to 118.
Standard library only, so the document model can check element symbols and
electron counts without loading RDKit.
"""
from __future__ import annotations
from typing import Final
SYMBOLS: Final[tuple[str, ...]] = (
"H", "He",
"Li", "Be", "B", "C", "N", "O", "F", "Ne",
"Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar",
"K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn",
"Ga", "Ge", "As", "Se", "Br", "Kr",
"Rb", "Sr", "Y", "Zr", "Nb", "Mo", "Tc", "Ru", "Rh", "Pd", "Ag", "Cd",
"In", "Sn", "Sb", "Te", "I", "Xe",
"Cs", "Ba",
"La", "Ce", "Pr", "Nd", "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb", "Lu",
"Hf", "Ta", "W", "Re", "Os", "Ir", "Pt", "Au", "Hg",
"Tl", "Pb", "Bi", "Po", "At", "Rn",
"Fr", "Ra",
"Ac", "Th", "Pa", "U", "Np", "Pu", "Am", "Cm", "Bk", "Cf", "Es", "Fm", "Md", "No", "Lr",
"Rf", "Db", "Sg", "Bh", "Hs", "Mt", "Ds", "Rg", "Cn",
"Nh", "Fl", "Mc", "Lv", "Ts", "Og",
) # fmt: skip
#: Atomic number of each element symbol.
ATOMIC_NUMBER: Final[dict[str, int]] = {symbol: z for z, symbol in enumerate(SYMBOLS, start=1)}
[docs]
def atomic_number(symbol: str) -> int:
"""The atomic number of ``symbol``; raises ``KeyError`` for an unknown one."""
return ATOMIC_NUMBER[symbol]