Skip to content

Commit cfe970f

Browse files
committed
Simplify the atomic symbol to number conversion.
1 parent 4013707 commit cfe970f

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

arkane/common.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -391,10 +391,10 @@ def get_element_mass(input_element, isotope=None):
391391
elif isinstance(input_element, str):
392392
symbol = input_element
393393
try:
394-
number = next(key for key, value in symbol_by_number.items() if value == input_element)
395-
except:
396-
symbol = input_element[0] + input_element[1].lower()
397-
number = [key for key, value in symbol_by_number.items() if value == symbol][0]
394+
number = number_by_symbol[symbol]
395+
except KeyError:
396+
symbol = input_element.capitalize()
397+
number = number_by_symbol[symbol]
398398

399399
if symbol is None or number is None:
400400
raise ValueError('Could not identify element {0}'.format(input_element))
@@ -438,6 +438,7 @@ def get_element_mass(input_element, isotope=None):
438438
92: 'U', 93: 'Np', 94: 'Pu', 95: 'Am', 96: 'Cm', 97: 'Bk', 98: 'Cf', 99: 'Es', 100: 'Fm', 101: 'Md',
439439
102: 'No', 103: 'Lr', 104: 'Rf', 105: 'Db', 106: 'Sg', 107: 'Bh', 108: 'Hs', 109: 'Mt', 110: 'Ds',
440440
111: 'Rg', 112: 'Cn', 113: 'Nh', 114: 'Fl', 115: 'Mc', 116: 'Lv', 117: 'Ts', 118: 'Og'}
441+
number_by_symbol = {value: key for key, value in symbol_by_number.items()}
441442

442443
# Structure of mass_by_symbol items: list(list(isotope1, mass1, weight1), list(isotope2, mass2, weight2), ...)
443444
mass_by_symbol = {

arkane/commonTest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,7 @@ def test_get_mass(self):
459459
"""Test that the correct mass/number/isotope is returned from get_element_mass"""
460460
self.assertEqual(get_element_mass(1), (1.00782503224, 1)) # test input by integer
461461
self.assertEqual(get_element_mass('Si'), (27.97692653465, 14)) # test string input and most common isotope
462+
self.assertEqual(get_element_mass('SI'), (27.97692653465, 14)) # test string in all caps
462463
self.assertEqual(get_element_mass('C', 13), (13.00335483507, 6)) # test specific isotope
463464
self.assertEqual(get_element_mass('Bk'), (247.0703073, 97)) # test a two-element array (no isotope data)
464465

0 commit comments

Comments
 (0)