Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def getkerneldescriptors(self,ast, var_name='meta_args'):
descs = ast.get_variable(var_name)
if descs is None:
raise ParseError("kernel call does not contain a {0} type".format(var_name))
try:
nargs=int(descs.shape[0])
except AttributeError as e:
raise ParseError("kernel metadata {0}: {1} variable must be an array".format(self._name, var_name))
if len(descs.shape) is not 1:
raise ParseError("kernel metadata {0}: {1} variable must be a 1 dimensional array".format(self._name, var_name))
if descs.init.find("[") is not -1 and descs.init.find("]") is not -1:
# there is a bug in f2py
raise ParseError("Parser does not currently support [...] initialisation for {0}, please use (/.../) instead".format(var_name))
inits = expr.expression.parseString(descs.init)[0]
nargs=int(descs.shape[0])
if len(inits) != nargs:
raise ParseError("Error, in {0} specification, the number of args {1} and number of dimensions {2} do not match".format(var_name, nargs, len(inits)))
return inits
isinstance(child,fparser.block_statements.Subroutine):
container_name=child.name
break
if container_name is None:
raise ParseError("Error, program, module or subroutine not found in ast")
for statement, depth in fpapi.walk(ast, -1):
if isinstance(statement, fparser.statements.Use):
for name in statement.items:
name_to_module[name] = statement.name
if isinstance(statement, fparser.statements.Call) \
and statement.designator == invoke_name:
statement_kcalls = []
for arg in statement.items:
try:
parsed = expr.expression.parseString(arg)[0]
except ParseException:
raise ParseError("Failed to parse string: {0}".format(arg))
argname = parsed.name
argargs=[]
for a in parsed.args:
if type(a) is str: # a literal is being passed by argument
argargs.append(Arg('literal',a))
else: # assume argument parsed as a FunctionVar
variableName = a.name
if a.args is not None:
# argument is an indexed array so extract the full text
fullText = ""
for tok in a.walk_skipping_name():
fullText+=str(tok)
argargs.append(Arg('indexed_variable',fullText,variableName))
@staticmethod
def unpack(string):
p = expr.expression.parseString(string)[0]
dim = 1
if isinstance(p, expr.BinaryOperator) and p.symbols[0] == '**':
dim = int(p.operands[1])
p = p.operands[0]
ele = Element.unpack(p)
return FunctionSpace(ele, dim)
@staticmethod
def unpack(string_or_expr):
if isinstance(string_or_expr, str):
p = expr.expression.parseString(string_or_expr)[0]
else:
p = string_or_expr
if isinstance(p, expr.Grouping):
p = p.expr
if isinstance(p, expr.BinaryOperator):
assert all(a == '*' for a in p.symbols)
eles = p.operands
else:
assert isinstance(p, expr.FunctionVar)
eles = [p]
order = eles[0].args[0] if eles[0].args else None
ele = Element(eles[0].name, order)
for e in eles[1:]:
order = e.args[0] if e.args else None
ele *= Element(e.name, order)
return ele