Elements#

type quadrupole.elements.ElementLike = Element | str | int#

Union of all types that could be coerced into an Element. These afford programmatic access by calling Element(ElementLike).

class quadrupole.elements.ElementData(symbol: str, number: int, mass: float)#

Dataclass for storing element data.

class quadrupole.elements.Element(*values)#

Bases: ElementData, Enum

Enumeration of all elements on the periodic table. All element data here was taken from the International Union of Pure and Applied Chemistry (IUPAC) [1].

Notes

If you are going to use the Element enumeration in your own project be aware that, as it inherits from Enum, its members are singletons [2]. This means that performing comparisons between elements should be done using is and not ==. The comparison with == invokes the __eq__ method of the object which can take nearly twice as long as the identity comparison with is.

References

Examples

Directly accessing an element can be done by name or symbol. Programmatic access can be done by symbol (as str) or number (as int).

>>> Element.Hydrogen is Element.H is Element("H") is Element(1)
True 

Element access by string is case-insensitive:

>>> Element.Ruthenium is Element("Ru") is Element("ru") is Element("rU") is Element("RU")
True 

You can use dot access to get an element’s data:

>>> Element.Hydrogen
<Element.Hydrogen: symbol='H', number=1, mass=1.008>
>>> Element.Hydrogen.name
'Hydrogen'
>>> Element.Hydrogen.symbol
'H'
>>> Element.Hydrogen.number
1
>>> Element.Hydrogen.mass
1.008

A “zero” element is available as a placeholder:

>>> Element.Unknown is Element.Xx is Element("Xx") is Element(0)
True 
>>> Element.Xx.name
'Unknown'
>>> Element.Xx.symbol
'Xx'
>>> Element.Xx.number
0
>>> Element.Xx.mass
0.0

Printing an element directly calls its __str__() method, which returns the atomic symbol.

>>> str(hydrogen)
'H'
>>> print(hydrogen)
H 

Since the ElementData dataclass is marked as frozen, you can create unordered sets of elements:

>>> elem = [Element.H, Element.H, Element.C, Element.C, Element.N]
>>> elem_set = set(elem)
>>> len(elem_set)
3
>>> for e in elem_set:
...     print(e)
C 
H 
N 

You can also iterate through all of the elements in order of their atomic number:

