@@ -64,7 +64,7 @@ class Config:
64
64
allow_mutation = False
65
65
66
66
67
- def element_by_symbol (symbol ):
67
+ def element_by_symbol (symbol , verbose = False ):
68
68
"""Search for an element by its symbol.
69
69
70
70
Look up an element from a list of known elements by symbol.
@@ -73,7 +73,9 @@ def element_by_symbol(symbol):
73
73
Parameters
74
74
----------
75
75
symbol : str
76
- Element symbol to look for, digits and spaces are removed before search
76
+ Element symbol to look for, digits and spaces are removed before search.
77
+ verbose : bool, optional, default=False
78
+ If True, raise warnings if symbol has been trimmed before search.
77
79
78
80
Returns
79
81
-------
@@ -83,7 +85,7 @@ def element_by_symbol(symbol):
83
85
"""
84
86
symbol_trimmed = sub (r"[0-9 -]" , "" , symbol ).capitalize ()
85
87
86
- if symbol_trimmed != symbol :
88
+ if symbol_trimmed != symbol and verbose :
87
89
msg = (
88
90
f"Numbers and spaces are not considered when searching by element symbol.\n "
89
91
f"{ symbol } became { symbol_trimmed } "
@@ -94,7 +96,7 @@ def element_by_symbol(symbol):
94
96
return matched_element
95
97
96
98
97
- def element_by_name (name ):
99
+ def element_by_name (name , verbose = False ):
98
100
"""Search for an element by its name.
99
101
100
102
Look up an element from a list of known elements by name.
@@ -103,7 +105,9 @@ def element_by_name(name):
103
105
Parameters
104
106
----------
105
107
name : str
106
- Element name to look for, digits and spaces are removed before search
108
+ Element name to look for, digits and spaces are removed before search.
109
+ verbose : bool, optional, default=False
110
+ If True, raise warnings if name has been trimmed before search.
107
111
108
112
Returns
109
113
-------
@@ -113,7 +117,7 @@ def element_by_name(name):
113
117
"""
114
118
name_trimmed = sub (r"[0-9 -]" , "" , name ).lower ()
115
119
116
- if name_trimmed != name :
120
+ if name_trimmed != name and verbose :
117
121
msg = (
118
122
"Numbers and spaces are not considered when searching by element name. \n "
119
123
f"{ name } became { name_trimmed } "
@@ -124,7 +128,7 @@ def element_by_name(name):
124
128
return matched_element
125
129
126
130
127
- def element_by_atomic_number (atomic_number ):
131
+ def element_by_atomic_number (atomic_number , verbose = False ):
128
132
"""Search for an element by its atomic number.
129
133
130
134
Look up an element from a list of known elements by atomic number.
@@ -134,7 +138,9 @@ def element_by_atomic_number(atomic_number):
134
138
----------
135
139
atomic_number : int
136
140
Element atomic number that need to look for
137
- if a string is provided, only numbers are considered during the search
141
+ if a string is provided, only numbers are considered during the search.
142
+ verbose : bool, optional, default=False
143
+ If True, raise warnings if atomic_number has been trimmed before search.
138
144
139
145
Returns
140
146
-------
@@ -146,7 +152,7 @@ def element_by_atomic_number(atomic_number):
146
152
atomic_number_trimmed = int (
147
153
sub ("[a-z -]" , "" , atomic_number .lower ()).lstrip ("0" )
148
154
)
149
- if str (atomic_number_trimmed ) != atomic_number :
155
+ if str (atomic_number_trimmed ) != atomic_number and verbose :
150
156
msg = (
151
157
f"Letters and spaces are not considered when searching by element atomic number. \n "
152
158
f"{ atomic_number } became { atomic_number_trimmed } "
@@ -162,7 +168,7 @@ def element_by_atomic_number(atomic_number):
162
168
return matched_element
163
169
164
170
165
- def element_by_mass (mass , exact = True ):
171
+ def element_by_mass (mass , exact = True , verbose = False ):
166
172
"""Search for an element by its mass.
167
173
168
174
Look up an element from a list of known elements by mass.
@@ -173,11 +179,13 @@ def element_by_mass(mass, exact=True):
173
179
----------
174
180
mass : int, float
175
181
Element mass that need to look for, if a string is provided,
176
- only numbers are considered during the search
177
- Mass unyt is assumed to be u.amu, unless specfied (which will be converted to u.amu)
182
+ only numbers are considered during the search.
183
+ Mass unyt is assumed to be u.amu, unless specfied (which will be converted to u.amu).
178
184
exact : bool, optional, default=True
179
185
This method can be used to search for an exact mass (up to the first decimal place)
180
- or search for an element mass closest to the mass entered
186
+ or search for an element mass closest to the mass entered.
187
+ verbose : bool, optional, default=False
188
+ If True, raise warnings if mass has been trimmed before search.
181
189
182
190
Returns
183
191
-------
@@ -188,7 +196,7 @@ def element_by_mass(mass, exact=True):
188
196
if isinstance (mass , str ):
189
197
# Convert to float if a string is provided
190
198
mass_trimmed = np .round (float (sub (r"[a-z -]" , "" , mass .lower ())))
191
- if str (mass_trimmed ) != mass :
199
+ if str (mass_trimmed ) != mass and verbose :
192
200
msg1 = (
193
201
f"Letters and spaces are not considered when searching by element mass.\n "
194
202
f"{ mass } became { mass_trimmed } "
@@ -208,13 +216,14 @@ def element_by_mass(mass, exact=True):
208
216
mass_closest = min (
209
217
mass_dict .keys (), key = lambda k : abs (k - mass_trimmed )
210
218
)
211
- msg2 = f"Closest mass to { mass_trimmed } : { mass_closest } "
212
- warnings .warn (msg2 )
219
+ if verbose :
220
+ msg2 = f"Closest mass to { mass_trimmed } : { mass_closest } "
221
+ warnings .warn (msg2 )
213
222
matched_element = mass_dict .get (mass_closest )
214
223
return matched_element
215
224
216
225
217
- def element_by_smarts_string (smarts_string ):
226
+ def element_by_smarts_string (smarts_string , verbose = False ):
218
227
"""Search for an element by a given SMARTS string.
219
228
220
229
Look up an element from a list of known elements by SMARTS string.
@@ -228,6 +237,8 @@ def element_by_smarts_string(smarts_string):
228
237
and look up an Element. Note that this means some SMARTS grammar may
229
238
not be parsed properly. For details, see
230
239
https://github.com/mosdef-hub/foyer/issues/63
240
+ verbose : bool, optional, default=False
241
+ If True, raise warnings if smarts_string has been trimmed before search.
231
242
232
243
Returns
233
244
-------
@@ -267,7 +278,7 @@ def element_by_smarts_string(smarts_string):
267
278
return matched_element
268
279
269
280
270
- def element_by_atom_type (atom_type ):
281
+ def element_by_atom_type (atom_type , verbose = False ):
271
282
"""Search for an element by a given gmso AtomType object.
272
283
273
284
Look up an element from a list of known elements by atom type.
@@ -280,6 +291,8 @@ def element_by_atom_type(atom_type):
280
291
looked up in the order of mass, name, and finally definition (the
281
292
SMARTS string). Because of the loose structure of this class, a
282
293
successful lookup is not guaranteed.
294
+ verbose : bool, optional, default=False
295
+ If True, raise warnings if atom_type has been trimmed before search.
283
296
284
297
Returns
285
298
-------
@@ -291,11 +304,15 @@ def element_by_atom_type(atom_type):
291
304
matched_element = None
292
305
293
306
if matched_element is None and atom_type .mass :
294
- matched_element = element_by_mass (atom_type .mass , exact = False )
307
+ matched_element = element_by_mass (
308
+ atom_type .mass , exact = False , verbose = verbose
309
+ )
295
310
if matched_element is None and atom_type .name :
296
- matched_element = element_by_symbol (atom_type .name )
311
+ matched_element = element_by_symbol (atom_type .name , verbose = verbose )
297
312
if matched_element is None and atom_type .definition :
298
- matched_element = element_by_smarts_string (atom_type .definition )
313
+ matched_element = element_by_smarts_string (
314
+ atom_type .definition , verbose = verbose
315
+ )
299
316
300
317
if matched_element is None :
301
318
raise GMSOError (
0 commit comments