From ac45a989b227c66190a8fdcc48b13e30663e0797 Mon Sep 17 00:00:00 2001 From: Alexandru Fikl Date: Sun, 3 Nov 2024 09:48:36 +0200 Subject: [PATCH 1/3] pyproject: bump min python to 3.10 --- .pylintrc-local.yml | 3 +++ pyproject.toml | 5 +++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.pylintrc-local.yml b/.pylintrc-local.yml index d0095f0e8..21b18e9d1 100644 --- a/.pylintrc-local.yml +++ b/.pylintrc-local.yml @@ -1,2 +1,5 @@ +- arg: py-version + val: '3.10' + - arg: extension-pkg-whitelist val: mayavi diff --git a/pyproject.toml b/pyproject.toml index 5dd83f83a..408fb7d90 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,14 +6,14 @@ requires = [ [project] name = "sumpy" -version = "2022.1" +version = "2024.0" description = "Fast summation in Python" readme = "README.rst" license = { text = "MIT" } authors = [ { name = "Andreas Kloeckner", email = "inform@tiker.net" }, ] -requires-python = ">=3.8" +requires-python = ">=3.10" classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", @@ -142,6 +142,7 @@ extend-exclude = [ ] [tool.mypy] +python_version = "3.10" warn_unused_ignores = true [[tool.mypy.overrides]] From 3b16ecda01a9a6fe21e5c8cddb2d63faba89b589 Mon Sep 17 00:00:00 2001 From: Alexandru Fikl Date: Sun, 3 Nov 2024 09:50:46 +0200 Subject: [PATCH 2/3] ruff: fix type import errors --- sumpy/__init__.py | 2 +- sumpy/codegen.py | 2 +- sumpy/cse.py | 4 ++-- sumpy/derivative_taker.py | 4 ++-- sumpy/expansion/__init__.py | 3 ++- sumpy/expansion/diff_op.py | 4 ++-- sumpy/expansion/level_to_order.py | 2 +- sumpy/expansion/loopy.py | 2 +- sumpy/point_calculus.py | 2 +- sumpy/tools.py | 15 ++++++++------- sumpy/toys.py | 9 +++++---- test/test_misc.py | 3 ++- 12 files changed, 28 insertions(+), 24 deletions(-) diff --git a/sumpy/__init__.py b/sumpy/__init__.py index ab98d1040..a550d68ea 100644 --- a/sumpy/__init__.py +++ b/sumpy/__init__.py @@ -24,7 +24,7 @@ """ import os -from typing import Hashable +from collections.abc import Hashable import loopy as lp from pytools.persistent_dict import WriteOncePersistentDict diff --git a/sumpy/codegen.py b/sumpy/codegen.py index 4baa8289a..16b8284e4 100644 --- a/sumpy/codegen.py +++ b/sumpy/codegen.py @@ -511,7 +511,7 @@ def __init__(self, complex_dtype=None): def map_constant(self, expr, rec_self=None): """Convert complex values to numpy types """ - if not isinstance(expr, (complex, np.complex64, np.complex128)): + if not isinstance(expr, complex | np.complex64 | np.complex128): return IdentityMapper.map_constant(rec_self or self, expr, rec_self=rec_self) diff --git a/sumpy/cse.py b/sumpy/cse.py index 0f4481d93..a72f1c583 100644 --- a/sumpy/cse.py +++ b/sumpy/cse.py @@ -460,7 +460,7 @@ def tree_cse(exprs, symbols, opt_subs=None): excluded_symbols = set() def find_repeated(expr): - if not isinstance(expr, (Basic, Unevaluated)): + if not isinstance(expr, Basic | Unevaluated): return if isinstance(expr, Basic) and expr.is_Atom: @@ -505,7 +505,7 @@ def find_repeated(expr): subs = {} def rebuild(expr): - if not isinstance(expr, (Basic, Unevaluated)): + if not isinstance(expr, Basic | Unevaluated): return expr if not expr.args: diff --git a/sumpy/derivative_taker.py b/sumpy/derivative_taker.py index 37bfaa0db..0a80830e0 100644 --- a/sumpy/derivative_taker.py +++ b/sumpy/derivative_taker.py @@ -39,7 +39,7 @@ """ import logging -from typing import Any, Dict, Tuple +from typing import Any import numpy as np @@ -341,7 +341,7 @@ def diff(self, mi, q=0): # {{{ DifferentiatedExprDerivativeTaker -DerivativeCoeffDict = Dict[Tuple[int, ...], Any] +DerivativeCoeffDict = dict[tuple[int, ...], Any] @tag_dataclass diff --git a/sumpy/expansion/__init__.py b/sumpy/expansion/__init__.py index e9b8a0cab..baa4ad76f 100644 --- a/sumpy/expansion/__init__.py +++ b/sumpy/expansion/__init__.py @@ -25,7 +25,8 @@ import logging from abc import ABC, abstractmethod -from typing import Any, ClassVar, Hashable, Sequence +from collections.abc import Hashable, Sequence +from typing import Any, ClassVar import loopy as lp import pymbolic.primitives as prim diff --git a/sumpy/expansion/diff_op.py b/sumpy/expansion/diff_op.py index 851ad913d..553d1db74 100644 --- a/sumpy/expansion/diff_op.py +++ b/sumpy/expansion/diff_op.py @@ -26,9 +26,9 @@ """ import logging +from collections.abc import Mapping, Sequence from dataclasses import dataclass from itertools import accumulate -from typing import Mapping, Sequence, Union import numpy as np import sympy as sp @@ -74,7 +74,7 @@ class DerivativeIdentifier: """ -Number_ish = Union[int, float, complex, np.number] +Number_ish = int | float | complex | np.number @dataclass(frozen=True, eq=True) diff --git a/sumpy/expansion/level_to_order.py b/sumpy/expansion/level_to_order.py index c81a4bdc3..55f0f1b10 100644 --- a/sumpy/expansion/level_to_order.py +++ b/sumpy/expansion/level_to_order.py @@ -137,7 +137,7 @@ def __init__(self, tol, err_const_laplace=0.01, err_const_helmholtz=100, def __call__(self, kernel, kernel_args, tree, level): from sumpy.kernel import HelmholtzKernel, LaplaceKernel - assert isinstance(kernel, (LaplaceKernel, HelmholtzKernel)) + assert isinstance(kernel, LaplaceKernel | HelmholtzKernel) laplace_order = int(np.ceil( (np.log(self.tol) - np.log(self.err_const_laplace)) diff --git a/sumpy/expansion/loopy.py b/sumpy/expansion/loopy.py index 22ee5d6a0..7d3836857 100644 --- a/sumpy/expansion/loopy.py +++ b/sumpy/expansion/loopy.py @@ -24,7 +24,7 @@ """ import logging -from typing import Sequence +from collections.abc import Sequence import numpy as np diff --git a/sumpy/point_calculus.py b/sumpy/point_calculus.py index 3694f89e2..6e59e7f92 100644 --- a/sumpy/point_calculus.py +++ b/sumpy/point_calculus.py @@ -179,7 +179,7 @@ def diff(self, axis, f_values, nderivs=1): """ from numbers import Number - if isinstance(f_values, (np.number, Number)): + if isinstance(f_values, np.number | Number): # constants differentiate to 0 return 0 diff --git a/sumpy/tools.py b/sumpy/tools.py index 73c256eb6..40ef12a20 100644 --- a/sumpy/tools.py +++ b/sumpy/tools.py @@ -31,8 +31,9 @@ import logging import warnings from abc import ABC, abstractmethod +from collections.abc import Hashable, Sequence from dataclasses import dataclass -from typing import TYPE_CHECKING, Any, Hashable, Sequence +from typing import TYPE_CHECKING, Any import numpy as np @@ -161,7 +162,7 @@ def add_to_sac(sac, expr): return expr from numbers import Number - if isinstance(expr, (Number, sym.Number, sym.Symbol)): + if isinstance(expr, Number | sym.Number | sym.Symbol): return expr name = sac.assign_temp("temp", expr) @@ -228,7 +229,7 @@ def vector_from_device(queue, vec): def from_dev(ary): from numbers import Number - if isinstance(ary, (np.number, Number)): + if isinstance(ary, np.number | Number): # zero, most likely return ary @@ -318,7 +319,7 @@ def __init__(self, ctx: Any, else: value_dtypes.append(np.dtype(np.float64)) - if not isinstance(value_dtypes, (list, tuple)): + if not isinstance(value_dtypes, list | tuple): value_dtypes = [np.dtype(value_dtypes)] * len(target_kernels) value_dtypes = [np.dtype(vd) for vd in value_dtypes] @@ -515,7 +516,7 @@ def _allow_redundant_execution_of_knl_scaling(knl): def is_obj_array_like(ary): return ( - isinstance(ary, (tuple, list)) + isinstance(ary, tuple | list) or (isinstance(ary, np.ndarray) and ary.dtype.char == "O")) @@ -559,12 +560,12 @@ def reduced_row_echelon_form(m, atol=0): pivot_cols.append(i) scale = mat[index, i] - if isinstance(scale, (int, sym.Integer)): + if isinstance(scale, int | sym.Integer): scale = int(scale) for j in range(mat.shape[1]): elem = mat[index, j] - if isinstance(scale, int) and isinstance(elem, (int, sym.Integer)): + if isinstance(scale, int) and isinstance(elem, int | sym.Integer): quo = int(elem) // scale if quo * scale == elem: mat[index, j] = quo diff --git a/sumpy/toys.py b/sumpy/toys.py index 4f569ef3b..60ee4f464 100644 --- a/sumpy/toys.py +++ b/sumpy/toys.py @@ -28,9 +28,10 @@ THE SOFTWARE. """ +from collections.abc import Sequence from functools import partial from numbers import Number -from typing import TYPE_CHECKING, Sequence, Union +from typing import TYPE_CHECKING from pytools import memoize_method @@ -481,7 +482,7 @@ def _m2l(psource, to_center, to_rscale, to_order, e2e, expn_class, expn_kwargs, # {{{ potential source classes -Number_ish = Union[int, float, complex, np.number] +Number_ish = int | float | complex | np.number class PotentialSource: @@ -516,7 +517,7 @@ def __neg__(self) -> PotentialSource: def __add__(self, other: Number_ish | PotentialSource ) -> PotentialSource: - if isinstance(other, (Number, np.number)): + if isinstance(other, Number | np.number): other = ConstantPotential(self.toy_ctx, other) elif not isinstance(other, PotentialSource): return NotImplemented @@ -538,7 +539,7 @@ def __rsub__(self, # type:ignore[misc] def __mul__(self, other: Number_ish | PotentialSource) -> PotentialSource: - if isinstance(other, (Number, np.number)): + if isinstance(other, Number | np.number): other = ConstantPotential(self.toy_ctx, other) elif not isinstance(other, PotentialSource): return NotImplemented diff --git a/test/test_misc.py b/test/test_misc.py index d0a25cc2e..d745af73e 100644 --- a/test/test_misc.py +++ b/test/test_misc.py @@ -25,8 +25,9 @@ import logging import sys +from collections.abc import Callable from dataclasses import dataclass -from typing import Any, Callable +from typing import Any import numpy as np import numpy.linalg as la From 8518938ddb2cb79b261408e3279965d83f6f708c Mon Sep 17 00:00:00 2001 From: Alexandru Fikl Date: Sun, 3 Nov 2024 09:50:56 +0200 Subject: [PATCH 3/3] ruff: fix zip strict argument --- .../translations/PDE-reduction and translations.ipynb | 4 ++-- contrib/translations/PDE-reduction-symbolic.ipynb | 8 +++++--- sumpy/assignment_collection.py | 4 ++-- sumpy/codegen.py | 2 +- sumpy/derivative_taker.py | 2 +- sumpy/distributed.py | 4 ++-- sumpy/expansion/__init__.py | 2 +- sumpy/expansion/diff_op.py | 4 ++-- sumpy/expansion/local.py | 5 +++-- sumpy/expansion/m2l.py | 8 ++++---- sumpy/expansion/multipole.py | 6 +++--- sumpy/fmm.py | 6 +++--- sumpy/kernel.py | 3 ++- sumpy/p2p.py | 5 +++-- sumpy/tools.py | 8 ++++---- sumpy/toys.py | 2 +- test/test_fmm.py | 3 ++- test/test_kernels.py | 10 +++++----- 18 files changed, 46 insertions(+), 40 deletions(-) diff --git a/contrib/translations/PDE-reduction and translations.ipynb b/contrib/translations/PDE-reduction and translations.ipynb index 92da1f8d2..31d6602fc 100644 --- a/contrib/translations/PDE-reduction and translations.ipynb +++ b/contrib/translations/PDE-reduction and translations.ipynb @@ -217,7 +217,7 @@ " plt.scatter(x, y, c=coeffs, **kwargs)\n", " plt.colorbar()\n", "\n", - " for cid, coeff in zip(expn.get_coefficient_identifiers(), coeffs):\n", + " for cid, coeff in zip(expn.get_coefficient_identifiers(), coeffs, strict=True):\n", " plt.text(cid[0], cid[1] + 0.2, f\"{coeff:.1f}\")" ] }, @@ -308,7 +308,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.4" + "version": "3.12.7" } }, "nbformat": 4, diff --git a/contrib/translations/PDE-reduction-symbolic.ipynb b/contrib/translations/PDE-reduction-symbolic.ipynb index 85862d074..1fd881463 100644 --- a/contrib/translations/PDE-reduction-symbolic.ipynb +++ b/contrib/translations/PDE-reduction-symbolic.ipynb @@ -95,8 +95,10 @@ "metadata": {}, "outputs": [], "source": [ - "eval_reduced = sum(a * b for a, b in zip(translated_reduce_coeffs, reduced_derivatives))\n", - "eval_full = sum(a * b for a, b in zip(translated_full_coeffs, full_derivatives))\n", + "eval_reduced = sum(a * b for a, b in zip(translated_reduce_coeffs, reduced_derivatives,\n", + " strict=True))\n", + "eval_full = sum(a * b for a, b in zip(translated_full_coeffs, full_derivatives,\n", + " strict=True))\n", "\n", "(eval_full - eval_reduced).simplify()" ] @@ -118,7 +120,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.4" + "version": "3.12.7" } }, "nbformat": 4, diff --git a/sumpy/assignment_collection.py b/sumpy/assignment_collection.py index 678dbbd45..fc7790f81 100644 --- a/sumpy/assignment_collection.py +++ b/sumpy/assignment_collection.py @@ -205,14 +205,14 @@ def run_global_cse(self, extra_exprs=None): new_assign_exprs = new_exprs[:len(assign_exprs)] new_extra_exprs = new_exprs[len(assign_exprs):] - for name, new_expr in zip(assign_names, new_assign_exprs): + for name, new_expr in zip(assign_names, new_assign_exprs, strict=True): self.assignments[name] = new_expr for name, value in new_assignments: assert isinstance(name, sym.Symbol) self.add_assignment(name.name, value) - for name, new_expr in zip(assign_names, new_assign_exprs): + for name, new_expr in zip(assign_names, new_assign_exprs, strict=True): # We want the assignment collection to be ordered correctly # to make it easier for loopy to schedule. # Deleting the original assignments and adding them again diff --git a/sumpy/codegen.py b/sumpy/codegen.py index 16b8284e4..9917db731 100644 --- a/sumpy/codegen.py +++ b/sumpy/codegen.py @@ -590,7 +590,7 @@ def map_sum(self, expr, *args): new_children = tuple(first_group + second_group) if len(new_children) == len(expr.children) and \ all(child is orig_child for child, orig_child in - zip(new_children, expr.children)): + zip(new_children, expr.children, strict=True)): return expr return prim.Sum(tuple(first_group+second_group)) diff --git a/sumpy/derivative_taker.py b/sumpy/derivative_taker.py index 0a80830e0..926b09773 100644 --- a/sumpy/derivative_taker.py +++ b/sumpy/derivative_taker.py @@ -146,7 +146,7 @@ def diff(self, mi): def get_derivative_taking_sequence(self, start_mi, end_mi): current_mi = np.array(start_mi, dtype=int) for idx, (mi_i, vec_i) in enumerate( - zip(self.mi_dist(end_mi, start_mi), self.var_list)): + zip(self.mi_dist(end_mi, start_mi), self.var_list, strict=True)): for _ in range(1, 1 + mi_i): current_mi[idx] += 1 yield vec_i, tuple(current_mi) diff --git a/sumpy/distributed.py b/sumpy/distributed.py index 84f3c4e8e..b8118b6d2 100644 --- a/sumpy/distributed.py +++ b/sumpy/distributed.py @@ -51,7 +51,7 @@ def distribute_source_weights(self, src_weight_vecs, src_idx_all_ranks): local_src_weight_vecs_device = [ cl.array.to_device(src_weight.queue, local_src_weight) for local_src_weight, src_weight in - zip(local_src_weight_vecs_host, src_weight_vecs)] + zip(local_src_weight_vecs_host, src_weight_vecs, strict=True)] return local_src_weight_vecs_device @@ -70,7 +70,7 @@ def gather_potential_results(self, potentials, tgt_idx_all_ranks): return make_obj_array([ cl.array.to_device(potentials_dev.queue, gathered_potentials_host) for gathered_potentials_host, potentials_dev in - zip(gathered_potentials_host_vec, potentials)]) + zip(gathered_potentials_host_vec, potentials, strict=True)]) else: return None diff --git a/sumpy/expansion/__init__.py b/sumpy/expansion/__init__.py index baa4ad76f..048d17d6b 100644 --- a/sumpy/expansion/__init__.py +++ b/sumpy/expansion/__init__.py @@ -162,7 +162,7 @@ def coefficients_from_source_vec(self, the coefficients of the expansion. """ result = [0]*len(self) - for knl, weight in zip(kernels, weights): + for knl, weight in zip(kernels, weights, strict=True): coeffs = self.coefficients_from_source(knl, avec, bvec, rscale, sac=sac) for i in range(len(result)): result[i] += weight * coeffs[i] diff --git a/sumpy/expansion/diff_op.py b/sumpy/expansion/diff_op.py index 553d1db74..303d0d552 100644 --- a/sumpy/expansion/diff_op.py +++ b/sumpy/expansion/diff_op.py @@ -126,7 +126,7 @@ def __add__( assert self.dim == other_diff_op.dim assert len(self.eqs) == len(other_diff_op.eqs) eqs: list[Mapping[DerivativeIdentifier, sp.Expr]] = [] - for eq, other_eq in zip(self.eqs, other_diff_op.eqs): + for eq, other_eq in zip(self.eqs, other_diff_op.eqs, strict=True): res = dict(eq) for k, v in other_eq.items(): if k in res: @@ -267,7 +267,7 @@ def intersect( scalar_pde = min(scalar_pdes, key=lambda x: x.degree()).monic() pde_dict = { DerivativeIdentifier(mi, 0): sym.sympify(coeff.as_expr().simplify()) for - (mi, coeff) in zip(scalar_pde.monoms(), scalar_pde.coeffs()) + (mi, coeff) in zip(scalar_pde.monoms(), scalar_pde.coeffs(), strict=True) } results.append(LinearPDESystemOperator(pde.dim, (immutabledict(pde_dict),))) diff --git a/sumpy/expansion/local.py b/sumpy/expansion/local.py index 712b26e37..184e0cadd 100644 --- a/sumpy/expansion/local.py +++ b/sumpy/expansion/local.py @@ -199,7 +199,7 @@ def coefficients_from_source_vec(self, kernels, avec, bvec, rscale, weights, base_taker = base_kernel.get_derivative_taker(avec, rscale, sac) result = [0]*len(self) - for knl, weight in zip(kernels, weights): + for knl, weight in zip(kernels, weights, strict=True): taker = knl.postprocess_at_source(base_taker, avec) # Following is a hack to make sure cse works. if 1: @@ -237,7 +237,8 @@ def evaluate(self, kernel, coeffs, bvec, rscale, sac=None): * mi_power(bvec_scaled, mi, evaluate=False) / mi_factorial(mi) for coeff, mi in zip( - evaluated_coeffs, self.get_full_coefficient_identifiers())) + evaluated_coeffs, self.get_full_coefficient_identifiers(), + strict=True)) return kernel.postprocess_at_target(result, bvec) diff --git a/sumpy/expansion/m2l.py b/sumpy/expansion/m2l.py index 7277ae020..2786f36af 100644 --- a/sumpy/expansion/m2l.py +++ b/sumpy/expansion/m2l.py @@ -420,7 +420,7 @@ def translation_classes_dependent_data(self, tgt_expansion, src_expansion, # Add zero values needed to make the translation matrix circulant derivatives_full = [0]*len(circulant_matrix_mis) - for expr, mi in zip(vector, needed_vector_terms): + for expr, mi in zip(vector, needed_vector_terms, strict=True): derivatives_full[circulant_matrix_ident_to_index[mi]] = expr return derivatives_full @@ -437,7 +437,7 @@ def preprocess_multipole_exprs(self, tgt_expansion, src_expansion, input_vector = [0] * len(circulant_matrix_mis) for coeff, term in zip( src_coeff_exprs, - src_expansion.get_coefficient_identifiers()): + src_expansion.get_coefficient_identifiers(), strict=True): input_vector[circulant_matrix_ident_to_index[term]] = \ add_to_sac(sac, coeff) @@ -760,7 +760,7 @@ def translate(self, tgt_expansion, src_expansion, src_coeff_exprs, src_rscale, assert translation_classes_dependent_data derivatives = translation_classes_dependent_data assert len(src_coeff_exprs) == len(derivatives) - result = [a*b for a, b in zip(derivatives, src_coeff_exprs)] + result = [a*b for a, b in zip(derivatives, src_coeff_exprs, strict=True)] return result def translation_classes_dependent_data(self, tgt_expansion, src_expansion, @@ -981,7 +981,7 @@ def translate(self, tgt_expansion, src_expansion, src_coeff_exprs, src_rscale, assert translation_classes_dependent_data is not None derivatives = translation_classes_dependent_data assert len(derivatives) == len(src_coeff_exprs) - return [a * b for a, b in zip(derivatives, src_coeff_exprs)] + return [a * b for a, b in zip(derivatives, src_coeff_exprs, strict=True)] def loopy_translate(self, tgt_expansion, src_expansion): raise NotImplementedError diff --git a/sumpy/expansion/multipole.py b/sumpy/expansion/multipole.py index d9a817645..ef440cf01 100644 --- a/sumpy/expansion/multipole.py +++ b/sumpy/expansion/multipole.py @@ -73,7 +73,7 @@ def coefficients_from_source_vec(self, kernels, avec, bvec, rscale, weights, rscale = 1 result = [0]*len(self.get_full_coefficient_identifiers()) - for kernel, weight in zip(kernels, weights): + for kernel, weight in zip(kernels, weights, strict=True): if isinstance(kernel, KernelWrapper): coeffs = [ kernel.postprocess_at_source(mi_power(avec, mi), avec) @@ -109,7 +109,7 @@ def evaluate(self, kernel, coeffs, bvec, rscale, sac=None): taker = kernel.postprocess_at_target(base_taker, bvec) result = [] - for coeff, mi in zip(coeffs, self.get_coefficient_identifiers()): + for coeff, mi in zip(coeffs, self.get_coefficient_identifiers(), strict=True): result.append(coeff * taker.diff(mi, lambda x: add_to_sac(sac, x))) result = sym.Add(*tuple(result)) @@ -289,7 +289,7 @@ def translate_from(self, src_expansion, src_coeff_exprs, src_rscale, for mi_i in range(tgt_mi[d]+1): input_mi = mi_set_axis(tgt_mi, d, mi_i) contrib = cur_dim_input_coeffs[tgt_mi_to_index[input_mi]] - for n, k, dist in zip(tgt_mi, input_mi, dvec): + for n, k, dist in zip(tgt_mi, input_mi, dvec, strict=True): assert n >= k contrib /= math.factorial(n-k) contrib *= \ diff --git a/sumpy/fmm.py b/sumpy/fmm.py index aa2ff4c72..0f6d87b2c 100644 --- a/sumpy/fmm.py +++ b/sumpy/fmm.py @@ -691,7 +691,7 @@ def eval_direct(self, target_boxes, source_box_starts, **kwargs) events.append(evt) - for pot_i, pot_res_i in zip(pot, pot_res): + for pot_i, pot_res_i in zip(pot, pot_res, strict=True): assert pot_i is pot_res_i pot_i.add_event(evt) @@ -957,7 +957,7 @@ def eval_multipoles(self, wait_for = [evt] - for pot_i, pot_res_i in zip(pot, pot_res): + for pot_i, pot_res_i in zip(pot, pot_res, strict=True): assert pot_i is pot_res_i if events: @@ -1089,7 +1089,7 @@ def eval_locals(self, level_start_target_box_nrs, target_boxes, local_exps): **kwargs) events.append(evt) - for pot_i, pot_res_i in zip(pot, pot_res): + for pot_i, pot_res_i in zip(pot, pot_res, strict=True): assert pot_i is pot_res_i return (pot, SumpyTimingFuture(queue, events)) diff --git a/sumpy/kernel.py b/sumpy/kernel.py index ec612ad46..a7ca24866 100644 --- a/sumpy/kernel.py +++ b/sumpy/kernel.py @@ -394,7 +394,8 @@ def get_global_scaling_const(self): def update_persistent_hash(self, key_hash, key_builder): key_hash.update(type(self).__name__.encode("utf8")) - for name, value in zip(self.init_arg_names, self.__getinitargs__()): + for name, value in zip(self.init_arg_names, self.__getinitargs__(), + strict=True): if name in ["expression", "global_scaling_const"]: from pymbolic.mapper.persistent_hash import ( PersistentHashWalkMapper as PersistentHashWalkMapper, diff --git a/sumpy/p2p.py b/sumpy/p2p.py index c96f47518..2e5872ebe 100644 --- a/sumpy/p2p.py +++ b/sumpy/p2p.py @@ -705,7 +705,7 @@ def get_optimized_kernel(self, max_nsources_in_one_box, # as vec for the first dimension for i, (array_name, array_size, array_dtype) in \ enumerate(zip(local_arrays, local_array_sizes, - local_array_dtypes)): + local_array_dtypes, strict=True)): if issubclass(array_dtype.type, np.complexfloating): # pyopencl does not support complex data type vectors continue @@ -721,7 +721,8 @@ def get_optimized_kernel(self, max_nsources_in_one_box, # We need to split isrc_prefetch and isrc_offset into chunks. nsources = (max_nsources_in_one_box + nprefetch - 1) // nprefetch - for local_array, axis in zip(local_arrays, local_array_isrc_axis): + for local_array, axis in zip(local_arrays, local_array_isrc_axis, + strict=True): knl = lp.split_array_axis(knl, local_array, axis, nsources) knl = lp.split_iname(knl, "isrc_prefetch", nsources, outer_iname="iprefetch") diff --git a/sumpy/tools.py b/sumpy/tools.py index 40ef12a20..4d4f8dfc2 100644 --- a/sumpy/tools.py +++ b/sumpy/tools.py @@ -118,7 +118,7 @@ def add_mi(mi1: Sequence[int], mi2: Sequence[int]) -> tuple[int, ...]: # NOTE: these are used a lot and `tuple([])` is faster - return tuple([mi1i + mi2i for mi1i, mi2i in zip(mi1, mi2)]) # noqa: C409 + return tuple([mi1i + mi2i for mi1i, mi2i in zip(mi1, mi2, strict=True)]) # noqa: C409 def mi_factorial(mi: Sequence[int]) -> int: @@ -147,7 +147,7 @@ def mi_power( vector: Sequence[Any], mi: Sequence[int], evaluate: bool = True) -> Any: result = 1 - for mi_i, vec_i in zip(mi, vector): + for mi_i, vec_i in zip(mi, vector, strict=True): if mi_i == 1: result *= vec_i elif evaluate: @@ -367,7 +367,7 @@ def get_kernel_scaling_assignments(self): temp_var_type=lp.Optional(dtype), tags=frozenset([ScalingAssignmentTag()])) for i, (kernel, dtype) in enumerate( - zip(self.target_kernels, self.value_dtypes))] + zip(self.target_kernels, self.value_dtypes, strict=True))] @abstractmethod def get_kernel(self): @@ -654,7 +654,7 @@ def fft_toeplitz_upper_triangular(first_row, x, sac=None): v_fft = fft(v, sac) x_fft = fft(x, sac) - res_fft = [add_to_sac(sac, a * b) for a, b in zip(v_fft, x_fft)] + res_fft = [add_to_sac(sac, a * b) for a, b in zip(v_fft, x_fft, strict=True)] res = fft(res_fft, inverse=True, sac=sac) return list(reversed(res[:n])) diff --git a/sumpy/toys.py b/sumpy/toys.py index 60ee4f464..9e639583d 100644 --- a/sumpy/toys.py +++ b/sumpy/toys.py @@ -914,7 +914,7 @@ def draw_box(el, eh, **kwargs): (Path.CLOSEPOLY, (el[0], el[1])), ] - codes, verts = zip(*pathdata) + codes, verts = zip(*pathdata, strict=True) path = Path(verts, codes) patch = mpatches.PathPatch(path, **kwargs) pt.gca().add_patch(patch) diff --git a/test/test_fmm.py b/test/test_fmm.py index 437ca9ea5..525046e0c 100644 --- a/test/test_fmm.py +++ b/test/test_fmm.py @@ -407,7 +407,8 @@ def test_unified_single_and_double(actx_factory, visualize=False): dir_vec = actx.from_numpy(np.vstack([np.cos(alpha), np.sin(alpha)])) results = [] - for source_kernels, strength_usage in zip(source_kernel_vecs, strength_usages): + for source_kernels, strength_usage in zip( + source_kernel_vecs, strength_usages, strict=True): source_extra_kwargs = {} if deriv_knl in source_kernels: source_extra_kwargs["dir_vec"] = dir_vec diff --git a/test/test_kernels.py b/test/test_kernels.py index 4061dfcaf..41d9da0b5 100644 --- a/test/test_kernels.py +++ b/test/test_kernels.py @@ -672,14 +672,14 @@ def test_m2m_and_l2l_exprs_simpler(base_knl, local_expn_class, mpole_expn_class, slower_m2m = mpole_expn.translate_from(mpole_expn, src_coeff_exprs, src_rscale, dvec, tgt_rscale, _fast_version=False) - for expr1, expr2 in zip(faster_m2m, slower_m2m): + for expr1, expr2 in zip(faster_m2m, slower_m2m, strict=True): assert float(sym.doit(expr1 - expr2).expand()) == 0.0 faster_l2l = local_expn.translate_from(local_expn, src_coeff_exprs, src_rscale, dvec, tgt_rscale) slower_l2l = local_expn.translate_from(local_expn, src_coeff_exprs, src_rscale, dvec, tgt_rscale, _fast_version=False) - for expr1, expr2 in zip(faster_l2l, slower_l2l): + for expr1, expr2 in zip(faster_l2l, slower_l2l, strict=True): assert float(sym.doit(expr1 - expr2).expand()) == 0.0 # }}} @@ -712,7 +712,7 @@ def _m2l_translate_simple(tgt_expansion, src_expansion, src_coeff_exprs, src_rsc local_result = [] for coeff, term in zip( src_coeff_exprs, - src_expansion.get_coefficient_identifiers()): + src_expansion.get_coefficient_identifiers(), strict=True): kernel_deriv = taker.diff(add_mi(deriv, term)) / src_rscale**sum(deriv) @@ -750,7 +750,7 @@ def test_m2l_toeplitz(): src_rscale, dvec, tgt_rscale, sac=None) replace_dict = {d: rng.random() for d in dvec} - for sym_a, sym_b in zip(expected_output, actual_output): + for sym_a, sym_b in zip(expected_output, actual_output, strict=True): num_a = sym_a.xreplace(replace_dict) num_b = sym_b.xreplace(replace_dict) @@ -801,7 +801,7 @@ def test_m2m_compressed_error_helmholtz(actx_factory, dim, order): furthest_source = np.max(np.abs(sources - mpole_center)) m2m_vals = [0, 0] for i, (mpole_expn_class, local_expn_class) in \ - enumerate(zip(mpole_expn_classes, local_expn_classes)): + enumerate(zip(mpole_expn_classes, local_expn_classes, strict=True)): tctx = toys.ToyContext( actx.context, knl,