>>> for elem in Element:
...     print(elem)
Xx 
H 
He 
Li 
Be 
B 
C 
...
Actinium = ElementData(symbol='Ac', number=89, mass=227.0)#
Aluminum = ElementData(symbol='Al', number=13, mass=26.9815384)#
Americium = ElementData(symbol='Am', number=95, mass=243.0)#
Antimony = ElementData(symbol='Sb', number=51, mass=121.76)#
Argon = ElementData(symbol='Ar', number=18, mass=39.95)#
Arsenic = ElementData(symbol='As', number=33, mass=74.921595)#
Astatine = ElementData(symbol='At', number=85, mass=210.0)#
Barium = ElementData(symbol='Ba', number=56, mass=137.327)#
Berkelium = ElementData(symbol='Bk', number=97, mass=247.0)#
Beryllium = ElementData(symbol='Be', number=4, mass=9.0121831)#
Bismuth = ElementData(symbol='Bi', number=83, mass=208.9804)#
Bohrium = ElementData(symbol='Bh', number=107, mass=270.0)#
Boron = ElementData(symbol='B', number=5, mass=10.81)#
Bromine = ElementData(symbol='Br', number=35, mass=79.904)#
Cadmium = ElementData(symbol='Cd', number=48, mass=112.414)#
Calcium = ElementData(symbol='Ca', number=20, mass=40.078)#
Californium = ElementData(symbol='Cf', number=98, mass=251.0)#
Carbon = ElementData(symbol='C', number=6, mass=12.011)#
Cerium = ElementData(symbol='Ce', number=58, mass=140.116)#
Cesium = ElementData(symbol='Cs', number=55, mass=132.90545196)#
Chlorine = ElementData(symbol='Cl', number=17, mass=35.45)#
Chromium = ElementData(symbol='Cr', number=24, mass=51.9961)#
Cobalt = ElementData(symbol='Co', number=27, mass=58.933194)#
Copernicium = ElementData(symbol='Cn', number=112, mass=285.0)#
Copper = ElementData(symbol='Cu', number=29, mass=63.546)#
Curium = ElementData(symbol='Cm', number=96, mass=247.0)#
Darmstadtium = ElementData(symbol='Ds', number=110, mass=281.0)#
Dubnium = ElementData(symbol='Db', number=105, mass=270.0)#
Dysprosium = ElementData(symbol='Dy', number=66, mass=162.5)#
Einsteinium = ElementData(symbol='Es', number=99, mass=252.0)#
Erbium = ElementData(symbol='Er', number=68, mass=167.259)#
Europium = ElementData(symbol='Eu', number=63, mass=151.964)#
Fermium = ElementData(symbol='Fm', number=100, mass=257.0)#
Flerovium = ElementData(symbol='Fl', number=114, mass=289.0)#
Fluorine = ElementData(symbol='F', number=9, mass=18.998403162)#
Francium = ElementData(symbol='Fr', number=87, mass=223.0)#
Gadolinium = ElementData(symbol='Gd', number=64, mass=157.249)#
Gallium = ElementData(symbol='Ga', number=31, mass=69.723)#
Germanium = ElementData(symbol='Ge', number=32, mass=72.63)#
Gold = ElementData(symbol='Au', number=79, mass=196.96657)#
Hafnium = ElementData(symbol='Hf', number=72, mass=178.486)#
Hassium = ElementData(symbol='Hs', number=108, mass=270.0)#
Helium = ElementData(symbol='He', number=2, mass=4.002602)#
Holmium = ElementData(symbol='Ho', number=67, mass=164.930329)#
Hydrogen = ElementData(symbol='H', number=1, mass=1.008)#
Indium = ElementData(symbol='In', number=49, mass=114.818)#
Iodine = ElementData(symbol='I', number=53, mass=126.90447)#
Iridium = ElementData(symbol='Ir', number=77, mass=192.217)#
Iron = ElementData(symbol='Fe', number=26, mass=55.845)#
Krypton = ElementData(symbol='Kr', number=36, mass=83.798)#
Lanthanum = ElementData(symbol='La', number=57, mass=138.90547)#
Lawrencium = ElementData(symbol='Lr', number=103, mass=262.0)#
Lead = ElementData(symbol='Pb', number=82, mass=207.2)#
Lithium = ElementData(symbol='Li', number=3, mass=6.94)#
Livermorium = ElementData(symbol='Lv', number=116, mass=293.0)#
Lutetium = ElementData(symbol='Lu', number=71, mass=174.96669)#
Magnesium = ElementData(symbol='Mg', number=12, mass=24.305)#
Manganese = ElementData(symbol='Mn', number=25, mass=54.938043)#
Meitnerium = ElementData(symbol='Mt', number=109, mass=278.0)#
Mendelevium = ElementData(symbol='Md', number=101, mass=258.0)#
Mercury = ElementData(symbol='Hg', number=80, mass=200.592)#
Molybdenum = ElementData(symbol='Mo', number=42, mass=95.95)#
Moscovium = ElementData(symbol='Mc', number=115, mass=289.0)#
Neodymium = ElementData(symbol='Nd', number=60, mass=144.242)#
Neon = ElementData(symbol='Ne', number=10, mass=20.1797)#
Neptunium = ElementData(symbol='Np', number=93, mass=237.0)#
Nickel = ElementData(symbol='Ni', number=28, mass=58.6934)#
Nihonium = ElementData(symbol='Nh', number=113, mass=286.0)#
Niobium = ElementData(symbol='Nb', number=41, mass=92.90637)#
Nitrogen = ElementData(symbol='N', number=7, mass=14.007)#
Nobelium = ElementData(symbol='No', number=102, mass=259.0)#
Oganesson = ElementData(symbol='Og', number=118, mass=294.0)#
Osmium = ElementData(symbol='Os', number=76, mass=190.23)#
Oxygen = ElementData(symbol='O', number=8, mass=15.999)#
Palladium = ElementData(symbol='Pd', number=46, mass=106.42)#
Phosphorus = ElementData(symbol='P', number=15, mass=30.973761998)#
Platinum = ElementData(symbol='Pt', number=78, mass=195.084)#
Plutonium = ElementData(symbol='Pu', number=94, mass=244.0)#
Polonium = ElementData(symbol='Po', number=84, mass=209.0)#
Potassium = ElementData(symbol='K', number=19, mass=39.0983)#
Praseodymium = ElementData(symbol='Pr', number=59, mass=140.90766)#
Promethium = ElementData(symbol='Pm', number=61, mass=145.0)#
Protactinium = ElementData(symbol='Pa', number=91, mass=231.03588)#
Radium = ElementData(symbol='Ra', number=88, mass=226.0)#
Radon = ElementData(symbol='Rn', number=86, mass=222.0)#
Rhenium = ElementData(symbol='Re', number=75, mass=186.207)#
Rhodium = ElementData(symbol='Rh', number=45, mass=102.90549)#
Roentgenium = ElementData(symbol='Rg', number=111, mass=281.0)#
Rubidium = ElementData(symbol='Rb', number=37, mass=85.4678)#
Ruthenium = ElementData(symbol='Ru', number=44, mass=101.07)#
Rutherfordium = ElementData(symbol='Rf', number=104, mass=267.0)#
Samarium = ElementData(symbol='Sm', number=62, mass=150.36)#
Scandium = ElementData(symbol='Sc', number=21, mass=44.955907)#
Seaborgium = ElementData(symbol='Sg', number=106, mass=269.0)#
Selenium = ElementData(symbol='Se', number=34, mass=78.971)#
Silicon = ElementData(symbol='Si', number=14, mass=28.085)#
Silver = ElementData(symbol='Ag', number=47, mass=107.8682)#
Sodium = ElementData(symbol='Na', number=11, mass=22.98976928)#
Strontium = ElementData(symbol='Sr', number=38, mass=87.62)#
Sulfur = ElementData(symbol='S', number=16, mass=32.06)#
Tantalum = ElementData(symbol='Ta', number=73, mass=180.94788)#
Technetium = ElementData(symbol='Tc', number=43, mass=97.0)#
Tellurium = ElementData(symbol='Te', number=52, mass=127.6)#
Tennessine = ElementData(symbol='Ts', number=117, mass=293.0)#
Terbium = ElementData(symbol='Tb', number=65, mass=158.925354)#
Thallium = ElementData(symbol='Tl', number=81, mass=204.38)#
Thorium = ElementData(symbol='Th', number=90, mass=232.0377)#
Thulium = ElementData(symbol='Tm', number=69, mass=168.934219)#
Tin = ElementData(symbol='Sn', number=50, mass=118.71)#
Titanium = ElementData(symbol='Ti', number=22, mass=47.867)#
Tungsten = ElementData(symbol='W', number=74, mass=183.84)#
Unknown = ElementData(symbol='Xx', number=0, mass=0.0)#
Uranium = ElementData(symbol='U', number=92, mass=238.02891)#
Vanadium = ElementData(symbol='V', number=23, mass=50.9415)#
Xenon = ElementData(symbol='Xe', number=54, mass=131.293)#
Ytterbium = ElementData(symbol='Yb', number=70, mass=173.045)#
Yttrium = ElementData(symbol='Y', number=39, mass=88.905838)#
Zinc = ElementData(symbol='Zn', number=30, mass=65.38)#
Zirconium = ElementData(symbol='Zr', number=40, mass=91.222)#