diff --git a/doc/conf.py b/doc/conf.py index a5dc4e4eb32d1fa44dd15eefcf7b7e26bddf32eb..301604607ef9543b559aa7cfdaf875e9140f1299 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -54,7 +54,7 @@ copyright = u'2011, Andreas Klöckner' # # The short X.Y version. ver_dic = {} -execfile("../loopy/version.py", ver_dic) +exec(compile(open("../loopy/version.py").read(), "../loopy/version.py", 'exec'), ver_dic) version = ".".join(str(x) for x in ver_dic["VERSION"]) # The full version, including alpha/beta/rc tags. release = ver_dic["VERSION_TEXT"] diff --git a/loopy/__init__.py b/loopy/__init__.py index 97dcaa73f83291686d9464400497bdaaedc11e8c..b79eeeee617dc3014953840d70be846cbf13c0ba 100644 --- a/loopy/__init__.py +++ b/loopy/__init__.py @@ -1,4 +1,8 @@ from __future__ import division +from __future__ import absolute_import +import six +from six.moves import range +from six.moves import zip __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -442,13 +446,13 @@ def tag_inames(kernel, iname_to_tag, force=False): from loopy.kernel.data import parse_tag iname_to_tag = dict((iname, parse_tag(tag)) - for iname, tag in iname_to_tag.iteritems()) + for iname, tag in six.iteritems(iname_to_tag)) from loopy.kernel.data import (ParallelTag, AutoLocalIndexTagBase, ForceSequentialTag) new_iname_to_tag = kernel.iname_to_tag.copy() - for iname, new_tag in iname_to_tag.iteritems(): + for iname, new_tag in six.iteritems(iname_to_tag): if iname not in kernel.all_inames(): raise LoopyError("iname '%s' does not exist" % iname) @@ -498,7 +502,7 @@ class _InameDuplicator(ExpandingIdentityMapper): rules, make_unique_var_name) self.old_to_new = old_to_new - self.old_inames_set = set(old_to_new.iterkeys()) + self.old_inames_set = set(six.iterkeys(old_to_new)) self.within = within def map_reduction(self, expr, expn_state): @@ -595,7 +599,7 @@ def duplicate_inames(knl, inames, within, new_inames=None, suffix=None, # {{{ change the inames in the code indup = _InameDuplicator(knl.substitutions, name_gen, - old_to_new=dict(zip(inames, new_inames)), + old_to_new=dict(list(zip(inames, new_inames))), within=within) knl = indup.map_kernel(knl) @@ -1245,7 +1249,7 @@ def _fix_parameter(kernel, name, value): new_args.append(arg.map_exprs(map_expr)) new_temp_vars = {} - for tv in kernel.temporary_variables.itervalues(): + for tv in six.itervalues(kernel.temporary_variables): new_temp_vars[tv.name] = tv.map_exprs(map_expr) from loopy.context_matching import parse_stack_match @@ -1265,7 +1269,7 @@ def _fix_parameter(kernel, name, value): def fix_parameters(kernel, **value_dict): - for name, value in value_dict.iteritems(): + for name, value in six.iteritems(value_dict): kernel = _fix_parameter(kernel, name, value) return kernel @@ -1310,7 +1314,7 @@ def set_options(kernel, *args, **kwargs): new_opt = kernel.options.copy() if kwargs: - for key, val in kwargs.iteritems(): + for key, val in six.iteritems(kwargs): if not hasattr(new_opt, key): raise ValueError("unknown option '%s'" % key) diff --git a/loopy/auto_test.py b/loopy/auto_test.py index f08a95614bd58723eced6023b8ddb7257c442289..83b3513c57ee59b4d069b6cb94c461313820b2d5 100644 --- a/loopy/auto_test.py +++ b/loopy/auto_test.py @@ -1,4 +1,7 @@ from __future__ import division +from __future__ import absolute_import +from six.moves import range +from six.moves import zip __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" diff --git a/loopy/check.py b/loopy/check.py index 0f1627ad3004ca061bfa92797cf14a023ca6d2f6..d3fecda62d69de5ba134a16556cc8cdbce5a7ccf 100644 --- a/loopy/check.py +++ b/loopy/check.py @@ -1,4 +1,7 @@ from __future__ import division +from __future__ import absolute_import +import six +from six.moves import range __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -36,7 +39,7 @@ logger = logging.getLogger(__name__) # {{{ sanity checks run pre-scheduling def check_temp_variable_shapes_are_constant(kernel): - for tv in kernel.temporary_variables.itervalues(): + for tv in six.itervalues(kernel.temporary_variables): if any(not is_integer(s_i) for s_i in tv.shape): raise LoopyError("shape of temporary variable '%s' is not " "constant (but has to be since the size of " @@ -211,7 +214,7 @@ def check_for_orphaned_user_hardware_axes(kernel): from loopy.kernel.data import LocalIndexTag for axis in kernel.local_sizes: found = False - for tag in kernel.iname_to_tag.itervalues(): + for tag in six.itervalues(kernel.iname_to_tag): if isinstance(tag, LocalIndexTag) and tag.axis == axis: found = True break @@ -293,7 +296,7 @@ class _AccessCheckMapper(WalkMapper): return shape_domain = isl.BasicSet.universe(access_range.get_space()) - for idim in xrange(len(subscript)): + for idim in range(len(subscript)): from loopy.isl_helpers import make_slab slab = make_slab( shape_domain.get_space(), (dim_type.in_, idim), @@ -490,7 +493,7 @@ def check_implemented_domains(kernel, implemented_domains, code=None): from islpy import align_two - for insn_id, idomains in implemented_domains.iteritems(): + for insn_id, idomains in six.iteritems(implemented_domains): insn = kernel.id_to_insn[insn_id] assert idomains diff --git a/loopy/codegen/__init__.py b/loopy/codegen/__init__.py index cbc64add728a51b0d68584edc479022b5a78fcdc..3a2a351f3d534eff546fc50280d0109a5f69fbff 100644 --- a/loopy/codegen/__init__.py +++ b/loopy/codegen/__init__.py @@ -1,4 +1,6 @@ from __future__ import division +from __future__ import absolute_import +import six __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -69,7 +71,7 @@ def gen_code_block(elements): for el in elements: if isinstance(el, GeneratedCode): - for insn_id, idoms in el.implemented_domains.iteritems(): + for insn_id, idoms in six.iteritems(el.implemented_domains): implemented_domains.setdefault(insn_id, []).extend(idoms) if isinstance(el.ast, Block): @@ -379,7 +381,7 @@ def generate_code(kernel, device=None): from cgen.opencl import (CLKernel, CLRequiredWorkGroupSize) allow_complex = False - for var in kernel.args + list(kernel.temporary_variables.itervalues()): + for var in kernel.args + list(six.itervalues(kernel.temporary_variables)): if var.dtype.kind == "c": allow_complex = True @@ -437,7 +439,7 @@ def generate_code(kernel, device=None): body.extend( idi.cgen_declarator - for tv in kernel.temporary_variables.itervalues() + for tv in six.itervalues(kernel.temporary_variables) for idi in tv.decl_info( is_written=True, index_dtype=kernel.index_dtype)) @@ -472,7 +474,7 @@ def generate_code(kernel, device=None): for arg in kernel.args: seen_dtypes.add(arg.dtype) - for tv in kernel.temporary_variables.itervalues(): + for tv in six.itervalues(kernel.temporary_variables): seen_dtypes.add(tv.dtype) preambles = kernel.preambles[:] diff --git a/loopy/codegen/control.py b/loopy/codegen/control.py index 4636f07087257bd9b17904a2922485b8c662ce0d..44426c3519e03c9f6cbfe5990324d824c43132b7 100644 --- a/loopy/codegen/control.py +++ b/loopy/codegen/control.py @@ -1,6 +1,8 @@ """Loop nest build top-level control/hoisting.""" from __future__ import division +from __future__ import absolute_import +import six __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -43,7 +45,7 @@ def get_admissible_conditional_inames_for(kernel, sched_index): has_barrier = has_barrier_within(kernel, sched_index) - for iname, tag in kernel.iname_to_tag.iteritems(): + for iname, tag in six.iteritems(kernel.iname_to_tag): if isinstance(tag, HardwareParallelTag): if not has_barrier or not isinstance(tag, LocalIndexTag): result.add(iname) @@ -116,7 +118,7 @@ def remove_inames_for_shared_hw_axes(kernel, cond_inames): tag_key_uses.setdefault(tag.key, []).append(iname) multi_use_keys = set( - key for key, user_inames in tag_key_uses.iteritems() + key for key, user_inames in six.iteritems(tag_key_uses) if len(user_inames) > 1) multi_use_inames = set() diff --git a/loopy/codegen/expression.py b/loopy/codegen/expression.py index 5783eee4cc220af5fd142a8c40138d9a44c77033..87ebf2384143d12d759fc09e348019465d185dda 100644 --- a/loopy/codegen/expression.py +++ b/loopy/codegen/expression.py @@ -1,4 +1,7 @@ from __future__ import division +from __future__ import absolute_import +from six.moves import range +from six.moves import zip __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -257,7 +260,7 @@ def dtype_to_type_context(dtype): return 'd' if dtype in [np.float32, np.complex64]: return 'f' - if dtype in cl.array.vec.types.values(): + if dtype in list(cl.array.vec.types.values()): return dtype_to_type_context(dtype.fields["x"][0]) return None diff --git a/loopy/codegen/instruction.py b/loopy/codegen/instruction.py index e10348a561a3ef101dd3fbed923947bd88f53cfa..a04bd6ae390965c55c01b64bea2aa71c92f51ba9 100644 --- a/loopy/codegen/instruction.py +++ b/loopy/codegen/instruction.py @@ -1,5 +1,7 @@ """Code generation for Instruction objects.""" from __future__ import division +from __future__ import absolute_import +from six.moves import range __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" diff --git a/loopy/codegen/loop.py b/loopy/codegen/loop.py index c3b2881ad0561324c28b859f66a0d063420a12e6..70e52eb37d277aee457963e013aee793f8b86db4 100644 --- a/loopy/codegen/loop.py +++ b/loopy/codegen/loop.py @@ -1,4 +1,6 @@ from __future__ import division +from __future__ import absolute_import +from six.moves import range __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" diff --git a/loopy/compiled.py b/loopy/compiled.py index 02e95c26aa0f162995eaab1c1b59d3942c5b7ea1..14a2ed46a0bb93eeb4c7341702b7ab07ddb52208 100644 --- a/loopy/compiled.py +++ b/loopy/compiled.py @@ -1,4 +1,8 @@ from __future__ import division, with_statement +from __future__ import absolute_import +import six +from six.moves import range +from six.moves import zip __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -85,7 +89,7 @@ class SeparateArrayPackingController(object): kernel_kwargs = kernel_kwargs.copy() - for packing_info in self.packing_info.itervalues(): + for packing_info in six.itervalues(self.packing_info): arg_name = packing_info.name if packing_info.name in kernel_kwargs: arg = kernel_kwargs[arg_name] @@ -100,7 +104,7 @@ class SeparateArrayPackingController(object): if not self.packing_info: return outputs - for packing_info in self.packing_info.itervalues(): + for packing_info in six.itervalues(self.packing_info): if not packing_info.is_written: continue @@ -180,7 +184,7 @@ def generate_integer_arg_finding_from_shapes(gen, kernel, impl_arg_info, options gen("# {{{ find integer arguments from shapes") gen("") - for iarg_name, sources in iarg_to_sources.iteritems(): + for iarg_name, sources in six.iteritems(iarg_to_sources): gen("if %s is None:" % iarg_name) with Indentation(gen): if_stmt = "if" @@ -408,26 +412,26 @@ def generate_array_arg_setup(gen, kernel, impl_arg_info, options): gen("if %s is None:" % arg.name) with Indentation(gen): num_axes = len(arg.strides) - for i in xrange(num_axes): + for i in range(num_axes): gen("_lpy_shape_%d = %s" % (i, strify(arg.unvec_shape[i]))) itemsize = kernel_arg.dtype.itemsize - for i in xrange(num_axes): + for i in range(num_axes): gen("_lpy_strides_%d = %s" % (i, strify( itemsize*arg.unvec_strides[i]))) if not options.skip_arg_checks: - for i in xrange(num_axes): + for i in range(num_axes): gen("assert _lpy_strides_%d > 0, " "\"'%s' has negative stride in axis %d\"" % (i, arg.name, i)) sym_strides = tuple( var("_lpy_strides_%d" % i) - for i in xrange(num_axes)) + for i in range(num_axes)) sym_shape = tuple( var("_lpy_shape_%d" % i) - for i in xrange(num_axes)) + for i in range(num_axes)) alloc_size_expr = (sum(astrd*(alen-1) for alen, astrd in zip(sym_shape, sym_strides)) @@ -444,7 +448,7 @@ def generate_array_arg_setup(gen, kernel, impl_arg_info, options): dtype=python_dtype_str(arg.dtype))) if not options.skip_arg_checks: - for i in xrange(num_axes): + for i in range(num_axes): gen("del _lpy_shape_%d" % i) gen("del _lpy_strides_%d" % i) gen("del _lpy_alloc_size") @@ -724,7 +728,7 @@ class CompiledKernel: def get_code(self, arg_to_dtype=None): if arg_to_dtype is not None: - arg_to_dtype = frozenset(arg_to_dtype.iteritems()) + arg_to_dtype = frozenset(six.iteritems(arg_to_dtype)) kernel = self.get_typed_and_scheduled_kernel(arg_to_dtype) @@ -779,7 +783,7 @@ class CompiledKernel: impl_arg_to_arg = self.kernel.impl_arg_to_arg arg_to_dtype = {} - for arg_name, val in kwargs.iteritems(): + for arg_name, val in six.iteritems(kwargs): arg = impl_arg_to_arg.get(arg_name, None) if arg is None: @@ -795,7 +799,7 @@ class CompiledKernel: arg_to_dtype[arg_name] = dtype kernel_info = self.cl_kernel_info( - frozenset(arg_to_dtype.iteritems())) + frozenset(six.iteritems(arg_to_dtype))) return kernel_info.invoker( kernel_info.cl_kernel, queue, allocator, wait_for, diff --git a/loopy/context_matching.py b/loopy/context_matching.py index 57ccf9d27abe2e1d78dbcf7fdd7d852efb8e9771..a80aa04c9cc85c7bc6e925c131d836c48a0273de 100644 --- a/loopy/context_matching.py +++ b/loopy/context_matching.py @@ -2,6 +2,8 @@ rule invocations stacks.""" from __future__ import division +from __future__ import absolute_import +from six.moves import range __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -158,7 +160,7 @@ class StackWildcardMatch(StackMatchBase): if self.up_match(stack): return True - for i in xrange(1, n): + for i in range(1, n): if self.up_match(stack[:-i]): return True diff --git a/loopy/isl_helpers.py b/loopy/isl_helpers.py index 7ae22f98f01f8d417ad53face458be0e77c45316..754944cefb68a4f7bdbc2f2aa9f7de29268b66cd 100644 --- a/loopy/isl_helpers.py +++ b/loopy/isl_helpers.py @@ -1,6 +1,9 @@ """isl helpers""" from __future__ import division +from __future__ import absolute_import +from six.moves import range +from six.moves import zip __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -370,8 +373,8 @@ def boxify(cache_manager, domain, box_inames, context): box_iname_indices = [var_dict[iname][1] for iname in box_inames] n_nonbox_inames = min(box_iname_indices) - assert box_iname_indices == range( - n_nonbox_inames, domain.dim(dim_type.set)) + assert box_iname_indices == list(range( + n_nonbox_inames, domain.dim(dim_type.set))) n_old_parameters = domain.dim(dim_type.param) domain = domain.move_dims( @@ -380,7 +383,7 @@ def boxify(cache_manager, domain, box_inames, context): result = domain.universe_like() zero = isl.Aff.zero_on_domain(result.space) - for i in xrange(len(box_iname_indices)): + for i in range(len(box_iname_indices)): iname_aff = zero.add_coefficient_val(dim_type.in_, i, 1) def add_in_dims(aff): diff --git a/loopy/kernel/__init__.py b/loopy/kernel/__init__.py index ee1e0472b3868512e9e50564e3707c6656df105e..8f10fd8d30aba88a3bc4ac544553a93d04846170 100644 --- a/loopy/kernel/__init__.py +++ b/loopy/kernel/__init__.py @@ -1,6 +1,10 @@ """Kernel object.""" from __future__ import division +from __future__ import absolute_import +import six +from six.moves import range +from six.moves import zip __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -218,7 +222,7 @@ class LoopKernel(RecordWithoutPickling): dom0_space = domains[0].get_space() assumptions_space = isl.Space.params_alloc( dom0_space.get_ctx(), dom0_space.dim(dim_type.param)) - for i in xrange(dom0_space.dim(dim_type.param)): + for i in range(dom0_space.dim(dim_type.param)): assumptions_space = assumptions_space.set_dim_name( dim_type.param, i, dom0_space.get_dim_name(dim_type.param, i)) @@ -294,14 +298,14 @@ class LoopKernel(RecordWithoutPickling): @memoize_method def non_iname_variable_names(self): - return (set(self.arg_dict.iterkeys()) - | set(self.temporary_variables.iterkeys())) + return (set(six.iterkeys(self.arg_dict)) + | set(six.iterkeys(self.temporary_variables))) @memoize_method def all_variable_names(self): return ( - set(self.temporary_variables.iterkeys()) - | set(self.substitutions.iterkeys()) + set(six.iterkeys(self.temporary_variables)) + | set(six.iterkeys(self.substitutions)) | set(arg.name for arg in self.args) | set(self.all_inames())) @@ -551,7 +555,7 @@ class LoopKernel(RecordWithoutPickling): root_to_leaf[current_root] = home_domain_index domain_indices.update(domain_parents) - return root_to_leaf.values() + return list(root_to_leaf.values()) @memoize_method def _get_inames_domain_backend(self, inames): @@ -607,7 +611,7 @@ class LoopKernel(RecordWithoutPickling): @memoize_method def all_referenced_inames(self): result = set() - for inames in self.all_insn_inames().itervalues(): + for inames in six.itervalues(self.all_insn_inames()): result.update(inames) return result @@ -675,7 +679,7 @@ class LoopKernel(RecordWithoutPickling): admissible_vars = ( set(arg.name for arg in self.args) - | set(self.temporary_variables.iterkeys())) + | set(six.iterkeys(self.temporary_variables))) for insn in self.instructions: for var_name in insn.read_dependency_names() & admissible_vars: @@ -842,7 +846,7 @@ class LoopKernel(RecordWithoutPickling): forced_sizes = forced_sizes.copy() size_list = [] - sorted_axes = sorted(size_dict.iterkeys()) + sorted_axes = sorted(six.iterkeys(size_dict)) while sorted_axes or forced_sizes: if sorted_axes: @@ -884,11 +888,11 @@ class LoopKernel(RecordWithoutPickling): def local_var_names(self): return set( tv.name - for tv in self.temporary_variables.itervalues() + for tv in six.itervalues(self.temporary_variables) if tv.is_local) def local_mem_use(self): - return sum(lv.nbytes for lv in self.temporary_variables.itervalues() + return sum(lv.nbytes for lv in six.itervalues(self.temporary_variables) if lv.is_local) # }}} @@ -919,13 +923,13 @@ class LoopKernel(RecordWithoutPickling): if self.substitutions: lines.append(sep) lines.append("SUBSTIUTION RULES:") - for rule_name in sorted(self.substitutions.iterkeys()): + for rule_name in sorted(six.iterkeys(self.substitutions)): lines.append(str(self.substitutions[rule_name])) if self.temporary_variables: lines.append(sep) lines.append("TEMPORARIES:") - for tv in sorted(self.temporary_variables.itervalues(), + for tv in sorted(six.itervalues(self.temporary_variables), key=lambda tv: tv.name): lines.append(str(tv)) @@ -1049,7 +1053,7 @@ class LoopKernel(RecordWithoutPickling): def __setstate__(self, state): new_fields = set() - for k, v in state.iteritems(): + for k, v in six.iteritems(state): setattr(self, k, v) new_fields.add(k) diff --git a/loopy/kernel/array.py b/loopy/kernel/array.py index 80c04ce6bfc9c144af4f3d376ac803538dff5874..d6a34037a998e38a52086a75ab6a0339a78023ff 100644 --- a/loopy/kernel/array.py +++ b/loopy/kernel/array.py @@ -1,6 +1,9 @@ """Implementation tagging of array axes.""" from __future__ import division +from __future__ import absolute_import +from six.moves import range +from six.moves import zip __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -543,7 +546,7 @@ class ArrayBase(Record): if isinstance(dim_tag, _StrideArrayDimTagBase): target_axes.add(dim_tag.target_axis) - if target_axes != set(xrange(len(target_axes))): + if target_axes != set(range(len(target_axes))): raise ValueError("target axes for variable '%s' are non-" "contiguous" % self.name) @@ -856,7 +859,7 @@ class ArrayBase(Record): "integer axis %d (0-based)" % ( self.name, user_axis)) - for i in xrange(shape_i): + for i in range(shape_i): for res in gen_decls(name_suffix + "_s%d" % i, shape, strides, unvec_shape, unvec_strides, stride_arg_axes, dtype, diff --git a/loopy/kernel/creation.py b/loopy/kernel/creation.py index b467420e4349846ae509af8fa08089906612b522..b932d448a47cd328755c20b7e567642276f1565a 100644 --- a/loopy/kernel/creation.py +++ b/loopy/kernel/creation.py @@ -1,6 +1,10 @@ """UI for kernel creation.""" from __future__ import division +from __future__ import absolute_import +import six +from six.moves import range +from six.moves import zip __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -377,7 +381,7 @@ def parse_domains(ctx, domains, defines): assert isinstance(dom, (isl.Set, isl.BasicSet)) # assert dom.get_ctx() == ctx - for i_iname in xrange(dom.dim(dim_type.set)): + for i_iname in range(dom.dim(dim_type.set)): iname = dom.get_dim_name(dim_type.set, i_iname) if iname is None: @@ -507,7 +511,7 @@ class ArgumentGuesser: # {{{ find names that are *not* arguments - temp_var_names = set(self.temporary_variables.iterkeys()) + temp_var_names = set(six.iterkeys(self.temporary_variables)) for insn in self.instructions: if isinstance(insn, ExpressionInstruction): @@ -627,7 +631,7 @@ def check_for_multiple_writes_to_loop_bounds(knl): def check_written_variable_names(knl): admissible_vars = ( set(arg.name for arg in knl.args) - | set(knl.temporary_variables.iterkeys())) + | set(six.iterkeys(knl.temporary_variables))) for insn in knl.instructions: for var_name, _ in insn.assignees_and_indices(): @@ -771,7 +775,7 @@ def determine_shapes_of_temporaries(knl): import loopy as lp new_temp_vars = {} - for tv in knl.temporary_variables.itervalues(): + for tv in six.itervalues(knl.temporary_variables): if tv.shape is lp.auto or tv.base_indices is lp.auto: armap = AccessRangeMapper(knl, tv.name) for insn in knl.instructions: @@ -781,10 +785,10 @@ def determine_shapes_of_temporaries(knl): knl.insn_inames(insn)) if armap.access_range is not None: - base_indices, shape = zip(*[ + base_indices, shape = list(zip(*[ knl.cache_manager.base_index_and_length( armap.access_range, i) - for i in xrange(armap.access_range.dim(dim_type.set))]) + for i in range(armap.access_range.dim(dim_type.set))])) else: if armap.bad_subscripts: raise RuntimeError("cannot determine access range for '%s': " @@ -826,7 +830,7 @@ def expand_defines_in_shapes(kernel, defines): processed_args.append(arg) processed_temp_vars = {} - for tv in kernel.temporary_variables.itervalues(): + for tv in six.itervalues(kernel.temporary_variables): processed_temp_vars[tv.name] = tv.map_exprs(expr_map) return kernel.copy( @@ -883,7 +887,7 @@ def guess_arg_shape_if_requested(kernel, default_order): from loopy.symbolic import pw_aff_to_expr shape = [] - for i in xrange(armap.access_range.dim(dim_type.set)): + for i in range(armap.access_range.dim(dim_type.set)): try: shape.append( pw_aff_to_expr(static_max_of_pw_aff( diff --git a/loopy/kernel/tools.py b/loopy/kernel/tools.py index 2a54447777e42a6d5f2330c694e1cb6828893270..bd1fcb449320b5bab98b5d69cd0239621a61076a 100644 --- a/loopy/kernel/tools.py +++ b/loopy/kernel/tools.py @@ -1,6 +1,8 @@ """Operations on the kernel object.""" from __future__ import division +from __future__ import absolute_import +import six __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -225,7 +227,7 @@ def find_all_insn_inames(kernel): logger.debug("%s: find_all_insn_inames: done" % kernel.name) - for v in insn_id_to_inames.itervalues(): + for v in six.itervalues(insn_id_to_inames): assert isinstance(v, frozenset) return insn_id_to_inames @@ -518,7 +520,7 @@ class DomainParameterFinder(object): def __call__(self, kwargs): result = {} - for param_name, sources in self.param_to_sources.iteritems(): + for param_name, sources in six.iteritems(self.param_to_sources): if param_name not in kwargs: for arg_name, axis_nr, shape_func in sources: if arg_name in kwargs: diff --git a/loopy/padding.py b/loopy/padding.py index 7fd4b71417f445de2097700179a41c753fbb6011..714a921bce64434682217235e8f6c75581f1dbd3 100644 --- a/loopy/padding.py +++ b/loopy/padding.py @@ -1,4 +1,6 @@ from __future__ import division +from __future__ import absolute_import +import six __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -91,7 +93,7 @@ def split_arg_axis(kernel, args_and_axes, count): # {{{ adjust args new_args = kernel.args[:] - for arg_name, (axis, order) in arg_to_rest.iteritems(): + for arg_name, (axis, order) in six.iteritems(arg_to_rest): arg_idx = arg_to_idx[arg_name] arg = new_args[arg_idx] @@ -190,13 +192,13 @@ def split_arg_axis(kernel, args_and_axes, count): return expr.aggregate.index(tuple(idx)) aash = ArgAxisSplitHelper(kernel.substitutions, var_name_gen, - set(arg_to_rest.iterkeys()), split_access_axis) + set(six.iterkeys(arg_to_rest)), split_access_axis) kernel = aash.map_kernel(kernel) kernel = kernel.copy(args=new_args) from loopy import split_iname - for iname, (outer_iname, inner_iname) in split_vars.iteritems(): + for iname, (outer_iname, inner_iname) in six.iteritems(split_vars): kernel = split_iname(kernel, iname, count, outer_iname=outer_iname, inner_iname=inner_iname) diff --git a/loopy/precompute.py b/loopy/precompute.py index 2a7ddf4356c47a7b37d08ef1904e346f0d63cdf3..485c9c954552bc42da237021556abfbee3ac9f02 100644 --- a/loopy/precompute.py +++ b/loopy/precompute.py @@ -1,4 +1,8 @@ from __future__ import division +from __future__ import absolute_import +import six +from six.moves import range +from six.moves import zip __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -47,7 +51,7 @@ class InvocationDescriptor(Record): def to_parameters_or_project_out(param_inames, set_inames, set): - for iname in set.get_space().get_var_dict().keys(): + for iname in list(set.get_space().get_var_dict().keys()): if iname in param_inames: dt, idx = set.get_space().get_var_dict()[iname] set = set.move_dims( @@ -195,7 +199,7 @@ def build_global_storage_to_sweep_map(kernel, invocation_descriptors, invdesc.is_in_footprint = False continue - for i in xrange(usage_domain.dim(dim_type.set)): + for i in range(usage_domain.dim(dim_type.set)): iname = usage_domain.get_dim_name(dim_type.set, i) if iname in sweep_inames: usage_domain = usage_domain.set_dim_name( @@ -242,7 +246,7 @@ def find_var_base_indices_and_shape_from_inames( base_indices_and_sizes = [ cache_manager.base_index_and_length(domain, iname, context) for iname in inames] - return zip(*base_indices_and_sizes) + return list(zip(*base_indices_and_sizes)) def compute_bounds(kernel, domain, subst_name, stor2sweep, @@ -401,7 +405,7 @@ class InvocationGatherer(ExpandingIdentityMapper): name, rule.arguments, arguments, expn_state.arg_context) arg_deps = set() - for arg_val in arg_context.itervalues(): + for arg_val in six.itervalues(arg_context): arg_deps = (arg_deps | get_dependencies(self.subst_expander(arg_val, insn_id=None))) @@ -724,7 +728,7 @@ def precompute(kernel, subst_use, sweep_inames=[], within=None, if storage_axes is None: storage_axes = ( list(extra_storage_axes) - + list(xrange(len(arg_names)))) + + list(range(len(arg_names)))) expr_subst_dict = {} diff --git a/loopy/preprocess.py b/loopy/preprocess.py index 751384a4d57243fa33656b1c56b17921ebb20023..0adea202a1a9319c64a13e85f819a60492b9158a 100644 --- a/loopy/preprocess.py +++ b/loopy/preprocess.py @@ -1,4 +1,8 @@ from __future__ import division +from __future__ import absolute_import +import six +from six.moves import range +from six.moves import zip __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -129,7 +133,7 @@ def infer_unknown_types(kernel, expect_completion=False): queue = [] import loopy as lp - for tv in kernel.temporary_variables.itervalues(): + for tv in six.itervalues(kernel.temporary_variables): if tv.dtype is lp.auto: queue.append(tv) @@ -233,7 +237,7 @@ def mark_local_temporaries(kernel): from loopy.symbolic import get_dependencies - for temp_var in kernel.temporary_variables.itervalues(): + for temp_var in six.itervalues(kernel.temporary_variables): # Only fill out for variables that do not yet know if they're # local. (I.e. those generated by implicit temporary generation.) @@ -316,7 +320,7 @@ def add_default_dependencies(kernel): arg_names = set(arg.name for arg in kernel.args) - var_names = arg_names | set(kernel.temporary_variables.iterkeys()) + var_names = arg_names | set(six.iterkeys(kernel.temporary_variables)) dep_map = dict( (insn.id, insn.read_dependency_names() & var_names) @@ -534,7 +538,7 @@ def duplicate_private_temporaries_for_ilp(kernel): # {{{ find variables that need extra indices - for tv in kernel.temporary_variables.itervalues(): + for tv in six.itervalues(kernel.temporary_variables): for writer_insn_id in wmap.get(tv.name, []): writer_insn = kernel.id_to_insn[writer_insn_id] ilp_inames = frozenset(iname @@ -566,7 +570,7 @@ def duplicate_private_temporaries_for_ilp(kernel): from loopy.symbolic import pw_aff_to_expr ilp_iname_to_length = {} - for ilp_inames in var_to_new_ilp_inames.itervalues(): + for ilp_inames in six.itervalues(var_to_new_ilp_inames): for iname in ilp_inames: if iname in ilp_iname_to_length: continue @@ -583,7 +587,7 @@ def duplicate_private_temporaries_for_ilp(kernel): # {{{ change temporary variables new_temp_vars = kernel.temporary_variables.copy() - for tv_name, inames in var_to_new_ilp_inames.iteritems(): + for tv_name, inames in six.iteritems(var_to_new_ilp_inames): tv = new_temp_vars[tv_name] extra_shape = tuple(ilp_iname_to_length[iname] for iname in inames) @@ -601,7 +605,7 @@ def duplicate_private_temporaries_for_ilp(kernel): from pymbolic import var eiii = ExtraInameIndexInserter( dict((var_name, tuple(var(iname) for iname in inames)) - for var_name, inames in var_to_new_ilp_inames.iteritems())) + for var_name, inames in six.iteritems(var_to_new_ilp_inames))) new_insns = [ insn.with_transformed_expressions(eiii) @@ -623,7 +627,7 @@ def find_boostability(kernel): arg_names = set(arg.name for arg in kernel.args) - var_names = arg_names | set(kernel.temporary_variables.iterkeys()) + var_names = arg_names | set(six.iterkeys(kernel.temporary_variables)) dep_map = dict( (insn.id, insn.read_dependency_names() & var_names) @@ -698,7 +702,7 @@ def limit_boostability(kernel): for iname in kernel.insn_inames(insn): iname_use_counts[iname] = iname_use_counts.get(iname, 0) + 1 - single_use_inames = set(iname for iname, uc in iname_use_counts.iteritems() + single_use_inames = set(iname for iname, uc in six.iteritems(iname_use_counts) if uc == 1) new_insns = [] @@ -815,7 +819,7 @@ def get_auto_axis_iname_ranking_by_stride(kernel, insn): if stride is None: continue coeffs = CoefficientCollector()(iexpr_i) - for var, coeff in coeffs.iteritems(): + for var, coeff in six.iteritems(coeffs): assert isinstance(var, Variable) if var.name in auto_axis_inames: # excludes '1', i.e. the constant new_stride = coeff*stride @@ -826,7 +830,7 @@ def get_auto_axis_iname_ranking_by_stride(kernel, insn): # }}} from pymbolic import evaluate - for iname, stride_expr in iname_to_stride_expr.iteritems(): + for iname, stride_expr in six.iteritems(iname_to_stride_expr): stride = evaluate(stride_expr, approximate_arg_values) aggregate_strides[iname] = aggregate_strides.get(iname, 0) + stride @@ -995,7 +999,7 @@ def adjust_local_temp_var_storage(kernel, device): new_temp_vars = {} lmem_size = cl_char.usable_local_mem_size(device) - for temp_var in kernel.temporary_variables.itervalues(): + for temp_var in six.itervalues(kernel.temporary_variables): if not temp_var.is_local: new_temp_vars[temp_var.name] = \ temp_var.copy(storage_shape=temp_var.shape) @@ -1003,7 +1007,7 @@ def adjust_local_temp_var_storage(kernel, device): other_loctemp_nbytes = [ tv.nbytes - for tv in kernel.temporary_variables.itervalues() + for tv in six.itervalues(kernel.temporary_variables) if tv.is_local and tv.name != temp_var.name] storage_shape = temp_var.storage_shape diff --git a/loopy/schedule.py b/loopy/schedule.py index 62ab00fc5cfea611589cf9456d1e52a85b21a638..2a2f3e75db9716e09542778d2916c02e0feef603 100644 --- a/loopy/schedule.py +++ b/loopy/schedule.py @@ -1,4 +1,5 @@ from __future__ import division +from __future__ import absolute_import __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -357,7 +358,7 @@ def generate_loop_schedules_internal(sched_state, loop_priority, schedule=[], #print("boost allowed:", allow_boost) print(75*"=") print("LOOP NEST MAP:") - for iname, val in sched_state.loop_nest_map.iteritems(): + for iname, val in six.iteritems(sched_state.loop_nest_map): print("%s : %s" % (iname, ", ".join(val))) print(75*"=") print("WHY IS THIS A DEAD-END SCHEDULE?") @@ -586,7 +587,7 @@ def generate_loop_schedules_internal(sched_state, loop_priority, schedule=[], # loops in the second are not even tried (and so on). loop_priority_set = set(loop_priority) - useful_loops_set = set(iname_to_usefulness.iterkeys()) + useful_loops_set = set(six.iterkeys(iname_to_usefulness)) useful_and_desired = useful_loops_set & loop_priority_set if useful_and_desired: diff --git a/loopy/subst.py b/loopy/subst.py index 171a2daa6fce3135100ecd1109930b1e278be9be..afafe3595de72f18b13997d903baf578e4ac9ed5 100644 --- a/loopy/subst.py +++ b/loopy/subst.py @@ -1,4 +1,6 @@ from __future__ import division +from __future__ import absolute_import +import six __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -130,7 +132,7 @@ def extract_subst(kernel, subst_name, template, parameters): for insn in kernel.instructions: dfmapper(insn.expression) - for sr in kernel.substitutions.itervalues(): + for sr in six.itervalues(kernel.substitutions): dfmapper(sr.expression) # }}} @@ -176,7 +178,7 @@ def extract_subst(kernel, subst_name, template, parameters): expression=template, )} - for subst in kernel.substitutions.itervalues(): + for subst in six.itervalues(kernel.substitutions): new_substs[subst.name] = subst.copy( expression=cbmapper(subst.expression)) diff --git a/loopy/symbolic.py b/loopy/symbolic.py index 64aaf2e8dcfa2a57633b47557eafc0c8607da4b5..aec1c15efc3c5079c793bfb5e1aa0d05470f2977 100644 --- a/loopy/symbolic.py +++ b/loopy/symbolic.py @@ -1,6 +1,11 @@ """Pymbolic mappers for loopy.""" from __future__ import division +from __future__ import absolute_import +import six +from six.moves import range +from six.moves import zip +from functools import reduce __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -369,7 +374,7 @@ class ExpandingIdentityMapper(IdentityMapper): # maps subst rule (args, bodies) to (names, original_name) self.subst_rule_registry = dict( ((rule.arguments, rule.expression), (name, name)) - for name, rule in old_subst_rules.iteritems()) + for name, rule in six.iteritems(old_subst_rules)) # maps subst rule (args, bodies) to use counts self.subst_rule_use_count = {} @@ -472,7 +477,7 @@ class ExpandingIdentityMapper(IdentityMapper): from loopy.kernel.data import SubstitutionRule orig_name_histogram = {} - for key, (name, orig_name) in self.subst_rule_registry.iteritems(): + for key, (name, orig_name) in six.iteritems(self.subst_rule_registry): if self.subst_rule_use_count.get(key, 0): orig_name_histogram[orig_name] = \ orig_name_histogram.get(orig_name, 0) + 1 @@ -480,7 +485,7 @@ class ExpandingIdentityMapper(IdentityMapper): result = {} renames = {} - for key, (name, orig_name) in self.subst_rule_registry.iteritems(): + for key, (name, orig_name) in six.iteritems(self.subst_rule_registry): args, body = key if self.subst_rule_use_count.get(key, 0): @@ -498,7 +503,7 @@ class ExpandingIdentityMapper(IdentityMapper): subst_renamer = SubstitutionRuleRenamer(renames) renamed_result = {} - for name, rule in result.iteritems(): + for name, rule in six.iteritems(result): renamed_result[name] = rule.copy( expression=subst_renamer(rule.expression)) @@ -780,7 +785,7 @@ def aff_to_expr(aff, except_name=None, error_on_name=None): result = (aff.get_constant_val()*denom).to_python() for dt in [dim_type.in_, dim_type.param]: - for i in xrange(aff.dim(dt)): + for i in range(aff.dim(dt)): coeff = (aff.get_coefficient_val(dt, i)*denom).to_python() if coeff: dim_name = aff.get_dim_name(dt, i) @@ -794,7 +799,7 @@ def aff_to_expr(aff, except_name=None, error_on_name=None): error_on_name = error_on_name or except_name - for i in xrange(aff.dim(dim_type.div)): + for i in range(aff.dim(dim_type.div)): coeff = (aff.get_coefficient_val(dim_type.div, i)*denom).to_python() if coeff: result += coeff*aff_to_expr(aff.get_div(i), error_on_name=error_on_name) @@ -829,7 +834,7 @@ def pw_aff_to_expr(pw_aff, int_ok=False): def aff_from_expr(space, expr, vars_to_zero=set()): zero = isl.Aff.zero_on_domain(isl.LocalSpace.from_space(space)) context = {} - for name, (dt, pos) in space.get_var_dict().iteritems(): + for name, (dt, pos) in six.iteritems(space.get_var_dict()): if dt == dim_type.set: dt = dim_type.in_ @@ -981,7 +986,7 @@ def get_access_range(domain, subscript, assumptions): dn = access_map.dim(dim_type.set) access_map = access_map.insert_dims(dim_type.set, dn, dims) - for idim in xrange(dims): + for idim in range(dims): idx_aff = aff_from_expr(access_map.get_space(), subscript[idim]) idx_aff = idx_aff.set_coefficient_val( diff --git a/loopy/tools.py b/loopy/tools.py index 44e34a9868089ff634c556de4cb66c74530eb407..19fdcf2ce5f5f1c02125edb616d5342f0b8f5b54 100644 --- a/loopy/tools.py +++ b/loopy/tools.py @@ -1,4 +1,6 @@ from __future__ import division +from __future__ import absolute_import +import six __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -27,10 +29,15 @@ from pytools.persistent_dict import KeyBuilder as KeyBuilderBase from loopy.symbolic import WalkMapper as LoopyWalkMapper from pymbolic.mapper.persistent_hash import ( PersistentHashWalkMapper as PersistentHashWalkMapperBase) +import six # noqa -def is_integer(obj): - return isinstance(obj, (int, long, np.integer)) +if six.PY2: + def is_integer(obj): + return isinstance(obj, (int, long, np.integer)) +else: + def is_integer(obj): + return isinstance(obj, (int, np.integer)) # {{{ custom KeyBuilder subclass @@ -58,7 +65,7 @@ class LoopyKeyBuilder(KeyBuilderBase): def update_for_dict(self, key_hash, key): # Order matters for the hash--insert in sorted order. - for dict_key in sorted(key.iterkeys()): + for dict_key in sorted(six.iterkeys(key)): self.rec(key_hash, (dict_key, key[dict_key])) def update_for_BasicSet(self, key_hash, key): diff --git a/setup.py b/setup.py index c66b3042a414231358eb645256e78c4b1c5c6f56..55abf8d70c559f732d7062f603d1a93a2027b287 100644 --- a/setup.py +++ b/setup.py @@ -38,7 +38,7 @@ setup(name="loo.py", "pymbolic>=2014.1.1", "cgen>=2013.1.2", "islpy>=2014.2", - "six" + "six", ], author="Andreas Kloeckner", diff --git a/test/test_loopy.py b/test/test_loopy.py index ae3197215cd5005b798f59089323c7678cda19c2..a242b090e3fbd67d0d1ca2d7ee2928f8eb278430 100644 --- a/test/test_loopy.py +++ b/test/test_loopy.py @@ -1,4 +1,7 @@ from __future__ import division +from __future__ import absolute_import +import six +from six.moves import range __copyright__ = "Copyright (C) 2012 Andreas Kloeckner" @@ -71,7 +74,7 @@ def test_complicated_subst(ctx_factory): print(knl) - sr_keys = knl.substitutions.keys() + sr_keys = list(knl.substitutions.keys()) for letter, how_many in [ ("f", 1), ("g", 1), @@ -496,7 +499,7 @@ def make_random_expression(var_values, size): def generate_random_fuzz_examples(count): - for i in xrange(count): + for i in range(count): size = [0] var_values = {} expr = make_random_expression(var_values, size) @@ -527,7 +530,7 @@ def test_fuzz_code_generator(ctx_factory): [lp.GlobalArg("value", np.complex128, shape=())] + [ lp.ValueArg(name, get_dtype(val)) - for name, val in var_values.iteritems() + for name, val in six.iteritems(var_values) ]) ck = lp.CompiledKernel(ctx, knl) evt, (lp_value,) = ck(queue, out_host=True, **var_values) @@ -933,7 +936,7 @@ def test_double_sum(ctx_factory): evt, (a, b) = cknl(queue, n=n) - ref = sum(i*j for i in xrange(n) for j in xrange(n)) + ref = sum(i*j for i in range(n) for j in range(n)) assert a.get() == ref assert b.get() == ref