from bobleesj.utils.data.element import Element as E
[docs]
def get_data():
"""Get the periodic table data.
Sourced from
https://pubchem.ncbi.nlm.nih.gov/ptable/atomic-mass/
"""
def n(element):
# Get the name of the element
return element.full_name
def s(element):
# Get the symbol of the element.
return element.symbol
data = [
(1, n(E.H), s(E.H), 1.008),
(2, n(E.He), s(E.He), 4.0026),
(3, n(E.Li), s(E.Li), 7.0),
(4, n(E.Be), s(E.Be), 9.012183),
(5, n(E.B), s(E.B), 10.81),
(6, n(E.C), s(E.C), 12.011),
(7, n(E.N), s(E.N), 14.007),
(8, n(E.O), s(E.O), 15.999),
(9, n(E.F), s(E.F), 18.99840316),
(10, n(E.Ne), s(E.Ne), 20.18),
(11, n(E.Na), s(E.Na), 22.9897693),
(12, n(E.Mg), s(E.Mg), 24.305),
(13, n(E.Al), s(E.Al), 26.981538),
(14, n(E.Si), s(E.Si), 28.085),
(15, n(E.P), s(E.P), 30.973762),
(16, n(E.S), s(E.S), 32.07),
(17, n(E.Cl), s(E.Cl), 35.45),
(18, n(E.Ar), s(E.Ar), 39.9),
(19, n(E.K), s(E.K), 39.0983),
(20, n(E.Ca), s(E.Ca), 40.08),
(21, n(E.Sc), s(E.Sc), 44.95591),
(22, n(E.Ti), s(E.Ti), 47.867),
(23, n(E.V), s(E.V), 50.9415),
(24, n(E.Cr), s(E.Cr), 51.996),
(25, n(E.Mn), s(E.Mn), 54.93804),
(26, n(E.Fe), s(E.Fe), 55.84),
(27, n(E.Co), s(E.Co), 58.93319),
(28, n(E.Ni), s(E.Ni), 58.693),
(29, n(E.Cu), s(E.Cu), 63.55),
(30, n(E.Zn), s(E.Zn), 65.4),
(31, n(E.Ga), s(E.Ga), 69.723),
(32, n(E.Ge), s(E.Ge), 72.63),
(33, n(E.As), s(E.As), 74.92159),
(34, n(E.Se), s(E.Se), 78.97),
(35, n(E.Br), s(E.Br), 79.9),
(36, n(E.Kr), s(E.Kr), 83.8),
(37, n(E.Rb), s(E.Rb), 85.468),
(38, n(E.Sr), s(E.Sr), 87.62),
(39, n(E.Y), s(E.Y), 88.90584),
(40, n(E.Zr), s(E.Zr), 91.22),
(41, n(E.Nb), s(E.Nb), 92.90637),
(42, n(E.Mo), s(E.Mo), 95.95),
(43, n(E.Tc), s(E.Tc), 96.90636),
(44, n(E.Ru), s(E.Ru), 101.1),
(45, n(E.Rh), s(E.Rh), 102.9055),
(46, n(E.Pd), s(E.Pd), 106.42),
(47, n(E.Ag), s(E.Ag), 107.868),
(48, n(E.Cd), s(E.Cd), 112.41),
(49, n(E.In), s(E.In), 114.818),
(50, n(E.Sn), s(E.Sn), 118.71),
(51, n(E.Sb), s(E.Sb), 121.76),
(52, n(E.Te), s(E.Te), 127.6),
(53, n(E.I), s(E.I), 126.9045),
(54, n(E.Xe), s(E.Xe), 131.29),
(55, n(E.Cs), s(E.Cs), 132.905452),
(56, n(E.Ba), s(E.Ba), 137.33),
(57, n(E.La), s(E.La), 138.9055),
(58, n(E.Ce), s(E.Ce), 140.116),
(59, n(E.Pr), s(E.Pr), 140.90766),
(60, n(E.Nd), s(E.Nd), 144.24),
(61, n(E.Pm), s(E.Pm), 144.91276),
(62, n(E.Sm), s(E.Sm), 150.4),
(63, n(E.Eu), s(E.Eu), 151.964),
(64, n(E.Gd), s(E.Gd), 157.25),
(65, n(E.Tb), s(E.Tb), 158.92535),
(66, n(E.Dy), s(E.Dy), 162.5),
(67, n(E.Ho), s(E.Ho), 164.93033),
(68, n(E.Er), s(E.Er), 167.26),
(69, n(E.Tm), s(E.Tm), 168.93422),
(70, n(E.Yb), s(E.Yb), 173.05),
(71, n(E.Lu), s(E.Lu), 174.9667),
(72, n(E.Hf), s(E.Hf), 178.49),
(73, n(E.Ta), s(E.Ta), 180.9479),
(74, n(E.W), s(E.W), 183.84),
(75, n(E.Re), s(E.Re), 186.207),
(76, n(E.Os), s(E.Os), 190.2),
(77, n(E.Ir), s(E.Ir), 192.22),
(78, n(E.Pt), s(E.Pt), 195.08),
(79, n(E.Au), s(E.Au), 196.96657),
(80, n(E.Hg), s(E.Hg), 200.59),
(81, n(E.Tl), s(E.Tl), 204.383),
(82, n(E.Pb), s(E.Pb), 207),
(83, n(E.Bi), s(E.Bi), 208.9804),
(84, n(E.Po), s(E.Po), 208.98243),
(85, n(E.At), s(E.At), 209.98715),
(86, n(E.Rn), s(E.Rn), 222.01758),
(87, n(E.Fr), s(E.Fr), 223.01973),
(88, n(E.Ra), s(E.Ra), 226.02541),
(89, n(E.Ac), s(E.Ac), 227.02775),
(90, n(E.Th), s(E.Th), 232.038),
(91, n(E.Pa), s(E.Pa), 231.03588),
(92, n(E.U), s(E.U), 238.0289),
(93, n(E.Np), s(E.Np), 237.048172),
(94, n(E.Pu), s(E.Pu), 244.0642),
(95, n(E.Am), s(E.Am), 243.06138),
(96, n(E.Cm), s(E.Cm), 247.07035),
(97, n(E.Bk), s(E.Bk), 247.07031),
(98, n(E.Cf), s(E.Cf), 251.07959),
(99, n(E.Es), s(E.Es), 252.083),
(100, n(E.Fm), s(E.Fm), 257.09511),
(101, n(E.Md), s(E.Md), 258.09843),
(102, n(E.No), s(E.No), 259.101),
(103, n(E.Lr), s(E.Lr), 266.12),
(104, n(E.Rf), s(E.Rf), 267.122),
(105, n(E.Db), s(E.Db), 268.126),
(106, n(E.Sg), s(E.Sg), 269.128),
(107, n(E.Bh), s(E.Bh), 270.133),
(108, n(E.Hs), s(E.Hs), 269.1336),
(109, n(E.Mt), s(E.Mt), 277.154),
(110, n(E.Ds), s(E.Ds), 282.166),
(111, n(E.Rg), s(E.Rg), 282.169),
(112, n(E.Cn), s(E.Cn), 286.179),
(113, n(E.Nh), s(E.Nh), 286.182),
(114, n(E.Fl), s(E.Fl), 290.192),
(115, n(E.Mc), s(E.Mc), 290.196),
(116, n(E.Lv), s(E.Lv), 293.205),
(117, n(E.Ts), s(E.Ts), 294.211),
(118, n(E.Og), s(E.Og), 295.216),
]
data = [
{
"atomic_number": num,
"name": name,
"symbol": symbol,
"atomic_mass": atomic_mass,
}
for num, name, symbol, atomic_mass in data
]
return data
def _get_element_by_key(key, value):
"""Helper to get element data by a specific key."""
data = get_data()
for element in data:
if str(element[key]).lower() == str(value).lower():
return element
raise ValueError(f"Element with {key} '{value}' not found.")
[docs]
def values_from_atomic_number(atomic_number):
"""Get the element data by atomic number."""
return _get_element_by_key("atomic_number", atomic_number)
[docs]
def values_from_symbol(symbol):
"""Get the element data by chemical symbol."""
return _get_element_by_key("symbol", symbol)
[docs]
def values_from_name(name):
"""Get the element data by name."""
return _get_element_by_key("name", name)