diff --git a/boxtree/__init__.py b/boxtree/__init__.py index 5f304fed..6bfda26d 100644 --- a/boxtree/__init__.py +++ b/boxtree/__init__.py @@ -33,12 +33,18 @@ __all__ = [ - "TreeOfBoxes", "make_tree_of_boxes_root", - "refine_tree_of_boxes", "uniformly_refine_tree_of_boxes", - "coarsen_tree_of_boxes", "refine_and_coarsen_tree_of_boxes", + "Tree", + "TreeBuilder", + "TreeOfBoxes", + "TreeWithLinkedPointSources", + "box_flags_enum", + "coarsen_tree_of_boxes", "make_meshmode_mesh_from_leaves", - "Tree", "TreeWithLinkedPointSources", - "TreeBuilder", "box_flags_enum"] + "make_tree_of_boxes_root", + "refine_and_coarsen_tree_of_boxes", + "refine_tree_of_boxes", + "uniformly_refine_tree_of_boxes", +] __doc__ = r""" :mod:`boxtree` can do three main things: diff --git a/boxtree/area_query.py b/boxtree/area_query.py index db38df84..6804afd1 100644 --- a/boxtree/area_query.py +++ b/boxtree/area_query.py @@ -30,8 +30,8 @@ from mako.template import Template import pyopencl as cl -import pyopencl.array # noqa -import pyopencl.cltypes # noqa +import pyopencl.array +import pyopencl.cltypes from pytools import ProcessLogger, memoize_method from boxtree.tools import ( @@ -493,7 +493,10 @@ def unwrap_args(tree, peer_lists, *args): tree.box_child_ids, tree.box_flags, peer_lists.peer_list_starts, - peer_lists.peer_lists) + tuple(tree.bounding_box[0]) + args + peer_lists.peer_lists, + *tree.bounding_box[0], + *args + ) def __init__(self, extra_args, ball_center_and_radius_expr, leaf_found_op, preamble="", name="area_query_elwise"): @@ -586,7 +589,8 @@ def generate(self, context, ("peer_list_idx_t", peer_list_idx_dtype), ("box_level_t", np.uint8), ("box_flags_t", box_flags_enum.dtype), - ) + extra_type_aliases, + *extra_type_aliases, + ), var_values=render_vars + extra_var_values, more_preamble=preamble + extra_preamble) diff --git a/boxtree/cost.py b/boxtree/cost.py index 573502d8..f3641d2d 100644 --- a/boxtree/cost.py +++ b/boxtree/cost.py @@ -59,12 +59,13 @@ """ from functools import partial +from typing import ClassVar, Mapping import numpy as np from mako.template import Template import pyopencl as cl -import pyopencl.array # noqa: F401 +import pyopencl.array from pymbolic import evaluate, var from pyopencl.elementwise import ElementwiseKernel from pyopencl.tools import dtype_to_ctype @@ -661,7 +662,7 @@ def get_unit_calibration_params(): "c_p2p": 1.0, } - _FMM_STAGE_TO_CALIBRATION_PARAMETER = { + _FMM_STAGE_TO_CALIBRATION_PARAMETER: ClassVar[Mapping[str, str]] = { "form_multipoles": "c_p2m", "coarsen_multipoles": "c_m2m", "eval_direct": "c_p2p", diff --git a/boxtree/pyfmmlib_integration.py b/boxtree/pyfmmlib_integration.py index 21062793..d566d003 100644 --- a/boxtree/pyfmmlib_integration.py +++ b/boxtree/pyfmmlib_integration.py @@ -313,7 +313,7 @@ def __init__(self, tree_indep, traversal, *, warn("Passing order is deprecated. Pass fmm_level_to_order instead.", DeprecationWarning, stacklevel=2) - def fmm_level_to_order(tree, level): # noqa pylint:disable=function-redefined + def fmm_level_to_order(tree, level): # pylint:disable=function-redefined return order super().__init__(tree_indep, traversal) @@ -907,7 +907,7 @@ def multipole_to_local(self, kwargs["ier"] = ier expn2 = np.zeros( - (ntgt_boxes,) + self.expansion_shape(self.level_orders[lev]), + (ntgt_boxes, *self.expansion_shape(self.level_orders[lev])), dtype=self.tree_indep.dtype) kwargs.update(self.kernel_kwargs) diff --git a/boxtree/rotation_classes.py b/boxtree/rotation_classes.py index 2655de0d..22c2b6b5 100644 --- a/boxtree/rotation_classes.py +++ b/boxtree/rotation_classes.py @@ -37,7 +37,7 @@ import numpy as np import pyopencl as cl -import pyopencl.array # noqa +import pyopencl.array from boxtree.tools import DeviceDataRecord from boxtree.translation_classes import TranslationClassesBuilder diff --git a/boxtree/tools.py b/boxtree/tools.py index a16e8020..55b2ce6d 100644 --- a/boxtree/tools.py +++ b/boxtree/tools.py @@ -28,7 +28,7 @@ from mako.template import Template import pyopencl as cl -import pyopencl.array # noqa +import pyopencl.array import pyopencl.cltypes as cltypes from pyopencl.tools import ScalarArg, VectorArg as _VectorArg, dtype_to_c_struct from pytools import Record, memoize_method diff --git a/boxtree/translation_classes.py b/boxtree/translation_classes.py index 4a731b80..21035f04 100644 --- a/boxtree/translation_classes.py +++ b/boxtree/translation_classes.py @@ -39,8 +39,8 @@ from mako.template import Template import pyopencl as cl -import pyopencl.array # noqa -import pyopencl.cltypes # noqa +import pyopencl.array +import pyopencl.cltypes from pyopencl.elementwise import ElementwiseTemplate from pytools import Record, memoize_method diff --git a/boxtree/traversal.py b/boxtree/traversal.py index a868538e..7e2e0c35 100644 --- a/boxtree/traversal.py +++ b/boxtree/traversal.py @@ -41,8 +41,8 @@ from mako.template import Template import pyopencl as cl -import pyopencl.array # noqa -import pyopencl.cltypes # noqa +import pyopencl.array +import pyopencl.cltypes from pyopencl.elementwise import ElementwiseTemplate from pytools import Record, memoize_method @@ -1262,12 +1262,12 @@ def __call__(self, queue, input_starts, input_lists, input_index_style, assert len(input_starts) == len(input_lists) nlists = len(input_starts) - evt = self.get_list_merger_kernel(nlists, True)(*( + evt = self.get_list_merger_kernel(nlists, True)( # input: - (output_to_input_box,) - + input_starts + output_to_input_box, + *input_starts, # output: - + (new_counts,)), + new_counts, range=slice(noutput_boxes), queue=queue, wait_for=wait_for) @@ -1282,14 +1282,14 @@ def __call__(self, queue, input_starts, input_lists, input_index_style, new_lists.fill(999999999) - evt = self.get_list_merger_kernel(nlists, False)(*( + evt = self.get_list_merger_kernel(nlists, False)( # input: - (output_to_input_box,) - + input_starts - + input_lists - + (new_starts,) + output_to_input_box, + *input_starts, + *input_lists, + new_starts, # output: - + (new_lists,)), + new_lists, range=slice(noutput_boxes), queue=queue, wait_for=[evt]) @@ -2096,7 +2096,7 @@ def extract_level_start_box_nrs(box_list, wait_for): fin_debug("finding separated smaller ('list 3 level %d')" % ilevel) result, evt = knl_info.from_sep_smaller_builder( - *(from_sep_smaller_base_args + (ilevel,)), + *from_sep_smaller_base_args, ilevel, omit_lists=("from_sep_close_smaller",) if with_extent else (), wait_for=wait_for) @@ -2110,7 +2110,8 @@ def extract_level_start_box_nrs(box_list, wait_for): if with_extent: fin_debug("finding separated smaller close ('list 3 close')") result, evt = knl_info.from_sep_smaller_builder( - *(from_sep_smaller_base_args + (-1,)), + *from_sep_smaller_base_args, + -1, omit_lists=("from_sep_smaller",), wait_for=wait_for) from_sep_close_smaller_starts = result["from_sep_close_smaller"].starts diff --git a/boxtree/tree_build.py b/boxtree/tree_build.py index 725086ee..e1e84b02 100644 --- a/boxtree/tree_build.py +++ b/boxtree/tree_build.py @@ -49,7 +49,7 @@ import numpy as np import pyopencl as cl -import pyopencl.array # noqa +import pyopencl.array from pytools import DebugProcessLogger, ProcessLogger, memoize_method from boxtree.tree import Tree @@ -998,10 +998,12 @@ def my_realloc_zeros_nocopy(ary, shape=nboxes_guess): # {{{ split boxes box_splitter_args = ( - common_args - + (box_has_children, force_split_box, root_extent) - + box_child_ids - + box_centers) + *common_args, + box_has_children, + force_split_box, + root_extent, + *box_child_ids, + *box_centers) evt = knl_info.box_splitter_kernel(*box_splitter_args, range=slice(level_start_box_nrs[-1]), @@ -1036,9 +1038,11 @@ def my_realloc_zeros_nocopy(ary, shape=nboxes_guess): new_srcntgt_box_ids = cl.array.empty_like(srcntgt_box_ids) particle_renumberer_args = ( - common_args - + (box_has_children, force_split_box, - new_user_srcntgt_ids, new_srcntgt_box_ids)) + *common_args, + box_has_children, + force_split_box, + new_user_srcntgt_ids, + new_srcntgt_box_ids) evt = knl_info.particle_renumberer_kernel(*particle_renumberer_args, range=slice(nsrcntgts), wait_for=wait_for) @@ -1110,7 +1114,7 @@ def my_realloc_zeros_nocopy(ary, shape=nboxes_guess): wait_for.extend(have_upper_level_split_box.events) # writes: force_split_box, have_upper_level_split_box - evt = level_restrict_kernel( # pylint: disable=possibly-used-before-assignment # noqa: E501 + evt = level_restrict_kernel( # pylint: disable=possibly-used-before-assignment upper_level, root_extent, box_has_children, @@ -1449,8 +1453,8 @@ def make_arange(start, offset=level_used_box_count): box_target_starts, box_target_counts_cumul, ) + (( - box_source_counts_nonchild, # pylint: disable=possibly-used-before-assignment # noqa: E501 - box_target_counts_nonchild, # pylint: disable=possibly-used-before-assignment # noqa: E501 + box_source_counts_nonchild, # pylint: disable=possibly-used-before-assignment + box_target_counts_nonchild, # pylint: disable=possibly-used-before-assignment ) if srcntgts_have_extent else ()) ), queue=queue, range=slice(nsrcntgts), @@ -1705,18 +1709,16 @@ def make_arange(start, offset=level_used_box_count): continue args = ( - ( - aligned_nboxes, - box_child_ids, - box_centers, - pstarts, pcounts,) - + tuple(particles) - + ( - particle_radii, - enable_radii, - - box_bounding_box_min, - box_bounding_box_max)) + aligned_nboxes, + box_child_ids, + box_centers, + pstarts, + pcounts, + *particles, + particle_radii, + enable_radii, + box_bounding_box_min, + box_bounding_box_max) evt = knl_info.box_extents_finder_kernel( *args, diff --git a/boxtree/tree_build_kernels.py b/boxtree/tree_build_kernels.py index b7465c44..3f83e389 100644 --- a/boxtree/tree_build_kernels.py +++ b/boxtree/tree_build_kernels.py @@ -1,4 +1,4 @@ -__copyright__ = "Copyright (C) 2013 Andreas Kloeckner" +# __copyright__ = "Copyright (C) 2013 Andreas Kloeckner" __license__ = """ Permission is hereby granted, free of charge, to any person obtaining a copy @@ -1630,13 +1630,11 @@ def get_tree_build_kernel_info(context, dimensions, coord_dtype, from pyopencl.elementwise import ElementwiseKernel particle_renumberer_kernel = ElementwiseKernel( context, - common_arguments - + [ + [*common_arguments, VectorArg(np.int32, "box_has_children"), VectorArg(np.int32, "box_force_split"), VectorArg(particle_id_dtype, "new_user_srcntgt_ids"), - VectorArg(box_id_dtype, "new_srcntgt_box_ids"), - ], + VectorArg(box_id_dtype, "new_srcntgt_box_ids")], str(particle_renumberer_kernel_source), name="renumber_particles", preamble=( preamble_with_dtype_decls diff --git a/boxtree/tree_of_boxes.py b/boxtree/tree_of_boxes.py index f1c42a00..ad1eeaaf 100644 --- a/boxtree/tree_of_boxes.py +++ b/boxtree/tree_of_boxes.py @@ -86,12 +86,12 @@ def _resized_array(arr: np.ndarray, new_size: int) -> np.ndarray: old_size = arr.shape[-1] prefix = (slice(None), ) * (arr.ndim - 1) if old_size >= new_size: - return arr[prefix + (slice(new_size), )].copy() + return arr[(*prefix, slice(new_size))].copy() else: new_shape = list(arr.shape) new_shape[-1] = new_size new_arr = np.zeros(new_shape, arr.dtype) - new_arr[prefix + (slice(old_size), )] = arr + new_arr[(*prefix, slice(old_size))] = arr return new_arr diff --git a/pyproject.toml b/pyproject.toml index f4e2d73e..94e5369d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,9 +14,9 @@ extend-select = [ "Q", # flake8-quotes "I", # flake8-isort "UP", # pyupgrade + "RUF", # ruff # TODO - # "RUF", # ruff # "W", # pycodestyle # "SIM", ] diff --git a/test/test_distributed.py b/test/test_distributed.py index f97b8932..28b81b03 100644 --- a/test/test_distributed.py +++ b/test/test_distributed.py @@ -30,7 +30,7 @@ from arraycontext import pytest_generate_tests_for_array_contexts from boxtree.array_context import ( - PytestPyOpenCLArrayContextFactory, # noqa: F401 + PytestPyOpenCLArrayContextFactory, _acf, ) from boxtree.constant_one import ( diff --git a/test/test_fmm.py b/test/test_fmm.py index 1fc8879d..e1ec616d 100644 --- a/test/test_fmm.py +++ b/test/test_fmm.py @@ -157,7 +157,7 @@ def _get_target_slice(self, ibox): (3, 5 * 10**5, 4*10**4, "t", p_normal, p_normal, None, "linf", "static_linf"), # noqa: E501 (3, 5 * 10**5, 4*10**4, "t", p_normal, p_normal, None, "linf", "precise_linf"), # noqa: E501 (3, 5 * 10**5, 4*10**4, "t", p_normal, p_normal, None, "l2", "precise_linf"), # noqa: E501 - (3, 5 * 10**5, 4*10**4, "t", p_normal, p_normal, None, "l2", "static_l2"), # noqa: E501 + (3, 5 * 10**5, 4*10**4, "t", p_normal, p_normal, None, "l2", "static_l2"), ]) def test_fmm_completeness(actx_factory, dims, nsources_req, ntargets_req, @@ -354,7 +354,7 @@ def test_fmm_completeness(actx_factory, dims, nsources_req, ntargets_req, from boxtree.visualization import draw_box_lists draw_box_lists( plotter, - pre_merge_host_trav if who_has_extent else host_trav, # pylint: disable=possibly-used-before-assignment # noqa: E501 + pre_merge_host_trav if who_has_extent else host_trav, # pylint: disable=possibly-used-before-assignment 22) # from boxtree.visualization import draw_same_level_non_well_sep_boxes # draw_same_level_non_well_sep_boxes(plotter, host_trav, 2) diff --git a/test/test_tools.py b/test/test_tools.py index 93adbe4c..631ad4d5 100644 --- a/test/test_tools.py +++ b/test/test_tools.py @@ -31,7 +31,7 @@ PytestPyOpenCLArrayContextFactory, _acf, # noqa: F401 ) -from boxtree.tools import ( # noqa: F401 +from boxtree.tools import ( make_normal_particle_array as p_normal, make_surface_particle_array as p_surface, make_uniform_particle_array as p_uniform, diff --git a/test/test_tree.py b/test/test_tree.py index 4f25fba1..a51fa4cc 100644 --- a/test/test_tree.py +++ b/test/test_tree.py @@ -209,7 +209,7 @@ def run_build_test(builder, actx, dims, dtype, nparticles, visualize, else: assert refine_weights is not None box_weight = np.sum( - refine_weights_reordered[start:start+nparticles_in_box]) # pylint: disable=possibly-used-before-assignment # noqa: E501 + refine_weights_reordered[start:start+nparticles_in_box]) # pylint: disable=possibly-used-before-assignment if box_weight > max_leaf_refine_weight: print("refine weight exceeded " f"({box_weight} > {max_leaf_refine_weight}); box {ibox}") @@ -603,7 +603,7 @@ def test_extent_tree(actx_factory, dims, extent_norm, visualize=False): good = np.all( (check_particles + check_radii < extent_high[:, np.newaxis] + stick_out_dist) - & # noqa: W504 + & (extent_low[:, np.newaxis] - stick_out_dist <= check_particles - check_radii), axis=0)