""" Basic chemical information.
"""
from typing import NamedTuple

class Element(NamedTuple):
    num: int
    symbol: str
    name: str

n =     Element(0,      'n',    'Neutron')  # Included for correct list indices
H =     Element(1,      'H',    'Hydrogen')
He =    Element(2,      'He',   '')
Li =    Element(3,      'Li',   '')
Be =    Element(4,      'Be',   '')
B =     Element(5,      'B',    '')
C =     Element(6,      'C',    '')
N =     Element(7,      'N',    '')
O =     Element(8,      'O',    '')
F =     Element(9,      'F',    '')
Ne =    Element(10,     'Ne',   '')
Na =    Element(11,     'Na',   '')
Mg =    Element(12,     'Mg',   '')
Al =    Element(13,     'Al',   '')
Si =    Element(14,     'Si',   '')
P =     Element(15,     'P',    '')
S =     Element(16,     'S',    '')
Cl =    Element(17,     'Cl',   '')
Ar =    Element(18,     'Ar',   '')
K =     Element(19,     'K',    '')
Ca =    Element(20,     'Ca',   '')
Sc =    Element(21,     'Sc',   '')
Ti =    Element(22,     'Ti',   '')
V =     Element(23,     'V',    '')
Cr =    Element(24,     'Cr',   '')
Mn =    Element(25,     'Mn',   '')
Fe =    Element(26,     'Fe',   '')
Co =    Element(27,     'Co',   '')
Ni =    Element(28,     'Ni',   '')
Cu =    Element(29,     'Cu',   '')
Zn =    Element(30,     'Zn',   '')
Ga =    Element(31,     'Ga',   '')
Ge =    Element(32,     'Ge',   '')
As =    Element(33,     'As',   '')
Se =    Element(34,     'Se',   '')
Br =    Element(35,     'Br',   '')
Kr =    Element(36,     'Kr',   '')
Rb =    Element(37,     'Rb',   '')
Sr =    Element(38,     'Sr',   '')
Y =     Element(39,     'Y',    '')
Zr =    Element(40,     'Zr',   '')
Nb =    Element(41,     'Nb',   '')
Mo =    Element(42,     'Mo',   '')
Tc =    Element(43,     'Tc',   '')
Ru =    Element(44,     'Ru',   '')
Rh =    Element(45,     'Rh',   '')
Pd =    Element(46,     'Pd',   '')
Ag =    Element(47,     'Ag',   '')
Cd =    Element(48,     'Cd',   '')
In =    Element(49,     'In',   '')
Sn =    Element(50,     'Sn',   '')
Sb =    Element(51,     'Sb',   '')
Te =    Element(52,     'Te',   '')
I =     Element(53,     'I',    '')
Xe =    Element(54,     'Xe',   '')
Cs =    Element(55,     'Cs',   '')
Ba =    Element(56,     'Ba',   '')
La =    Element(57,     'La',   '')
Ce =    Element(58,     'Ce',   '')
Pr =    Element(59,     'Pr',   '')
Nd =    Element(60,     'Nd',   '')
Pm =    Element(61,     'Pm',   '')
Sm =    Element(62,     'Sm',   '')
Eu =    Element(63,     'Eu',   '')
Gd =    Element(64,     'Gd',   '')
Tb =    Element(65,     'Tb',   '')
Dy =    Element(66,     'Dy',   '')
Ho =    Element(67,     'Ho',   '')
Er =    Element(68,     'Er',   '')
Tm =    Element(69,     'Tm',   '')
Yb =    Element(70,     'Yb',   '')
Lu =    Element(71,     'Lu',   '')
Hf =    Element(72,     'Hf',   '')
Ta =    Element(73,     'Ta',   '')
W =     Element(74,     'W',    '')
Re =    Element(75,     'Re',   '')
Os =    Element(76,     'Os',   '')
Ir =    Element(77,     'Ir',   '')
Pt =    Element(78,     'Pt',   '')
Au =    Element(79,     'Au',   '')
Hg =    Element(80,     'Hg',   '')
Tl =    Element(81,     'Tl',   '')
Pb =    Element(82,     'Pb',   '')
Bi =    Element(83,     'Bi',   '')
Po =    Element(84,     'Po',   '')
At =    Element(85,     'At',   '')
Rn =    Element(86,     'Rn',   '')
Fr =    Element(87,     'Fr',   '')
Ra =    Element(88,     'Ra',   '')
Ac =    Element(89,     'Ac',   '')
Th =    Element(90,     'Th',   '')
Pa =    Element(91,     'Pa',   '')
U =     Element(92,     'U',    '')
Np =    Element(93,     'Np',   '')
Pu =    Element(94,     'Pu',   '')
Am =    Element(95,     'Am',   '')
Cm =    Element(96,     'Cm',   '')
Bk =    Element(97,     'Bk',   '')
Cf =    Element(98,     'Cf',   '')
Es =    Element(99,     'Es',   '')
Fm =    Element(100,    'Fm',   '')
Md =    Element(101,    'Md',   '')
No =    Element(102,    'No',   '')
Lr =    Element(103,    'Lr',   '')
Rf =    Element(104,    'Rf',   '')
Db =    Element(105,    'Db',   '')
Sg =    Element(106,    'Sg',   '')
Bh =    Element(107,    'Bh',   '')
Hs =    Element(108,    'Hs',   '')
Mt =    Element(109,    'Mt',   '')
Ds =    Element(110,    'Ds',   '')
Rg =    Element(111,    'Rg',   '')
Cn =    Element(112,    'Cn',   '')
Nh =    Element(113,    'Nh',   '')
Fl =    Element(114,    'Fl',   '')
Mc =    Element(115,    'Mc',   '')
Lv =    Element(116,    'Lv',   '')
Ts =    Element(117,    'Ts',   '')
Og =    Element(118,    'Og',   '')

elements: list[Element] = [
    n,
    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,
]

symbol_element: dict[str, Element] = {e.symbol: e for e in elements}
atomicnum_element: dict[int, Element] = {e.num: e for e in elements}
