Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
elif selstr[which - 1] == ')':
msg = ('an arithmetic, comparison, or logical operator '
'must follow the closing parenthesis')
else:
msg = 'parsing failed here'
else:
msg = 'parsing failed here'
raise SelectionError(selstr, err.column, msg + '\n' + str(err))
else:
if DEBUG: print('_evalSelstr', tokens)
torf = tokens[0]
if not isinstance(torf, ndarray):
if DEBUG: print(torf)
raise SelectionError(selstr)
elif torf.dtype != bool:
if DEBUG:
print('_select torf.dtype', torf.dtype, isinstance(torf.dtype,
bool))
raise SelectionError(selstr)
if DEBUG:
print('_select', torf)
return torf
def _index(self, sel, loc, tokens, subset=None):
debug(sel, loc, '_index', tokens)
label = tokens.pop(0)
torf = zeros(self._ag.numAtoms(), bool)
for token in tokens:
try:
remainder = token % 1.
except TypeError:
pass
else:
return None, SelectionError(sel, loc, 'it is a number, index')
if remainder == 0:
try:
torf[token] = True
except IndexError:
pass
else:
SelectionWarning(sel, loc, '{0} must be followed by '
'integers and/or number ranges'.format(repr(label)),
[label, token])
continue
try:
token.pattern
except AttributeError:
pass
else:
def regularExpParseAction(sel, loc, token):
token = token[0]
if token == '""':
raise SelectionError(sel, loc, '"" is invalid, no regular expression')
try:
regexp = re_compile(token[1:-1])
except:
raise SelectionError(sel, loc, 'failed to compile regular '
'expression {0}'.format(repr(token)))
else:
return regexp
return data, False
field = ATOMIC_FIELDS.get(FIELDS_SYNONYMS.get(keyword, keyword))
if field is None:
data = self._atoms._getData(keyword)
if data is None:
return None, SelectionError(sel, loc, '{0} is not a valid '
'data label'.format(repr(keyword)))
elif not isinstance(data, ndarray) and data.ndim == 1:
return None, SelectionError(sel, loc, '{0} is not a 1d '
'array'.format(repr(keyword)))
else:
try:
data = getattr(self._atoms, '_get' + field.meth_pl)()
except Exception as err:
return None, SelectionError(sel, loc, str(err))
if data is None:
return None, SelectionError(sel, loc, '{0} is not set'
.format(repr(keyword)))
self._data[keyword] = data
return data, False
pass
else:
# i don't expect that a string array may show up
if dtype == bool:
return None, SelectionError(sel, loc, 'operands and function '
'arguments must be numbers or numeric data labels')
else:
return arg, False
# no regular expressions
try:
pattern = arg.pattern
except AttributeError:
pass
else:
return None, SelectionError(sel, sel.index(pattern, loc),
'operands and function arguments cannot be regular expressions')
if arg in XYZ2INDEX:
coords = self._getCoords() # how about atoms._getCoords() ?
if coords is None:
return None, SelectionError(sel, loc,
'coordinates are not set')
else:
if copy:
return coords[:, XYZ2INDEX[arg]].copy(), False
else:
return coords[:, XYZ2INDEX[arg]], False
arg = FIELDS_SYNONYMS.get(arg, arg)
try:
if copy:
data = self._atoms.getData(arg)
def _bondedto(self, sel, loc, tokens):
"""Expand selection to immediately bonded atoms."""
debug(sel, loc, '_bondedto', tokens)
label, torf = tokens
token = label[1]
label = ' '.join(label)
if token == 'to':
repeat = 1
else:
try:
repeat = int(token)
except TypeError:
return None, SelectionError(sel, loc, '{0} in {0} could not '
'be converted to an integer'.format(token, repr(label)),
[label])
else:
if float(token) != repeat:
SelectionWarning(sel, loc, 'number in {0} should be an '
'integer'.format(repr(label)), [label])
if repeat <= 0:
SelectionWarning(sel, loc, 'number in {0} should be a '
'positive integer'.format(repr(label)), [label])
return zeros(self._atoms.numAtoms(), bool), False
bmap = self._ag._bmap
if bmap is None:
return None, SelectionError(sel, loc, 'bonds are not set',
[label])
def _within(self, sel, loc, tokens):
"""Perform distance based selection."""
if DEBUG: print('_within', tokens)
label, which = tokens
within = label[1]
label = ' '.join(label)
try:
within = float(within)
except Exception as err:
return None, SelectionError('could not convert {0} in {1} to '
'float ({2})'.format(within, repr(label), str(err)),
[label, within])
exclude = label.startswith('ex')
other = False
try:
dtype = which.dtype
except AttributeError:
if which in self._kwargs:
coords = self._kwargs[which]
try:
ndim, shape = coords.ndim, coords.shape
except AttributeError:
try:
coords = coords._getCoords()
except AttributeError:
self._data[keyword] = data
return data, False
if keyword == 'index':
try:
data = self._atoms._getIndices()
except AttributeError:
data = arange(self._atoms.numAtoms())
self._data['index'] = data
return data, False
field = ATOMIC_FIELDS.get(FIELDS_SYNONYMS.get(keyword, keyword))
if field is None:
data = self._atoms._getData(keyword)
if data is None:
return None, SelectionError(sel, loc, '{0} is not a valid '
'data label'.format(repr(keyword)))
elif not isinstance(data, ndarray) and data.ndim == 1:
return None, SelectionError(sel, loc, '{0} is not a 1d '
'array'.format(repr(keyword)))
else:
try:
data = getattr(self._atoms, '_get' + field.meth_pl)()
except Exception as err:
return None, SelectionError(sel, loc, str(err))
if data is None:
return None, SelectionError(sel, loc, '{0} is not set'
.format(repr(keyword)))
self._data[keyword] = data
return data, False
return None, SelectionError(sel, loc, 'incorrect '
'use of `same as` statement, expected {0}'
.format('same entity as ...'), [token])
append((token, tokens.pop(0), tokens.pop(0)))
elif token.endswith('within'):
if len(tokens) < 3 or tokens[1] != 'of':
return None, SelectionError(sel, loc, 'incorrect '
'use of `within` statement, expected {0}'
.format('[ex]within x.y of ...'), [token])
append((token, tokens.pop(0), tokens.pop(0)))
elif token.endswith('bonded'):
token2 = tokens.pop(0)
if len(tokens) < (1 + int(token2 == 'to')):
return None, SelectionError(sel, loc, 'incorrect '
'use of `bonded` statement, expected {0}'
.format('[ex]bonded [n] to ...'), [token2])
if token2 == 'to':
append((token, 'to'))
else:
append((token, token2, tokens.pop(0)))
anyargs = False
while tokens:
next = tokens[0]
try:
dtype = next.dtype
except AttributeError:
append(tokens.pop(0))
if next == 'and' or isFlagLabel(next):
break