From ef9f01f6f74bf53bda3f139f2a86fed1a27fc8d0 Mon Sep 17 00:00:00 2001 From: Alexandru Fikl Date: Fri, 17 Jul 2026 20:11:48 +0300 Subject: [PATCH 1/3] chore: use human-readable ruff rules --- benchmarks/bench_translations.py | 4 +- .../PDE-reduction and translations.ipynb | 6 ++- .../translations/PDE-reduction-symbolic.ipynb | 6 ++- doc/conf.py | 2 +- examples/expansion-toys.py | 8 +++- examples/fourier.py | 2 +- pyproject.toml | 25 ++++++------ sumpy/codegen.py | 6 +-- sumpy/cse.py | 4 +- sumpy/e2e.py | 2 +- sumpy/e2p.py | 2 +- sumpy/expansion/__init__.py | 4 +- sumpy/expansion/diff_op.py | 2 +- sumpy/expansion/local.py | 2 +- sumpy/expansion/m2l.py | 2 +- sumpy/kernel.py | 40 +++++++++---------- sumpy/symbolic.py | 12 +++--- sumpy/test/geometries.py | 2 +- sumpy/test/test_cse.py | 10 ++--- sumpy/test/test_fmm.py | 9 +++-- sumpy/test/test_heat_translations.py | 11 +++-- sumpy/test/test_kernels.py | 9 +++-- sumpy/test/test_l2l_coeffs.py | 11 +++-- sumpy/test/test_m2m_coeffs.py | 11 +++-- sumpy/test/test_matrixgen.py | 5 ++- sumpy/test/test_misc.py | 9 +++-- sumpy/test/test_qbx.py | 5 ++- sumpy/test/test_target_deriv.py | 4 +- sumpy/test/test_tools.py | 5 ++- sumpy/tools.py | 16 ++++---- sumpy/toys.py | 4 +- 31 files changed, 140 insertions(+), 100 deletions(-) diff --git a/benchmarks/bench_translations.py b/benchmarks/bench_translations.py index bdb46e158..8aba95fca 100644 --- a/benchmarks/bench_translations.py +++ b/benchmarks/bench_translations.py @@ -4,7 +4,7 @@ import numpy as np -from pyopencl.tools import ( # noqa +from pyopencl.tools import ( # ruff:ignore[unused-import] pytest_generate_tests_for_pyopencl as pytest_generate_tests, ) @@ -53,7 +53,7 @@ class TranslationBenchmarkSuite: def setup(self, param): logging.basicConfig(level=logging.INFO) - np.random.seed(17) # noqa: NPY002 + np.random.seed(17) # ruff:ignore[numpy-legacy-random] if self.__class__ == TranslationBenchmarkSuite: raise NotImplementedError mpole_expn_class = self.mpole_expn_class diff --git a/contrib/translations/PDE-reduction and translations.ipynb b/contrib/translations/PDE-reduction and translations.ipynb index 31d6602fc..d4df4f2e1 100644 --- a/contrib/translations/PDE-reduction and translations.ipynb +++ b/contrib/translations/PDE-reduction and translations.ipynb @@ -18,7 +18,11 @@ "import sumpy.toys as t\n", "from sumpy.expansion.local import VolumeTaylorLocalExpansion\n", "from sumpy.expansion.multipole import VolumeTaylorMultipoleExpansion\n", - "from sumpy.kernel import HelmholtzKernel, LaplaceKernel, YukawaKernel # noqa: F401\n", + "from sumpy.kernel import ( # ruff:ignore[unused-import]\n", + " HelmholtzKernel,\n", + " LaplaceKernel,\n", + " YukawaKernel,\n", + ")\n", "\n", "\n", "rng = np.random.default_rng(seed=42)\n", diff --git a/contrib/translations/PDE-reduction-symbolic.ipynb b/contrib/translations/PDE-reduction-symbolic.ipynb index 1fd881463..29a806826 100644 --- a/contrib/translations/PDE-reduction-symbolic.ipynb +++ b/contrib/translations/PDE-reduction-symbolic.ipynb @@ -14,7 +14,11 @@ " LinearPDEConformingVolumeTaylorMultipoleExpansion,\n", " VolumeTaylorMultipoleExpansion,\n", ")\n", - "from sumpy.kernel import HelmholtzKernel, LaplaceKernel, YukawaKernel # noqa: F401\n", + "from sumpy.kernel import ( # ruff:ignore[unused-import]\n", + " HelmholtzKernel,\n", + " LaplaceKernel,\n", + " YukawaKernel,\n", + ")\n", "from sumpy.symbolic import make_sym_vector\n", "\n", "\n", diff --git a/doc/conf.py b/doc/conf.py index 78ca6f540..fe1489761 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -73,4 +73,4 @@ def setup(app): - app.connect("missing-reference", process_autodoc_missing_reference) # noqa: F821 + app.connect("missing-reference", process_autodoc_missing_reference) # ruff:ignore[undefined-name] diff --git a/examples/expansion-toys.py b/examples/expansion-toys.py index 4d1483aef..5f70931a5 100644 --- a/examples/expansion-toys.py +++ b/examples/expansion-toys.py @@ -3,7 +3,11 @@ import pyopencl as cl import sumpy.toys as t -from sumpy.kernel import HelmholtzKernel, LaplaceKernel, YukawaKernel # noqa: F401 +from sumpy.kernel import ( # ruff:ignore[unused-import] + HelmholtzKernel, + LaplaceKernel, + YukawaKernel, +) from sumpy.visualization import FieldPlotter @@ -40,7 +44,7 @@ def main(): plt.show() mexp = t.multipole_expand(actx, pt_src, [0, 0], order=5) - mexp2 = t.multipole_expand(actx, mexp, [0, 0.25]) # noqa: F841 + mexp2 = t.multipole_expand(actx, mexp, [0, 0.25]) # ruff:ignore[unused-variable] lexp = t.local_expand(actx, mexp, [3, 0]) lexp2 = t.local_expand(actx, lexp, [3, 1], order=3) diff --git a/examples/fourier.py b/examples/fourier.py index 9e51c8449..a72702985 100644 --- a/examples/fourier.py +++ b/examples/fourier.py @@ -17,7 +17,7 @@ def make_fourier_mode_extender(m, n, dtype): result = np.zeros((m, n), dtype) # https://docs.scipy.org/doc/numpy/reference/routines.fft.html - if k % 2 == 0: # noqa: SIM108 + if k % 2 == 0: # ruff:ignore[if-else-block-instead-of-if-exp] peak_pos_freq = k/2 else: peak_pos_freq = (k-1)/2 diff --git a/pyproject.toml b/pyproject.toml index 69d4b68e8..0d1a3ce21 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -98,12 +98,12 @@ extend-select = [ ] extend-ignore = [ "C90", # McCabe complexity - "E221", # multiple spaces before operator - "E226", # missing whitespace around arithmetic operator - "E402", # module-level import not at top of file - "RUF067", # non-empty-init-module - "TRY004", - "TRY300", + "multiple-spaces-before-operator", # multiple spaces before operator + "missing-whitespace-around-arithmetic-operator", # missing whitespace around arithmetic operator + "module-import-not-at-top-of-file", # module-level import not at top of file + "non-empty-init-module", # non-empty-init-module + "type-check-without-type-error", + "try-consider-else", ] [tool.ruff.lint.flake8-quotes] @@ -127,10 +127,10 @@ lines-after-imports = 2 required-imports = ["from __future__ import annotations"] [tool.ruff.lint.per-file-ignores] -"doc/**/*.py" = ["I002"] -"examples/**/*.py" = ["I002"] -"sumpy/test/test_*.py" = ["S102"] -"doc/conf.py" = ["S102"] +"doc/**/*.py" = ["missing-required-import"] +"examples/**/*.py" = ["missing-required-import"] +"sumpy/test/test_*.py" = ["exec-builtin"] +"doc/conf.py" = ["exec-builtin"] [tool.typos.default] extend-ignore-re = [ @@ -189,6 +189,9 @@ exclude = [ ".venv", ] +# covered by ruff +reportUnusedImport = "hint" + [[tool.basedpyright.executionEnvironments]] root = "test" reportUnknownArgumentType = "none" @@ -198,7 +201,6 @@ reportMissingParameterType = "none" reportAttributeAccessIssue = "hint" reportMissingTypeStubs = "hint" reportUnknownLambdaType = "hint" -reportUnusedImport = "hint" reportUnusedParameter = "none" reportUnannotatedClassAttribute = "hint" reportAny = "hint" @@ -216,7 +218,6 @@ reportMissingParameterType = "none" reportAttributeAccessIssue = "hint" reportMissingTypeStubs = "hint" reportUnknownLambdaType = "hint" -reportUnusedImport = "hint" reportUnusedParameter = "none" reportUnannotatedClassAttribute = "hint" reportAny = "hint" diff --git a/sumpy/codegen.py b/sumpy/codegen.py index fe9a5cda1..bc72e8d14 100644 --- a/sumpy/codegen.py +++ b/sumpy/codegen.py @@ -193,7 +193,7 @@ def generate_preambles(self, target: TargetBase) -> Iterator[tuple[str, str]]: yield ("40-sumpy-bessel", BESSEL_PREAMBLE) -class Hankel1_01(lp.ScalarCallable): # noqa: N801 +class Hankel1_01(lp.ScalarCallable): # ruff:ignore[invalid-class-name] @override def with_types(self, arg_id_to_dtype: Mapping[int | str, LoopyType], @@ -325,7 +325,7 @@ def map_call(self, # AS (9.1.31) # https://dlmf.nist.gov/10.6.7 - if order >= 0: # noqa: SIM108 + if order >= 0: # ruff:ignore[if-else-block-instead-of-if-exp] order_str = f"{order}" else: order_str = f"m{-order}" @@ -608,7 +608,7 @@ def map_constant(self, expr: object, /) -> Expression: complex_dtype = self.complex_dtype if complex_dtype is None: - if complex(np.complex64(expr)) == expr: # noqa: RUF069 + if complex(np.complex64(expr)) == expr: # ruff:ignore[float-equality-comparison] return np.complex64(expr) complex_dtype = np.complex128 diff --git a/sumpy/cse.py b/sumpy/cse.py index 120693f97..0186718b6 100644 --- a/sumpy/cse.py +++ b/sumpy/cse.py @@ -506,7 +506,7 @@ def find_repeated(expr: sym.Basic | Unevaluated) -> None: assert isinstance(expr, sym.Basic) expr = opt_subs[expr] - if isinstance(expr, CSE_NO_DESCEND_CLASSES): # noqa: SIM108 + if isinstance(expr, CSE_NO_DESCEND_CLASSES): # ruff:ignore[if-else-block-instead-of-if-exp] args = () else: args = expr.args @@ -569,7 +569,7 @@ def rebuild(expr: sym.Basic | Unevaluated) -> sym.Basic | Unevaluated: reduced_exprs: list[sym.Basic] = [] for e in exprs: - if isinstance(e, sym.Basic): # noqa: SIM108 + if isinstance(e, sym.Basic): # ruff:ignore[if-else-block-instead-of-if-exp] reduced_e = rebuild(e) else: reduced_e = e diff --git a/sumpy/e2e.py b/sumpy/e2e.py index 70fd0ad49..0d0bdc29b 100644 --- a/sumpy/e2e.py +++ b/sumpy/e2e.py @@ -31,7 +31,7 @@ from typing_extensions import override import loopy as lp -from loopy.version import MOST_RECENT_LANGUAGE_VERSION # noqa: F401 +from loopy.version import MOST_RECENT_LANGUAGE_VERSION # ruff:ignore[unused-import] from pytools import memoize_method import sumpy.symbolic as sym diff --git a/sumpy/e2p.py b/sumpy/e2p.py index c4ad36d8d..bd46441a5 100644 --- a/sumpy/e2p.py +++ b/sumpy/e2p.py @@ -29,7 +29,7 @@ import numpy as np import loopy as lp -from loopy.version import MOST_RECENT_LANGUAGE_VERSION # noqa: F401 +from loopy.version import MOST_RECENT_LANGUAGE_VERSION # ruff:ignore[unused-import] from pytools import obj_array from sumpy.array_context import make_loopy_program diff --git a/sumpy/expansion/__init__.py b/sumpy/expansion/__init__.py index a79ce51f9..b3adc5995 100644 --- a/sumpy/expansion/__init__.py +++ b/sumpy/expansion/__init__.py @@ -449,7 +449,7 @@ def _get_mi_ordering_key_and_axis_permutation( axis_permutation = list(reversed(range(self.dim))) def mi_key(ident: MultiIndex | DerivativeIdentifier) -> tuple[int, ...]: - if isinstance(ident, DerivativeIdentifier): # noqa: SIM108 + if isinstance(ident, DerivativeIdentifier): # ruff:ignore[if-else-block-instead-of-if-exp] mi = ident.mi else: mi = ident @@ -641,7 +641,7 @@ def _get_mi_ordering_key_and_axis_permutation( from sumpy.expansion.diff_op import DerivativeIdentifier def mi_key(ident: MultiIndex | DerivativeIdentifier) -> tuple[int, ...]: - if isinstance(ident, DerivativeIdentifier): # noqa: SIM108 + if isinstance(ident, DerivativeIdentifier): # ruff:ignore[if-else-block-instead-of-if-exp] mi = ident.mi else: mi = ident diff --git a/sumpy/expansion/diff_op.py b/sumpy/expansion/diff_op.py index c17129f0d..050a7a601 100644 --- a/sumpy/expansion/diff_op.py +++ b/sumpy/expansion/diff_op.py @@ -582,7 +582,7 @@ def make_identity_diff_op( is *True*, then the last dimension of the multi-index is time. """ - if time_dependent: # noqa: SIM108 + if time_dependent: # ruff:ignore[if-else-block-instead-of-if-exp] mi = tuple([0]*(ninput + 1)) else: mi = tuple([0]*ninput) diff --git a/sumpy/expansion/local.py b/sumpy/expansion/local.py index 86e561677..ce59f5521 100644 --- a/sumpy/expansion/local.py +++ b/sumpy/expansion/local.py @@ -257,7 +257,7 @@ def coefficients_from_source_vec(self, # Following is a hack to make sure cse works. if 1: def save_temp(x: sym.Expr) -> sym.Expr: - return add_to_sac(sac, weight * x) # noqa: B023 + return add_to_sac(sac, weight * x) # ruff:ignore[function-uses-loop-variable] for i, mi in enumerate(self.get_coefficient_identifiers()): result[i] += taker.diff(mi, save_temp) diff --git a/sumpy/expansion/m2l.py b/sumpy/expansion/m2l.py index 92b43f73a..3a2237161 100644 --- a/sumpy/expansion/m2l.py +++ b/sumpy/expansion/m2l.py @@ -432,7 +432,7 @@ def _translation_classes_dependent_data_mis(self, max_mi = [0]*dim for i in range(dim): max_mi[i] = max(mi[i] for mi in src_expansion.get_coefficient_identifiers()) - max_mi[i] += max(mi[i] for mi in tgt_expansion.get_coefficient_identifiers()) # noqa: E501 + max_mi[i] += max(mi[i] for mi in tgt_expansion.get_coefficient_identifiers()) # ruff:ignore[line-too-long] # These are the multi-indices representing the rows # in the circulant matrix. Note that to get the circulant diff --git a/sumpy/kernel.py b/sumpy/kernel.py index 5342c8d38..821f9993e 100644 --- a/sumpy/kernel.py +++ b/sumpy/kernel.py @@ -879,7 +879,7 @@ def __init__(self, dim: int, yukawa_lambda_name: str = "lam") -> None: if dim == 2: # NOTE: transform K(0, lam r) into a Hankel function using [2] expr = var("hankel_1")(0, var("I")*lam*r) - scaling_for_K0 = var("pi")/2*var("I") # noqa: N806 + scaling_for_K0 = var("pi")/2*var("I") # ruff:ignore[non-lowercase-variable-in-function] scaling = 1/(2*var("pi")) * scaling_for_K0 elif dim == 3: @@ -1490,7 +1490,7 @@ def prepare_loopy_kernel(self, loopy_knl: lp.TranslationUnit) -> lp.TranslationU def get_args(self) -> Sequence[KernelArgument]: return [ KernelArgument(loopy_arg=lp.ValueArg(self.viscosity_mu_name, np.float64)), - KernelArgument(loopy_arg=lp.ValueArg(self.darcy_impermeability_name, np.float64)), # noqa: E501 + KernelArgument(loopy_arg=lp.ValueArg(self.darcy_impermeability_name, np.float64)), # ruff:ignore[line-too-long] ] @override @@ -1541,7 +1541,7 @@ def __init__(self, d = make_sym_vector("d", dim) r = sym.pymbolic_real_norm_2(d) - R = k * r # noqa: N806 + R = k * r # ruff:ignore[non-lowercase-variable-in-function] delta_ij = 1 if icomp == jcomp else 0 # NOTE: @@ -1553,8 +1553,8 @@ def __init__(self, if dim == 2: # transforming Bessel functions to Hankel functions using [2] - K0 = var("pi") * var("I") / 2 * var("hankel_1")(0, var("I") * R) # noqa: N806 - K1 = -var("pi") / 2 * var("hankel_1")(1, var("I") * R) # noqa: N806 + K0 = var("pi") * var("I") / 2 * var("hankel_1")(0, var("I") * R) # ruff:ignore[non-lowercase-variable-in-function] + K1 = -var("pi") / 2 * var("hankel_1")(1, var("I") * R) # ruff:ignore[non-lowercase-variable-in-function] # [1] Equations 7.7.5 and 7.7.6 # [3] Equations 5.2 and 5.3 (for the scaling we use here) @@ -1641,7 +1641,7 @@ def __init__(self, d = make_sym_vector("d", dim) r = sym.pymbolic_real_norm_2(d) - R = k * r # noqa: N806 + R = k * r # ruff:ignore[non-lowercase-variable-in-function] delta_ij = 1 if icomp == jcomp else 0 delta_ik = 1 if icomp == kcomp else 0 delta_kj = 1 if jcomp == kcomp else 0 @@ -1655,8 +1655,8 @@ def __init__(self, if dim == 2: # transforming Bessel functions to Hankel functions using [2] - K0 = var("pi") * var("I") / 2 * var("hankel_1")(0, var("I") * R) # noqa: N806 - K1 = -var("pi") / 2 * var("hankel_1")(1, var("I") * R) # noqa: N806 + K0 = var("pi") * var("I") / 2 * var("hankel_1")(0, var("I") * R) # ruff:ignore[non-lowercase-variable-in-function] + K1 = -var("pi") / 2 * var("hankel_1")(1, var("I") * R) # ruff:ignore[non-lowercase-variable-in-function] # [1] Equations 7.7.7 and 7.7.8 # [3] Equations 5.4-5.6 (for the scaling we use here) @@ -2643,17 +2643,17 @@ class KernelIdentityMapper(KernelMapper[ScalarKernel]): def map_expression_kernel(self, kernel: ExpressionKernel) -> ScalarKernel: return kernel - map_laplace_kernel: Callable[[Self, LaplaceKernel], ScalarKernel] = map_expression_kernel # noqa: E501 - map_biharmonic_kernel: Callable[[Self, BiharmonicKernel], ScalarKernel] = map_expression_kernel # noqa: E501 - map_helmholtz_kernel: Callable[[Self, HelmholtzKernel], ScalarKernel] = map_expression_kernel # noqa: E501 - map_yukawa_kernel: Callable[[Self, YukawaKernel], ScalarKernel] = map_expression_kernel # noqa: E501 - map_elasticity_kernel: Callable[[Self, ElasticityComponentKernel], ScalarKernel] = map_expression_kernel # noqa: E501 - map_elasticity_stress_kernel: Callable[[Self, ElasticityStressComponentKernel], ScalarKernel] = map_expression_kernel # noqa: E501 - map_line_of_compression_kernel: Callable[[Self, LineOfCompressionKernel], ScalarKernel] = map_expression_kernel # noqa: E501 - map_stokeslet_kernel: Callable[[Self, StokesletComponentKernel], ScalarKernel] = map_expression_kernel # noqa: E501 - map_stresslet_kernel: Callable[[Self, StressletComponentKernel], ScalarKernel] = map_expression_kernel # noqa: E501 - map_brinkmanlet_kernel: Callable[[Self, BrinkmanletComponentKernel], ScalarKernel] = map_expression_kernel # noqa: E501 - map_brinkman_stress_kernel: Callable[[Self, BrinkmanStressComponentKernel], ScalarKernel] = map_expression_kernel # noqa: E501 + map_laplace_kernel: Callable[[Self, LaplaceKernel], ScalarKernel] = map_expression_kernel # ruff:ignore[line-too-long] + map_biharmonic_kernel: Callable[[Self, BiharmonicKernel], ScalarKernel] = map_expression_kernel # ruff:ignore[line-too-long] + map_helmholtz_kernel: Callable[[Self, HelmholtzKernel], ScalarKernel] = map_expression_kernel # ruff:ignore[line-too-long] + map_yukawa_kernel: Callable[[Self, YukawaKernel], ScalarKernel] = map_expression_kernel # ruff:ignore[line-too-long] + map_elasticity_kernel: Callable[[Self, ElasticityComponentKernel], ScalarKernel] = map_expression_kernel # ruff:ignore[line-too-long] + map_elasticity_stress_kernel: Callable[[Self, ElasticityStressComponentKernel], ScalarKernel] = map_expression_kernel # ruff:ignore[line-too-long] + map_line_of_compression_kernel: Callable[[Self, LineOfCompressionKernel], ScalarKernel] = map_expression_kernel # ruff:ignore[line-too-long] + map_stokeslet_kernel: Callable[[Self, StokesletComponentKernel], ScalarKernel] = map_expression_kernel # ruff:ignore[line-too-long] + map_stresslet_kernel: Callable[[Self, StressletComponentKernel], ScalarKernel] = map_expression_kernel # ruff:ignore[line-too-long] + map_brinkmanlet_kernel: Callable[[Self, BrinkmanletComponentKernel], ScalarKernel] = map_expression_kernel # ruff:ignore[line-too-long] + map_brinkman_stress_kernel: Callable[[Self, BrinkmanStressComponentKernel], ScalarKernel] = map_expression_kernel # ruff:ignore[line-too-long] map_heat_kernel: Callable[[Self, HeatKernel], ScalarKernel] = map_expression_kernel def map_axis_target_derivative(self, kernel: AxisTargetDerivative) -> ScalarKernel: @@ -2662,7 +2662,7 @@ def map_axis_target_derivative(self, kernel: AxisTargetDerivative) -> ScalarKern def map_axis_source_derivative(self, kernel: AxisSourceDerivative) -> ScalarKernel: return type(kernel)(kernel.axis, self.rec(kernel.inner_kernel)) - def map_target_point_multiplier(self, kernel: TargetPointMultiplier) -> ScalarKernel: # noqa: E501 + def map_target_point_multiplier(self, kernel: TargetPointMultiplier) -> ScalarKernel: # ruff:ignore[line-too-long] return type(kernel)(kernel.axis, self.rec(kernel.inner_kernel)) def map_directional_source_derivative( diff --git a/sumpy/symbolic.py b/sumpy/symbolic.py index 7c9904370..06b44723d 100644 --- a/sumpy/symbolic.py +++ b/sumpy/symbolic.py @@ -63,7 +63,7 @@ def _find_symbolic_backend(): global USE_SYMENGINE try: - import symengine # noqa: F401 + import symengine # ruff:ignore[unused-import] symengine_found = True symengine_error = None except ImportError as import_error: @@ -132,7 +132,7 @@ def _find_symbolic_backend(): Rational = sym.Rational Matrix = sym.Matrix Subs = sym.Subs -I = cast("Expr", sym.I) # noqa: E741 +I = cast("Expr", sym.I) # ruff:ignore[ambiguous-variable-name] pi = cast("Expr", sym.pi) functions = sym.functions Number = sym.Number @@ -147,13 +147,13 @@ def _coeff_isneg(a: Basic) -> bool: if TYPE_CHECKING or USE_SYMENGINE: - def UnevaluatedExpr(x: T) -> T: # noqa: N802 + def UnevaluatedExpr(x: T) -> T: # ruff:ignore[invalid-function-name] return x else: try: from sympy import UnevaluatedExpr except ImportError: - def UnevaluatedExpr(x): # noqa: N802 + def UnevaluatedExpr(x): # ruff:ignore[invalid-function-name] return x @@ -396,10 +396,10 @@ class Hankel1(_BesselOrHankel): _SympyHankel1 = Hankel1 if not TYPE_CHECKING and USE_SYMENGINE: - def BesselJ(*args): # noqa: N802 + def BesselJ(*args): # ruff:ignore[invalid-function-name] return sympify(_SympyBesselJ(*args)) - def Hankel1(*args): # noqa: N802 + def Hankel1(*args): # ruff:ignore[invalid-function-name] return sympify(_SympyHankel1(*args)) # vim: fdm=marker diff --git a/sumpy/test/geometries.py b/sumpy/test/geometries.py index 5104ab39d..a4b4b004e 100644 --- a/sumpy/test/geometries.py +++ b/sumpy/test/geometries.py @@ -125,7 +125,7 @@ def diff2d(ary: onp.Array2D[np.floating[Any]]) -> onp.Array2D[np.floating[Any]]: length=0.1 ) plt.show() - 1/0 # noqa: B018 + 1/0 # ruff:ignore[useless-expression] geo = Geometry( nodes=nodes.reshape(3, -1).copy(), diff --git a/sumpy/test/test_cse.py b/sumpy/test/test_cse.py index 843998839..ad531cdf8 100644 --- a/sumpy/test/test_cse.py +++ b/sumpy/test/test_cse.py @@ -299,8 +299,8 @@ def test_issue_4499(): from sympy import S, Tuple from sympy.abc import a, b - B = sym.Function("B") # noqa: N806 - G = sym.Function("G") # noqa: N806 + B = sym.Function("B") # ruff:ignore[non-lowercase-variable-in-function] + G = sym.Function("G") # ruff:ignore[non-lowercase-variable-in-function] t = Tuple(*( a, a + S(1)/2, @@ -418,14 +418,14 @@ def test_symbols_exhausted_error(): @sympyonly def test_issue_7840(): # daveknippers' example - C393 = sym.sympify( # noqa: N806 + C393 = sym.sympify( # ruff:ignore[non-lowercase-variable-in-function] "Piecewise((C391 - 1.65, C390 < 0.5), (Piecewise((C391 - 1.65, \ C391 > 2.35), (C392, True)), True))" ) - C391 = sym.sympify( # noqa: N806 + C391 = sym.sympify( # ruff:ignore[non-lowercase-variable-in-function] "Piecewise((2.05*C390**(-1.03), C390 < 0.5), (2.5*C390**(-0.625), True))" ) - C393 = C393.subs("C391", C391) # noqa: N806 + C393 = C393.subs("C391", C391) # ruff:ignore[non-lowercase-variable-in-function] # simple substitution sub = {} sub["C390"] = 0.703451854 diff --git a/sumpy/test/test_fmm.py b/sumpy/test/test_fmm.py index 4936f09b6..1a87a67f6 100644 --- a/sumpy/test/test_fmm.py +++ b/sumpy/test/test_fmm.py @@ -40,7 +40,10 @@ ) from pytools import obj_array -from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf # noqa: F401 +from sumpy.array_context import ( # ruff:ignore[unused-import] + PytestPyOpenCLArrayContextFactory, + _acf, +) from sumpy.expansion.local import ( H2DLocalExpansion, LinearPDEConformingVolumeTaylorLocalExpansion, @@ -264,10 +267,10 @@ def _test_sumpy_fmm( if order_varies_with_level: def fmm_level_to_order(kernel, kernel_args, tree, lev): - return order + lev % 2 # noqa: B023 + return order + lev % 2 # ruff:ignore[function-uses-loop-variable] else: def fmm_level_to_order(kernel, kernel_args, tree, lev): - return order # noqa: B023 + return order # ruff:ignore[function-uses-loop-variable] wrangler = SumpyExpansionWrangler(tree_indep, trav, dtype, fmm_level_to_order=fmm_level_to_order, diff --git a/sumpy/test/test_heat_translations.py b/sumpy/test/test_heat_translations.py index d7fa323c9..3d2f686f1 100644 --- a/sumpy/test/test_heat_translations.py +++ b/sumpy/test/test_heat_translations.py @@ -36,7 +36,10 @@ from pytools.convergence import EOCRecorder import sumpy.toys as t -from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf # noqa: F401 +from sumpy.array_context import ( # ruff:ignore[unused-import] + PytestPyOpenCLArrayContextFactory, + _acf, +) from sumpy.expansion.local import ( LinearPDEConformingVolumeTaylorLocalExpansion, VolumeTaylorLocalExpansion, @@ -79,7 +82,7 @@ def test_heat_m2m( extra_kwargs = {"alpha": alpha} t_sep = 1.0 - L = np.sqrt(4 * alpha * t_sep) # noqa: N806 + L = np.sqrt(4 * alpha * t_sep) # ruff:ignore[non-lowercase-variable-in-function] src_center = np.array([1.0, 0.5]) tgt_center = np.array([0.0, 2.5]) @@ -166,7 +169,7 @@ def test_heat_l2l( tgt_center = np.array([0.0, 2.5]) t_sep = 2 * src_ht - L = np.sqrt(4 * alpha * t_sep) # noqa: N806 + L = np.sqrt(4 * alpha * t_sep) # ruff:ignore[non-lowercase-variable-in-function] rng = np.random.default_rng(0) src_grid = np.linspace(-1.0, 1.0, 11) @@ -251,7 +254,7 @@ def test_heat_m2l( tgt_center = np.array([0.0, 2.5]) t_sep = 2 * src_ht - L = np.sqrt(4 * alpha * t_sep) # noqa: N806 + L = np.sqrt(4 * alpha * t_sep) # ruff:ignore[non-lowercase-variable-in-function] rng = np.random.default_rng(0) src_grid = np.linspace(-1.0, 1.0, 11) diff --git a/sumpy/test/test_kernels.py b/sumpy/test/test_kernels.py index 2375bf4e3..ea6d2b0fa 100644 --- a/sumpy/test/test_kernels.py +++ b/sumpy/test/test_kernels.py @@ -42,7 +42,10 @@ import sumpy.symbolic as sym import sumpy.toys as t -from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf # noqa: F401 +from sumpy.array_context import ( # ruff:ignore[unused-import] + PytestPyOpenCLArrayContextFactory, + _acf, +) from sumpy.expansion.local import ( H2DLocalExpansion, LinearPDEConformingVolumeTaylorLocalExpansion, @@ -672,14 +675,14 @@ def test_m2m_and_l2l_exprs_simpler(base_knl, local_expn_class, mpole_expn_class, dvec, tgt_rscale, _fast_version=False) for expr1, expr2 in zip(faster_m2m, slower_m2m, strict=True): - assert float(sym.doit(expr1 - expr2).expand()) == 0.0 # noqa: RUF069 + assert float(sym.doit(expr1 - expr2).expand()) == 0.0 # ruff:ignore[float-equality-comparison] 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, strict=True): - assert float(sym.doit(expr1 - expr2).expand()) == 0.0 # noqa: RUF069 + assert float(sym.doit(expr1 - expr2).expand()) == 0.0 # ruff:ignore[float-equality-comparison] # }}} diff --git a/sumpy/test/test_l2l_coeffs.py b/sumpy/test/test_l2l_coeffs.py index cfc08867b..0e78b2737 100644 --- a/sumpy/test/test_l2l_coeffs.py +++ b/sumpy/test/test_l2l_coeffs.py @@ -39,7 +39,10 @@ import sumpy.toys as t from .coeff_test_tools import NumericMatVecOperator, get_repl_dict, to_scalar -from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf # noqa: F401 +from sumpy.array_context import ( # ruff:ignore[unused-import] + PytestPyOpenCLArrayContextFactory, + _acf, +) from sumpy.expansion.local import ( LinearPDEConformingVolumeTaylorLocalExpansion, VolumeTaylorLocalExpansion, @@ -115,9 +118,9 @@ def test_l2l_coefficient_differences( # Build matrix M p2l2l_expn = LinearPDEConformingVolumeTaylorLocalExpansion(knl, order) wrangler = p2l2l_expn.expansion_terms_wrangler - M_symbolic = wrangler.get_projection_matrix(rscale=1.0) # noqa: N806 + M_symbolic = wrangler.get_projection_matrix(rscale=1.0) # ruff:ignore[non-lowercase-variable-in-function] numeric_op = NumericMatVecOperator(M_symbolic, repl_dict) - M = build_matrix(numeric_op, dtype=np.complex128) # noqa: N806 + M = build_matrix(numeric_op, dtype=np.complex128) # ruff:ignore[non-lowercase-variable-in-function] # Get compressed coefficients mu_c_symbolic = wrangler.get_full_kernel_derivatives_from_stored( @@ -145,7 +148,7 @@ def test_l2l_coefficient_differences( print(f'{"="*104}') print(f"c1 = {c1}, c2 = {c2}, h = {h}") print() - print(f"{'i':>3s} | {'ν(i)':>15s} | {'|ν|':4s} | " # noqa: RUF001 + print(f"{'i':>3s} | {'ν(i)':>15s} | {'|ν|':4s} | " # ruff:ignore[ambiguous-unicode-character-string] f"{'formula':>31s} | {'direct':>31s} | {'abs err':>10s}") print("-" * 104) diff --git a/sumpy/test/test_m2m_coeffs.py b/sumpy/test/test_m2m_coeffs.py index 07acdd639..d04c41f75 100644 --- a/sumpy/test/test_m2m_coeffs.py +++ b/sumpy/test/test_m2m_coeffs.py @@ -39,7 +39,10 @@ import sumpy.toys as t from .coeff_test_tools import NumericMatVecOperator, get_repl_dict, to_scalar -from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf # noqa: F401 +from sumpy.array_context import ( # ruff:ignore[unused-import] + PytestPyOpenCLArrayContextFactory, + _acf, +) from sumpy.expansion.local import ( LinearPDEConformingVolumeTaylorLocalExpansion, ) @@ -110,7 +113,7 @@ def test_m2m_coefficient_differences( print(f"m_center2 = {m_center2}") print(f"h = m_center2 - m_center1 = {h}") print() - print(f"{'k':>3s} | {'ν(k)':>15s} | {'|ν(k)|':6s} | " # noqa: RUF001 + print(f"{'k':>3s} | {'ν(k)':>15s} | {'|ν(k)|':6s} | " # ruff:ignore[ambiguous-unicode-character-string] f"{'difference by formula':>31s} | " f"{'difference by direct computation':>31s} | " f"{'abs err':>10s}") @@ -140,9 +143,9 @@ def test_m2m_coefficient_differences( # Build matrix M wrangler = mexpn.expansion_terms_wrangler - M_symbolic = wrangler.get_projection_matrix(rscale=1.0) # noqa: N806 + M_symbolic = wrangler.get_projection_matrix(rscale=1.0) # ruff:ignore[non-lowercase-variable-in-function] numeric_op = NumericMatVecOperator(M_symbolic, repl_dict) - M = build_matrix(numeric_op, dtype=np.complex128) # noqa: N806 + M = build_matrix(numeric_op, dtype=np.complex128) # ruff:ignore[non-lowercase-variable-in-function] coeffs_full = (M @ p2l.coeffs) * global_const # Get coefficient identifiers diff --git a/sumpy/test/test_matrixgen.py b/sumpy/test/test_matrixgen.py index 2248f8f8f..1f89fafea 100644 --- a/sumpy/test/test_matrixgen.py +++ b/sumpy/test/test_matrixgen.py @@ -33,7 +33,10 @@ from arraycontext import ArrayContextFactory, pytest_generate_tests_for_array_contexts from pytools import obj_array -from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf # noqa: F401 +from sumpy.array_context import ( # ruff:ignore[unused-import] + PytestPyOpenCLArrayContextFactory, + _acf, +) logger = logging.getLogger(__name__) diff --git a/sumpy/test/test_misc.py b/sumpy/test/test_misc.py index 275705719..69414a790 100644 --- a/sumpy/test/test_misc.py +++ b/sumpy/test/test_misc.py @@ -40,7 +40,10 @@ import sumpy.symbolic as sym import sumpy.toys as t -from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf # noqa: F401 +from sumpy.array_context import ( # ruff:ignore[unused-import] + PytestPyOpenCLArrayContextFactory, + _acf, +) from sumpy.expansion import ( FullExpansionTermsWrangler, LinearPDEBasedExpansionTermsWrangler, @@ -481,8 +484,8 @@ def test_as_scalar_pde_stokes(): def test_as_scalar_pde_maxwell(): from sumpy.symbolic import symbols op = make_identity_diff_op(3, 6, time_dependent=True) - E = op[:3] # noqa: N806 - B = op[3:] # noqa: N806 + E = op[:3] # ruff:ignore[non-lowercase-variable-in-function] + B = op[3:] # ruff:ignore[non-lowercase-variable-in-function] mu, epsilon = symbols("mu, epsilon") t = (0, 0, 0, 1) diff --git a/sumpy/test/test_qbx.py b/sumpy/test/test_qbx.py index 7d7a6e6a7..533ed796e 100644 --- a/sumpy/test/test_qbx.py +++ b/sumpy/test/test_qbx.py @@ -31,7 +31,10 @@ from arraycontext import ArrayContextFactory, pytest_generate_tests_for_array_contexts -from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf # noqa: F401 +from sumpy.array_context import ( # ruff:ignore[unused-import] + PytestPyOpenCLArrayContextFactory, + _acf, +) from sumpy.expansion.local import LineTaylorLocalExpansion, VolumeTaylorLocalExpansion diff --git a/sumpy/test/test_target_deriv.py b/sumpy/test/test_target_deriv.py index f5d0648e2..97913761f 100644 --- a/sumpy/test/test_target_deriv.py +++ b/sumpy/test/test_target_deriv.py @@ -38,9 +38,9 @@ ) from pytools.convergence import EOCRecorder -from sumpy.array_context import ( # noqa: F401 +from sumpy.array_context import ( # ruff:ignore[unused-import] PytestPyOpenCLArrayContextFactory, - _acf, # pyright: ignore[reportUnusedImport] + _acf, ) from sumpy.expansion.local import LineTaylorLocalExpansion from sumpy.kernel import AxisTargetDerivative, LaplaceKernel, ScalarKernel diff --git a/sumpy/test/test_tools.py b/sumpy/test/test_tools.py index 9ba35f1ea..3d053a607 100644 --- a/sumpy/test/test_tools.py +++ b/sumpy/test/test_tools.py @@ -32,7 +32,10 @@ from arraycontext import ArrayContextFactory, pytest_generate_tests_for_array_contexts import sumpy.symbolic as sym -from sumpy.array_context import PytestPyOpenCLArrayContextFactory, _acf # noqa: F401 +from sumpy.array_context import ( # ruff:ignore[unused-import] + PytestPyOpenCLArrayContextFactory, + _acf, +) from sumpy.tools import ( fft, fft_toeplitz_upper_triangular, diff --git a/sumpy/tools.py b/sumpy/tools.py index f904a2527..6a5d2f419 100644 --- a/sumpy/tools.py +++ b/sumpy/tools.py @@ -784,7 +784,7 @@ def loopy_fft( m = n factors = [] while m != 1: - N1, m = find_factors(m) # noqa: N806 + N1, m = find_factors(m) # ruff:ignore[non-lowercase-variable-in-function] factors.append(N1) nfft = n @@ -816,9 +816,9 @@ def loopy_fft( ), ] - for ilev, N1 in enumerate(list(reversed(factors))): # noqa: N806 + for ilev, N1 in enumerate(list(reversed(factors))): # ruff:ignore[non-lowercase-variable-in-function] nfft //= N1 - N2 = n // (nfft * N1) # noqa: N806 + N2 = n // (nfft * N1) # ruff:ignore[non-lowercase-variable-in-function] init_happens_after = "copy" if ilev == 0 else f"update_{ilev-1}" temp = var("temp") @@ -826,15 +826,15 @@ def loopy_fft( i = var(f"i_{ilev}") i2 = var(f"i2_{ilev}") ifft = var(f"ifft_{ilev}") - iN1 = var(f"iN1_{ilev}") # noqa: N806 - iN1_sum = var(f"iN1_sum_{ilev}") # noqa: N806 - iN2 = var(f"iN2_{ilev}") # noqa: N806 + iN1 = var(f"iN1_{ilev}") # ruff:ignore[non-lowercase-variable-in-function] + iN1_sum = var(f"iN1_sum_{ilev}") # ruff:ignore[non-lowercase-variable-in-function] + iN2 = var(f"iN2_{ilev}") # ruff:ignore[non-lowercase-variable-in-function] table_idx = var(f"table_idx_{ilev}") exp = var(f"exp_{ilev}") i_batch = (*batch_dims, i) i2_batch = (*batch_dims, i2) - iN_batch = (*batch_dims, ifft + nfft * (iN1 * N2 + iN2)) # noqa: N806 + iN_batch = (*batch_dims, ifft + nfft * (iN1 * N2 + iN2)) # ruff:ignore[non-lowercase-variable-in-function] insns += [ lp.Assignment( @@ -954,7 +954,7 @@ def _get_fft_backend(queue: pyopencl.CommandQueue) -> FFTBackend: return FFTBackend[env_val] try: - import pyvkfft.opencl # noqa: F401 + import pyvkfft.opencl # ruff:ignore[unused-import] except ImportError: warnings.warn("VkFFT not found. FFT runs will be slower.", stacklevel=3) return FFTBackend.loopy diff --git a/sumpy/toys.py b/sumpy/toys.py index d41bb47a5..8ff1f88c7 100644 --- a/sumpy/toys.py +++ b/sumpy/toys.py @@ -1031,13 +1031,13 @@ def visit_multipoleexpansion(self, psource): label = psource_text_kwargs_copy.pop("s", label) text_kwargs.update(psource_text_kwargs_copy) - shrinkB = 0 # noqa + shrinkB = 0 # ruff:ignore[non-lowercase-variable-in-function] if isinstance(psource.derived_from, ExpansionPotentialSource): # Avoid overlapping the tail of the arrow with any expansion labels that # are present at the tail. import matplotlib as mpl font_size = mpl.rcParams["font.size"] - shrinkB = 7/8 * font_size # noqa + shrinkB = 7/8 * font_size # ruff:ignore[non-lowercase-variable-in-function] arrowprops = {"shrinkB": shrinkB, "arrowstyle": "<|-"} From 0fbb9f3487009fae5539624b59c1242b825b9f5c Mon Sep 17 00:00:00 2001 From: Alexandru Fikl Date: Fri, 17 Jul 2026 20:16:10 +0300 Subject: [PATCH 2/3] chore: sort pyproject ruff.extend-ignore --- pyproject.toml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 0d1a3ce21..3eb8e7643 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -97,13 +97,13 @@ extend-select = [ "W", # pycodestyle ] extend-ignore = [ - "C90", # McCabe complexity - "multiple-spaces-before-operator", # multiple spaces before operator - "missing-whitespace-around-arithmetic-operator", # missing whitespace around arithmetic operator - "module-import-not-at-top-of-file", # module-level import not at top of file - "non-empty-init-module", # non-empty-init-module - "type-check-without-type-error", + "complex-structure", + "missing-whitespace-around-arithmetic-operator", + "module-import-not-at-top-of-file", + "multiple-spaces-before-operator", + "non-empty-init-module", "try-consider-else", + "type-check-without-type-error", ] [tool.ruff.lint.flake8-quotes] From 9dc70810f70f3aaac632e90f1881f9e646325a18 Mon Sep 17 00:00:00 2001 From: Alexandru Fikl Date: Fri, 17 Jul 2026 20:17:09 +0300 Subject: [PATCH 3/3] chore: update baseline --- .basedpyright/baseline.json | 164 ++++-------------------------------- 1 file changed, 18 insertions(+), 146 deletions(-) diff --git a/.basedpyright/baseline.json b/.basedpyright/baseline.json index bd6079cad..46431db20 100644 --- a/.basedpyright/baseline.json +++ b/.basedpyright/baseline.json @@ -24,14 +24,6 @@ "endColumn": 50, "lineCount": 1 } - }, - { - "code": "reportCallIssue", - "range": { - "startColumn": 13, - "endColumn": 78, - "lineCount": 1 - } } ], "./examples/expansion-toys.py": [ @@ -5447,14 +5439,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 42, - "endColumn": 52, - "lineCount": 1 - } - }, { "code": "reportArgumentType", "range": { @@ -14352,86 +14336,6 @@ "endColumn": 36, "lineCount": 1 } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 18, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 16, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 26, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 36, - "endColumn": 44, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 16, - "endColumn": 25, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 27, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 38, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnusedExpression", - "range": { - "startColumn": 8, - "endColumn": 11, - "lineCount": 1 - } } ], "./sumpy/test/test_codegen.py": [ @@ -16764,8 +16668,8 @@ { "code": "reportUnusedImport", "range": { - "startColumn": 67, - "endColumn": 71, + "startColumn": 4, + "endColumn": 8, "lineCount": 1 } }, @@ -17057,38 +16961,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 67, - "lineCount": 1 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 21, - "endColumn": 60, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 25, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 15, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -18062,8 +17934,8 @@ { "code": "reportUnusedImport", "range": { - "startColumn": 67, - "endColumn": 71, + "startColumn": 4, + "endColumn": 8, "lineCount": 1 } }, @@ -18664,8 +18536,8 @@ { "code": "reportUnusedImport", "range": { - "startColumn": 67, - "endColumn": 71, + "startColumn": 4, + "endColumn": 8, "lineCount": 1 } }, @@ -20114,8 +19986,8 @@ { "code": "reportUnusedImport", "range": { - "startColumn": 67, - "endColumn": 71, + "startColumn": 4, + "endColumn": 8, "lineCount": 1 } }, @@ -20284,8 +20156,8 @@ { "code": "reportUnusedImport", "range": { - "startColumn": 67, - "endColumn": 71, + "startColumn": 4, + "endColumn": 8, "lineCount": 1 } }, @@ -20414,8 +20286,8 @@ { "code": "reportUnusedImport", "range": { - "startColumn": 67, - "endColumn": 71, + "startColumn": 4, + "endColumn": 8, "lineCount": 1 } }, @@ -20984,8 +20856,8 @@ { "code": "reportUnusedImport", "range": { - "startColumn": 67, - "endColumn": 71, + "startColumn": 4, + "endColumn": 8, "lineCount": 1 } }, @@ -22650,8 +22522,8 @@ { "code": "reportUnusedImport", "range": { - "startColumn": 67, - "endColumn": 71, + "startColumn": 4, + "endColumn": 8, "lineCount": 1 } }, @@ -23054,8 +22926,8 @@ { "code": "reportUnusedImport", "range": { - "startColumn": 67, - "endColumn": 71, + "startColumn": 4, + "endColumn": 8, "lineCount": 1 } },