Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def __init__(self, api="", invoke_name="invoke", kernel_path="",
line_length=False):
self._invoke_name = invoke_name
self._kernel_path = kernel_path
self._line_length = line_length
_config = Config.get()
if not api:
api = _config.default_api
else:
check_api(api)
self._api = api
self._arg_name_to_module_name = {}
self._unique_invoke_labels = []
# Use the get_builtin_defs helper function to access
# information about the builtins supported by this API. The
# first argument contains the names of the builtins and the
# second is the file where these names are defined.
self._builtin_name_map, \
self._builtin_defs_file = get_builtin_defs(self._api)
'''
if distributed_memory is None:
distributed_memory = Config.get().distributed_memory
# pylint: disable=too-many-statements, too-many-locals, too-many-branches
if api == "":
api = Config.get().default_api
else:
if api not in Config.get().supported_apis:
raise GenerationError(
"generate: Unsupported API '{0}' specified. Supported "
"types are {1}.".format(api, Config.get().supported_apis))
# Store Kernel-output options in our Configuration object
Config.get().kernel_output_dir = kern_out_path
try:
Config.get().kernel_naming = kern_naming
except ValueError as verr:
raise GenerationError("Invalid kernel-renaming scheme supplied: {0}".
format(str(verr)))
if not os.path.isfile(filename):
raise IOError("file '{0}' not found".format(filename))
if kernel_path and not os.access(kernel_path, os.R_OK):
raise IOError("kernel search path '{0}' not found".format(kernel_path))
try:
from psyclone.alg_gen import Alg
ast, invoke_info = parse(filename, api=api, invoke_name="invoke",
kernel_path=kernel_path,
line_length=line_length)
psy = PSyFactory(api, distributed_memory=distributed_memory)\
orphaned Directive without its parent \
Directive.
'''
# First check constraints on Nodes in the node_list common to
# all RegionTrans transformations.
super(ExtractRegionTrans, self)._validate(node_list)
# Now check ExtractRegionTrans specific constraints.
# Extracting distributed memory code is not supported due to
# generation of infrastructure calls to set halos dirty or clean.
# This constraint covers the presence of HaloExchange and
# GlobalSum classses as they are only generated when distributed
# memory is enabled.
if Config.get().distributed_memory:
raise TransformationError(
"Error in {0}: Distributed memory is not supported."
.format(str(self.name)))
# Check constraints not covered by valid_node_types for
# individual Nodes in node_list.
from psyclone.psyGen import Loop, Kern, BuiltIn, Directive, \
OMPParallelDirective, ACCParallelDirective
for node in node_list:
# Check that ExtractNode is not inserted between a Kernel or
# a BuiltIn call and its parent Loop.
if isinstance(node, (Kern, BuiltIn)) and \
isinstance(node.parent, Loop):
raise TransformationError(
def __init__(self, parent=None, variable_name=''):
valid_loop_types = Config.get().api_conf("nemo").get_valid_loop_types()
Loop.__init__(self, parent=parent,
variable_name=variable_name,
valid_loop_types=valid_loop_types)
clashes with an existing symbol name.
:type root_name: str or NoneType
:returns: the new unique symbol name.
:rtype: str
:raises TypeError: if the root_name argument is not a string \
or None.
'''
if root_name is not None and not isinstance(root_name, str):
raise TypeError(
"Argument root_name should be of type str or NoneType but "
"found '{0}'.".format(type(root_name).__name__))
if not root_name:
root_name = Config.get().psyir_root_name
candidate_name = root_name
idx = 1
while candidate_name in self._symbols:
candidate_name = "{0}_{1}".format(root_name, idx)
idx += 1
return candidate_name
def __init__(self, api=""):
if not api:
_config = Config.get()
self._type = _config.default_api
else:
check_api(api)
self._type = api
def main(args):
'''
Parses and checks the command line arguments, calls the generate
function if all is well, catches any errors and outputs the
results.
:param list args: the list of command-line arguments that PSyclone has \
been invoked with.
'''
# pylint: disable=too-many-statements,too-many-branches
# Make sure we have the supported APIs defined in the Config singleton,
# but postpone loading the config file till the command line was parsed
# in case that the user specifies a different config file.
Config.get(do_not_load_file=True)
parser = argparse.ArgumentParser(
description='Run the PSyclone code generator on a particular file')
parser.add_argument('-oalg', help='filename of transformed algorithm code')
parser.add_argument(
'-opsy', help='filename of generated PSy code')
parser.add_argument('-okern',
help='directory in which to put transformed kernels, '
'default is the current working directory.')
parser.add_argument('-api',
help='choose a particular api from {0}, '
'default \'{1}\'.'
.format(str(Config.get().supported_apis),
Config.get().default_api))
parser.add_argument('filename', help='algorithm-layer source code')
parser.add_argument('-s', '--script', help='filename of a PSyclone'
colours_loop.iteration_space = node.iteration_space
colours_loop.set_lower_bound("start")
colours_loop.set_upper_bound("ncolours")
# Add this loop as a child of the original node's parent
node_parent.addchild(colours_loop, index=node_position)
# create a colour loop. This loops over a particular colour and
# can be run in parallel
colour_loop = node.__class__(parent=colours_loop, loop_type="colour")
colour_loop.field_space = node.field_space
colour_loop.field_name = node.field_name
colour_loop.iteration_space = node.iteration_space
colour_loop.set_lower_bound("start")
colour_loop.kernel = node.kernel
if Config.get().distributed_memory:
index = node.upper_bound_halo_depth
colour_loop.set_upper_bound("colour_halo", index)
else: # no distributed memory
colour_loop.set_upper_bound("ncolour")
# Add this loop as a child of our loop over colours
colours_loop.addchild(colour_loop)
# add contents of node to colour loop
colour_loop.children.extend(node.children)
# change the parent of the node's contents to the colour loop
for child in node.children:
child.parent = colour_loop
# remove original loop
node_parent.children.remove(node)