From 81164bd6723f27a395c3bf19e2a56fd8c538a53f Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Wed, 22 Oct 2025 16:10:36 -0500 Subject: [PATCH 01/15] Various typing improvements in mappers --- pytential/__init__.py | 8 +- pytential/linalg/direct_solver_symbolic.py | 4 +- pytential/symbolic/compiler.py | 2 +- pytential/symbolic/execution.py | 5 +- pytential/symbolic/mappers.py | 314 +++++++++++++-------- pytential/symbolic/primitives.py | 21 +- 6 files changed, 221 insertions(+), 133 deletions(-) diff --git a/pytential/__init__.py b/pytential/__init__.py index ad20776e7..b50eb15b5 100644 --- a/pytential/__init__.py +++ b/pytential/__init__.py @@ -38,7 +38,6 @@ from arraycontext import Array from meshmode.discretization import Discretization from meshmode.dof_array import DOFArray - from pymbolic.geometric_algebra import MultiVector from pytools.obj_array import ObjectArray1D @@ -112,7 +111,7 @@ def _norm_inf_op(discr: Discretization, num_components: int | None): def norm( discr: Discretization, - x: DOFArray | ObjectArray1D[DOFArray] | MultiVector[DOFArray], + x: DOFArray | ObjectArray1D[DOFArray], p: float | Literal["inf"] = 2): from pymbolic.geometric_algebra import MultiVector if isinstance(x, MultiVector): @@ -128,7 +127,10 @@ def norm( elif p == np.inf or p == "inf": norm_op = _norm_inf_op(discr, num_components) - norm_res = norm_op(arg=x) + + # FIXME: norm_op (correctly) becomes BoundExpression[Operand], but + # then none of the overloads fit, hence the type-ignore. + norm_res = norm_op(arg=x) # pyright: ignore[reportCallIssue] if isinstance(norm_res, obj_array.ObjectArray): # FIXME: Pyright may have a point: It's not clear how/if this works return max(cast("ObjectArray1D[Array]", norm_res)) # pyright: ignore[reportArgumentType] diff --git a/pytential/linalg/direct_solver_symbolic.py b/pytential/linalg/direct_solver_symbolic.py index 2e478af8c..5ab010026 100644 --- a/pytential/linalg/direct_solver_symbolic.py +++ b/pytential/linalg/direct_solver_symbolic.py @@ -248,7 +248,7 @@ class DOFDescriptorReplacer(_LocationReplacer): .. automethod:: __init__ """ - operand_rec: _LocationReplacer + rec: _LocationReplacer def __init__(self, source: DOFDescriptorLike, target: DOFDescriptorLike) -> None: """ @@ -258,7 +258,7 @@ def __init__(self, source: DOFDescriptorLike, target: DOFDescriptorLike) -> None the target geometry. """ super().__init__(target, default_source=source) - self.operand_rec = _LocationReplacer(source, default_source=source) + self.rec = _LocationReplacer(source, default_source=source) # }}} diff --git a/pytential/symbolic/compiler.py b/pytential/symbolic/compiler.py index a6b334e2a..f606e073f 100644 --- a/pytential/symbolic/compiler.py +++ b/pytential/symbolic/compiler.py @@ -736,7 +736,7 @@ def map_common_subexpression( @override def map_int_g( self, expr: IntG, name_hint: str | None = None, - ) -> Expression: + ) -> ArithmeticExpression: try: return self.expr_to_var[expr] except KeyError: diff --git a/pytential/symbolic/execution.py b/pytential/symbolic/execution.py index fc1931ece..56b28f724 100644 --- a/pytential/symbolic/execution.py +++ b/pytential/symbolic/execution.py @@ -39,6 +39,7 @@ ScalarLike, ) from meshmode.dof_array import DOFArray +from pymbolic.geometric_algebra import componentwise from pymbolic.mapper.evaluator import EvaluationMapper as PymbolicEvaluationMapper from pytools import memoize_in, memoize_method @@ -639,7 +640,9 @@ def _prepare_expr(places: GeometryCollection, from pytential.source import LayerPotentialSourceBase from pytential.symbolic.mappers import DerivativeBinder, ToTargetTagger, flatten - expr = flatten(expr) + # FIXME: There's some mismatch between OperandTc and a conditional union + # type that I was too impatient to figure out in detail. + expr = componentwise(flatten, expr) # pyright: ignore[reportAssignmentType] auto_source, auto_target = _prepare_auto_where(auto_where, places=places) expr = ToTargetTagger(auto_source, auto_target)(expr) expr = DerivativeBinder()(expr) diff --git a/pytential/symbolic/mappers.py b/pytential/symbolic/mappers.py index 6ade47e98..4ec911fe5 100644 --- a/pytential/symbolic/mappers.py +++ b/pytential/symbolic/mappers.py @@ -23,15 +23,16 @@ THE SOFTWARE. """ -from collections.abc import Set -from dataclasses import replace +from collections.abc import Callable, Iterable, Set +from dataclasses import dataclass, replace from functools import reduce from typing import TYPE_CHECKING, cast -from typing_extensions import override +from typing_extensions import Self, override import pymbolic.primitives as p from pymbolic import ArithmeticExpression, ExpressionNode +from pymbolic.geometric_algebra import componentwise from pymbolic.geometric_algebra.mapper import ( Collector as CollectorBase, CombineMapper as CombineMapperBase, @@ -67,14 +68,22 @@ if TYPE_CHECKING: + from sumpy.symbolic import SpatialConstant + from pytential.collection import GeometryCollection - from pytential.symbolic.dof_desc import DOFDescriptor, DOFDescriptorLike, GeometryId + from pytential.symbolic.dof_desc import ( + DiscretizationStage, + DOFDescriptor, + DOFDescriptorLike, + GeometryId, + ) -def rec_int_g_arguments(mapper, expr): - densities = mapper.rec(expr.densities) +def rec_int_g_arguments(mapper: IdentityMapper | EvaluationRewriter, expr: prim.IntG): + densities = [mapper.rec_arith(d) for d in expr.densities] kernel_arguments = { - name: mapper.rec(arg) for name, arg in expr.kernel_arguments.items() + name: componentwise(mapper.rec_arith, arg) + for name, arg in expr.kernel_arguments.items() } changed = not ( @@ -91,28 +100,39 @@ def rec_int_g_arguments(mapper, expr): # {{{ IdentityMapper class IdentityMapper(IdentityMapperBase[[]]): - def map_node_sum(self, expr): - operand = self.rec(expr.operand) + def _map_nodal_red(self, + expr: prim.NodeSum | prim.NodeMax | prim.NodeMin + ) -> ArithmeticExpression: + operand = self.rec_arith(expr.operand) if operand is expr.operand: return expr return type(expr)(operand) - map_node_max = map_node_sum - map_node_min = map_node_sum + map_node_sum: Callable[[Self, prim.NodeSum], ArithmeticExpression] = _map_nodal_red + map_node_max: Callable[[Self, prim.NodeMax], ArithmeticExpression] = _map_nodal_red + map_node_min: Callable[[Self, prim.NodeMin], ArithmeticExpression] = _map_nodal_red - def map_elementwise_sum(self, expr): - operand = self.rec(expr.operand) + def _map_elwise_red(self, + expr: prim.ElementwiseSum | prim.ElementwiseMin | prim.ElementwiseMax + ) -> ArithmeticExpression: + operand = self.rec_arith(expr.operand) if operand is expr.operand: return expr return type(expr)(operand, expr.dofdesc) - map_elementwise_min = map_elementwise_sum - map_elementwise_max = map_elementwise_sum - - def map_num_reference_derivative(self, expr): - operand = self.rec(expr.operand) + map_elementwise_sum: \ + Callable[[Self, prim.ElementwiseSum], ArithmeticExpression] = _map_elwise_red + map_elementwise_min: \ + Callable[[Self, prim.ElementwiseMin], ArithmeticExpression] = _map_elwise_red + map_elementwise_max: \ + Callable[[Self, prim.ElementwiseMax], ArithmeticExpression] = _map_elwise_red + + def map_num_reference_derivative(self, + expr: prim.NumReferenceDerivative + ) -> ArithmeticExpression: + operand = self.rec_arith(expr.operand) if operand is expr.operand: return expr @@ -120,38 +140,52 @@ def map_num_reference_derivative(self, expr): # {{{ childless -- no need to rebuild - def map_ones(self, expr): + def _map_childless(self, + expr: prim.SpatialConstant + | prim.Ones + | prim.QWeight + | prim.NodeCoordinateComponent + | prim.IsShapeClass + | prim.ErrorExpression, + ) -> ArithmeticExpression: return expr - map_q_weight = map_ones - map_node_coordinate_component = map_ones - map_parametrization_gradient = map_ones - map_parametrization_derivative = map_ones - map_is_shape_class = map_ones - map_error_expression = map_ones + map_spatial_constant: \ + Callable[[Self, prim.SpatialConstant], ArithmeticExpression] = _map_childless + map_ones: \ + Callable[[Self, prim.Ones], ArithmeticExpression] = _map_childless + map_q_weight: \ + Callable[[Self, prim.QWeight], ArithmeticExpression] = _map_childless + map_node_coordinate_component: \ + Callable[[Self, prim.NodeCoordinateComponent], + ArithmeticExpression] = _map_childless + map_is_shape_class: \ + Callable[[Self, prim.IsShapeClass], ArithmeticExpression] = _map_childless + map_error_expression: \ + Callable[[Self, prim.ErrorExpression], ArithmeticExpression] = _map_childless # }}} - def map_inverse(self, expr): + def map_inverse(self, expr: prim.IterativeInverse): return type(expr)( # don't recurse into expression--it is a separate world that - # will be processed once it's executed. + # will be processed once it's evaluated. - expr.expression, self.rec(expr.rhs), expr.variable_name, + expr.expression, self.rec_arith(expr.rhs), expr.variable_name, { name: self.rec(name_expr) for name, name_expr in expr.extra_vars.items()}, expr.dofdesc) - def map_int_g(self, expr): + def map_int_g(self, expr: prim.IntG) -> ArithmeticExpression: densities, kernel_arguments, changed = rec_int_g_arguments(self, expr) if not changed: return expr return replace(expr, densities=densities, kernel_arguments=kernel_arguments) - def map_interpolation(self, expr): - operand = self.rec(expr.operand) + def map_interpolation(self, expr: prim.Interpolation): + operand = self.rec_arith(expr.operand) if operand is expr.operand: return expr @@ -175,16 +209,33 @@ def __call__(self, expr): # {{{ CombineMapper class CombineMapper(CombineMapperBase[ResultT, []]): - def map_node_sum(self, expr): + def _map_with_operand(self, expr: + prim.NodeSum + | prim.NodeMin + | prim.NodeMax + | prim.NumReferenceDerivative + | prim.ElementwiseSum + | prim.ElementwiseMin + | prim.ElementwiseMax + | prim.Interpolation + ): return self.rec(expr.operand) - map_node_max = map_node_sum - map_node_min = map_node_sum - map_num_reference_derivative = map_node_sum - map_elementwise_sum = map_node_sum - map_elementwise_min = map_node_sum - map_elementwise_max = map_node_sum - map_interpolation = map_node_sum + map_node_sum: Callable[[Self, prim.NodeSum], ResultT] = _map_with_operand + map_node_max: Callable[[Self, prim.NodeMax], ResultT] = _map_with_operand + map_node_min: Callable[[Self, prim.NodeMax], ResultT] = _map_with_operand + map_num_reference_derivative: \ + Callable[[Self, prim.NumReferenceDerivative], ResultT] = _map_with_operand + map_elementwise_sum: \ + Callable[[Self, prim.ElementwiseSum], ResultT] = _map_with_operand + map_elementwise_min: \ + Callable[[Self, prim.ElementwiseMin], ResultT] = _map_with_operand + map_elementwise_max: \ + Callable[[Self, prim.ElementwiseMax], ResultT] = _map_with_operand + map_interpolation: Callable[[Self, prim.Interpolation], ResultT] = _map_with_operand + + def map_spatial_constant(self, expr: prim.SpatialConstant, /) -> ResultT: + raise NotImplementedError() def map_int_g(self, expr: prim.IntG) -> ResultT: from pytential.symbolic.primitives import hashable_kernel_args @@ -205,23 +256,34 @@ def map_inverse(self, expr: prim.IterativeInverse) -> ResultT: # {{{ Collector class Collector(CollectorBase[CollectedT, []], CombineMapper[Set[CollectedT]]): - def map_ones(self, - expr: prim.Ones | prim.ErrorExpression | prim.IsShapeClass + def _map_leaf(self, + expr: prim.Ones + | prim.ErrorExpression + | prim.IsShapeClass + | prim.NodeCoordinateComponent + | prim.QWeight + | prim.SpatialConstant ) -> Set[CollectedT]: return set() - map_is_shape_class = map_ones - map_error_expression = map_ones - - map_node_coordinate_component = map_ones - map_parametrization_derivative = map_ones - map_q_weight = map_ones + map_ones: \ + Callable[[Self, prim.Ones], Set[CollectedT]] = _map_leaf + map_is_shape_class: \ + Callable[[Self, prim.IsShapeClass], Set[CollectedT]] = _map_leaf + map_error_expression: \ + Callable[[Self, prim.ErrorExpression], Set[CollectedT]] = _map_leaf + map_node_coordinate_component: \ + Callable[[Self, prim.NodeCoordinateComponent], Set[CollectedT]] = _map_leaf + map_q_weight: \ + Callable[[Self, prim.QWeight], Set[CollectedT]] = _map_leaf + map_spatial_constant: \ + Callable[[Self, prim.SpatialConstant], Set[CollectedT]] = _map_leaf class OperatorCollector(Collector[prim.IntG]): @override def map_int_g(self, expr: prim.IntG): - return {expr} | Collector.map_int_g(self, expr) + return {expr} | Collector[prim.IntG].map_int_g(self, expr) class DependencyMapper(DependencyMapperBase[[]], Collector[Dependency]): @@ -240,6 +302,13 @@ class EvaluationRewriter(EvaluationRewriterBase): the structure of the input expression. """ + def rec_arith(self, + expr: ArithmeticExpression, + ) -> ArithmeticExpression: + res = self.rec(expr) + assert p.is_arithmetic_expression(res) + return res + @override def map_variable(self, expr): return expr @@ -303,8 +372,8 @@ class FlattenMapper(FlattenMapperBase, IdentityMapper): pass -def flatten(expr): - return FlattenMapper()(expr) +def flatten(expr: ArithmeticExpression): + return FlattenMapper().rec_arith(expr) # }}} @@ -322,10 +391,11 @@ def __init__(self, self.default_source: DOFDescriptor = prim.as_dofdesc(default_source) self.default_target: DOFDescriptor = prim.as_dofdesc(default_target) - def map_common_subexpression_uncached(self, expr) -> Expression: + @override + def map_common_subexpression_uncached(self, expr: prim.CommonSubexpression): return IdentityMapper.map_common_subexpression(self, expr) - def _default_dofdesc(self, dofdesc): + def _default_dofdesc(self, dofdesc: DOFDescriptor): if dofdesc.geometry is None: # NOTE: this is a heuristic to determine how to tag things: # * if no `discr_stage` is given, it's probably a target, since @@ -343,36 +413,37 @@ def _default_dofdesc(self, dofdesc): return dofdesc - def map_ones(self, expr): + @override + def map_ones(self, expr: prim.Ones | prim.QWeight): return type(expr)(dofdesc=self._default_dofdesc(expr.dofdesc)) map_q_weight = map_ones - def map_parametrization_derivative_component(self, expr): - return type(expr)( - expr.ambient_axis, - expr.ref_axis, - self._default_dofdesc(expr.dofdesc)) - - def map_node_coordinate_component(self, expr): + @override + def map_node_coordinate_component(self, expr: prim.NodeCoordinateComponent): return type(expr)( expr.ambient_axis, self._default_dofdesc(expr.dofdesc)) - def map_num_reference_derivative(self, expr): + @override + def map_num_reference_derivative(self, expr: prim.NumReferenceDerivative): return type(expr)( expr.ref_axes, - self.rec(expr.operand), + self.rec_arith(expr.operand), self._default_dofdesc(expr.dofdesc)) - def map_elementwise_sum(self, expr): + @override + def map_elementwise_sum(self, + expr: prim.ElementwiseSum | prim.ElementwiseMin | prim.ElementwiseMax + ): return type(expr)( - self.rec(expr.operand), + self.rec_arith(expr.operand), self._default_dofdesc(expr.dofdesc)) map_elementwise_min = map_elementwise_sum map_elementwise_max = map_elementwise_sum + @override def map_int_g(self, expr: prim.IntG): source = expr.source if source.geometry is None: @@ -385,10 +456,10 @@ def map_int_g(self, expr: prim.IntG): return type(expr)( expr.target_kernel, expr.source_kernels, - self.operand_rec(expr.densities), + tuple(self.rec_arith(d) for d in expr.densities), expr.qbx_forced_limit, source, target, kernel_arguments={ - name: self.operand_rec(arg_expr) + name: componentwise(self.rec_arith, arg_expr) for name, arg_expr in expr.kernel_arguments.items() }) @@ -410,6 +481,7 @@ def map_inverse(self, expr: prim.IterativeInverse): for name, name_expr in expr.extra_vars.items()}, dofdesc) + @override @override def map_interpolation(self, expr: prim.Interpolation): from_dd = expr.from_dd @@ -422,10 +494,12 @@ def map_interpolation(self, expr: prim.Interpolation): return type(expr)(from_dd, to_dd, self.operand_rec(expr.operand)) - def map_is_shape_class(self, expr): + @override + def map_is_shape_class(self, expr: prim.IsShapeClass): return type(expr)(expr.shape, self._default_dofdesc(expr.dofdesc)) - def map_error_expression(self, expr): + @override + def map_error_expression(self, expr: prim.ErrorExpression): return expr def operand_rec(self, expr, /): @@ -449,7 +523,7 @@ class ToTargetTagger(LocationTagger): def __init__(self, default_source, default_target): LocationTagger.__init__(self, default_target, default_source=default_source) - self.operand_rec = LocationTagger(default_source, + self.rec = LocationTagger(default_source, default_source=default_source) # }}} @@ -493,7 +567,7 @@ def map_num_reference_derivative(self, expr): return type(expr)( expr.ref_axes, - self.rec(expr.operand), + self.rec_arith(expr.operand), dofdesc.copy(discr_stage=self.discr_stage)) # }}} @@ -502,21 +576,24 @@ def map_num_reference_derivative(self, expr): # {{{ DerivativeBinder class _IsSptiallyVaryingMapper(CombineMapper[bool]): - def combine(self, values): - import operator - from functools import reduce - return reduce(operator.or_, values, False) + @override + def combine(self, values: Iterable[bool]): + return any(values) - def map_constant(self, expr): + @override + def map_constant(self, expr: object): return False - def map_spatial_constant(self, expr): + @override + def map_spatial_constant(self, expr: SpatialConstant): return False - def map_variable(self, expr): + @override + def map_variable(self, expr: p.Variable): return True - def map_int_g(self, expr): + @override + def map_int_g(self, expr: prim.IntG): return True @@ -528,10 +605,12 @@ class DerivativeTaker(Mapper[ArithmeticExpression, []]): def __init__(self, ambient_axis: int): self.ambient_axis: int = ambient_axis - def map_constant(self, expr): + @override + def map_constant(self, expr: object): return 0 - def map_sum(self, expr): + @override + def map_sum(self, expr: p.Sum): children = [self.rec(child) for child in expr.children] if all(child is orig for child, orig in zip( children, expr.children, strict=True)): @@ -540,9 +619,10 @@ def map_sum(self, expr): from pymbolic.primitives import flattened_sum return flattened_sum(children) + @override def map_product(self, expr: p.Product): - const = [] - nonconst = [] + const: list[ArithmeticExpression] = [] + nonconst: list[ArithmeticExpression] = [] for subexpr in expr.children: if _IsSptiallyVaryingMapper()(subexpr): nonconst.append(subexpr) @@ -599,13 +679,13 @@ def take_derivative(self, ambient_axis, expr): # {{{ UnregularizedPreprocessor +@dataclass(frozen=True) class UnregularizedPreprocessor(IdentityMapper): + geometry: GeometryId + places: GeometryCollection - def __init__(self, geometry, places): - self.geometry = geometry - self.places = places - - def map_int_g(self, expr): + @override + def map_int_g(self, expr: prim.IntG): if expr.qbx_forced_limit in (-1, 1): raise ValueError( "Unregularized evaluation does not support one-sided limits") @@ -615,7 +695,7 @@ def map_int_g(self, expr): qbx_forced_limit=None, densities=self.rec(expr.densities), kernel_arguments={ - name: self.rec(arg_expr) + name: componentwise(self.rec_arith, arg_expr) for name, arg_expr in expr.kernel_arguments.items() } ) @@ -639,8 +719,13 @@ class InterpolationPreprocessor(IdentityMapper): .. attribute:: from_discr_stage .. automethod:: __init__ """ + places: GeometryCollection + from_discr_stage: DiscretizationStage - def __init__(self, places, from_discr_stage=None): + def __init__(self, + places: GeometryCollection, + from_discr_stage: DiscretizationStage | None = None + ): """ :arg from_discr_stage: sets the stage on which to evaluate the expression before interpolation. For valid values, see @@ -681,12 +766,16 @@ def map_int_g(self, expr: prim.IntG): from_dd = expr.source.to_stage1() to_dd = from_dd.to_quad_stage2() densities = tuple( - prim.interpolate(self.rec(density), from_dd, to_dd) + prim.interpolate(self.rec_arith(density), from_dd, to_dd) for density in expr.densities) from_dd = from_dd.copy(discr_stage=self.from_discr_stage) kernel_arguments = { - name: prim.interpolate(self.rec(self.tagger(arg_expr)), from_dd, to_dd) + name: componentwise( + lambda aexpr: prim.interpolate( + self.rec_arith( + self.tagger.rec_arith(aexpr)), from_dd, to_dd), + arg_expr) for name, arg_expr in expr.kernel_arguments.items()} return replace( @@ -700,17 +789,17 @@ def map_int_g(self, expr: prim.IntG): # {{{ QBXPreprocessor +@dataclass(frozen=True) class QBXPreprocessor(IdentityMapper): - def __init__(self, geometry: GeometryId, places: GeometryCollection): - self.geometry: GeometryId = geometry - self.places: GeometryCollection = places + geometry: GeometryId + places: GeometryCollection @override def map_int_g(self, expr: prim.IntG): if expr.source.geometry != self.geometry: return expr - if expr.qbx_forced_limit == 0: + if expr.qbx_forced_limit == 0: # pyright: ignore[reportUnnecessaryComparison] raise ValueError("qbx_forced_limit == 0 was a bad idea and " "is no longer supported. Use qbx_forced_limit == 'avg' " "to request two-sided averaging explicitly if needed.") @@ -766,10 +855,10 @@ def stringify_where(where: DOFDescriptorLike): class StringifyMapper(BaseStringifyMapper): - def map_ones(self, expr, enclosing_prec): + def map_ones(self, expr: prim.Ones, enclosing_prec: int): return "Ones[%s]" % stringify_where(expr.dofdesc) - def map_inverse(self, expr, enclosing_prec): + def map_inverse(self, expr: prim.IterativeInverse, enclosing_prec: int): return "Solve(%s = %s {%s})" % ( self.rec(expr.expression, PREC_NONE), self.rec(expr.rhs, PREC_NONE), @@ -783,35 +872,39 @@ def map_inverse(self, expr, enclosing_prec): for name_expr in expr.extra_vars.values()), set()) - def map_elementwise_sum(self, expr, enclosing_prec): + def map_elementwise_sum(self, expr: prim.ElementwiseSum, enclosing_prec: int): return "ElwiseSum[{}]({})".format( stringify_where(expr.dofdesc), self.rec(expr.operand, PREC_NONE)) - def map_elementwise_min(self, expr, enclosing_prec): + def map_elementwise_min(self, expr: prim.ElementwiseMin, enclosing_prec: int): return "ElwiseMin[{}]({})".format( stringify_where(expr.dofdesc), self.rec(expr.operand, PREC_NONE)) - def map_elementwise_max(self, expr, enclosing_prec): + def map_elementwise_max(self, expr: prim.ElementwiseMax, enclosing_prec: int): return "ElwiseMax[{}]({})".format( stringify_where(expr.dofdesc), self.rec(expr.operand, PREC_NONE)) - def map_node_max(self, expr, enclosing_prec): + def map_node_max(self, expr: prim.NodeMax, enclosing_prec: int): return "NodeMax(%s)" % self.rec(expr.operand, PREC_NONE) - def map_node_min(self, expr, enclosing_prec): + def map_node_min(self, expr: prim.NodeMin, enclosing_prec: int): return "NodeMin(%s)" % self.rec(expr.operand, PREC_NONE) - def map_node_sum(self, expr, enclosing_prec): + def map_node_sum(self, expr: prim.NodeSum, enclosing_prec: int): return "NodeSum(%s)" % self.rec(expr.operand, PREC_NONE) - def map_node_coordinate_component(self, expr, enclosing_prec): + def map_node_coordinate_component(self, + expr: prim.NodeCoordinateComponent, + enclosing_prec: int): return "x%d[%s]" % (expr.ambient_axis, stringify_where(expr.dofdesc)) - def map_num_reference_derivative(self, expr, enclosing_prec): + def map_num_reference_derivative(self, + expr: prim.NumReferenceDerivative, + enclosing_prec: int): diff_op = " ".join( "d/dr%d" % axis if mult == 1 else @@ -829,10 +922,7 @@ def map_num_reference_derivative(self, expr, enclosing_prec): else: return result - def map_parametrization_derivative(self, expr, enclosing_prec): - return "dx/dr[%s]" % (stringify_where(expr.dofdesc)) - - def map_q_weight(self, expr, enclosing_prec): + def map_q_weight(self, expr: prim.QWeight, enclosing_prec: int): return "w_quad[%s]" % stringify_where(expr.dofdesc) def _stringify_kernel_args(self, kernel_arguments): @@ -843,7 +933,7 @@ def _stringify_kernel_args(self, kernel_arguments): "{}: {}".format(name, self.rec(arg_expr, PREC_NONE)) for name, arg_expr in kernel_arguments.items()) - def map_int_g(self, expr, enclosing_prec): + def map_int_g(self, expr: prim.IntG, enclosing_prec: int): source_kernels_str = " + ".join([ "{} * {}".format(self.rec(density, PREC_PRODUCT), source_kernel) for source_kernel, density in zip( @@ -862,13 +952,13 @@ def map_int_g(self, expr, enclosing_prec): expr.kernel_arguments), kernel_str) - def map_interpolation(self, expr, enclosing_prec): + def map_interpolation(self, expr: prim.Interpolation, enclosing_prec: int): return "Interp[{}->{}]({})".format( stringify_where(expr.from_dd), stringify_where(expr.to_dd), self.rec(expr.operand, PREC_PRODUCT)) - def map_is_shape_class(self, expr, enclosing_prec): + def map_is_shape_class(self, expr: prim.IsShapeClass, enclosing_prec: int): return "IsShape[{}]({})".format(stringify_where(expr.dofdesc), expr.shape.__name__) diff --git a/pytential/symbolic/primitives.py b/pytential/symbolic/primitives.py index ead7cfd94..81c08c996 100644 --- a/pytential/symbolic/primitives.py +++ b/pytential/symbolic/primitives.py @@ -39,7 +39,7 @@ from warnings import warn import numpy as np -from typing_extensions import deprecated, override +from typing_extensions import override from pymbolic import Expression, ExpressionNode as ExpressionNodeBase, Variable from pymbolic.geometric_algebra import MultiVector, componentwise @@ -455,8 +455,12 @@ def make_stringifier( | MultiVector[ArithmeticExpression]) OperandTc = TypeVar("OperandTc", ArithmeticExpression, + + # We list 1D and 2D explicitly so that dimension info gets preserved if used. ObjectArray1D[ArithmeticExpression], ObjectArray2D[ArithmeticExpression], + ObjectArrayND[ArithmeticExpression], + MultiVector[ArithmeticExpression], Operand) @@ -698,7 +702,7 @@ class NumReferenceDerivative(DiscretizationProperty): input as it is sorted and each axis is unique. It denotes a second derivative with respect to $x$ (0) and a first derivative with respect to $y$ (1). """ - operand: Operand + operand: ArithmeticExpression """An operand to differentiate.""" def __new__(cls, @@ -1413,7 +1417,7 @@ class Interpolation(ExpressionNode): """A descriptor for the geometry on which *operand* is defined.""" to_dd: DOFDescriptor """A descriptor for the geometry to which to interpolate *operand* to.""" - operand: Operand + operand: ArithmeticExpression """An expression or array of expressions to interpolate. Arrays are interpolated componentwise. """ @@ -1459,17 +1463,6 @@ def __post_init__(self) -> None: object.__setattr__(self, "to_dd", as_dofdesc(self.to_dd)) -@deprecated("Use interpolate") -def interp(from_dd: DOFDescriptorLike, - to_dd: DOFDescriptorLike, - operand: Operand) -> Interpolation: - warn("Calling 'interp' is deprecated and it will be removed in 2025. Use " - "'interpolate' instead (has a different argument order).", - DeprecationWarning, stacklevel=2) - - return Interpolation(as_dofdesc(from_dd), as_dofdesc(to_dd), operand) - - @for_each_expression def interpolate(operand: ArithmeticExpression, from_dd: DOFDescriptorLike, From 95f44c4c5e80bbbc96cb577a62cc83355dc88b85 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Wed, 22 Oct 2025 16:11:20 -0500 Subject: [PATCH 02/15] Improve error message for DerivativeTaker for products with multiple non-const terms --- pytential/symbolic/mappers.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pytential/symbolic/mappers.py b/pytential/symbolic/mappers.py index 4ec911fe5..9afc95653 100644 --- a/pytential/symbolic/mappers.py +++ b/pytential/symbolic/mappers.py @@ -632,7 +632,12 @@ def map_product(self, expr: p.Product): if len(nonconst) > 1: raise _DerivativeTakerUnsupoortedProductError( "DerivativeTaker doesn't support products with " - "more than one non-constant") + "more than one non-constant. " + "The following were recognized as non-constant: " + f"{', '.join(str(nc) for nc in nonconst)}. " + "If some of these are spatially constant, use sym.SpatialConstant " + "when creating them." + ) if not nonconst: nonconst = [1] From e38da0f3345f79c8ecbc29bb135716d7e0e58f1d Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Thu, 23 Oct 2025 13:03:48 -0500 Subject: [PATCH 03/15] Type pytential.integral --- pytential/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pytential/__init__.py b/pytential/__init__.py index b50eb15b5..b66e40b91 100644 --- a/pytential/__init__.py +++ b/pytential/__init__.py @@ -71,14 +71,14 @@ def _set_up_errors(): @memoize_on_first_arg -def _integral_op(discr): +def _integral_op(discr: Discretization): from pytential import bind, sym return bind(discr, sym.integral( discr.ambient_dim, discr.dim, sym.var("integrand"))) -def integral(discr, x): +def integral(discr: Discretization, x: DOFArray): return _integral_op(discr)(integrand=x) From 20b4226190840250c351efa970f86451f440a1a5 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Fri, 31 Oct 2025 16:25:02 -0500 Subject: [PATCH 04/15] Rename prim->pp in mappers --- pytential/symbolic/mappers.py | 222 +++++++++++++++++----------------- 1 file changed, 112 insertions(+), 110 deletions(-) diff --git a/pytential/symbolic/mappers.py b/pytential/symbolic/mappers.py index 9afc95653..ac485c90c 100644 --- a/pytential/symbolic/mappers.py +++ b/pytential/symbolic/mappers.py @@ -64,7 +64,7 @@ ) from pymbolic.typing import Expression -import pytential.symbolic.primitives as prim +import pytential.symbolic.primitives as pp if TYPE_CHECKING: @@ -79,7 +79,7 @@ ) -def rec_int_g_arguments(mapper: IdentityMapper | EvaluationRewriter, expr: prim.IntG): +def rec_int_g_arguments(mapper: IdentityMapper | EvaluationRewriter, expr: pp.IntG): densities = [mapper.rec_arith(d) for d in expr.densities] kernel_arguments = { name: componentwise(mapper.rec_arith, arg) @@ -101,7 +101,7 @@ def rec_int_g_arguments(mapper: IdentityMapper | EvaluationRewriter, expr: prim. class IdentityMapper(IdentityMapperBase[[]]): def _map_nodal_red(self, - expr: prim.NodeSum | prim.NodeMax | prim.NodeMin + expr: pp.NodeSum | pp.NodeMax | pp.NodeMin ) -> ArithmeticExpression: operand = self.rec_arith(expr.operand) if operand is expr.operand: @@ -109,12 +109,12 @@ def _map_nodal_red(self, return type(expr)(operand) - map_node_sum: Callable[[Self, prim.NodeSum], ArithmeticExpression] = _map_nodal_red - map_node_max: Callable[[Self, prim.NodeMax], ArithmeticExpression] = _map_nodal_red - map_node_min: Callable[[Self, prim.NodeMin], ArithmeticExpression] = _map_nodal_red + map_node_sum: Callable[[Self, pp.NodeSum], ArithmeticExpression] = _map_nodal_red + map_node_max: Callable[[Self, pp.NodeMax], ArithmeticExpression] = _map_nodal_red + map_node_min: Callable[[Self, pp.NodeMin], ArithmeticExpression] = _map_nodal_red def _map_elwise_red(self, - expr: prim.ElementwiseSum | prim.ElementwiseMin | prim.ElementwiseMax + expr: pp.ElementwiseSum | pp.ElementwiseMin | pp.ElementwiseMax ) -> ArithmeticExpression: operand = self.rec_arith(expr.operand) if operand is expr.operand: @@ -123,14 +123,14 @@ def _map_elwise_red(self, return type(expr)(operand, expr.dofdesc) map_elementwise_sum: \ - Callable[[Self, prim.ElementwiseSum], ArithmeticExpression] = _map_elwise_red + Callable[[Self, pp.ElementwiseSum], ArithmeticExpression] = _map_elwise_red map_elementwise_min: \ - Callable[[Self, prim.ElementwiseMin], ArithmeticExpression] = _map_elwise_red + Callable[[Self, pp.ElementwiseMin], ArithmeticExpression] = _map_elwise_red map_elementwise_max: \ - Callable[[Self, prim.ElementwiseMax], ArithmeticExpression] = _map_elwise_red + Callable[[Self, pp.ElementwiseMax], ArithmeticExpression] = _map_elwise_red def map_num_reference_derivative(self, - expr: prim.NumReferenceDerivative + expr: pp.NumReferenceDerivative ) -> ArithmeticExpression: operand = self.rec_arith(expr.operand) if operand is expr.operand: @@ -141,32 +141,32 @@ def map_num_reference_derivative(self, # {{{ childless -- no need to rebuild def _map_childless(self, - expr: prim.SpatialConstant - | prim.Ones - | prim.QWeight - | prim.NodeCoordinateComponent - | prim.IsShapeClass - | prim.ErrorExpression, + expr: pp.SpatialConstant + | pp.Ones + | pp.QWeight + | pp.NodeCoordinateComponent + | pp.IsShapeClass + | pp.ErrorExpression, ) -> ArithmeticExpression: return expr map_spatial_constant: \ - Callable[[Self, prim.SpatialConstant], ArithmeticExpression] = _map_childless + Callable[[Self, pp.SpatialConstant], ArithmeticExpression] = _map_childless map_ones: \ - Callable[[Self, prim.Ones], ArithmeticExpression] = _map_childless + Callable[[Self, pp.Ones], ArithmeticExpression] = _map_childless map_q_weight: \ - Callable[[Self, prim.QWeight], ArithmeticExpression] = _map_childless + Callable[[Self, pp.QWeight], ArithmeticExpression] = _map_childless map_node_coordinate_component: \ - Callable[[Self, prim.NodeCoordinateComponent], + Callable[[Self, pp.NodeCoordinateComponent], ArithmeticExpression] = _map_childless map_is_shape_class: \ - Callable[[Self, prim.IsShapeClass], ArithmeticExpression] = _map_childless + Callable[[Self, pp.IsShapeClass], ArithmeticExpression] = _map_childless map_error_expression: \ - Callable[[Self, prim.ErrorExpression], ArithmeticExpression] = _map_childless + Callable[[Self, pp.ErrorExpression], ArithmeticExpression] = _map_childless # }}} - def map_inverse(self, expr: prim.IterativeInverse): + def map_inverse(self, expr: pp.IterativeInverse): return type(expr)( # don't recurse into expression--it is a separate world that # will be processed once it's evaluated. @@ -177,14 +177,14 @@ def map_inverse(self, expr: prim.IterativeInverse): for name, name_expr in expr.extra_vars.items()}, expr.dofdesc) - def map_int_g(self, expr: prim.IntG) -> ArithmeticExpression: + def map_int_g(self, expr: pp.IntG) -> ArithmeticExpression: densities, kernel_arguments, changed = rec_int_g_arguments(self, expr) if not changed: return expr return replace(expr, densities=densities, kernel_arguments=kernel_arguments) - def map_interpolation(self, expr: prim.Interpolation): + def map_interpolation(self, expr: pp.Interpolation): operand = self.rec_arith(expr.operand) if operand is expr.operand: return expr @@ -210,41 +210,44 @@ def __call__(self, expr): class CombineMapper(CombineMapperBase[ResultT, []]): def _map_with_operand(self, expr: - prim.NodeSum - | prim.NodeMin - | prim.NodeMax - | prim.NumReferenceDerivative - | prim.ElementwiseSum - | prim.ElementwiseMin - | prim.ElementwiseMax - | prim.Interpolation + pp.NodeSum + | pp.NodeMin + | pp.NodeMax + | pp.NumReferenceDerivative + | pp.ElementwiseSum + | pp.ElementwiseMin + | pp.ElementwiseMax + | pp.Interpolation ): return self.rec(expr.operand) - map_node_sum: Callable[[Self, prim.NodeSum], ResultT] = _map_with_operand - map_node_max: Callable[[Self, prim.NodeMax], ResultT] = _map_with_operand - map_node_min: Callable[[Self, prim.NodeMax], ResultT] = _map_with_operand + map_node_sum: Callable[[Self, pp.NodeSum], ResultT] = _map_with_operand + map_node_max: Callable[[Self, pp.NodeMax], ResultT] = _map_with_operand + map_node_min: Callable[[Self, pp.NodeMax], ResultT] = _map_with_operand map_num_reference_derivative: \ - Callable[[Self, prim.NumReferenceDerivative], ResultT] = _map_with_operand + Callable[[Self, pp.NumReferenceDerivative], ResultT] = _map_with_operand map_elementwise_sum: \ - Callable[[Self, prim.ElementwiseSum], ResultT] = _map_with_operand + Callable[[Self, pp.ElementwiseSum], ResultT] = _map_with_operand map_elementwise_min: \ - Callable[[Self, prim.ElementwiseMin], ResultT] = _map_with_operand + Callable[[Self, pp.ElementwiseMin], ResultT] = _map_with_operand map_elementwise_max: \ - Callable[[Self, prim.ElementwiseMax], ResultT] = _map_with_operand - map_interpolation: Callable[[Self, prim.Interpolation], ResultT] = _map_with_operand + Callable[[Self, pp.ElementwiseMax], ResultT] = _map_with_operand + map_interpolation: Callable[[Self, pp.Interpolation], ResultT] = _map_with_operand - def map_spatial_constant(self, expr: prim.SpatialConstant, /) -> ResultT: + def map_interleave(self, expr: pp.Interleave): + return self.combine([self.rec(expr.operand_1), self.rec(expr.operand_2)]) + + def map_spatial_constant(self, expr: pp.SpatialConstant, /) -> ResultT: raise NotImplementedError() - def map_int_g(self, expr: prim.IntG) -> ResultT: + def map_int_g(self, expr: pp.IntG) -> ResultT: from pytential.symbolic.primitives import hashable_kernel_args return self.combine( [self.rec(density) for density in expr.densities] + [self.rec(arg_expr) for _, arg_expr in hashable_kernel_args(expr.kernel_arguments)]) - def map_inverse(self, expr: prim.IterativeInverse) -> ResultT: + def map_inverse(self, expr: pp.IterativeInverse) -> ResultT: return self.combine([ self.rec(expr.rhs), *(self.rec(name_expr) for name_expr in expr.extra_vars.values()) @@ -257,33 +260,33 @@ def map_inverse(self, expr: prim.IterativeInverse) -> ResultT: class Collector(CollectorBase[CollectedT, []], CombineMapper[Set[CollectedT]]): def _map_leaf(self, - expr: prim.Ones - | prim.ErrorExpression - | prim.IsShapeClass - | prim.NodeCoordinateComponent - | prim.QWeight - | prim.SpatialConstant + expr: pp.Ones + | pp.ErrorExpression + | pp.IsShapeClass + | pp.NodeCoordinateComponent + | pp.QWeight + | pp.SpatialConstant ) -> Set[CollectedT]: return set() map_ones: \ - Callable[[Self, prim.Ones], Set[CollectedT]] = _map_leaf + Callable[[Self, pp.Ones], Set[CollectedT]] = _map_leaf map_is_shape_class: \ - Callable[[Self, prim.IsShapeClass], Set[CollectedT]] = _map_leaf + Callable[[Self, pp.IsShapeClass], Set[CollectedT]] = _map_leaf map_error_expression: \ - Callable[[Self, prim.ErrorExpression], Set[CollectedT]] = _map_leaf + Callable[[Self, pp.ErrorExpression], Set[CollectedT]] = _map_leaf map_node_coordinate_component: \ - Callable[[Self, prim.NodeCoordinateComponent], Set[CollectedT]] = _map_leaf + Callable[[Self, pp.NodeCoordinateComponent], Set[CollectedT]] = _map_leaf map_q_weight: \ - Callable[[Self, prim.QWeight], Set[CollectedT]] = _map_leaf + Callable[[Self, pp.QWeight], Set[CollectedT]] = _map_leaf map_spatial_constant: \ - Callable[[Self, prim.SpatialConstant], Set[CollectedT]] = _map_leaf + Callable[[Self, pp.SpatialConstant], Set[CollectedT]] = _map_leaf -class OperatorCollector(Collector[prim.IntG]): +class OperatorCollector(Collector[pp.IntG]): @override - def map_int_g(self, expr: prim.IntG): - return {expr} | Collector[prim.IntG].map_int_g(self, expr) + def map_int_g(self, expr: pp.IntG): + return {expr} | Collector[pp.IntG].map_int_g(self, expr) class DependencyMapper(DependencyMapperBase[[]], Collector[Dependency]): @@ -335,17 +338,17 @@ def map_node_sum(self, expr): map_node_max = map_node_sum map_node_min = map_node_sum - def map_node_coordinate_component(self, expr: prim.NodeCoordinateComponent): + def map_node_coordinate_component(self, expr: pp.NodeCoordinateComponent): return expr - def map_num_reference_derivative(self, expr: prim.NumReferenceDerivative): + def map_num_reference_derivative(self, expr: pp.NumReferenceDerivative): operand = self.rec(expr.operand) if operand is expr.operand: return expr return type(expr)(expr.ref_axes, operand, expr.dofdesc) - def map_int_g(self, expr: prim.IntG): + def map_int_g(self, expr: pp.IntG): densities, kernel_arguments, changed = rec_int_g_arguments(self, expr) if not changed: return expr @@ -358,7 +361,7 @@ def map_common_subexpression(self, expr: p.CommonSubexpression): if child is expr.child: return expr - return prim.cse( + return pp.cse( child, expr.prefix, expr.scope) @@ -388,11 +391,11 @@ def __init__(self, default_target: DOFDescriptorLike, default_source: DOFDescriptorLike ): - self.default_source: DOFDescriptor = prim.as_dofdesc(default_source) - self.default_target: DOFDescriptor = prim.as_dofdesc(default_target) + self.default_source: DOFDescriptor = pp.as_dofdesc(default_source) + self.default_target: DOFDescriptor = pp.as_dofdesc(default_target) @override - def map_common_subexpression_uncached(self, expr: prim.CommonSubexpression): + def map_common_subexpression_uncached(self, expr: p.CommonSubexpression): return IdentityMapper.map_common_subexpression(self, expr) def _default_dofdesc(self, dofdesc: DOFDescriptor): @@ -402,31 +405,31 @@ def _default_dofdesc(self, dofdesc: DOFDescriptor): # only `QBXLayerPotentialSource` has stages. # * if some stage is present, assume it's a source if (dofdesc.discr_stage is None - and dofdesc.granularity == prim.GRANULARITY_NODE): + and dofdesc.granularity == pp.GRANULARITY_NODE): dofdesc = dofdesc.copy(geometry=self.default_target) else: dofdesc = dofdesc.copy(geometry=self.default_source) - elif dofdesc.geometry is prim.DEFAULT_SOURCE: + elif dofdesc.geometry is pp.DEFAULT_SOURCE: dofdesc = dofdesc.copy(geometry=self.default_source) - elif dofdesc.geometry is prim.DEFAULT_TARGET: + elif dofdesc.geometry is pp.DEFAULT_TARGET: dofdesc = dofdesc.copy(geometry=self.default_target) return dofdesc @override - def map_ones(self, expr: prim.Ones | prim.QWeight): + def map_ones(self, expr: pp.Ones | pp.QWeight): return type(expr)(dofdesc=self._default_dofdesc(expr.dofdesc)) map_q_weight = map_ones @override - def map_node_coordinate_component(self, expr: prim.NodeCoordinateComponent): + def map_node_coordinate_component(self, expr: pp.NodeCoordinateComponent): return type(expr)( expr.ambient_axis, self._default_dofdesc(expr.dofdesc)) @override - def map_num_reference_derivative(self, expr: prim.NumReferenceDerivative): + def map_num_reference_derivative(self, expr: pp.NumReferenceDerivative): return type(expr)( expr.ref_axes, self.rec_arith(expr.operand), @@ -434,7 +437,7 @@ def map_num_reference_derivative(self, expr: prim.NumReferenceDerivative): @override def map_elementwise_sum(self, - expr: prim.ElementwiseSum | prim.ElementwiseMin | prim.ElementwiseMax + expr: pp.ElementwiseSum | pp.ElementwiseMin | pp.ElementwiseMax ): return type(expr)( self.rec_arith(expr.operand), @@ -444,7 +447,7 @@ def map_elementwise_sum(self, map_elementwise_max = map_elementwise_sum @override - def map_int_g(self, expr: prim.IntG): + def map_int_g(self, expr: pp.IntG): source = expr.source if source.geometry is None: source = source.copy(geometry=self.default_source) @@ -464,7 +467,7 @@ def map_int_g(self, expr: prim.IntG): }) @override - def map_inverse(self, expr: prim.IterativeInverse): + def map_inverse(self, expr: pp.IterativeInverse): # NOTE: this doesn't use `_default_dofdesc` because it should be always # evaluated at the targets (ignores `discr_stage`) dofdesc = expr.dofdesc @@ -482,8 +485,7 @@ def map_inverse(self, expr: prim.IterativeInverse): dofdesc) @override - @override - def map_interpolation(self, expr: prim.Interpolation): + def map_interpolation(self, expr: pp.Interpolation): from_dd = expr.from_dd if from_dd.geometry is None: from_dd = from_dd.copy(geometry=self.default_source) @@ -492,14 +494,14 @@ def map_interpolation(self, expr: prim.Interpolation): if to_dd.geometry is None: to_dd = to_dd.copy(geometry=self.default_source) - return type(expr)(from_dd, to_dd, self.operand_rec(expr.operand)) + return type(expr)(from_dd, to_dd, self.rec_arith(expr.operand)) @override - def map_is_shape_class(self, expr: prim.IsShapeClass): + def map_is_shape_class(self, expr: pp.IsShapeClass): return type(expr)(expr.shape, self._default_dofdesc(expr.dofdesc)) @override - def map_error_expression(self, expr: prim.ErrorExpression): + def map_error_expression(self, expr: pp.ErrorExpression): return expr def operand_rec(self, expr, /): @@ -544,9 +546,9 @@ class DiscretizationStageTagger(IdentityMapper): """ def __init__(self, discr_stage): - if not (discr_stage == prim.QBX_SOURCE_STAGE1 - or discr_stage == prim.QBX_SOURCE_STAGE2 - or discr_stage == prim.QBX_SOURCE_QUAD_STAGE2): + if not (discr_stage == pp.QBX_SOURCE_STAGE1 + or discr_stage == pp.QBX_SOURCE_STAGE2 + or discr_stage == pp.QBX_SOURCE_QUAD_STAGE2): raise ValueError(f'unknown discr stage tag: "{discr_stage}"') self.discr_stage = discr_stage @@ -593,7 +595,7 @@ def map_variable(self, expr: p.Variable): return True @override - def map_int_g(self, expr: prim.IntG): + def map_int_g(self, expr: pp.IntG): return True @@ -645,7 +647,7 @@ def map_product(self, expr: p.Product): from pytools import product return product(const) * self.rec(nonconst[0]) - def map_int_g(self, expr: prim.IntG): + def map_int_g(self, expr: pp.IntG): from sumpy.kernel import AxisTargetDerivative target_kernel = AxisTargetDerivative(self.ambient_axis, expr.target_kernel) @@ -690,7 +692,7 @@ class UnregularizedPreprocessor(IdentityMapper): places: GeometryCollection @override - def map_int_g(self, expr: prim.IntG): + def map_int_g(self, expr: pp.IntG): if expr.qbx_forced_limit in (-1, 1): raise ValueError( "Unregularized evaluation does not support one-sided limits") @@ -737,14 +739,14 @@ def __init__(self, :attr:`~pytential.symbolic.dof_desc.DOFDescriptor.discr_stage`. """ self.places = places - self.from_discr_stage = (prim.QBX_SOURCE_STAGE2 + self.from_discr_stage = (pp.QBX_SOURCE_STAGE2 if from_discr_stage is None else from_discr_stage) self.tagger = DiscretizationStageTagger(self.from_discr_stage) @override - def map_num_reference_derivative(self, expr: prim.NumReferenceDerivative): + def map_num_reference_derivative(self, expr: pp.NumReferenceDerivative): to_dd = expr.dofdesc - if to_dd.discr_stage != prim.QBX_SOURCE_QUAD_STAGE2: + if to_dd.discr_stage != pp.QBX_SOURCE_QUAD_STAGE2: return expr from pytential.qbx import QBXLayerPotentialSource @@ -753,10 +755,10 @@ def map_num_reference_derivative(self, expr: prim.NumReferenceDerivative): return expr from_dd = to_dd.copy(discr_stage=self.from_discr_stage) - return prim.interpolate(self.rec(self.tagger(expr)), from_dd, to_dd) + return pp.interpolate(self.rec_arith(self.tagger(expr)), from_dd, to_dd) @override - def map_int_g(self, expr: prim.IntG): + def map_int_g(self, expr: pp.IntG): if expr.target.discr_stage is None: expr = replace(expr, target=expr.target.to_stage1()) @@ -771,13 +773,13 @@ def map_int_g(self, expr: prim.IntG): from_dd = expr.source.to_stage1() to_dd = from_dd.to_quad_stage2() densities = tuple( - prim.interpolate(self.rec_arith(density), from_dd, to_dd) + pp.interpolate(self.rec_arith(density), from_dd, to_dd) for density in expr.densities) from_dd = from_dd.copy(discr_stage=self.from_discr_stage) kernel_arguments = { name: componentwise( - lambda aexpr: prim.interpolate( + lambda aexpr: pp.interpolate( self.rec_arith( self.tagger.rec_arith(aexpr)), from_dd, to_dd), arg_expr) @@ -800,7 +802,7 @@ class QBXPreprocessor(IdentityMapper): places: GeometryCollection @override - def map_int_g(self, expr: prim.IntG): + def map_int_g(self, expr: pp.IntG): if expr.source.geometry != self.geometry: return expr @@ -855,15 +857,15 @@ def map_int_g(self, expr: prim.IntG): # {{{ StringifyMapper def stringify_where(where: DOFDescriptorLike): - return str(prim.as_dofdesc(where)) + return str(pp.as_dofdesc(where)) class StringifyMapper(BaseStringifyMapper): - def map_ones(self, expr: prim.Ones, enclosing_prec: int): + def map_ones(self, expr: pp.Ones, enclosing_prec: int): return "Ones[%s]" % stringify_where(expr.dofdesc) - def map_inverse(self, expr: prim.IterativeInverse, enclosing_prec: int): + def map_inverse(self, expr: pp.IterativeInverse, enclosing_prec: int): return "Solve(%s = %s {%s})" % ( self.rec(expr.expression, PREC_NONE), self.rec(expr.rhs, PREC_NONE), @@ -877,38 +879,38 @@ def map_inverse(self, expr: prim.IterativeInverse, enclosing_prec: int): for name_expr in expr.extra_vars.values()), set()) - def map_elementwise_sum(self, expr: prim.ElementwiseSum, enclosing_prec: int): + def map_elementwise_sum(self, expr: pp.ElementwiseSum, enclosing_prec: int): return "ElwiseSum[{}]({})".format( stringify_where(expr.dofdesc), self.rec(expr.operand, PREC_NONE)) - def map_elementwise_min(self, expr: prim.ElementwiseMin, enclosing_prec: int): + def map_elementwise_min(self, expr: pp.ElementwiseMin, enclosing_prec: int): return "ElwiseMin[{}]({})".format( stringify_where(expr.dofdesc), self.rec(expr.operand, PREC_NONE)) - def map_elementwise_max(self, expr: prim.ElementwiseMax, enclosing_prec: int): + def map_elementwise_max(self, expr: pp.ElementwiseMax, enclosing_prec: int): return "ElwiseMax[{}]({})".format( stringify_where(expr.dofdesc), self.rec(expr.operand, PREC_NONE)) - def map_node_max(self, expr: prim.NodeMax, enclosing_prec: int): + def map_node_max(self, expr: pp.NodeMax, enclosing_prec: int): return "NodeMax(%s)" % self.rec(expr.operand, PREC_NONE) - def map_node_min(self, expr: prim.NodeMin, enclosing_prec: int): + def map_node_min(self, expr: pp.NodeMin, enclosing_prec: int): return "NodeMin(%s)" % self.rec(expr.operand, PREC_NONE) - def map_node_sum(self, expr: prim.NodeSum, enclosing_prec: int): + def map_node_sum(self, expr: pp.NodeSum, enclosing_prec: int): return "NodeSum(%s)" % self.rec(expr.operand, PREC_NONE) def map_node_coordinate_component(self, - expr: prim.NodeCoordinateComponent, + expr: pp.NodeCoordinateComponent, enclosing_prec: int): return "x%d[%s]" % (expr.ambient_axis, stringify_where(expr.dofdesc)) def map_num_reference_derivative(self, - expr: prim.NumReferenceDerivative, + expr: pp.NumReferenceDerivative, enclosing_prec: int): diff_op = " ".join( "d/dr%d" % axis @@ -927,7 +929,7 @@ def map_num_reference_derivative(self, else: return result - def map_q_weight(self, expr: prim.QWeight, enclosing_prec: int): + def map_q_weight(self, expr: pp.QWeight, enclosing_prec: int): return "w_quad[%s]" % stringify_where(expr.dofdesc) def _stringify_kernel_args(self, kernel_arguments): @@ -938,7 +940,7 @@ def _stringify_kernel_args(self, kernel_arguments): "{}: {}".format(name, self.rec(arg_expr, PREC_NONE)) for name, arg_expr in kernel_arguments.items()) - def map_int_g(self, expr: prim.IntG, enclosing_prec: int): + def map_int_g(self, expr: pp.IntG, enclosing_prec: int): source_kernels_str = " + ".join([ "{} * {}".format(self.rec(density, PREC_PRODUCT), source_kernel) for source_kernel, density in zip( @@ -957,13 +959,13 @@ def map_int_g(self, expr: prim.IntG, enclosing_prec: int): expr.kernel_arguments), kernel_str) - def map_interpolation(self, expr: prim.Interpolation, enclosing_prec: int): + def map_interpolation(self, expr: pp.Interpolation, enclosing_prec: int): return "Interp[{}->{}]({})".format( stringify_where(expr.from_dd), stringify_where(expr.to_dd), self.rec(expr.operand, PREC_PRODUCT)) - def map_is_shape_class(self, expr: prim.IsShapeClass, enclosing_prec: int): + def map_is_shape_class(self, expr: pp.IsShapeClass, enclosing_prec: int): return "IsShape[{}]({})".format(stringify_where(expr.dofdesc), expr.shape.__name__) From 17bd7d377fce65e68e3913255ad5343d38b3eab7 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Tue, 4 Nov 2025 14:55:07 -0600 Subject: [PATCH 05/15] Introduce Interleave in favor of "interpolation" to an interleaved DOF vector --- pytential/qbx/geometry.py | 10 +- pytential/qbx/refinement.py | 11 +- pytential/qbx/target_assoc.py | 9 +- pytential/symbolic/dof_connection.py | 154 ++++++++++----------------- pytential/symbolic/execution.py | 8 ++ pytential/symbolic/mappers.py | 26 +++++ pytential/symbolic/primitives.py | 48 +++++++-- test/test_symbolic.py | 10 +- 8 files changed, 158 insertions(+), 118 deletions(-) diff --git a/pytential/qbx/geometry.py b/pytential/qbx/geometry.py index bd5cf39ef..4fe07a564 100644 --- a/pytential/qbx/geometry.py +++ b/pytential/qbx/geometry.py @@ -478,11 +478,13 @@ def flat_expansion_radii(self): from pytential import bind, sym actx = self._setup_actx + dd = self.source_dd.to_stage1() radii = bind(self.places, - sym.expansion_radii( - self.ambient_dim, - granularity=sym.GRANULARITY_CENTER, - dofdesc=self.source_dd.to_stage1()))(actx) + sym.interleave( + sym.expansion_radii(self.ambient_dim, dofdesc=dd), + sym.expansion_radii(self.ambient_dim, dofdesc=dd), + dd, + ))(actx) return actx.freeze(flatten(radii, actx)) diff --git a/pytential/qbx/refinement.py b/pytential/qbx/refinement.py index 867a0c0cc..200b53e2a 100644 --- a/pytential/qbx/refinement.py +++ b/pytential/qbx/refinement.py @@ -27,6 +27,7 @@ """ import logging +from typing import cast import numpy as np @@ -324,12 +325,14 @@ def check_expansion_disks_undisturbed_by_sources(self, from pytential import bind, sym center_danger_zone_radii = flatten( - bind( + cast("DOFArray", bind( stage1_density_discr, - sym.interpolate( + sym.interleave( + # These are CSE'd anyway sym.expansion_radii(stage1_density_discr.ambient_dim), - from_dd=None, to_dd=sym.GRANULARITY_CENTER) - )(self.array_context), + sym.expansion_radii(stage1_density_discr.ambient_dim), + ) + )(self.array_context)), self.array_context) evt = knl( diff --git a/pytential/qbx/target_assoc.py b/pytential/qbx/target_assoc.py index 38d191193..035ec8f64 100644 --- a/pytential/qbx/target_assoc.py +++ b/pytential/qbx/target_assoc.py @@ -658,9 +658,12 @@ def find_centers(self, places, dofdesc, center_slice = actx.thaw(tree.sorted_target_ids[tree.qbx_user_center_slice]) centers = [actx.thaw(axis)[center_slice] for axis in tree.sources] expansion_radii_by_center = bind(places, - sym.expansion_radii(ambient_dim, - granularity=sym.GRANULARITY_CENTER, - dofdesc=dofdesc) + sym.interleave( + sym.expansion_radii(ambient_dim, dofdesc=dofdesc), + sym.expansion_radii(ambient_dim, dofdesc=dofdesc), + dofdesc + ) + )(actx) expansion_radii_by_center_with_tolerance = flatten( expansion_radii_by_center * (1 + target_association_tolerance), diff --git a/pytential/symbolic/dof_connection.py b/pytential/symbolic/dof_connection.py index 13ed669e8..bb47fbcab 100644 --- a/pytential/symbolic/dof_connection.py +++ b/pytential/symbolic/dof_connection.py @@ -26,7 +26,7 @@ THE SOFTWARE. """ -from typing import TYPE_CHECKING, cast +from typing import TYPE_CHECKING import numpy as np # noqa: F401 from typing_extensions import override @@ -65,99 +65,63 @@ # {{{ granularity connections -class CenterGranularityConnection(DiscretizationConnection): - """A :class:`~meshmode.discretization.connection.DiscretizationConnection` - used to transport from node data - (:class:`~pytential.symbolic.primitives.GRANULARITY_NODE`) to expansion - centers (:class:`~pytential.symbolic.primitives.GRANULARITY_CENTER`). - - .. attribute:: discr - .. automethod:: __call__ - """ - - def __init__(self, discr: Discretization) -> None: - super().__init__(discr, discr, is_surjective=False) - - def _interleave_dof_arrays(self, ary1: DOFArray, ary2: DOFArray) -> DOFArray: - if not isinstance(ary1, DOFArray) or not isinstance(ary2, DOFArray): - raise TypeError("non-array passed to connection") - - if ary1.array_context is not ary2.array_context: - raise ValueError("array context of the two arguments must match") - - if ary1.array_context is None: - raise ValueError("cannot transport frozen arrays") - - actx = ary1.array_context - - @memoize_in(actx, (CenterGranularityConnection, "interleave")) - def prg(): - from arraycontext import make_loopy_program - t_unit = make_loopy_program( - "{[iel, idof]: 0 <= iel < nelements and 0 <= idof < nunit_dofs}", - """ - result[iel, 2*idof] = ary1[iel, idof] - result[iel, 2*idof + 1] = ary2[iel, idof] - """, [ - lp.GlobalArg("ary1", shape="(nelements, nunit_dofs)"), - lp.GlobalArg("ary2", shape="(nelements, nunit_dofs)"), - lp.GlobalArg("result", shape="(nelements, 2*nunit_dofs)"), - ... - ], - name="interleave") - - from meshmode.transform_metadata import ( - ConcurrentDOFInameTag, - ConcurrentElementInameTag, - ) - return lp.tag_inames(t_unit, { - "iel": ConcurrentElementInameTag(), - "idof": ConcurrentDOFInameTag()}) - - discr = self.from_discr - results: list[Array] = [] - for grp, subary1, subary2 in zip(discr.groups, ary1, ary2, strict=True): - if subary1.dtype != subary2.dtype: - raise ValueError("dtype mismatch in inputs: " - f"'{subary1.dtype.name}' and '{subary2.dtype.name}'") - - assert subary1.shape[0] == grp.nelements - assert subary1.shape == subary2.shape - - result = actx.call_loopy( - prg(), - ary1=subary1, ary2=subary2, - nelements=subary1.shape[0], - nunit_dofs=subary1.shape[1])["result"] - results.append(result) - - return DOFArray(actx, tuple(results)) - - @override - def __call__(self, arys: ArrayOrContainerOrScalarT) -> ArrayOrContainerOrScalarT: - r""" - :param arys: a pair of :class:`~arraycontext.ArrayContainer`-like - classes. Can also be a single element, in which case it is - interleaved with itself. This function vectorizes over all the - :class:`~meshmode.dof_array.DOFArray` leaves of the container. - - :returns: an interleaved :class:`~arraycontext.ArrayContainer`. - If *arys* was a pair of arrays :math:`(x, y)`, they are - interleaved as :math:`[x_1, y_1, x_2, y_2, \ddots, x_n, y_n]`. - """ - if isinstance(arys, list | tuple): - ary1, ary2 = cast("Sequence[ArrayOrContainerOrScalarT]", arys) - else: - ary1, ary2 = arys, arys - - if type(ary1) is not type(ary2): - raise TypeError("cannot interleave arrays of different types: " - f"'{type(ary1).__name__}' and '{type(ary2).__name__}'") - - from meshmode.dof_array import rec_multimap_dof_array_container - return rec_multimap_dof_array_container( - self._interleave_dof_arrays, - ary1, ary2) +def interleave_dof_arrays( + discr: Discretization, + ary1: DOFArray, + ary2: DOFArray + ) -> DOFArray: + if not isinstance(ary1, DOFArray) or not isinstance(ary2, DOFArray): + raise TypeError("non-array passed to connection") + + if ary1.array_context is not ary2.array_context: + raise ValueError("array context of the two arguments must match") + + if ary1.array_context is None: + raise ValueError("cannot transport frozen arrays") + + actx = ary1.array_context + + @memoize_in(actx, (interleave_dof_arrays, "interleave")) + def prg(): + from arraycontext import make_loopy_program + t_unit = make_loopy_program( + "{[iel, idof]: 0 <= iel < nelements and 0 <= idof < nunit_dofs}", + """ + result[iel, 2*idof] = ary1[iel, idof] + result[iel, 2*idof + 1] = ary2[iel, idof] + """, [ + lp.GlobalArg("ary1", shape="(nelements, nunit_dofs)"), + lp.GlobalArg("ary2", shape="(nelements, nunit_dofs)"), + lp.GlobalArg("result", shape="(nelements, 2*nunit_dofs)"), + ... + ], + name="interleave") + + from meshmode.transform_metadata import ( + ConcurrentDOFInameTag, + ConcurrentElementInameTag, + ) + return lp.tag_inames(t_unit, { + "iel": ConcurrentElementInameTag(), + "idof": ConcurrentDOFInameTag()}) + + results: list[Array] = [] + for grp, subary1, subary2 in zip(discr.groups, ary1, ary2, strict=True): + if subary1.dtype != subary2.dtype: + raise ValueError("dtype mismatch in inputs: " + f"'{subary1.dtype.name}' and '{subary2.dtype.name}'") + + assert subary1.shape[0] == grp.nelements + assert subary1.shape == subary2.shape + + result = actx.call_loopy( + prg(), + ary1=subary1, ary2=subary2, + nelements=subary1.shape[0], + nunit_dofs=subary1.shape[1])["result"] + results.append(result) + + return DOFArray(actx, tuple(results)) # }}} @@ -295,7 +259,7 @@ def connection_from_dds(places: GeometryCollection, if to_dd.granularity is dof_desc.GRANULARITY_NODE: pass elif to_dd.granularity is dof_desc.GRANULARITY_CENTER: - connections.append(CenterGranularityConnection(to_discr)) + raise ValueError("use interleave() to attain GRANULARITY_CENTER") elif to_dd.granularity is dof_desc.GRANULARITY_ELEMENT: raise ValueError("Creating a connection to element granularity " "is not allowed. Use Elementwise{Max,Min,Sum}.") diff --git a/pytential/symbolic/execution.py b/pytential/symbolic/execution.py index 56b28f724..07d1ea34e 100644 --- a/pytential/symbolic/execution.py +++ b/pytential/symbolic/execution.py @@ -296,6 +296,14 @@ def map_interpolation(self, expr): else: raise TypeError(f"cannot interpolate '{type(operand).__name__}'") + def map_interleave(self, expr: pp.Interleave): + return interleave_dof_arrays( + self.places.get_discretization( + expr.from_dd.geometry, expr.from_dd.discr_stage), + cast("DOFArray", self.rec(expr.operand_1)), + cast("DOFArray", self.rec(expr.operand_2)), + ) + def map_common_subexpression(self, expr): if expr.scope == sym.cse_scope.EXPRESSION: cache = self.bound_expr._get_cache(EvaluationMapperCSECacheKey) diff --git a/pytential/symbolic/mappers.py b/pytential/symbolic/mappers.py index ac485c90c..27c60ea2c 100644 --- a/pytential/symbolic/mappers.py +++ b/pytential/symbolic/mappers.py @@ -191,6 +191,14 @@ def map_interpolation(self, expr: pp.Interpolation): return type(expr)(expr.from_dd, expr.to_dd, operand) + def map_interleave(self, expr: pp.Interleave): + operand_1 = self.rec_arith(expr.operand_1) + operand_2 = self.rec_arith(expr.operand_2) + if (operand_1 is expr.operand_1) and (operand_2 is expr.operand_2): + return expr + + return type(expr)(expr.from_dd, operand_1, operand_2) + class CachedIdentityMapper(CachedMapper[Expression, []], IdentityMapper): def __call__(self, expr): @@ -496,6 +504,17 @@ def map_interpolation(self, expr: pp.Interpolation): return type(expr)(from_dd, to_dd, self.rec_arith(expr.operand)) + @override + def map_interleave(self, expr: pp.Interleave): + from_dd = expr.from_dd + if from_dd.geometry is None: + from_dd = from_dd.copy(geometry=self.default_source) + + return type(expr)( + from_dd, + self.rec_arith(expr.operand_1), + self.rec_arith(expr.operand_2)) + @override def map_is_shape_class(self, expr: pp.IsShapeClass): return type(expr)(expr.shape, self._default_dofdesc(expr.dofdesc)) @@ -965,6 +984,13 @@ def map_interpolation(self, expr: pp.Interpolation, enclosing_prec: int): stringify_where(expr.to_dd), self.rec(expr.operand, PREC_PRODUCT)) + def map_interleave(self, expr: pp.Interleave, enclosing_prec: int): + return "Interleave[{}]({}, {})".format( + stringify_where(expr.from_dd), + self.rec(expr.operand_1, PREC_NONE), + self.rec(expr.operand_2, PREC_NONE), + ) + def map_is_shape_class(self, expr: pp.IsShapeClass, enclosing_prec: int): return "IsShape[{}]({})".format(stringify_where(expr.dofdesc), expr.shape.__name__) diff --git a/pytential/symbolic/primitives.py b/pytential/symbolic/primitives.py index 81c08c996..cd6f0d31b 100644 --- a/pytential/symbolic/primitives.py +++ b/pytential/symbolic/primitives.py @@ -1279,7 +1279,12 @@ def _quad_resolution( to_dd = from_dd.copy(granularity=granularity) stretch = _mapping_max_stretch_factor(ambient_dim, dim=dim, dofdesc=from_dd) - return interpolate(stretch, from_dd, to_dd) + if granularity == GRANULARITY_CENTER: + intermediate_dd = from_dd.copy(granularity=GRANULARITY_NODE) + nodal = cse(interpolate(stretch, from_dd, intermediate_dd)) + return interleave(nodal, nodal, intermediate_dd) + else: + return interpolate(stretch, from_dd, to_dd) def _source_danger_zone_radii( @@ -1347,16 +1352,11 @@ def interleaved_expansion_centers( ambient_dim: int, dim: int | None = None, dofdesc: DOFDescriptorLike = None - ) -> tuple[ObjectArray1D[ArithmeticExpression], - ObjectArray1D[ArithmeticExpression]]: - centers = ( - expansion_centers(ambient_dim, -1, dim=dim, dofdesc=dofdesc), - expansion_centers(ambient_dim, +1, dim=dim, dofdesc=dofdesc) - ) - - source = as_dofdesc(dofdesc) - target = source.copy(granularity=GRANULARITY_CENTER) - return interpolate(centers, source, target) + ) -> ObjectArray1D[ArithmeticExpression]: + dofdesc = as_dofdesc(dofdesc) + c_neg = expansion_centers(ambient_dim, -1, dim=dim, dofdesc=dofdesc) + c_pos = expansion_centers(ambient_dim, +1, dim=dim, dofdesc=dofdesc) + return obj_array.vectorize_n_args(interleave, c_neg, c_pos, dofdesc) def h_max( @@ -1473,9 +1473,35 @@ def interpolate(operand: ArithmeticExpression, if from_dd == to_dd: return operand + if to_dd.granularity == GRANULARITY_CENTER: + raise ValueError("use _interleave to attain GRANULARITY_CENTER") + return Interpolation(from_dd, to_dd, operand) +# purposefully undocumented, only for use in interleaved_centers. +@expr_dataclass() +class Interleave(ExpressionNode): + from_dd: DOFDescriptor + operand_1: ArithmeticExpression + operand_2: ArithmeticExpression + + @property + def to_dd(self): + return self.from_dd.copy(granularity=GRANULARITY_CENTER) + + +def interleave( + operand_1: ArithmeticExpression, + operand_2: ArithmeticExpression, + from_dd: DOFDescriptorLike = None) -> ArithmeticExpression: + dof_desc = as_dofdesc(from_dd) + if dof_desc.granularity != GRANULARITY_NODE: + raise ValueError("can only interleave from node granularity") + + return Interleave(dof_desc, operand_1, operand_2) + + @expr_dataclass() class SingleScalarOperandExpression(ExpressionNode): """ diff --git a/test/test_symbolic.py b/test/test_symbolic.py index aa48008b2..cf34fcd69 100644 --- a/test/test_symbolic.py +++ b/test/test_symbolic.py @@ -245,6 +245,10 @@ def test_interpolation(actx_factory, name, source_discr_stage, target_granularit geometry=where.geometry, discr_stage=source_discr_stage, granularity=sym.GRANULARITY_NODE) + intermediate_dd = sym.DOFDescriptor( + geometry=where.geometry, + discr_stage=sym.QBX_SOURCE_QUAD_STAGE2, + granularity=sym.GRANULARITY_NODE) to_dd = sym.DOFDescriptor( geometry=where.geometry, discr_stage=sym.QBX_SOURCE_QUAD_STAGE2, @@ -266,7 +270,11 @@ def test_interpolation(actx_factory, name, source_discr_stage, target_granularit places = GeometryCollection(qbx, auto_where=where) sigma_sym = sym.var("sigma") - op_sym = sym.sin(sym.interpolate(sigma_sym, from_dd, to_dd)) + if target_granularity == sym.GRANULARITY_CENTER: + op_sym = sym.cse(sym.interpolate(sigma_sym, from_dd, intermediate_dd)) + op_sym = sym.sin(sym.interleave(op_sym, op_sym, intermediate_dd)) + else: + op_sym = sym.sin(sym.interpolate(sigma_sym, from_dd, to_dd)) bound_op = bind(places, op_sym, auto_where=where) def discr_and_nodes(stage): From 449dc0ad1cbf46ea7ee88a8db2800d1d0aa9d896 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Tue, 4 Nov 2025 14:55:58 -0600 Subject: [PATCH 06/15] Misc typing improvements --- pytential/linalg/direct_solver_symbolic.py | 5 ++- pytential/qbx/target_assoc.py | 37 ++++++++++++------- pytential/symbolic/dof_desc.py | 2 +- pytential/symbolic/execution.py | 43 ++++++++++++++-------- pytential/symbolic/mappers.py | 16 +++++--- pytential/symbolic/primitives.py | 18 +++++---- 6 files changed, 75 insertions(+), 46 deletions(-) diff --git a/pytential/linalg/direct_solver_symbolic.py b/pytential/linalg/direct_solver_symbolic.py index 5ab010026..c67eddf43 100644 --- a/pytential/linalg/direct_solver_symbolic.py +++ b/pytential/linalg/direct_solver_symbolic.py @@ -27,6 +27,7 @@ from typing_extensions import override +from pymbolic.geometric_algebra import componentwise from pytools import obj_array from pytential.symbolic.mappers import IdentityMapper, LocationTagger, OperatorCollector @@ -226,11 +227,11 @@ def _default_dofdesc(self, dofdesc: DOFDescriptorLike) -> DOFDescriptor: def map_int_g(self, expr: IntG) -> IntG: return type(expr)( expr.target_kernel, expr.source_kernels, - densities=self.operand_rec(expr.densities), + densities=tuple(self.rec_arith(d) for d in expr.densities), qbx_forced_limit=expr.qbx_forced_limit, source=self.default_source, target=self.default_target, kernel_arguments={ - name: self.operand_rec(arg_expr) + name: componentwise(self.rec_arith, arg_expr) for name, arg_expr in expr.kernel_arguments.items() } ) diff --git a/pytential/qbx/target_assoc.py b/pytential/qbx/target_assoc.py index 035ec8f64..e0785a76c 100644 --- a/pytential/qbx/target_assoc.py +++ b/pytential/qbx/target_assoc.py @@ -25,13 +25,16 @@ THE SOFTWARE. """ +import logging +from typing import TYPE_CHECKING + import numpy as np from cgen import Enum from arraycontext import Array, PyOpenCLArrayContext, flatten from boxtree.area_query import AreaQueryElementwiseTemplate from boxtree.tools import DeviceDataRecord, InlineBinarySearch -from pytools import memoize_in, memoize_method +from pytools import log_process, memoize_in, memoize_method from pytential.qbx.utils import ( QBX_TREE_C_PREAMBLE, @@ -42,18 +45,17 @@ ) -unwrap_args = AreaQueryElementwiseTemplate.unwrap_args - -import logging -from typing import TYPE_CHECKING - -from pytools import log_process - - if TYPE_CHECKING: + from numpy.typing import DTypeLike + + from boxtree import Tree from pyopencl import WaitList from pytential.collection import GeometryCollection + from pytential.symbolic.dof_desc import DOFDescriptor + + +unwrap_args = AreaQueryElementwiseTemplate.unwrap_args logger = logging.getLogger(__name__) @@ -630,10 +632,17 @@ def mark_targets(self, return actx.to_numpy(actx.np.all(found_target_close_to_element == 1)) @log_process(logger) - def find_centers(self, places, dofdesc, - tree, peer_lists, target_status, target_flags, target_assoc, - target_association_tolerance, - debug, wait_for=None): + def find_centers(self, + places: GeometryCollection, + dofdesc: DOFDescriptor, + tree: Tree, + peer_lists, + target_status, + target_flags, + target_assoc, + target_association_tolerance, + debug: bool, + wait_for: WaitList = None): from pytential import bind, sym ambient_dim = places.ambient_dim actx = self.array_context @@ -684,7 +693,7 @@ def find_centers(self, places, dofdesc, wait_for=wait_for) wait_for = [evt] - def make_target_field(fill_val, dtype=tree.coord_dtype): + def make_target_field(fill_val, dtype: DTypeLike = tree.coord_dtype): arr = actx.np.zeros(tree.nqbxtargets, dtype) arr.fill(fill_val) wait_for.extend(arr.events) diff --git a/pytential/symbolic/dof_desc.py b/pytential/symbolic/dof_desc.py index ae394ccc6..cbfaf35c0 100644 --- a/pytential/symbolic/dof_desc.py +++ b/pytential/symbolic/dof_desc.py @@ -137,7 +137,7 @@ class DOFDescriptor: .. automethod:: to_quad_stage2 """ - geometry: GeometryId + geometry: GeometryId | None """An identifier for the geometry on which the DOFs exist. This can be a simple string or any other hashable identifier for the geometric object. The geometric objects are generally subclasses of diff --git a/pytential/symbolic/execution.py b/pytential/symbolic/execution.py index 07d1ea34e..866124835 100644 --- a/pytential/symbolic/execution.py +++ b/pytential/symbolic/execution.py @@ -27,11 +27,12 @@ """ import logging -from typing import TYPE_CHECKING, Any, Generic, overload +from typing import TYPE_CHECKING, Any, Generic, cast, overload import numpy as np from typing_extensions import override +import pymbolic.primitives as p from arraycontext import ( ArrayContext, ArrayOrContainerOrScalar, @@ -43,6 +44,7 @@ from pymbolic.mapper.evaluator import EvaluationMapper as PymbolicEvaluationMapper from pytools import memoize_in, memoize_method +import pytential.symbolic.primitives as pp from pytential import sym from pytential.qbx.cost import AbstractQBXCostModel from pytential.symbolic.compiler import ( @@ -52,6 +54,7 @@ ComputePotential, Statement, ) +from pytential.symbolic.dof_connection import interleave_dof_arrays from pytential.symbolic.dof_desc import ( _UNNAMED_SOURCE, _UNNAMED_TARGET, @@ -65,6 +68,7 @@ from collections.abc import Hashable, Mapping, Sequence import pymbolic.primitives as p + import pyopencl as cl from pymbolic import ArithmeticExpression from pymbolic.geometric_algebra import MultiVector from pytools.obj_array import ObjectArrayND @@ -103,6 +107,11 @@ class EvaluationMapperBoundOpCacheKey: # {{{ evaluation mapper base (shared, between actual eval and cost model) class EvaluationMapperBase(PymbolicEvaluationMapper[ArrayOrContainerOrScalar]): + array_context: PyOpenCLArrayContext + places: GeometryCollection + bound_expr: BoundExpression[pp.Operand] + queue: cl.CommandQueue + def __init__(self, bound_expr, actx: PyOpenCLArrayContext, context=None, target_geometry=None, target_points=None, target_normals=None, target_tangents=None): @@ -233,20 +242,20 @@ def map_elementwise_min(self, expr): def map_elementwise_max(self, expr): return self._map_elementwise_reduction("max", expr) - def map_ones(self, expr): - discr = self.places.get_discretization( + def map_ones(self, expr: pp.Ones): + discr = self.places.get_target_or_discretization( expr.dofdesc.geometry, expr.dofdesc.discr_stage) return self.array_context.np.ones_like( self.array_context.thaw(discr.nodes()[0])) - def map_node_coordinate_component(self, expr): + def map_node_coordinate_component(self, expr: pp.NodeCoordinateComponent): discr = self.places.get_discretization( expr.dofdesc.geometry, expr.dofdesc.discr_stage) x = discr.nodes()[expr.ambient_axis] return self.array_context.thaw(x) - def map_num_reference_derivative(self, expr): + def map_num_reference_derivative(self, expr: pp.NumReferenceDerivative): from pytools import flatten ref_axes = flatten([axis] * mult for axis, mult in expr.ref_axes) @@ -256,12 +265,12 @@ def map_num_reference_derivative(self, expr): return num_reference_derivative(discr, ref_axes, self.rec(expr.operand)) - def map_q_weight(self, expr): + def map_q_weight(self, expr: pp.QWeight): discr = self.places.get_discretization( expr.dofdesc.geometry, expr.dofdesc.discr_stage) return self.array_context.thaw(discr.quad_weights()) - def map_inverse(self, expr): + def map_inverse(self, expr: pp.IterativeInverse): bound_op_cache = self.bound_expr.places._get_cache( EvaluationMapperBoundOpCacheKey) @@ -269,12 +278,13 @@ def map_inverse(self, expr): bound_op = bound_op_cache[expr] except KeyError: bound_op = bind( - expr.expression, self.places.get_geometry(expr.dofdesc.geometry), - self.bound_expr.iprec) + expr.expression, + ) bound_op_cache[expr] = bound_op - scipy_op = bound_op.scipy_op(expr.variable_name, expr.dofdesc, + scipy_op = bound_op.scipy_op( + self.array_context, expr.variable_name, expr.dofdesc, **{var_name: self.rec(var_expr) for var_name, var_expr in expr.extra_vars.items()}) @@ -283,7 +293,7 @@ def map_inverse(self, expr): result = gmres(scipy_op, rhs) return result - def map_interpolation(self, expr): + def map_interpolation(self, expr: pp.Interpolation): operand = self.rec(expr.operand) if isinstance(operand, @@ -318,7 +328,7 @@ def map_common_subexpression(self, expr): from numbers import Number try: - rec = cache[key] + rec = cast("ArrayOrContainerOrScalar", cache[key]) if (expr.scope == sym.cse_scope.DISCRETIZATION and not isinstance(rec, Number)): rec = self.array_context.thaw(rec) @@ -337,7 +347,7 @@ def map_common_subexpression(self, expr): def map_error_expression(self, expr): raise RuntimeError(expr.message) - def map_is_shape_class(self, expr): + def map_is_shape_class(self, expr: pp.IsShapeClass): discr = self.places.get_discretization( expr.dofdesc.geometry, expr.dofdesc.discr_stage) @@ -362,7 +372,8 @@ def exec_compute_potential_insn( self, actx: PyOpenCLArrayContext, insn, bound_expr, evaluate): raise NotImplementedError - def map_call(self, expr): + @override + def map_call(self, expr: p.Call): from pytential.symbolic.primitives import NumpyMathFunction if isinstance(expr.function, NumpyMathFunction): @@ -769,7 +780,7 @@ class BoundExpression(Generic[OperandTc]): def __init__(self, places: GeometryCollection, sym_op_expr: OperandTc) -> None: self.places: GeometryCollection = places self.sym_op_expr: OperandTc = sym_op_expr - self.caches: dict[Hashable, object] = {} + self.caches: dict[Hashable, dict[Hashable, object]] = {} @property @memoize_method @@ -777,7 +788,7 @@ def code(self) -> Code[CodeResultT]: from pytential.symbolic.compiler import OperatorCompiler return OperatorCompiler(self.places)(self.sym_op_expr) - def _get_cache(self, name: Hashable) -> object: + def _get_cache(self, name: Hashable) -> dict[Hashable, object]: return self.caches.setdefault(name, {}) def cost_per_stage(self, calibration_params, **kwargs): diff --git a/pytential/symbolic/mappers.py b/pytential/symbolic/mappers.py index 27c60ea2c..f13bd4fca 100644 --- a/pytential/symbolic/mappers.py +++ b/pytential/symbolic/mappers.py @@ -252,7 +252,9 @@ def map_int_g(self, expr: pp.IntG) -> ResultT: from pytential.symbolic.primitives import hashable_kernel_args return self.combine( [self.rec(density) for density in expr.densities] - + [self.rec(arg_expr) + # FIXME: The type-ignore is justified. This is fishy, but + # not urgently so. + + [self.rec(arg_expr) # pyright: ignore[reportArgumentType] for _, arg_expr in hashable_kernel_args(expr.kernel_arguments)]) def map_inverse(self, expr: pp.IterativeInverse) -> ResultT: @@ -523,9 +525,6 @@ def map_is_shape_class(self, expr: pp.IsShapeClass): def map_error_expression(self, expr: pp.ErrorExpression): return expr - def operand_rec(self, expr, /): - return self.rec(expr) - class ToTargetTagger(LocationTagger): """Descends into the expression tree, marking expressions based on two @@ -774,7 +773,8 @@ def map_num_reference_derivative(self, expr: pp.NumReferenceDerivative): return expr from_dd = to_dd.copy(discr_stage=self.from_discr_stage) - return pp.interpolate(self.rec_arith(self.tagger(expr)), from_dd, to_dd) + return pp.interpolate( + self.rec_arith(self.tagger.rec_arith(expr)), from_dd, to_dd) @override def map_int_g(self, expr: pp.IntG): @@ -995,6 +995,12 @@ def map_is_shape_class(self, expr: pp.IsShapeClass, enclosing_prec: int): return "IsShape[{}]({})".format(stringify_where(expr.dofdesc), expr.shape.__name__) + @override + def __call__(self, expr: pp.Operand | Expression, enclosing_prec: int = 0) -> str: + # Multivectors and object arrays are allowed, but we don't choose to + # have that knowledge available in types in pymbolic. + return self.rec(expr, enclosing_prec) # pyright: ignore[reportArgumentType] + class PrettyStringifyMapper( CSESplittingStringifyMapperMixin[[]], StringifyMapper): diff --git a/pytential/symbolic/primitives.py b/pytential/symbolic/primitives.py index cd6f0d31b..cfc10d05b 100644 --- a/pytential/symbolic/primitives.py +++ b/pytential/symbolic/primitives.py @@ -1766,9 +1766,11 @@ def nabla(self) -> Nabla: @staticmethod @override - def resolve(expr: ArithmeticExpression) -> ArithmeticExpression: + def resolve(expr: OperandTc) -> OperandTc: from pytential.symbolic.mappers import DerivativeBinder - return DerivativeBinder()(expr) + # type-ignore because pymbolic can handle multivectors, but it doesn't + # advertise it. + return DerivativeBinder()(expr) # pyright: ignore[reportReturnType, reportArgumentType] def dd_axis(axis: int, ambient_dim: int, operand: OperandTc) -> OperandTc: @@ -1819,7 +1821,7 @@ def grad(ambient_dim: int, return from_numpy(grad_mv(ambient_dim, operand).as_vector()) -def laplace(ambient_dim: int, operand: OperandTc) -> OperandTc: +def laplace(ambient_dim: int, operand: ArithmeticExpression) -> ArithmeticExpression: d = Derivative() nabla = d.dnabla(ambient_dim) @@ -2250,7 +2252,7 @@ def S( def tangential_derivative( ambient_dim: int, - operand: Operand, + operand: ArithmeticExpression, dim: int | None = None, dofdesc: DOFDescriptorLike = None, ) -> MultiVector[ArithmeticExpression]: @@ -2278,10 +2280,10 @@ def normal_derivative( def normal_second_derivative( ambient_dim: int, - operand: OperandTc, + operand: ArithmeticExpression, dim: int | None = None, dofdesc: DOFDescriptorLike = None, - ) -> OperandTc: + ) -> ArithmeticExpression: d = Derivative() n = normal(ambient_dim, dim, dofdesc) nabla = d.dnabla(ambient_dim) @@ -2323,7 +2325,7 @@ def Sp( def Spp( kernel: Kernel, - density: OperandTc, + density: ArithmeticExpression, qbx_forced_limit: QBXForcedLimit = _unspecified, source: DOFDescriptorLike | None = None, target: DOFDescriptorLike | None = None, @@ -2331,7 +2333,7 @@ def Spp( ambient_dim: int | None = None, dim: int | None = None, **kwargs: Operand, - ) -> OperandTc: + ) -> ArithmeticExpression: if qbx_forced_limit is _unspecified: warn("Not specifying 'qbx_forced_limit' on call to 'Spp' is deprecated. " "Choosing default '+1'.", stacklevel=2) From ce8f6d4a932a3e110e9c95001f17915c005804e0 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Tue, 4 Nov 2025 15:18:09 -0600 Subject: [PATCH 07/15] sphinxconfig_missing_reference_aliases: Move wayward pytential entry to correct place --- doc/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/conf.py b/doc/conf.py index 8656b31ac..bc7d5fdd1 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -75,7 +75,6 @@ "Variable": "class:pymbolic.primitives.Variable", "prim.Subscript": "class:pymbolic.primitives.Subscript", "prim.Variable": "class:pymbolic.primitives.Variable", - "ExpressionNode": "class:pytential.symbolic.primitives.ExpressionNode", # arraycontext "ArrayContainer": "obj:arraycontext.ArrayContainer", "ArrayOrContainerOrScalar": "obj:arraycontext.ArrayOrContainerOrScalar", @@ -100,6 +99,7 @@ "P2PBase": "class:sumpy.p2p.P2PBase", "FMMLevelToOrder": "class:sumpy.fmm.FMMLevelToOrder", # pytential + "ExpressionNode": "class:pytential.symbolic.primitives.ExpressionNode", "DOFDescriptorLike": "data:pytential.symbolic.dof_desc.DOFDescriptorLike", "DOFGranularity": "data:pytential.symbolic.dof_desc.DOFGranularity", "DiscretizationStage": "data:pytential.symbolic.dof_desc.DiscretizationStage", From 32d8c88f9a5c24939f03e1cca269cabc6eaf275f Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Tue, 4 Nov 2025 15:18:21 -0600 Subject: [PATCH 08/15] sphinxconfig_missing_reference_aliases: Add ArithmeticExpressionContainerTc --- doc/conf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/conf.py b/doc/conf.py index bc7d5fdd1..9e5395862 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -75,6 +75,8 @@ "Variable": "class:pymbolic.primitives.Variable", "prim.Subscript": "class:pymbolic.primitives.Subscript", "prim.Variable": "class:pymbolic.primitives.Variable", + "ArithmeticExpressionContainerTc": + "obj:pymbolic.typing.ArithmeticExpressionContainerTc", # arraycontext "ArrayContainer": "obj:arraycontext.ArrayContainer", "ArrayOrContainerOrScalar": "obj:arraycontext.ArrayOrContainerOrScalar", From 68a567bb17f40de62d6224c218bf6fc3e525559c Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Tue, 4 Nov 2025 16:25:01 -0600 Subject: [PATCH 09/15] StringifyMapper: handle ErrorExpression --- pytential/symbolic/mappers.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pytential/symbolic/mappers.py b/pytential/symbolic/mappers.py index f13bd4fca..77e6d963d 100644 --- a/pytential/symbolic/mappers.py +++ b/pytential/symbolic/mappers.py @@ -982,7 +982,7 @@ def map_interpolation(self, expr: pp.Interpolation, enclosing_prec: int): return "Interp[{}->{}]({})".format( stringify_where(expr.from_dd), stringify_where(expr.to_dd), - self.rec(expr.operand, PREC_PRODUCT)) + self.rec(expr.operand, PREC_NONE)) def map_interleave(self, expr: pp.Interleave, enclosing_prec: int): return "Interleave[{}]({}, {})".format( @@ -991,6 +991,9 @@ def map_interleave(self, expr: pp.Interleave, enclosing_prec: int): self.rec(expr.operand_2, PREC_NONE), ) + def map_error_expression(self, expr: pp.ErrorExpression, enclosing_prec: int): + return f"Error({expr.message})" + def map_is_shape_class(self, expr: pp.IsShapeClass, enclosing_prec: int): return "IsShape[{}]({})".format(stringify_where(expr.dofdesc), expr.shape.__name__) From 7d0e8f60469ec358fc437054f4135be83348f0f3 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Tue, 4 Nov 2025 16:41:27 -0600 Subject: [PATCH 10/15] Make MatVecOp a dataclass --- pytential/symbolic/execution.py | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/pytential/symbolic/execution.py b/pytential/symbolic/execution.py index 866124835..9b260ae7e 100644 --- a/pytential/symbolic/execution.py +++ b/pytential/symbolic/execution.py @@ -27,6 +27,7 @@ """ import logging +from dataclasses import dataclass from typing import TYPE_CHECKING, Any, Generic, cast, overload import numpy as np @@ -35,6 +36,7 @@ import pymbolic.primitives as p from arraycontext import ( ArrayContext, + ArrayOrContainer, ArrayOrContainerOrScalar, PyOpenCLArrayContext, ScalarLike, @@ -61,7 +63,7 @@ DOFDescriptor, DOFDescriptorLike, ) -from pytential.symbolic.primitives import OperandTc +from pytential.symbolic.primitives import Operand, OperandTc if TYPE_CHECKING: @@ -69,6 +71,7 @@ import pymbolic.primitives as p import pyopencl as cl + from meshmode.discretization import Discretization from pymbolic import ArithmeticExpression from pymbolic.geometric_algebra import MultiVector from pytools.obj_array import ObjectArrayND @@ -490,6 +493,7 @@ def get_modeled_cost(self): # {{{ scipy-like mat-vec op +@dataclass(frozen=True) class MatVecOp: """A :class:`scipy.sparse.linalg.LinearOperator` work-alike. Exposes a :mod:`pytential` operator as a generic matrix operation, @@ -500,17 +504,14 @@ class MatVecOp: .. automethod:: matvec """ - def __init__(self, - bound_expr, actx: PyOpenCLArrayContext, - arg_name, dtype, total_dofs, discrs, starts_and_ends, extra_args): - self.bound_expr = bound_expr - self.array_context = actx - self.arg_name = arg_name - self.dtype = dtype - self.total_dofs = total_dofs - self.discrs = discrs - self.starts_and_ends = starts_and_ends - self.extra_args = extra_args + bound_expr: BoundExpression[Operand] + array_context: PyOpenCLArrayContext + arg_name: str + dtype: np.dtype[Any] + total_dofs: int + discrs: Sequence[Discretization] + starts_and_ends: Sequence[tuple[int, int]] + extra_args: Mapping[str, object] @property def shape(self): @@ -535,7 +536,7 @@ def flatten(self, ary): def unflatten(self, ary): # Convert a flat version of *ary* into a structured version. - components = [] + components: list[ArrayOrContainer] = [] for discr, (start, end) in zip(self.discrs, self.starts_and_ends, strict=True): component = ary[start:end] @@ -577,7 +578,7 @@ def matvec(self, x): else: raise ValueError(f"unsupported input type: {type(x).__name__}") - args = self.extra_args.copy() + args = dict(self.extra_args) args[self.arg_name] = self.unflatten(x) if flat else x result = self.bound_expr(self.array_context, **args) From 9f15309c9b5b81e3386e26b3d69f429de55aab30 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Tue, 4 Nov 2025 17:08:44 -0600 Subject: [PATCH 11/15] Introduce LowLevelQBXForcedLimit --- pytential/qbx/__init__.py | 13 +++++++++---- pytential/symbolic/compiler.py | 2 +- pytential/symbolic/primitives.py | 3 +++ 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/pytential/qbx/__init__.py b/pytential/qbx/__init__.py index 44e1b41a8..993e88ee6 100644 --- a/pytential/qbx/__init__.py +++ b/pytential/qbx/__init__.py @@ -64,7 +64,12 @@ from pytential.symbolic.compiler import ComputePotential, PotentialOutput from pytential.symbolic.dof_desc import DOFDescriptor, GeometryId from pytential.symbolic.execution import BoundExpression - from pytential.symbolic.primitives import IntG, Operand, QBXForcedLimit + from pytential.symbolic.primitives import ( + IntG, + LowLevelQBXForcedLimit, + Operand, + QBXForcedLimit, + ) from pytential.target import TargetOrDiscretization @@ -647,7 +652,7 @@ def get_target_discrs_and_qbx_sides(self, target_name_and_side_to_number: dict[GeometryId, int] = {} # list of tuples (discr, qbx_side) target_discrs_and_qbx_sides: list[ - tuple[GeometryLike, Literal[-2, -1, +1, +2, "avg", 0]] + tuple[GeometryLike, LowLevelQBXForcedLimit] ] = [] for o in insn.outputs: @@ -906,11 +911,11 @@ def _flat_centers(dofdesc, qbx_forced_limit): from collections import defaultdict self_outputs: defaultdict[ - tuple[DOFDescriptor, Literal[-1, -2, 0, 1, 2]], + tuple[DOFDescriptor, LowLevelQBXForcedLimit], list[tuple[int, PotentialOutput]] ] = defaultdict(list) other_outputs: defaultdict[ - tuple[DOFDescriptor, Literal[-1, -2, 0, 1, 2]], + tuple[DOFDescriptor, LowLevelQBXForcedLimit], list[tuple[int, PotentialOutput]] ] = defaultdict(list) diff --git a/pytential/symbolic/compiler.py b/pytential/symbolic/compiler.py index f606e073f..ad7cc71ed 100644 --- a/pytential/symbolic/compiler.py +++ b/pytential/symbolic/compiler.py @@ -200,12 +200,12 @@ class PotentialOutput: target_name: DOFDescriptor """A descriptor for the geometry used by the target kernel.""" + # This removes "avg" compared to QBXForcedLimit qbx_forced_limit: Literal[-2, -1, +1, +2] | None """The type of the limiting process used by the QBX expansion (``+1`` if the output is required to originate from a QBX center on the "+" side of the boundary. ``-1`` for the other side, etc.). """ - # This removes "avg" and None compared to QBXForcedLimit @dataclass(frozen=True, eq=False) diff --git a/pytential/symbolic/primitives.py b/pytential/symbolic/primitives.py index cfc10d05b..180e9ae1e 100644 --- a/pytential/symbolic/primitives.py +++ b/pytential/symbolic/primitives.py @@ -467,6 +467,9 @@ def make_stringifier( Side: TypeAlias = Literal[-1, 1] QBXForcedLimit: TypeAlias = Literal[-2, -1, +1, +2, "avg"] | None +# This is what the (low-level) execution backend needs. +LowLevelQBXForcedLimit: TypeAlias = Literal[-2, -1, +1, +2, 0] + # NOTE: this will likely live in pymbolic at some point, but for now we take it! ArithmeticExpressionT = TypeVar("ArithmeticExpressionT", bound=ArithmeticExpression) From 6f0f88c2ed5a56244d244dd46ad0490d13bf8dd5 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Tue, 4 Nov 2025 18:02:06 -0600 Subject: [PATCH 12/15] Type ArrayContextFactory in tests --- test/test_beltrami.py | 8 ++++-- test/test_cost_model.py | 16 ++++++----- test/test_global_qbx.py | 20 +++++++++----- test/test_layer_pot.py | 25 ++++++++++++------ test/test_layer_pot_identity.py | 11 +++++--- test/test_linalg_proxy.py | 17 +++++++++--- test/test_linalg_skeletonization.py | 6 ++--- test/test_linalg_utils.py | 4 +-- test/test_matrix.py | 41 ++++++++++++++++++++++------- test/test_maxwell.py | 8 +++--- test/test_scalar_int_eq.py | 8 ++++-- test/test_stokes.py | 25 +++++++++++++----- test/test_symbolic.py | 26 +++++++++++++----- test/test_tools.py | 8 +++--- 14 files changed, 155 insertions(+), 68 deletions(-) diff --git a/test/test_beltrami.py b/test/test_beltrami.py index 0ca646c3a..abc96e0ff 100644 --- a/test/test_beltrami.py +++ b/test/test_beltrami.py @@ -29,7 +29,7 @@ import extra_int_eq_data as eid import pytest -from arraycontext import pytest_generate_tests_for_array_contexts +from arraycontext import ArrayContextFactory, pytest_generate_tests_for_array_contexts from meshmode import _acf # noqa: F401 from meshmode.array_context import PytestPyOpenCLArrayContextFactory from meshmode.dof_array import DOFArray @@ -173,7 +173,11 @@ def source(self, actx, discr): YukawaBeltramiOperator(3, precond="right"), YukawaBeltramiSolution(), marks=pytest.mark.slowtest), ]) -def test_beltrami_convergence(actx_factory, operator, solution, visualize=False): +def test_beltrami_convergence( + actx_factory: ArrayContextFactory, + operator, + solution, + visualize=False): if operator.ambient_dim == 3: pytest.importorskip("scipy") diff --git a/test/test_cost_model.py b/test/test_cost_model.py index 51b87339e..66ab8047c 100644 --- a/test/test_cost_model.py +++ b/test/test_cost_model.py @@ -31,7 +31,7 @@ import numpy as np import pytest -from arraycontext import pytest_generate_tests_for_array_contexts +from arraycontext import ArrayContextFactory, pytest_generate_tests_for_array_contexts from boxtree.constant_one import ConstantOneExpansionWrangler from boxtree.fmm import TreeIndependentDataForWrangler from meshmode import _acf # noqa: F401 @@ -59,7 +59,7 @@ # {{{ Compare the time and result of OpenCL implementation and Python implementation -def test_compare_cl_and_py_cost_model(actx_factory): +def test_compare_cl_and_py_cost_model(actx_factory: ArrayContextFactory): nelements = 3600 target_order = 16 fmm_order = 5 @@ -376,7 +376,11 @@ def test_timing_data_gathering(ctx_factory): (2, False, True), (3, False, True), (3, True, True))) -def test_cost_model(actx_factory, dim, use_target_specific_qbx, per_box): +def test_cost_model( + actx_factory: ArrayContextFactory, + dim, + use_target_specific_qbx, + per_box): """Test that cost model gathering can execute successfully.""" actx = actx_factory() @@ -422,7 +426,7 @@ def test_cost_model(actx_factory, dim, use_target_specific_qbx, per_box): # {{{ test cost model metadata gathering -def test_cost_model_metadata_gathering(actx_factory): +def test_cost_model_metadata_gathering(actx_factory: ArrayContextFactory): """Test that the cost model correctly gathers metadata.""" actx = actx_factory() @@ -690,7 +694,7 @@ def m2m(src_level, tgt_level): (3, False, True), (3, True, False), (3, True, True))) -def test_cost_model_correctness(actx_factory, dim, off_surface, +def test_cost_model_correctness(actx_factory: ArrayContextFactory, dim, off_surface, use_target_specific_qbx): """Check that computed cost matches that of a constant-one FMM.""" actx = actx_factory() @@ -797,7 +801,7 @@ def test_cost_model_correctness(actx_factory, dim, off_surface, # {{{ test order varying by level -def test_cost_model_order_varying_by_level(actx_factory): +def test_cost_model_order_varying_by_level(actx_factory: ArrayContextFactory): """For FMM order varying by level, this checks to ensure that the costs are different. The varying-level case should have larger cost. """ diff --git a/test/test_global_qbx.py b/test/test_global_qbx.py index 61cf292e7..8867a538c 100644 --- a/test/test_global_qbx.py +++ b/test/test_global_qbx.py @@ -37,7 +37,11 @@ from extra_int_eq_data import QuadSpheroidTestCase import meshmode.mesh.generation as mgen -from arraycontext import flatten, pytest_generate_tests_for_array_contexts +from arraycontext import ( + ArrayContextFactory, + flatten, + pytest_generate_tests_for_array_contexts, +) from meshmode import _acf # noqa: F401 from meshmode.array_context import PytestPyOpenCLArrayContextFactory @@ -281,7 +285,7 @@ def check_quad_res_to_helmholtz_k_ratio(element): ("20-to-1-ellipse", partial(mgen.ellipse, 20), 100), ("horseshoe", horseshoe, 64), ]) -def test_source_refinement_2d(actx_factory, +def test_source_refinement_2d(actx_factory: ArrayContextFactory, curve_name, curve_f, nelements, visualize=False): helmholtz_k = 10 order = 8 @@ -298,7 +302,7 @@ def test_source_refinement_2d(actx_factory, ("torus", partial(mgen.generate_torus, 3, 1, n_minor=10, n_major=7), 6), ("spheroid-quad", lambda order: QuadSpheroidTestCase().get_mesh(2, order), 4), ]) -def test_source_refinement_3d(actx_factory, +def test_source_refinement_3d(actx_factory: ArrayContextFactory, surface_name, surface_f, order, visualize=False): mesh = surface_f(order=order) run_source_refinement_test(actx_factory, mesh, order, @@ -310,8 +314,12 @@ def test_source_refinement_3d(actx_factory, ("20-to-1 ellipse", partial(mgen.ellipse, 20), 100), ("horseshoe", horseshoe, 64), ]) -def test_target_association(actx_factory, curve_name, curve_f, nelements, - visualize=False): +def test_target_association( + actx_factory: ArrayContextFactory, + curve_name, + curve_f, + nelements, + visualize=False): actx = actx_factory() # {{{ generate lpot source @@ -507,7 +515,7 @@ def check_close_targets(centers, targets, true_side, # }}} -def test_target_association_failure(actx_factory): +def test_target_association_failure(actx_factory: ArrayContextFactory): actx = actx_factory() # {{{ generate circle diff --git a/test/test_layer_pot.py b/test/test_layer_pot.py index 2a53c5666..2841f1864 100644 --- a/test/test_layer_pot.py +++ b/test/test_layer_pot.py @@ -30,7 +30,11 @@ import pytest import meshmode.mesh.generation as mgen -from arraycontext import flatten, pytest_generate_tests_for_array_contexts +from arraycontext import ( + ArrayContextFactory, + flatten, + pytest_generate_tests_for_array_contexts, +) from meshmode import _acf # noqa: F401 from meshmode.array_context import PytestPyOpenCLArrayContextFactory from sumpy.visualization import FieldPlotter @@ -50,7 +54,7 @@ # {{{ geometry test -def test_geometry(actx_factory): +def test_geometry(actx_factory: ArrayContextFactory): actx = actx_factory() nelements = 30 @@ -83,7 +87,7 @@ def test_geometry(actx_factory): # {{{ test off-surface eval @pytest.mark.parametrize("use_fmm", [True, False]) -def test_off_surface_eval(actx_factory, use_fmm, visualize=False): +def test_off_surface_eval(actx_factory: ArrayContextFactory, use_fmm, visualize=False): logging.basicConfig(level=logging.INFO) actx = actx_factory() @@ -148,7 +152,7 @@ def test_off_surface_eval(actx_factory, use_fmm, visualize=False): # {{{ test off-surface eval vs direct -def test_off_surface_eval_vs_direct(actx_factory, do_plot=False): +def test_off_surface_eval_vs_direct(actx_factory: ArrayContextFactory, do_plot=False): logging.basicConfig(level=logging.INFO) actx = actx_factory() @@ -232,7 +236,9 @@ def test_off_surface_eval_vs_direct(actx_factory, do_plot=False): # {{{ -def test_single_plus_double_with_single_fmm(actx_factory, do_plot=False): +def test_single_plus_double_with_single_fmm( + actx_factory: ArrayContextFactory, + do_plot=False): logging.basicConfig(level=logging.INFO) actx = actx_factory() @@ -332,7 +338,7 @@ def test_single_plus_double_with_single_fmm(actx_factory, do_plot=False): # {{{ unregularized tests -def test_unregularized_with_ones_kernel(actx_factory): +def test_unregularized_with_ones_kernel(actx_factory: ArrayContextFactory): actx = actx_factory() nelements = 10 @@ -379,7 +385,7 @@ def test_unregularized_with_ones_kernel(actx_factory): assert np.allclose(actx.to_numpy(result_nonself), 2 * np.pi) -def test_unregularized_off_surface_fmm_vs_direct(actx_factory): +def test_unregularized_off_surface_fmm_vs_direct(actx_factory: ArrayContextFactory): actx = actx_factory() nelements = 300 @@ -448,7 +454,10 @@ def test_unregularized_off_surface_fmm_vs_direct(actx_factory): # {{{ test 3D jump relations @pytest.mark.parametrize("relation", ["sp", "nxcurls", "div_s"]) -def test_3d_jump_relations(actx_factory, relation, visualize=False): +def test_3d_jump_relations( + actx_factory: ArrayContextFactory, + relation, + visualize=False): pytest.importorskip("pyfmmlib") actx = actx_factory() diff --git a/test/test_layer_pot_identity.py b/test/test_layer_pot_identity.py index 6e3328966..548339acf 100644 --- a/test/test_layer_pot_identity.py +++ b/test/test_layer_pot_identity.py @@ -30,7 +30,12 @@ import numpy.linalg as la import pytest -from arraycontext import flatten, pytest_generate_tests_for_array_contexts, unflatten +from arraycontext import ( + ArrayContextFactory, + flatten, + pytest_generate_tests_for_array_contexts, + unflatten, +) # from sumpy.visualization import FieldPlotter from meshmode import _acf # noqa: F401 @@ -204,7 +209,7 @@ def check(self): @pytest.mark.parametrize("case", [ DynamicTestCase(SphereTestCase(), GreenExpr(), 0), ]) -def test_identity_convergence_slow(actx_factory, case): +def test_identity_convergence_slow(actx_factory: ArrayContextFactory, case): test_identity_convergence(actx_factory, case) @@ -227,7 +232,7 @@ def test_identity_convergence_slow(actx_factory, case): DynamicTestCase(SphereTestCase(), GreenExpr(), 1.2, fmm_backend="fmmlib"), DynamicTestCase(QuadSphereTestCase(), GreenExpr(), 0, fmm_backend="fmmlib"), ]) -def test_identity_convergence(actx_factory, case, visualize=False): +def test_identity_convergence(actx_factory: ArrayContextFactory, case, visualize=False): if case.fmm_backend == "fmmlib": pytest.importorskip("pyfmmlib") case.check() diff --git a/test/test_linalg_proxy.py b/test/test_linalg_proxy.py index 9115cdfd4..71d2df405 100644 --- a/test/test_linalg_proxy.py +++ b/test/test_linalg_proxy.py @@ -31,7 +31,12 @@ import numpy.linalg as la import pytest -from arraycontext import flatten, pytest_generate_tests_for_array_contexts, unflatten +from arraycontext import ( + ArrayContextFactory, + flatten, + pytest_generate_tests_for_array_contexts, + unflatten, +) from meshmode import _acf # noqa: F401 from meshmode.array_context import PytestPyOpenCLArrayContextFactory from meshmode.mesh.generation import NArmedStarfish, ellipse @@ -194,7 +199,11 @@ def plot_proxy_geometry( @pytest.mark.parametrize("tree_kind", ["adaptive", None]) @pytest.mark.parametrize("case", PROXY_TEST_CASES) -def test_partition_points(actx_factory, tree_kind, case, visualize=False): +def test_partition_points( + actx_factory: ArrayContextFactory, + tree_kind, + case, + visualize=False): """Tests that the points are correctly partitioned.""" if case.ambient_dim == 3 and tree_kind is None: @@ -238,7 +247,7 @@ def test_partition_points(actx_factory, tree_kind, case, visualize=False): ]) @pytest.mark.parametrize("index_sparsity_factor", [1.0, 0.6]) @pytest.mark.parametrize("proxy_radius_factor", [1.0, 1.1]) -def test_proxy_generator(actx_factory, case, +def test_proxy_generator(actx_factory: ArrayContextFactory, case, proxy_generator_cls, index_sparsity_factor, proxy_radius_factor, visualize=False): """Tests that the proxies generated are all at the correct radius from the @@ -306,7 +315,7 @@ def test_proxy_generator(actx_factory, case, ]) @pytest.mark.parametrize("index_sparsity_factor", [1.0, 0.6]) @pytest.mark.parametrize("proxy_radius_factor", [1, 1.1]) -def test_neighbor_points(actx_factory, case, +def test_neighbor_points(actx_factory: ArrayContextFactory, case, proxy_generator_cls, index_sparsity_factor, proxy_radius_factor, visualize=False): """Test that neighboring points (inside the proxy balls, but outside the diff --git a/test/test_linalg_skeletonization.py b/test/test_linalg_skeletonization.py index 675b69362..76ea5e995 100644 --- a/test/test_linalg_skeletonization.py +++ b/test/test_linalg_skeletonization.py @@ -32,7 +32,7 @@ import numpy.linalg as la import pytest -from arraycontext import pytest_generate_tests_for_array_contexts +from arraycontext import ArrayContextFactory, pytest_generate_tests_for_array_contexts from meshmode import _acf # noqa: F401 from meshmode.array_context import PytestPyOpenCLArrayContextFactory from meshmode.mesh.generation import NArmedStarfish, ellipse @@ -107,7 +107,7 @@ def _plot_skeleton_with_proxies(name, sources, pxy, srcindex, sklindex): replace(SKELETONIZE_TEST_CASES[0], op_type="single", knl_class_or_helmholtz_k=5), replace(SKELETONIZE_TEST_CASES[0], op_type="double", knl_class_or_helmholtz_k=5), ]) -def test_skeletonize_symbolic(actx_factory, case, visualize=False): +def test_skeletonize_symbolic(actx_factory: ArrayContextFactory, case, visualize=False): """Tests that the symbolic manipulations work for different kernels / IntGs. This tests that `prepare_expr` and `prepare_proxy_expr` can "clean" the given integral equations and that the result can be evaluated and skeletonized. @@ -371,7 +371,7 @@ def intersect1d(x, y): # SKELETONIZE_TEST_CASES[0], SKELETONIZE_TEST_CASES[1], SKELETONIZE_TEST_CASES[2], ]) -def test_skeletonize_by_proxy(actx_factory, case, visualize=False): +def test_skeletonize_by_proxy(actx_factory: ArrayContextFactory, case, visualize=False): r"""Test single-level skeletonization accuracy. Checks that the error satisfies :math:`e < c \epsilon_{id}` for a fixed ID tolerance and an empirically determined (not too huge) :math:`c`. diff --git a/test/test_linalg_utils.py b/test/test_linalg_utils.py index 668a43e83..36d9e831b 100644 --- a/test/test_linalg_utils.py +++ b/test/test_linalg_utils.py @@ -29,7 +29,7 @@ import numpy.linalg as la import pytest -from arraycontext import pytest_generate_tests_for_array_contexts +from arraycontext import ArrayContextFactory, pytest_generate_tests_for_array_contexts from meshmode import _acf # noqa: F401 from meshmode.array_context import PytestPyOpenCLArrayContextFactory @@ -46,7 +46,7 @@ # {{{ test_matrix_cluster_index -def test_matrix_cluster_index(actx_factory): +def test_matrix_cluster_index(actx_factory: ArrayContextFactory): actx = actx_factory() # {{{ setup diff --git a/test/test_matrix.py b/test/test_matrix.py index 97f27d38c..c12c2c54f 100644 --- a/test/test_matrix.py +++ b/test/test_matrix.py @@ -34,19 +34,23 @@ import numpy.linalg as la import pytest -from arraycontext import flatten, pytest_generate_tests_for_array_contexts, unflatten +from arraycontext import ( + ArrayContextFactory, + flatten, + pytest_generate_tests_for_array_contexts, + unflatten, +) from meshmode import _acf # noqa: F401 # noqa: F401 # noqa: F401 from meshmode.array_context import PytestPyOpenCLArrayContextFactory from meshmode.mesh.generation import NArmedStarfish, ellipse from pytools import obj_array from pytential import GeometryCollection, bind, sym +from pytential.utils import pytest_teardown_function as teardown_function # noqa: F401 logger = logging.getLogger(__name__) -from pytential.utils import pytest_teardown_function as teardown_function # noqa: F401 - pytest_generate_tests = pytest_generate_tests_for_array_contexts([ PytestPyOpenCLArrayContextFactory, @@ -74,7 +78,12 @@ def max_cluster_error(mat, clusters, mindex, p=None): partial(ellipse, 3), NArmedStarfish(5, 0.25)]) @pytest.mark.parametrize("op_type", ["scalar_mixed", "vector"]) -def test_build_matrix(actx_factory, k, curve_fn, op_type, visualize=False): +def test_build_matrix( + actx_factory: ArrayContextFactory, + k, + curve_fn, + op_type, + visualize=False): """Checks that the matrix built with `symbolic.execution.build_matrix` gives the same (to tolerance) answer as a direct evaluation. """ @@ -189,7 +198,11 @@ def test_build_matrix(actx_factory, k, curve_fn, op_type, visualize=False): @pytest.mark.parametrize("side", [+1, -1]) @pytest.mark.parametrize("op_type", ["single", "double"]) -def test_build_matrix_conditioning(actx_factory, side, op_type, visualize=False): +def test_build_matrix_conditioning( + actx_factory: ArrayContextFactory, + side, + op_type, + visualize=False): """Checks that :math:`I + K`, where :math:`K` is compact gives a well-conditioned operator when it should. For example, the exterior Laplace problem has a nullspace, so we check that and remove it. @@ -297,8 +310,14 @@ def test_build_matrix_conditioning(actx_factory, side, op_type, visualize=False) @pytest.mark.parametrize("cluster_builder_type", ["qbx", "p2p"]) @pytest.mark.parametrize("index_sparsity_factor", [1.0, 0.6]) @pytest.mark.parametrize("op_type", ["scalar", "scalar_mixed"]) -def test_cluster_builder(actx_factory, ambient_dim, - cluster_builder_type, index_sparsity_factor, op_type, visualize=False): +def test_cluster_builder( + actx_factory: ArrayContextFactory, + ambient_dim, + + cluster_builder_type, + index_sparsity_factor, + op_type, + visualize=False): """Test that cluster builders and full matrix builders actually match.""" actx = actx_factory() @@ -414,8 +433,12 @@ def test_cluster_builder(actx_factory, ambient_dim, (sym.QBX_SOURCE_STAGE2, sym.QBX_SOURCE_STAGE2), # (sym.QBX_SOURCE_STAGE2, sym.QBX_SOURCE_STAGE1), ]) -def test_build_matrix_fixed_stage(actx_factory, - source_discr_stage, target_discr_stage, visualize=False): +def test_build_matrix_fixed_stage( + actx_factory: ArrayContextFactory, + + source_discr_stage, + target_discr_stage, + visualize=False): """Checks that the block builders match for difference stages.""" actx = actx_factory() diff --git a/test/test_maxwell.py b/test/test_maxwell.py index 5888cddef..69450e05a 100644 --- a/test/test_maxwell.py +++ b/test/test_maxwell.py @@ -29,7 +29,7 @@ import numpy as np import pytest -from arraycontext import pytest_generate_tests_for_array_contexts +from arraycontext import ArrayContextFactory, pytest_generate_tests_for_array_contexts from meshmode import _acf # noqa: F401 from meshmode.array_context import PytestPyOpenCLArrayContextFactory from meshmode.mesh.processing import find_bounding_box @@ -39,13 +39,11 @@ from pytential import bind, norm, sym from pytential.target import PointsTarget +from pytential.utils import pytest_teardown_function as teardown_function # noqa: F401 logger = logging.getLogger(__name__) -from pytential.utils import pytest_teardown_function as teardown_function # noqa: F401 - - pytest_generate_tests = pytest_generate_tests_for_array_contexts([ PytestPyOpenCLArrayContextFactory, ]) @@ -220,7 +218,7 @@ def h(self): # tc_int, tc_ext, ]) -def test_pec_mfie_extinction(actx_factory, case, +def test_pec_mfie_extinction(actx_factory: ArrayContextFactory, case, use_plane_wave=False, visualize=False): """For (say) is_interior=False (the 'exterior' MFIE), this test verifies extinction of the combined (incoming + scattered) field on the interior diff --git a/test/test_scalar_int_eq.py b/test/test_scalar_int_eq.py index 64951bd20..a14d72b20 100644 --- a/test/test_scalar_int_eq.py +++ b/test/test_scalar_int_eq.py @@ -30,7 +30,11 @@ import numpy.linalg as la import pytest -from arraycontext import flatten, pytest_generate_tests_for_array_contexts +from arraycontext import ( + ArrayContextFactory, + flatten, + pytest_generate_tests_for_array_contexts, +) from meshmode import _acf # noqa: F401 # noqa: F401 # noqa: F401 from meshmode.array_context import PytestPyOpenCLArrayContextFactory from meshmode.discretization.visualization import make_visualizer @@ -475,7 +479,7 @@ def run_int_eq_test(actx, # 'test_integral_equation(cl._csc, EllipseIntEqTestCase(LaplaceKernel, "dirichlet", +1), visualize=True)' # noqa: E501 @pytest.mark.parametrize("case", cases) -def test_integral_equation(actx_factory, case, visualize=False): +def test_integral_equation(actx_factory: ArrayContextFactory, case, visualize=False): logging.basicConfig(level=logging.INFO) actx = actx_factory() diff --git a/test/test_stokes.py b/test/test_stokes.py index 47736e5bf..96f7ed234 100644 --- a/test/test_stokes.py +++ b/test/test_stokes.py @@ -30,7 +30,11 @@ import numpy as np import pytest -from arraycontext import flatten, pytest_generate_tests_for_array_contexts +from arraycontext import ( + ArrayContextFactory, + flatten, + pytest_generate_tests_for_array_contexts, +) from meshmode import _acf # noqa: F401 # noqa: F401 # noqa: F401 from meshmode.array_context import PytestPyOpenCLArrayContextFactory from meshmode.discretization import Discretization @@ -38,13 +42,11 @@ from pytools import obj_array from pytential import GeometryCollection, bind, sym +from pytential.utils import pytest_teardown_function as teardown_function # noqa: F401 logger = logging.getLogger(__name__) -from pytential.utils import pytest_teardown_function as teardown_function # noqa: F401 - - pytest_generate_tests = pytest_generate_tests_for_array_contexts([ PytestPyOpenCLArrayContextFactory, ]) @@ -275,7 +277,10 @@ def run_exterior_stokes(actx_factory, *, 2, pytest.param(3, marks=pytest.mark.slowtest) ]) -def test_exterior_stokes(actx_factory, ambient_dim, visualize=False): +def test_exterior_stokes( + actx_factory: ArrayContextFactory, + ambient_dim, + visualize=False): if visualize: logging.basicConfig(level=logging.INFO) @@ -426,7 +431,10 @@ def ref_result(self): partial(eid.StarfishTestCase, resolutions=[16, 32, 64, 96, 128]), partial(eid.SpheroidTestCase, resolutions=[0, 1, 2]), ]) -def test_stokeslet_identity(actx_factory, cls, visualize=False): +def test_stokeslet_identity( + actx_factory: ArrayContextFactory, + cls, + visualize=False): if visualize: logging.basicConfig(level=logging.INFO) @@ -485,7 +493,10 @@ def ref_result(self): partial(eid.StarfishTestCase, resolutions=[16, 32, 64, 96, 128]), partial(eid.SpheroidTestCase, resolutions=[0, 1, 2]), ]) -def test_stresslet_identity(actx_factory, cls, visualize=False): +def test_stresslet_identity( + actx_factory: ArrayContextFactory, + cls, + visualize=False): if visualize: logging.basicConfig(level=logging.INFO) diff --git a/test/test_symbolic.py b/test/test_symbolic.py index cf34fcd69..38824a90b 100644 --- a/test/test_symbolic.py +++ b/test/test_symbolic.py @@ -25,13 +25,19 @@ import logging from functools import partial +from typing import TYPE_CHECKING import numpy as np import numpy.linalg as la import pytest import meshmode.mesh.generation as mgen -from arraycontext import flatten, pytest_generate_tests_for_array_contexts, unflatten +from arraycontext import ( + ArrayContextFactory, + flatten, + pytest_generate_tests_for_array_contexts, + unflatten, +) from meshmode import _acf # noqa: F401 from meshmode.array_context import PytestPyOpenCLArrayContextFactory from meshmode.discretization import Discretization @@ -40,11 +46,13 @@ ) from pytential import bind, sym +from pytential.utils import pytest_teardown_function as teardown_function # noqa: F401 -logger = logging.getLogger(__name__) +if TYPE_CHECKING: + from pytential.symbolic.dof_desc import DiscretizationStage, DOFGranularity -from pytential.utils import pytest_teardown_function as teardown_function # noqa: F401 +logger = logging.getLogger(__name__) pytest_generate_tests = pytest_generate_tests_for_array_contexts([ @@ -114,7 +122,7 @@ def get_torus_with_ref_mean_curvature(actx, h): ("torus", [8, 10, 12, 16], get_torus_with_ref_mean_curvature), ]) -def test_mean_curvature(actx_factory, discr_name, resolutions, +def test_mean_curvature(actx_factory: ArrayContextFactory, discr_name, resolutions, discr_and_ref_mean_curvature_getter, visualize=False): actx = actx_factory() @@ -141,7 +149,7 @@ def test_mean_curvature(actx_factory, discr_name, resolutions, # {{{ test_tangential_onb -def test_tangential_onb(actx_factory): +def test_tangential_onb(actx_factory: ArrayContextFactory): actx = actx_factory() from meshmode.mesh.generation import generate_torus @@ -233,7 +241,11 @@ def test_layer_potential_construction(lpot_class, ambient_dim=2): ("stage2_center", sym.QBX_SOURCE_STAGE2, sym.GRANULARITY_CENTER), ("quad", sym.QBX_SOURCE_QUAD_STAGE2, sym.GRANULARITY_NODE) ]) -def test_interpolation(actx_factory, name, source_discr_stage, target_granularity): +def test_interpolation( + actx_factory: ArrayContextFactory, + name: str, + source_discr_stage: DiscretizationStage, + target_granularity: DOFGranularity): actx = actx_factory() nelements = 32 @@ -307,7 +319,7 @@ def discr_and_nodes(stage): # {{{ test node reductions -def test_node_reduction(actx_factory): +def test_node_reduction(actx_factory: ArrayContextFactory): actx = actx_factory() # {{{ build discretization diff --git a/test/test_tools.py b/test/test_tools.py index e320e3e5b..b1e250a3d 100644 --- a/test/test_tools.py +++ b/test/test_tools.py @@ -30,7 +30,7 @@ import numpy.linalg as la import pytest -from arraycontext import pytest_generate_tests_for_array_contexts +from arraycontext import ArrayContextFactory, pytest_generate_tests_for_array_contexts from meshmode import _acf # noqa: F401 from meshmode.array_context import PytestPyOpenCLArrayContextFactory @@ -74,7 +74,7 @@ def test_gmres(): # {{{ test_interpolatory_error_reporting -def test_interpolatory_error_reporting(actx_factory): +def test_interpolatory_error_reporting(actx_factory: ArrayContextFactory): actx = actx_factory() h = 0.2 @@ -112,7 +112,7 @@ def test_interpolatory_error_reporting(actx_factory): # {{{ test_geometry_collection_caching -def test_geometry_collection_caching(actx_factory): +def test_geometry_collection_caching(actx_factory: ArrayContextFactory): # NOTE: checks that the on-demand caching works properly in # the `GeometryCollection`. This is done by constructing a few separated # spheres, putting a few `QBXLayerPotentialSource`s on them and requesting @@ -249,7 +249,7 @@ def _add_geometry_to_collection(actx, places, geometry, dofdesc=None): assert _check_cache_state(new_places, extra_cse_prefixes, ()) -def test_add_geometry_to_collection(actx_factory): +def test_add_geometry_to_collection(actx_factory: ArrayContextFactory): """ Test case of `add_geometry_to_collection`. Verifies that * cse_scope.DISCRETIZATION caches stick around From 8cc4b187874802a4447094b2af5c61d9a901e476 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Wed, 5 Nov 2025 12:11:41 -0600 Subject: [PATCH 13/15] Rework/fix recursion scheme in LocationTagger --- pytential/linalg/direct_solver_symbolic.py | 31 +++++++++++++--------- pytential/symbolic/execution.py | 7 ++++- pytential/symbolic/mappers.py | 31 +++++++++++++++------- test/test_symbolic.py | 10 +++++-- 4 files changed, 55 insertions(+), 24 deletions(-) diff --git a/pytential/linalg/direct_solver_symbolic.py b/pytential/linalg/direct_solver_symbolic.py index c67eddf43..290f4048c 100644 --- a/pytential/linalg/direct_solver_symbolic.py +++ b/pytential/linalg/direct_solver_symbolic.py @@ -34,7 +34,7 @@ if TYPE_CHECKING: - from collections.abc import Iterable + from collections.abc import Callable, Iterable from pymbolic.primitives import Product, Sum from pymbolic.typing import ArithmeticExpression, Scalar @@ -83,7 +83,9 @@ def _prepare_expr(expr: ArithmeticExpression) -> ArithmeticExpression: # ensure all IntGs remove all the kernel derivatives expr = KernelTransformationRemover()(expr) # ensure all IntGs have their source and targets set - expr = DOFDescriptorReplacer(auto_where[0], auto_where[1])(expr) + expr = DOFDescriptorReplacer( + default_source=auto_where[0], + default_target=auto_where[1]).rec_arith(expr) return expr @@ -224,7 +226,11 @@ def _default_dofdesc(self, dofdesc: DOFDescriptorLike) -> DOFDescriptor: return self.default_target @override - def map_int_g(self, expr: IntG) -> IntG: + def map_int_g(self, + expr: IntG, + rec: + Callable[[ArithmeticExpression], ArithmeticExpression] + | None = None): return type(expr)( expr.target_kernel, expr.source_kernels, densities=tuple(self.rec_arith(d) for d in expr.densities), @@ -251,15 +257,16 @@ class DOFDescriptorReplacer(_LocationReplacer): rec: _LocationReplacer - def __init__(self, source: DOFDescriptorLike, target: DOFDescriptorLike) -> None: - """ - :param source: a descriptor for all expressions to be evaluated on - the source geometry. - :param target: a descriptor for all expressions to be evaluate on - the target geometry. - """ - super().__init__(target, default_source=source) - self.rec = _LocationReplacer(source, default_source=source) + @override + def map_int_g(self, + expr: IntG, + rec: + Callable[[ArithmeticExpression], ArithmeticExpression] + | None = None): + ltag = _LocationReplacer( + default_source=self.default_source, + default_target=self.default_source) + return super().map_int_g(expr, rec=ltag.rec_arith) # }}} diff --git a/pytential/symbolic/execution.py b/pytential/symbolic/execution.py index 9b260ae7e..a4ec057a8 100644 --- a/pytential/symbolic/execution.py +++ b/pytential/symbolic/execution.py @@ -664,7 +664,12 @@ def _prepare_expr(places: GeometryCollection, # type that I was too impatient to figure out in detail. expr = componentwise(flatten, expr) # pyright: ignore[reportAssignmentType] auto_source, auto_target = _prepare_auto_where(auto_where, places=places) - expr = ToTargetTagger(auto_source, auto_target)(expr) + expr = componentwise( # pyright: ignore[reportAssignmentType] + ToTargetTagger( + default_source=auto_source, + default_target=auto_target + ).rec_arith, + expr) expr = DerivativeBinder()(expr) for name, place in places.places.items(): diff --git a/pytential/symbolic/mappers.py b/pytential/symbolic/mappers.py index 77e6d963d..5db13b3ac 100644 --- a/pytential/symbolic/mappers.py +++ b/pytential/symbolic/mappers.py @@ -398,8 +398,9 @@ class LocationTagger(CSECachingMapperMixin[Expression, []], """Used internally by :class:`ToTargetTagger`.""" def __init__(self, + *, # These were flipped in some places, so let's make them kw-only. + default_source: DOFDescriptorLike, default_target: DOFDescriptorLike, - default_source: DOFDescriptorLike ): self.default_source: DOFDescriptor = pp.as_dofdesc(default_source) self.default_target: DOFDescriptor = pp.as_dofdesc(default_target) @@ -457,7 +458,14 @@ def map_elementwise_sum(self, map_elementwise_max = map_elementwise_sum @override - def map_int_g(self, expr: pp.IntG): + def map_int_g(self, + expr: pp.IntG, + rec: + Callable[[ArithmeticExpression], ArithmeticExpression] + | None = None): + if rec is None: + rec = self.rec_arith + source = expr.source if source.geometry is None: source = source.copy(geometry=self.default_source) @@ -469,10 +477,10 @@ def map_int_g(self, expr: pp.IntG): return type(expr)( expr.target_kernel, expr.source_kernels, - tuple(self.rec_arith(d) for d in expr.densities), + tuple(rec(d) for d in expr.densities), expr.qbx_forced_limit, source, target, kernel_arguments={ - name: componentwise(self.rec_arith, arg_expr) + name: componentwise(rec, arg_expr) for name, arg_expr in expr.kernel_arguments.items() }) @@ -540,11 +548,16 @@ class ToTargetTagger(LocationTagger): it is marked as operating on a source. """ - def __init__(self, default_source, default_target): - LocationTagger.__init__(self, default_target, - default_source=default_source) - self.rec = LocationTagger(default_source, - default_source=default_source) + @override + def map_int_g(self, + expr: pp.IntG, + rec: + Callable[[ArithmeticExpression], ArithmeticExpression] + | None = None): + ltag = LocationTagger( + default_source=self.default_source, + default_target=self.default_source) + return super().map_int_g(expr, rec=ltag.rec_arith) # }}} diff --git a/test/test_symbolic.py b/test/test_symbolic.py index 38824a90b..7cc5332c3 100644 --- a/test/test_symbolic.py +++ b/test/test_symbolic.py @@ -557,11 +557,17 @@ def test_mapper_dof_descriptor_replacer(op_name, k): from pytential.symbolic.mappers import ToTargetTagger source_dd = sym.as_dofdesc(sym.DEFAULT_SOURCE) target_dd = sym.as_dofdesc(sym.DEFAULT_TARGET) - tagged_expr = ToTargetTagger(source_dd, target_dd)(expr) + tagged_expr = ToTargetTagger( + default_source=source_dd, + default_target=target_dd + )(expr) source_new_dd = sym.as_dofdesc("source") target_new_dd = sym.as_dofdesc("target") - replaced_expr = DOFDescriptorReplacer(source_new_dd, target_new_dd)(tagged_expr) + replaced_expr = DOFDescriptorReplacer( + default_source=source_new_dd, + default_target=target_new_dd + )(tagged_expr) from testlib import DOFDescriptorCollector collector = DOFDescriptorCollector() From f770d3dea68736b767fdaceb68f9dbb1d4d46efb Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Wed, 5 Nov 2025 16:37:29 -0600 Subject: [PATCH 14/15] Make IntG a bit more immutable (still has object arrays inside, so...) --- pytential/symbolic/mappers.py | 7 ++++--- pytential/symbolic/primitives.py | 9 +++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/pytential/symbolic/mappers.py b/pytential/symbolic/mappers.py index 5db13b3ac..1be6f5f2b 100644 --- a/pytential/symbolic/mappers.py +++ b/pytential/symbolic/mappers.py @@ -28,6 +28,7 @@ from functools import reduce from typing import TYPE_CHECKING, cast +from constantdict import constantdict from typing_extensions import Self, override import pymbolic.primitives as p @@ -80,11 +81,11 @@ def rec_int_g_arguments(mapper: IdentityMapper | EvaluationRewriter, expr: pp.IntG): - densities = [mapper.rec_arith(d) for d in expr.densities] - kernel_arguments = { + densities = tuple(mapper.rec_arith(d) for d in expr.densities) + kernel_arguments = constantdict({ name: componentwise(mapper.rec_arith, arg) for name, arg in expr.kernel_arguments.items() - } + }) changed = not ( all(d is orig for d, orig in zip(densities, expr.densities, strict=True)) diff --git a/pytential/symbolic/primitives.py b/pytential/symbolic/primitives.py index 180e9ae1e..229ae939f 100644 --- a/pytential/symbolic/primitives.py +++ b/pytential/symbolic/primitives.py @@ -23,6 +23,7 @@ THE SOFTWARE. """ +from collections.abc import Mapping from dataclasses import field from functools import partial from typing import ( @@ -39,6 +40,7 @@ from warnings import warn import numpy as np +from constantdict import constantdict from typing_extensions import override from pymbolic import Expression, ExpressionNode as ExpressionNodeBase, Variable @@ -473,7 +475,7 @@ def make_stringifier( # NOTE: this will likely live in pymbolic at some point, but for now we take it! ArithmeticExpressionT = TypeVar("ArithmeticExpressionT", bound=ArithmeticExpression) -KernelArgumentMapping = dict[str, Operand] +KernelArgumentMapping = Mapping[str, Operand] KernelArgumentLike = ( dict[str, Operand] | tuple[tuple[str, Operand], ...]) @@ -1981,7 +1983,6 @@ def __post_init__(self) -> None: warn(f"'densities' is not tuple ({type(self.densities)}). " "Passing a different type is deprecated and will stop working in " "2025.", DeprecationWarning, stacklevel=2) - object.__setattr__(self, "densities", tuple(self.densities)) if not isinstance(self.source, DOFDescriptor): @@ -2000,13 +2001,13 @@ def __post_init__(self) -> None: object.__setattr__(self, "target", as_dofdesc(self.target)) - if not isinstance(self.kernel_arguments, dict): + if not isinstance(self.kernel_arguments, constantdict): warn(f"'kernel_arguments' is not a dict ({type(self.kernel_arguments)}). " "Passing a different type is deprecated and will stop being " "supported in 2025.", DeprecationWarning, stacklevel=2) kernel_arguments = self.kernel_arguments if self.kernel_arguments else {} - object.__setattr__(self, "kernel_arguments", dict(kernel_arguments)) + object.__setattr__(self, "kernel_arguments", constantdict(kernel_arguments)) from pytools import single_valued From b75b88f417a0100b3736288c2a7dd8ad6078eb15 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Tue, 4 Nov 2025 15:08:13 -0600 Subject: [PATCH 15/15] Update baseline Update baseline --- .basedpyright/baseline.json | 8896 ++++++----------------------------- 1 file changed, 1328 insertions(+), 7568 deletions(-) diff --git a/.basedpyright/baseline.json b/.basedpyright/baseline.json index 017657ca3..155d39e04 100644 --- a/.basedpyright/baseline.json +++ b/.basedpyright/baseline.json @@ -2185,110 +2185,6 @@ } ], "./pytential/__init__.py": [ - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 17, - "endColumn": 22, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 17, - "endColumn": 22, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 16, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 33, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 16, - "endColumn": 33, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 35, - "endColumn": 44, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 35, - "endColumn": 44, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 13, - "endColumn": 18, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 13, - "endColumn": 18, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 20, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 20, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 24, - "endColumn": 29, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 41, - "endColumn": 42, - "lineCount": 1 - } - }, { "code": "reportUnknownParameterType", "range": { @@ -2369,6 +2265,14 @@ "lineCount": 1 } }, + { + "code": "reportUnknownVariableType", + "range": { + "startColumn": 8, + "endColumn": 16, + "lineCount": 1 + } + }, { "code": "reportUnknownVariableType", "range": { @@ -2376,6 +2280,14 @@ "endColumn": 62, "lineCount": 1 } + }, + { + "code": "reportUnknownVariableType", + "range": { + "startColumn": 19, + "endColumn": 27, + "lineCount": 1 + } } ], "./pytential/collection.py": [ @@ -2437,14 +2349,6 @@ "lineCount": 1 } }, - { - "code": "reportAssignmentType", - "range": { - "startColumn": 15, - "endColumn": 72, - "lineCount": 1 - } - }, { "code": "reportArgumentType", "range": { @@ -2492,46 +2396,6 @@ "endColumn": 49, "lineCount": 1 } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 26, - "endColumn": 42, - "lineCount": 1 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 26, - "endColumn": 58, - "lineCount": 1 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 33, - "endColumn": 21, - "lineCount": 4 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 26, - "endColumn": 42, - "lineCount": 1 - } - }, - { - "code": "reportIncompatibleMethodOverride", - "range": { - "startColumn": 13, - "endColumn": 24, - "lineCount": 1 - } } ], "./pytential/linalg/gmres.py": [ @@ -3969,22 +3833,6 @@ "lineCount": 1 } }, - { - "code": "reportCallIssue", - "range": { - "startColumn": 44, - "endColumn": 19, - "lineCount": 4 - } - }, - { - "code": "reportCallIssue", - "range": { - "startColumn": 44, - "endColumn": 19, - "lineCount": 4 - } - }, { "code": "reportAny", "range": { @@ -6955,22 +6803,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 12, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportCallIssue", - "range": { - "startColumn": 22, - "endColumn": 27, - "lineCount": 4 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -7003,14 +6835,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 39, - "endColumn": 46, - "lineCount": 1 - } - }, { "code": "reportArgumentType", "range": { @@ -19637,14 +19461,6 @@ "lineCount": 1 } }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 36, - "endColumn": 51, - "lineCount": 3 - } - }, { "code": "reportAny", "range": { @@ -19661,14 +19477,6 @@ "lineCount": 1 } }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 35, - "endColumn": 42, - "lineCount": 1 - } - }, { "code": "reportAny", "range": { @@ -23410,18 +23218,26 @@ } }, { - "code": "reportArgumentType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 12, - "endColumn": 37, - "lineCount": 6 + "startColumn": 16, + "endColumn": 36, + "lineCount": 1 + } + }, + { + "code": "reportUnknownMemberType", + "range": { + "startColumn": 40, + "endColumn": 72, + "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 16, - "endColumn": 36, + "startColumn": 40, + "endColumn": 72, "lineCount": 1 } }, @@ -28222,55 +28038,39 @@ { "code": "reportUnknownParameterType", "range": { - "startColumn": 27, - "endColumn": 33, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 27, - "endColumn": 33, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 35, - "endColumn": 42, + "startColumn": 16, + "endColumn": 26, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 35, - "endColumn": 42, + "startColumn": 16, + "endColumn": 26, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 12, - "endColumn": 16, + "startColumn": 16, + "endColumn": 29, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 12, - "endColumn": 16, + "startColumn": 16, + "endColumn": 29, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 18, + "startColumn": 16, "endColumn": 28, "lineCount": 1 } @@ -28278,7 +28078,7 @@ { "code": "reportMissingParameterType", "range": { - "startColumn": 18, + "startColumn": 16, "endColumn": 28, "lineCount": 1 } @@ -28286,128 +28086,32 @@ { "code": "reportUnknownParameterType", "range": { - "startColumn": 30, - "endColumn": 43, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 30, - "endColumn": 43, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 45, - "endColumn": 57, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 45, - "endColumn": 57, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 59, - "endColumn": 71, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 59, - "endColumn": 71, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 12, - "endColumn": 40, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 12, - "endColumn": 40, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 12, - "endColumn": 17, + "startColumn": 16, + "endColumn": 28, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 12, - "endColumn": 17, + "startColumn": 16, + "endColumn": 28, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 19, - "endColumn": 27, + "startColumn": 16, + "endColumn": 44, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 19, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 22, - "endColumn": 40, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 35, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 35, - "endColumn": 47, + "startColumn": 16, + "endColumn": 44, "lineCount": 1 } }, @@ -28435,30 +28139,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 34, - "endColumn": 51, - "lineCount": 1 - } - }, { "code": "reportUnknownMemberType", "range": { @@ -28475,14 +28155,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 38, - "lineCount": 1 - } - }, { "code": "reportUnknownMemberType", "range": { @@ -28515,38 +28187,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 20, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 33, - "endColumn": 55, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 33, - "endColumn": 83, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 56, - "endColumn": 82, - "lineCount": 1 - } - }, { "code": "reportUnknownVariableType", "range": { @@ -28572,37 +28212,13 @@ } }, { - "code": "reportUnknownMemberType", + "code": "reportGeneralTypeIssues", "range": { "startColumn": 61, "endColumn": 73, "lineCount": 1 } }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 41, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 36, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 28, - "endColumn": 35, - "lineCount": 1 - } - }, { "code": "reportAny", "range": { @@ -28675,54 +28291,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 40, - "endColumn": 45, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 40, - "endColumn": 45, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 46, - "endColumn": 62, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 32, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 32, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 50, - "endColumn": 55, - "lineCount": 1 - } - }, { "code": "reportUnknownMemberType", "range": { @@ -28779,14 +28347,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 16, - "endColumn": 20, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -28795,102 +28355,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 45, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 16, - "endColumn": 45, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 44, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 16, - "endColumn": 44, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 42, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 16, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 42, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 16, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 16, - "endColumn": 38, - "lineCount": 1 - } - }, { "code": "reportAny", "range": { @@ -28940,7 +28404,7 @@ } }, { - "code": "reportUnknownMemberType", + "code": "reportGeneralTypeIssues", "range": { "startColumn": 17, "endColumn": 29, @@ -28955,22 +28419,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 24, - "endColumn": 40, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 24, - "endColumn": 40, - "lineCount": 1 - } - }, { "code": "reportUnknownMemberType", "range": { @@ -30663,14 +30111,6 @@ "lineCount": 1 } }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 27, - "endColumn": 30, - "lineCount": 2 - } - }, { "code": "reportUnknownMemberType", "range": { @@ -30735,14 +30175,6 @@ "lineCount": 1 } }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 22, - "endColumn": 57, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -32128,72 +31560,48 @@ { "code": "reportUnreachable", "range": { - "startColumn": 12, - "endColumn": 61, + "startColumn": 8, + "endColumn": 57, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 24, - "endColumn": 36, + "startColumn": 20, + "endColumn": 32, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 24, - "endColumn": 36, + "startColumn": 20, + "endColumn": 32, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 24, - "endColumn": 36, + "startColumn": 20, + "endColumn": 32, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 24, - "endColumn": 42, + "startColumn": 20, + "endColumn": 38, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 51, - "endColumn": 69, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 39, - "endColumn": 71, - "lineCount": 1 - } - }, - { - "code": "reportReturnType", - "range": { - "startColumn": 15, - "endColumn": 27, - "lineCount": 3 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 16, - "endColumn": 43, + "startColumn": 47, + "endColumn": 65, "lineCount": 1 } }, @@ -32457,38 +31865,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 19, - "lineCount": 1 - } - }, { "code": "reportUnknownMemberType", "range": { @@ -32497,14 +31873,6 @@ "lineCount": 1 } }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 26, - "lineCount": 1 - } - }, { "code": "reportUnreachable", "range": { @@ -32513,14 +31881,6 @@ "lineCount": 1 } }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 18, - "lineCount": 1 - } - }, { "code": "reportUnknownParameterType", "range": { @@ -32649,6 +32009,14 @@ "lineCount": 1 } }, + { + "code": "reportUnknownParameterType", + "range": { + "startColumn": 22, + "endColumn": 26, + "lineCount": 1 + } + }, { "code": "reportMissingParameterType", "range": { @@ -32673,6 +32041,14 @@ "lineCount": 4 } }, + { + "code": "reportUnknownArgumentType", + "range": { + "startColumn": 16, + "endColumn": 20, + "lineCount": 1 + } + }, { "code": "reportCallIssue", "range": { @@ -33002,162 +32378,146 @@ } }, { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 23, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", + "code": "reportArgumentType", "range": { - "startColumn": 23, - "endColumn": 27, + "startColumn": 57, + "endColumn": 79, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportAny", "range": { - "startColumn": 8, - "endColumn": 13, + "startColumn": 12, + "endColumn": 20, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 16, - "endColumn": 27, + "startColumn": 19, + "endColumn": 36, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportArgumentType", "range": { - "startColumn": 16, - "endColumn": 46, + "startColumn": 23, + "endColumn": 31, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportArgumentType", "range": { - "startColumn": 16, - "endColumn": 28, + "startColumn": 33, + "endColumn": 36, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportImplicitOverride", "range": { - "startColumn": 16, - "endColumn": 37, + "startColumn": 8, + "endColumn": 32, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { "startColumn": 39, - "endColumn": 51, + "endColumn": 43, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportMissingParameterType", "range": { "startColumn": 39, - "endColumn": 63, + "endColumn": 43, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 15, - "endColumn": 54, - "lineCount": 2 + "startColumn": 11, + "endColumn": 21, + "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 12, - "endColumn": 53, + "startColumn": 13, + "endColumn": 23, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 36, - "endColumn": 47, + "startColumn": 28, + "endColumn": 38, "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 36, - "endColumn": 52, + "startColumn": 28, + "endColumn": 38, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownVariableType", "range": { "startColumn": 8, - "endColumn": 37, + "endColumn": 11, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 44, - "endColumn": 48, + "startColumn": 15, + "endColumn": 26, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 44, - "endColumn": 48, + "startColumn": 28, + "endColumn": 38, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 8, - "endColumn": 13, + "startColumn": 16, + "endColumn": 26, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 16, - "endColumn": 27, + "startColumn": 40, + "endColumn": 50, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 16, - "endColumn": 46, + "startColumn": 40, + "endColumn": 50, "lineCount": 1 } }, @@ -33165,310 +32525,310 @@ "code": "reportUnknownMemberType", "range": { "startColumn": 16, - "endColumn": 28, + "endColumn": 26, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 16, - "endColumn": 37, + "startColumn": 35, + "endColumn": 39, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportMissingParameterType", "range": { - "startColumn": 39, - "endColumn": 51, + "startColumn": 35, + "endColumn": 39, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 39, - "endColumn": 63, + "startColumn": 27, + "endColumn": 39, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 8, - "endColumn": 9, + "startColumn": 27, + "endColumn": 39, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 12, - "endColumn": 23, + "startColumn": 8, + "endColumn": 19, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 26, - "endColumn": 43, + "startColumn": 54, + "endColumn": 58, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportMissingParameterType", "range": { - "startColumn": 15, - "endColumn": 41, + "startColumn": 54, + "endColumn": 58, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 39, - "endColumn": 40, + "startColumn": 60, + "endColumn": 70, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportMissingParameterType", "range": { - "startColumn": 43, - "endColumn": 47, + "startColumn": 60, + "endColumn": 70, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 43, - "endColumn": 47, + "startColumn": 72, + "endColumn": 80, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportMissingParameterType", "range": { - "startColumn": 8, - "endColumn": 16, + "startColumn": 72, + "endColumn": 80, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 27, - "endColumn": 72, - "lineCount": 1 + "startColumn": 15, + "endColumn": 75, + "lineCount": 2 } }, { "code": "reportUnknownVariableType", "range": { - "startColumn": 45, - "endColumn": 49, + "startColumn": 20, + "endColumn": 24, "lineCount": 1 } }, { "code": "reportUnknownVariableType", "range": { - "startColumn": 51, - "endColumn": 55, + "startColumn": 26, + "endColumn": 30, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 59, - "endColumn": 72, + "startColumn": 38, + "endColumn": 48, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 8, - "endColumn": 13, + "startColumn": 38, + "endColumn": 48, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 16, - "endColumn": 27, + "startColumn": 50, + "endColumn": 60, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 16, - "endColumn": 46, + "startColumn": 50, + "endColumn": 60, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 16, - "endColumn": 28, + "startColumn": 8, + "endColumn": 35, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 16, - "endColumn": 37, + "startColumn": 46, + "endColumn": 50, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportMissingParameterType", "range": { - "startColumn": 39, - "endColumn": 51, + "startColumn": 46, + "endColumn": 50, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 39, - "endColumn": 63, + "startColumn": 52, + "endColumn": 62, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportMissingParameterType", "range": { - "startColumn": 40, - "endColumn": 45, + "startColumn": 52, + "endColumn": 62, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 47, - "endColumn": 55, + "startColumn": 64, + "endColumn": 72, "lineCount": 1 } }, { - "code": "reportArgumentType", + "code": "reportMissingParameterType", "range": { - "startColumn": 57, - "endColumn": 79, + "startColumn": 64, + "endColumn": 72, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportAny", "range": { - "startColumn": 66, - "endColumn": 78, + "startColumn": 23, + "endColumn": 61, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportAny", "range": { - "startColumn": 66, - "endColumn": 78, + "startColumn": 23, + "endColumn": 80, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 8, - "endColumn": 20, + "startColumn": 23, + "endColumn": 33, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportMissingParameterType", "range": { - "startColumn": 27, - "endColumn": 31, + "startColumn": 23, + "endColumn": 33, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 27, - "endColumn": 31, + "startColumn": 35, + "endColumn": 39, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportMissingParameterType", "range": { - "startColumn": 8, - "endColumn": 13, + "startColumn": 35, + "endColumn": 39, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 16, - "endColumn": 27, + "startColumn": 41, + "endColumn": 48, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportMissingParameterType", "range": { - "startColumn": 16, - "endColumn": 46, + "startColumn": 41, + "endColumn": 48, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 16, - "endColumn": 28, + "startColumn": 12, + "endColumn": 23, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportMissingParameterType", "range": { - "startColumn": 16, - "endColumn": 37, + "startColumn": 12, + "endColumn": 23, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 39, - "endColumn": 51, + "startColumn": 8, + "endColumn": 37, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 39, - "endColumn": 63, + "startColumn": 44, + "endColumn": 54, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 15, + "startColumn": 56, "endColumn": 60, "lineCount": 1 } @@ -33476,384 +32836,392 @@ { "code": "reportUnknownMemberType", "range": { - "startColumn": 39, - "endColumn": 57, + "startColumn": 8, + "endColumn": 24, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnannotatedClassAttribute", "range": { - "startColumn": 39, - "endColumn": 59, + "startColumn": 13, + "endColumn": 24, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 26, - "endColumn": 30, + "startColumn": 8, + "endColumn": 35, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportImplicitOverride", "range": { - "startColumn": 26, - "endColumn": 30, + "startColumn": 8, + "endColumn": 35, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 8, - "endColumn": 22, + "startColumn": 46, + "endColumn": 50, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportMissingParameterType", "range": { - "startColumn": 25, - "endColumn": 40, + "startColumn": 46, + "endColumn": 50, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 25, - "endColumn": 47, + "startColumn": 52, + "endColumn": 62, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportMissingParameterType", "range": { - "startColumn": 25, - "endColumn": 58, + "startColumn": 52, + "endColumn": 62, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 12, - "endColumn": 20, + "startColumn": 64, + "endColumn": 72, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportMissingParameterType", "range": { - "startColumn": 12, - "endColumn": 20, + "startColumn": 64, + "endColumn": 72, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 20, - "endColumn": 35, + "startColumn": 8, + "endColumn": 14, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 20, - "endColumn": 35, + "startColumn": 17, + "endColumn": 34, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 20, - "endColumn": 31, + "startColumn": 17, + "endColumn": 47, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 20, - "endColumn": 44, + "startColumn": 48, + "endColumn": 59, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 20, - "endColumn": 67, + "startColumn": 48, + "endColumn": 68, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 45, - "endColumn": 57, + "startColumn": 29, + "endColumn": 45, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 45, - "endColumn": 66, + "startColumn": 8, + "endColumn": 14, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 20, - "endColumn": 35, + "startColumn": 16, + "endColumn": 27, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 20, - "endColumn": 41, + "startColumn": 16, + "endColumn": 50, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 20, - "endColumn": 41, + "startColumn": 31, + "endColumn": 47, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 8, - "endColumn": 16, + "startColumn": 12, + "endColumn": 28, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportOptionalSubscript", "range": { - "startColumn": 19, - "endColumn": 36, + "startColumn": 12, + "endColumn": 28, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 37, - "endColumn": 55, + "startColumn": 15, + "endColumn": 21, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 37, - "endColumn": 55, + "startColumn": 23, + "endColumn": 33, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportMissingParameterType", "range": { - "startColumn": 57, - "endColumn": 69, + "startColumn": 23, + "endColumn": 33, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 57, - "endColumn": 69, + "startColumn": 35, + "endColumn": 39, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportMissingParameterType", "range": { - "startColumn": 38, - "endColumn": 46, + "startColumn": 35, + "endColumn": 39, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 24, - "endColumn": 32, + "startColumn": 17, + "endColumn": 45, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportMissingParameterType", "range": { - "startColumn": 34, - "endColumn": 42, + "startColumn": 17, + "endColumn": 45, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 46, - "endColumn": 61, + "startColumn": 47, + "endColumn": 54, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportMissingParameterType", "range": { - "startColumn": 46, - "endColumn": 67, + "startColumn": 47, + "endColumn": 54, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 23, - "endColumn": 31, + "startColumn": 17, + "endColumn": 24, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportMissingParameterType", "range": { - "startColumn": 23, - "endColumn": 31, + "startColumn": 17, + "endColumn": 24, "lineCount": 1 } }, { - "code": "reportArgumentType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 23, - "endColumn": 31, + "startColumn": 17, + "endColumn": 32, "lineCount": 1 } }, { - "code": "reportArgumentType", + "code": "reportMissingParameterType", "range": { - "startColumn": 33, - "endColumn": 36, + "startColumn": 17, + "endColumn": 32, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 8, - "endColumn": 25, + "startColumn": 17, + "endColumn": 30, + "lineCount": 1 + } + }, + { + "code": "reportMissingParameterType", + "range": { + "startColumn": 17, + "endColumn": 30, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 32, - "endColumn": 36, + "startColumn": 37, + "endColumn": 51, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 32, - "endColumn": 36, + "startColumn": 37, + "endColumn": 51, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 27, - "endColumn": 39, + "startColumn": 58, + "endColumn": 73, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportMissingParameterType", "range": { - "startColumn": 27, - "endColumn": 39, + "startColumn": 58, + "endColumn": 73, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 12, - "endColumn": 16, + "startColumn": 8, + "endColumn": 37, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 19, - "endColumn": 30, + "startColumn": 22, + "endColumn": 32, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 19, - "endColumn": 45, + "startColumn": 34, + "endColumn": 38, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnannotatedClassAttribute", "range": { - "startColumn": 46, - "endColumn": 58, + "startColumn": 13, + "endColumn": 41, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnannotatedClassAttribute", "range": { - "startColumn": 60, - "endColumn": 70, + "startColumn": 13, + "endColumn": 25, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnannotatedClassAttribute", "range": { - "startColumn": 19, - "endColumn": 32, + "startColumn": 13, + "endColumn": 21, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnannotatedClassAttribute", "range": { - "startColumn": 8, - "endColumn": 32, + "startColumn": 13, + "endColumn": 20, "lineCount": 1 } }, { - "code": "reportIncompatibleMethodOverride", + "code": "reportUnknownParameterType", "range": { "startColumn": 8, - "endColumn": 32, + "endColumn": 35, "lineCount": 1 } }, @@ -33861,183 +33229,199 @@ "code": "reportImplicitOverride", "range": { "startColumn": 8, - "endColumn": 32, + "endColumn": 35, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 39, - "endColumn": 43, + "startColumn": 46, + "endColumn": 50, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 39, - "endColumn": 43, + "startColumn": 46, + "endColumn": 50, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 11, - "endColumn": 21, + "startColumn": 52, + "endColumn": 62, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportMissingParameterType", "range": { - "startColumn": 12, - "endColumn": 17, + "startColumn": 52, + "endColumn": 62, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 20, - "endColumn": 35, + "startColumn": 64, + "endColumn": 72, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportMissingParameterType", "range": { - "startColumn": 20, - "endColumn": 46, + "startColumn": 64, + "endColumn": 72, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 13, - "endColumn": 23, + "startColumn": 8, + "endColumn": 14, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 12, - "endColumn": 17, + "startColumn": 17, + "endColumn": 34, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 20, - "endColumn": 31, + "startColumn": 17, + "endColumn": 47, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 20, - "endColumn": 42, + "startColumn": 48, + "endColumn": 59, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 28, - "endColumn": 38, + "startColumn": 48, + "endColumn": 68, + "lineCount": 1 + } + }, + { + "code": "reportUnknownVariableType", + "range": { + "startColumn": 8, + "endColumn": 12, "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 28, - "endColumn": 38, + "startColumn": 25, + "endColumn": 59, "lineCount": 1 } }, { "code": "reportUnknownVariableType", "range": { - "startColumn": 8, - "endColumn": 11, + "startColumn": 33, + "endColumn": 36, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 15, - "endColumn": 26, + "startColumn": 40, + "endColumn": 59, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 28, - "endColumn": 38, + "startColumn": 12, + "endColumn": 30, + "lineCount": 1 + } + }, + { + "code": "reportArgumentType", + "range": { + "startColumn": 33, + "endColumn": 72, "lineCount": 1 } }, { "code": "reportUnknownVariableType", "range": { - "startColumn": 12, - "endColumn": 15, + "startColumn": 8, + "endColumn": 14, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 16, - "endColumn": 26, + "startColumn": 17, + "endColumn": 34, "lineCount": 1 } }, { "code": "reportUnknownVariableType", "range": { - "startColumn": 16, - "endColumn": 19, + "startColumn": 36, + "endColumn": 44, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 46, - "endColumn": 49, + "startColumn": 12, + "endColumn": 52, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 40, - "endColumn": 50, + "startColumn": 27, + "endColumn": 44, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 40, - "endColumn": 50, + "startColumn": 8, + "endColumn": 25, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 16, - "endColumn": 26, + "startColumn": 8, + "endColumn": 21, "lineCount": 1 } }, @@ -34045,166 +33429,166 @@ "code": "reportUnknownVariableType", "range": { "startColumn": 15, - "endColumn": 18, + "endColumn": 21, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 35, - "endColumn": 39, + "startColumn": 8, + "endColumn": 24, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 35, - "endColumn": 39, + "startColumn": 15, + "endColumn": 32, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 27, - "endColumn": 39, + "startColumn": 15, + "endColumn": 47, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 27, - "endColumn": 39, + "startColumn": 34, + "endColumn": 47, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 33, - "endColumn": 37, + "startColumn": 22, + "endColumn": 25, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 33, - "endColumn": 37, + "startColumn": 22, + "endColumn": 25, "lineCount": 1 } }, { "code": "reportUnknownVariableType", "range": { - "startColumn": 8, - "endColumn": 13, + "startColumn": 12, + "endColumn": 15, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 16, - "endColumn": 27, + "startColumn": 12, + "endColumn": 17, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 16, - "endColumn": 46, + "startColumn": 39, + "endColumn": 42, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportIndexIssue", "range": { "startColumn": 12, - "endColumn": 24, + "endColumn": 18, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 12, - "endColumn": 33, + "startColumn": 40, + "endColumn": 45, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 35, - "endColumn": 47, + "startColumn": 24, + "endColumn": 27, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportMissingParameterType", "range": { - "startColumn": 35, - "endColumn": 59, + "startColumn": 24, + "endColumn": 27, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 32, - "endColumn": 79, + "startColumn": 12, + "endColumn": 21, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 37, - "endColumn": 54, + "startColumn": 38, + "endColumn": 47, "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 37, - "endColumn": 54, + "startColumn": 30, + "endColumn": 39, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 60, - "endColumn": 63, + "startColumn": 8, + "endColumn": 14, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 67, - "endColumn": 79, + "startColumn": 21, + "endColumn": 22, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportMissingParameterType", "range": { - "startColumn": 8, - "endColumn": 11, + "startColumn": 21, + "endColumn": 22, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 14, + "startColumn": 19, "endColumn": 26, "lineCount": 1 } @@ -34212,80 +33596,80 @@ { "code": "reportUnknownMemberType", "range": { - "startColumn": 14, - "endColumn": 43, + "startColumn": 43, + "endColumn": 50, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 41, - "endColumn": 51, + "startColumn": 43, + "endColumn": 55, "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 65, - "endColumn": 68, + "startColumn": 46, + "endColumn": 47, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 8, - "endColumn": 19, + "startColumn": 61, + "endColumn": 62, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 54, - "endColumn": 58, + "startColumn": 30, + "endColumn": 44, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 54, - "endColumn": 58, + "startColumn": 8, + "endColumn": 14, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportCallIssue", "range": { - "startColumn": 60, - "endColumn": 70, + "startColumn": 17, + "endColumn": 60, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 60, - "endColumn": 70, + "startColumn": 21, + "endColumn": 33, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 72, - "endColumn": 80, + "startColumn": 34, + "endColumn": 40, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 72, - "endColumn": 80, + "startColumn": 49, + "endColumn": 55, "lineCount": 1 } }, @@ -34293,311 +33677,335 @@ "code": "reportUnknownVariableType", "range": { "startColumn": 15, - "endColumn": 75, - "lineCount": 2 + "endColumn": 21, + "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 20, - "endColumn": 24, + "startColumn": 19, + "endColumn": 26, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 26, - "endColumn": 30, + "startColumn": 31, + "endColumn": 32, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownVariableType", "range": { "startColumn": 38, - "endColumn": 48, + "endColumn": 39, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 38, - "endColumn": 48, + "startColumn": 8, + "endColumn": 19, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 50, - "endColumn": 60, + "startColumn": 21, + "endColumn": 32, "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 50, - "endColumn": 60, + "startColumn": 27, + "endColumn": 38, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 8, + "startColumn": 56, + "endColumn": 67, + "lineCount": 1 + } + }, + { + "code": "reportAssignmentType", + "range": { + "startColumn": 11, "endColumn": 35, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportArgumentType", "range": { - "startColumn": 46, - "endColumn": 50, + "startColumn": 30, + "endColumn": 34, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportAssignmentType", "range": { - "startColumn": 46, + "startColumn": 11, "endColumn": 50, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportArgumentType", "range": { - "startColumn": 52, - "endColumn": 62, + "startColumn": 45, + "endColumn": 49, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 52, - "endColumn": 62, + "startColumn": 4, + "endColumn": 22, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 64, - "endColumn": 72, + "startColumn": 40, + "endColumn": 51, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 64, - "endColumn": 72, + "startColumn": 40, + "endColumn": 51, "lineCount": 1 } }, { - "code": "reportImplicitOverride", + "code": "reportUnknownMemberType", "range": { - "startColumn": 8, - "endColumn": 16, + "startColumn": 15, + "endColumn": 38, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 23, - "endColumn": 27, + "startColumn": 15, + "endColumn": 38, "lineCount": 1 } }, { - "code": "reportAny", + "code": "reportUnknownMemberType", "range": { - "startColumn": 23, - "endColumn": 61, + "startColumn": 15, + "endColumn": 54, "lineCount": 1 } }, { - "code": "reportAny", + "code": "reportUnknownVariableType", "range": { - "startColumn": 23, - "endColumn": 80, + "startColumn": 15, + "endColumn": 54, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 23, - "endColumn": 33, + "startColumn": 37, + "endColumn": 48, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 23, - "endColumn": 33, + "startColumn": 37, + "endColumn": 48, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 35, - "endColumn": 39, + "startColumn": 50, + "endColumn": 66, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 35, - "endColumn": 39, + "startColumn": 50, + "endColumn": 66, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 41, - "endColumn": 48, + "startColumn": 23, + "endColumn": 42, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 41, - "endColumn": 48, + "startColumn": 4, + "endColumn": 11, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 12, - "endColumn": 23, + "startColumn": 14, + "endColumn": 33, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 12, - "endColumn": 23, + "startColumn": 8, + "endColumn": 19, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 8, - "endColumn": 37, + "startColumn": 41, + "endColumn": 52, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 44, - "endColumn": 54, + "startColumn": 20, + "endColumn": 45, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 56, - "endColumn": 60, + "startColumn": 26, + "endColumn": 48, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 8, - "endColumn": 24, + "startColumn": 12, + "endColumn": 18, "lineCount": 1 } }, { - "code": "reportUnannotatedClassAttribute", + "code": "reportUnknownVariableType", "range": { - "startColumn": 13, - "endColumn": 24, + "startColumn": 20, + "endColumn": 25, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 8, - "endColumn": 35, + "startColumn": 31, + "endColumn": 42, "lineCount": 1 } }, { - "code": "reportImplicitOverride", + "code": "reportUnreachable", + "range": { + "startColumn": 12, + "endColumn": 69, + "lineCount": 3 + } + }, + { + "code": "reportUnknownMemberType", "range": { "startColumn": 8, - "endColumn": 35, + "endColumn": 29, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 46, - "endColumn": 50, + "startColumn": 32, + "endColumn": 35, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 46, - "endColumn": 50, + "startColumn": 32, + "endColumn": 35, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 52, - "endColumn": 62, + "startColumn": 16, + "endColumn": 37, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 52, - "endColumn": 62, + "startColumn": 16, + "endColumn": 19, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportAny", "range": { - "startColumn": 64, - "endColumn": 72, + "startColumn": 8, + "endColumn": 11, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportAny", "range": { - "startColumn": 64, - "endColumn": 72, + "startColumn": 32, + "endColumn": 35, + "lineCount": 1 + } + }, + { + "code": "reportUnknownArgumentType", + "range": { + "startColumn": 32, + "endColumn": 46, "lineCount": 1 } }, @@ -34605,95 +34013,103 @@ "code": "reportUnknownVariableType", "range": { "startColumn": 8, - "endColumn": 14, + "endColumn": 21, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 17, - "endColumn": 34, + "startColumn": 47, + "endColumn": 60, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 17, - "endColumn": 47, + "startColumn": 15, + "endColumn": 62, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportArgumentType", "range": { - "startColumn": 48, - "endColumn": 59, + "startColumn": 45, + "endColumn": 61, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 48, - "endColumn": 68, + "startColumn": 8, + "endColumn": 22, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { "startColumn": 29, - "endColumn": 45, + "endColumn": 47, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportMissingParameterType", "range": { - "startColumn": 8, - "endColumn": 14, + "startColumn": 29, + "endColumn": 47, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 16, - "endColumn": 27, + "startColumn": 51, + "endColumn": 57, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportMissingParameterType", "range": { - "startColumn": 16, - "endColumn": 50, + "startColumn": 51, + "endColumn": 57, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 31, - "endColumn": 47, + "startColumn": 65, + "endColumn": 71, + "lineCount": 1 + } + }, + { + "code": "reportUnknownArgumentType", + "range": { + "startColumn": 33, + "endColumn": 51, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 12, - "endColumn": 28, + "startColumn": 16, + "endColumn": 25, "lineCount": 1 } }, { - "code": "reportOptionalSubscript", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 12, - "endColumn": 28, + "startColumn": 16, + "endColumn": 25, "lineCount": 1 } }, @@ -34701,6721 +34117,1225 @@ "code": "reportUnknownVariableType", "range": { "startColumn": 15, - "endColumn": 21, + "endColumn": 51, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 23, - "endColumn": 33, + "startColumn": 8, + "endColumn": 20, + "lineCount": 1 + } + }, + { + "code": "reportUnknownParameterType", + "range": { + "startColumn": 27, + "endColumn": 45, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 23, - "endColumn": 33, + "startColumn": 27, + "endColumn": 45, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 35, - "endColumn": 39, + "startColumn": 49, + "endColumn": 55, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 35, - "endColumn": 39, + "startColumn": 49, + "endColumn": 55, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 17, - "endColumn": 45, + "startColumn": 65, + "endColumn": 71, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 17, - "endColumn": 45, + "startColumn": 33, + "endColumn": 51, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 47, - "endColumn": 54, + "startColumn": 16, + "endColumn": 25, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 47, - "endColumn": 54, + "startColumn": 16, + "endColumn": 25, + "lineCount": 1 + } + }, + { + "code": "reportUnknownVariableType", + "range": { + "startColumn": 15, + "endColumn": 51, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 17, - "endColumn": 24, + "startColumn": 46, + "endColumn": 54, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 17, - "endColumn": 24, + "startColumn": 46, + "endColumn": 54, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 17, - "endColumn": 32, + "startColumn": 56, + "endColumn": 61, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 17, - "endColumn": 32, + "startColumn": 56, + "endColumn": 61, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 17, - "endColumn": 30, + "startColumn": 12, + "endColumn": 19, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 17, - "endColumn": 30, + "startColumn": 12, + "endColumn": 19, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 37, - "endColumn": 51, + "startColumn": 28, + "endColumn": 38, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 37, - "endColumn": 51, + "startColumn": 28, + "endColumn": 38, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 58, - "endColumn": 73, + "startColumn": 22, + "endColumn": 31, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 58, - "endColumn": 73, + "startColumn": 22, + "endColumn": 38, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 8, - "endColumn": 37, + "startColumn": 27, + "endColumn": 36, "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 22, - "endColumn": 32, + "startColumn": 29, + "endColumn": 36, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnnecessaryComparison", "range": { - "startColumn": 34, - "endColumn": 38, + "startColumn": 15, + "endColumn": 31, "lineCount": 1 } }, { - "code": "reportUnannotatedClassAttribute", + "code": "reportUnknownMemberType", "range": { - "startColumn": 13, - "endColumn": 41, + "startColumn": 12, + "endColumn": 25, "lineCount": 1 } }, { - "code": "reportUnannotatedClassAttribute", + "code": "reportUnknownMemberType", "range": { - "startColumn": 13, - "endColumn": 25, + "startColumn": 12, + "endColumn": 34, "lineCount": 1 } }, { - "code": "reportUnannotatedClassAttribute", + "code": "reportArgumentType", "range": { - "startColumn": 13, - "endColumn": 21, + "startColumn": 24, + "endColumn": 28, "lineCount": 1 } }, { - "code": "reportUnannotatedClassAttribute", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 13, - "endColumn": 20, + "startColumn": 16, + "endColumn": 24, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 8, - "endColumn": 35, + "startColumn": 26, + "endColumn": 31, "lineCount": 1 } }, { - "code": "reportImplicitOverride", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 8, - "endColumn": 35, + "startColumn": 45, + "endColumn": 51, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 46, - "endColumn": 50, + "startColumn": 53, + "endColumn": 68, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 46, - "endColumn": 50, + "startColumn": 70, + "endColumn": 80, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 52, - "endColumn": 62, + "startColumn": 19, + "endColumn": 26, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 52, - "endColumn": 62, + "startColumn": 19, + "endColumn": 26, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 64, - "endColumn": 72, + "startColumn": 33, + "endColumn": 44, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 64, - "endColumn": 72, + "startColumn": 33, + "endColumn": 44, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 8, - "endColumn": 14, + "startColumn": 16, + "endColumn": 23, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportAny", "range": { - "startColumn": 17, - "endColumn": 34, + "startColumn": 16, + "endColumn": 21, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportAny", "range": { - "startColumn": 17, - "endColumn": 47, + "startColumn": 20, + "endColumn": 25, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportAny", "range": { - "startColumn": 48, - "endColumn": 59, + "startColumn": 47, + "endColumn": 52, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 48, - "endColumn": 68, + "startColumn": 23, + "endColumn": 32, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 8, - "endColumn": 12, + "startColumn": 23, + "endColumn": 32, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportInvalidTypeArguments", "range": { - "startColumn": 25, - "endColumn": 59, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 33, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 40, - "endColumn": 59, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 12, - "endColumn": 30, - "lineCount": 1 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 33, - "endColumn": 72, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 14, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 17, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 36, - "endColumn": 44, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 12, - "endColumn": 52, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 27, - "endColumn": 44, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 25, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 15, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 34, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 12, - "endColumn": 22, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 12, - "endColumn": 22, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 12, - "endColumn": 20, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 12, - "endColumn": 20, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 22, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 22, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 29, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 29, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 41, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 41, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 49, - "endColumn": 64, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 49, - "endColumn": 64, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 66, - "endColumn": 76, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 66, - "endColumn": 76, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 26, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 18, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 18, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 13, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 49, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 33, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 19, - "endColumn": 30, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 19, - "endColumn": 30, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 22, - "endColumn": 25, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 22, - "endColumn": 25, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 12, - "endColumn": 15, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 42, - "endColumn": 57, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 42, - "endColumn": 57, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 59, - "endColumn": 69, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 59, - "endColumn": 69, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 12, - "endColumn": 17, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 20, - "endColumn": 25, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 27, - "endColumn": 30, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 39, - "endColumn": 42, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 44, - "endColumn": 64, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 44, - "endColumn": 64, - "lineCount": 1 - } - }, - { - "code": "reportIndexIssue", - "range": { - "startColumn": 12, - "endColumn": 18, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 40, - "endColumn": 45, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 17, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 24, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 24, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 12, - "endColumn": 17, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 20, - "endColumn": 25, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 27, - "endColumn": 30, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 39, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 39, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 52, - "endColumn": 72, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 52, - "endColumn": 72, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 12, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 38, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 12, - "endColumn": 29, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 19, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 36, - "endColumn": 46, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 19, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 14, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 21, - "endColumn": 22, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 21, - "endColumn": 22, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 19, - "endColumn": 26, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 31, - "endColumn": 46, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 43, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 43, - "endColumn": 55, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 46, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 31, - "endColumn": 46, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 61, - "endColumn": 62, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 12, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 15, - "endColumn": 30, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 15, - "endColumn": 35, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 13, - "endColumn": 26, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 30, - "endColumn": 44, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 14, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 17, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 21, - "endColumn": 33, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 34, - "endColumn": 40, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 49, - "endColumn": 55, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 19, - "endColumn": 26, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 31, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 38, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 21, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 27, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 56, - "endColumn": 67, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 77, - "endColumn": 84, - "lineCount": 1 - } - }, - { - "code": "reportAssignmentType", - "range": { - "startColumn": 11, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportAssignmentType", - "range": { - "startColumn": 11, - "endColumn": 57, - "lineCount": 1 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 52, - "endColumn": 56, - "lineCount": 1 - } - }, - { - "code": "reportAssignmentType", - "range": { - "startColumn": 11, - "endColumn": 35, - "lineCount": 1 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 30, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportAssignmentType", - "range": { - "startColumn": 11, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 45, - "endColumn": 49, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 4, - "endColumn": 22, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 40, - "endColumn": 51, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 40, - "endColumn": 51, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 15, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 15, - "endColumn": 54, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 54, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 37, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 37, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 50, - "endColumn": 66, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 50, - "endColumn": 66, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 23, - "endColumn": 42, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 11, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 14, - "endColumn": 33, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 41, - "endColumn": 52, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 20, - "endColumn": 45, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 26, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 12, - "endColumn": 18, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 20, - "endColumn": 25, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 31, - "endColumn": 42, - "lineCount": 1 - } - }, - { - "code": "reportUnreachable", - "range": { - "startColumn": 12, - "endColumn": 69, - "lineCount": 3 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 29, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 32, - "endColumn": 35, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 32, - "endColumn": 35, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 16, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 8, - "endColumn": 11, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 32, - "endColumn": 35, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 32, - "endColumn": 46, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 47, - "endColumn": 60, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 62, - "lineCount": 1 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 45, - "endColumn": 61, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 22, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 29, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 29, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 51, - "endColumn": 57, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 51, - "endColumn": 57, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 65, - "endColumn": 71, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 33, - "endColumn": 51, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 25, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 16, - "endColumn": 25, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 51, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 20, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 27, - "endColumn": 45, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 27, - "endColumn": 45, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 49, - "endColumn": 55, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 49, - "endColumn": 55, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 65, - "endColumn": 71, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 33, - "endColumn": 51, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 25, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 16, - "endColumn": 25, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 51, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 46, - "endColumn": 54, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 46, - "endColumn": 54, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 56, - "endColumn": 61, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 56, - "endColumn": 61, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 12, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 12, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 28, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 28, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 22, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 22, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 27, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 29, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportUnnecessaryComparison", - "range": { - "startColumn": 15, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 12, - "endColumn": 25, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 12, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 16, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 26, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 19, - "endColumn": 26, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 19, - "endColumn": 26, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 33, - "endColumn": 44, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 33, - "endColumn": 44, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 16, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 16, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 20, - "endColumn": 25, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 47, - "endColumn": 52, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 23, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 23, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportInvalidTypeArguments", - "range": { - "startColumn": 29, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 15, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportReturnType", - "range": { - "startColumn": 15, - "endColumn": 52, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 10, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 10, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 18, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 18, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 42, - "endColumn": 49, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 9, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 12, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 12, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 15, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 29, - "endColumn": 55, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 29, - "endColumn": 65, - "lineCount": 3 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 48, - "endColumn": 56, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 44, - "endColumn": 64, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 32, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 29, - "endColumn": 55, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 29, - "endColumn": 65, - "lineCount": 3 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 48, - "endColumn": 53, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 44, - "endColumn": 64, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 32, - "endColumn": 40, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 64, - "endColumn": 70, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 23, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 27, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 17, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 17, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 23, - "endColumn": 29, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 23, - "endColumn": 29, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 31, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 31, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 38, - "endColumn": 49, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 38, - "endColumn": 49, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 51, - "endColumn": 58, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 51, - "endColumn": 58, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 18, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 8, - "endColumn": 18, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 25, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 25, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 36, - "endColumn": 42, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 55, - "endColumn": 65, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 9, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 34, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 52, - "endColumn": 62, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 13, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 33, - "endColumn": 40, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 27, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 35, - "endColumn": 46, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 57, - "endColumn": 64, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 22, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 25, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 16, - "endColumn": 20, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 25, - "endColumn": 43, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 32, - "endColumn": 77, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 24, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 29, - "endColumn": 41, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 29, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 30, - "endColumn": 41, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 11, - "endColumn": 26, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 11, - "endColumn": 49, - "lineCount": 1 - } - } - ], - "./pytential/symbolic/mappers.py": [ - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 4, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 24, - "endColumn": 30, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 24, - "endColumn": 30, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 32, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 32, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 13, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 26, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 27, - "endColumn": 41, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 20, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 18, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 38, - "endColumn": 42, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 44, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 51, - "endColumn": 72, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 51, - "endColumn": 78, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 30, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 33, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 45, - "endColumn": 54, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 56, - "endColumn": 70, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 56, - "endColumn": 70, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 32, - "endColumn": 35, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 37, - "endColumn": 41, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 45, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 20, - "endColumn": 41, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 20, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 11, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 20, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 27, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 27, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 27, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 27, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 22, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 19, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 15, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 34, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 34, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 27, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 27, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 22, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 19, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 15, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 35, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 43, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 43, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 27, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 27, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 22, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 19, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 15, - "endColumn": 63, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 26, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 50, - "endColumn": 62, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 23, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 23, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 33, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 33, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 22, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 22, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 8, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 26, - "endColumn": 30, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 26, - "endColumn": 30, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 15, - "endColumn": 29, - "lineCount": 9 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 42, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 42, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 53, - "endColumn": 71, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 35, - "endColumn": 44, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 24, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 30, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 43, - "endColumn": 58, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 43, - "endColumn": 64, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 17, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 24, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 24, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 19, - "endColumn": 35, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 73, - "endColumn": 77, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 19, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 84, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 23, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 25, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 32, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 32, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 27, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 27, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 22, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 19, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 15, - "endColumn": 60, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 26, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 40, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 23, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 23, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 19, - "endColumn": 40, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 19, - "endColumn": 52, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 47, - "endColumn": 51, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 49, - "endColumn": 53, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 7, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 7, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 27, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 27, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 24, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 24, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 28, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 22, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 33, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 17, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 55, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 24, - "endColumn": 43, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 27, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 12, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 20, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 27, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 27, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 27, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 27, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 22, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 19, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 15, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 27, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 12, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 12, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 27, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 41, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 48, - "endColumn": 52, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 48, - "endColumn": 52, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 61, - "endColumn": 65, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 31, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 31, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 11, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 35, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 24, - "endColumn": 43, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 16, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 26, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 16, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 26, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 13, - "endColumn": 29, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 12, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 22, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 13, - "endColumn": 29, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 12, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 22, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 22, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 8, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 23, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 23, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 15, - "endColumn": 70, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 34, - "endColumn": 55, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 56, - "endColumn": 68, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 56, - "endColumn": 68, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 8, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 55, - "endColumn": 59, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 55, - "endColumn": 59, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 15, - "endColumn": 52, - "lineCount": 4 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 33, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 29, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 38, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 38, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 8, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 44, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 44, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 15, - "endColumn": 52, - "lineCount": 3 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 33, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 38, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 38, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 8, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 43, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 43, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 15, - "endColumn": 52, - "lineCount": 4 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 29, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 25, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 25, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 38, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 38, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 8, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 27, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 34, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 34, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 15, - "endColumn": 52, - "lineCount": 3 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 25, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 25, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 38, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 38, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 4, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 17, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 16, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 33, - "endColumn": 21, - "lineCount": 4 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 26, - "endColumn": 42, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 42, - "endColumn": 58, - "lineCount": 1 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 42, - "endColumn": 72, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 8, - "endColumn": 26, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 26, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 33, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 33, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 15, - "endColumn": 74, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 26, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 38, - "endColumn": 59, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 60, - "endColumn": 72, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 60, - "endColumn": 72, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 35, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 35, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 26, - "endColumn": 30, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 26, - "endColumn": 30, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 24, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 23, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 23, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 39, - "endColumn": 53, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 39, - "endColumn": 53, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 38, - "endColumn": 52, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 47, - "endColumn": 61, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 42, - "endColumn": 56, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 57, - "endColumn": 71, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 23, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 23, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 44, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 44, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 15, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 18, - "endColumn": 30, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 11, - "endColumn": 30, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 19, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 15, - "endColumn": 59, - "lineCount": 3 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 33, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 43, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 43, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 15, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 18, - "endColumn": 30, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 11, - "endColumn": 30, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 19, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 15, - "endColumn": 59, - "lineCount": 4 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 29, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 25, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 25, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 8, - "endColumn": 15, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 15, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 22, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 22, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportAny", - "range": { - "startColumn": 15, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 36, - "endColumn": 42, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 20, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 27, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 27, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 35, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 35, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 20, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 27, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 27, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 17, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 24, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 20, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 27, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 27, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 15, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 15, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 22, - "endColumn": 26, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 22, - "endColumn": 26, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 29, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 40, - "endColumn": 45, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 49, - "endColumn": 62, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 40, - "endColumn": 44, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 26, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 26, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 19, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 15, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 53, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 23, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportMissingTypeArgument", - "range": { - "startColumn": 8, - "endColumn": 17, - "lineCount": 1 - } - }, - { - "code": "reportUnsafeMultipleInheritance", - "range": { - "startColumn": 6, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportUnsafeMultipleInheritance", - "range": { - "startColumn": 6, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportIncompatibleMethodOverride", - "range": { - "startColumn": 6, - "endColumn": 22, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 51, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 4, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 30, - "endColumn": 42, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 30, - "endColumn": 42, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 44, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 44, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 31, - "endColumn": 43, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 45, - "endColumn": 49, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 23, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 23, - "endColumn": 31, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 33, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 33, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 17, - "lineCount": 1 - } - }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 17, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 24, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 24, - "endColumn": 28, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 11, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 9, - "lineCount": 9 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 12, - "endColumn": 16, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 31, - "endColumn": 45, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 31, - "endColumn": 45, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 31, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 20, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 26, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 38, - "endColumn": 59, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 38, - "endColumn": 65, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 23, - "endColumn": 29, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 23, - "endColumn": 29, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 31, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 31, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 29, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 29, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 48, - "endColumn": 69, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 48, - "endColumn": 69, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 36, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 22, - "endColumn": 46, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 41, - "endColumn": 62, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 41, - "endColumn": 62, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 76, - "lineCount": 1 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 32, - "endColumn": 59, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 22, - "endColumn": 46, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 17, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 12, - "endColumn": 41, - "lineCount": 2 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 29, - "endColumn": 46, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 43, - "endColumn": 64, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 43, - "endColumn": 64, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 39, - "endColumn": 70, - "lineCount": 1 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 60, - "endColumn": 68, - "lineCount": 1 - } - }, - { - "code": "reportUnnecessaryComparison", - "range": { - "startColumn": 11, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportUnreachable", - "range": { - "startColumn": 12, - "endColumn": 75, - "lineCount": 3 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 35, - "endColumn": 43, + "startColumn": 29, + "endColumn": 50, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 23, - "endColumn": 27, + "startColumn": 15, + "endColumn": 24, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportReturnType", "range": { - "startColumn": 23, - "endColumn": 27, + "startColumn": 15, + "endColumn": 52, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 29, - "endColumn": 43, + "startColumn": 10, + "endColumn": 16, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 29, - "endColumn": 43, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 44, - "endColumn": 56, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 44, - "endColumn": 56, + "startColumn": 10, + "endColumn": 16, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 26, - "endColumn": 30, + "startColumn": 18, + "endColumn": 24, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 26, - "endColumn": 30, + "startColumn": 18, + "endColumn": 24, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 32, - "endColumn": 46, + "startColumn": 42, + "endColumn": 49, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 32, - "endColumn": 46, + "startColumn": 4, + "endColumn": 9, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 25, - "endColumn": 40, + "startColumn": 12, + "endColumn": 24, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 25, - "endColumn": 40, + "startColumn": 4, + "endColumn": 12, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 25, - "endColumn": 33, + "startColumn": 15, + "endColumn": 27, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 25, - "endColumn": 33, + "startColumn": 29, + "endColumn": 55, "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 41, - "endColumn": 49, - "lineCount": 1 + "startColumn": 29, + "endColumn": 65, + "lineCount": 3 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 60, - "endColumn": 68, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 24, - "endColumn": 32, + "startColumn": 48, + "endColumn": 56, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 34, - "endColumn": 42, + "startColumn": 44, + "endColumn": 64, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 46, - "endColumn": 61, + "startColumn": 32, + "endColumn": 37, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 46, - "endColumn": 67, - "lineCount": 1 - } - }, - { - "code": "reportUnreachable", - "range": { - "startColumn": 8, - "endColumn": 22, - "lineCount": 6 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 34, - "endColumn": 38, + "startColumn": 29, + "endColumn": 55, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 34, - "endColumn": 38, - "lineCount": 1 + "startColumn": 29, + "endColumn": 65, + "lineCount": 3 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 40, - "endColumn": 54, + "startColumn": 48, + "endColumn": 53, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 40, - "endColumn": 54, + "startColumn": 44, + "endColumn": 64, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { "startColumn": 32, - "endColumn": 44, + "endColumn": 40, "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 32, - "endColumn": 44, + "startColumn": 64, + "endColumn": 70, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 25, - "endColumn": 37, + "startColumn": 23, + "endColumn": 31, "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 25, - "endColumn": 37, + "startColumn": 27, + "endColumn": 32, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 34, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 34, - "endColumn": 38, + "startColumn": 4, + "endColumn": 16, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 40, - "endColumn": 54, + "startColumn": 17, + "endColumn": 21, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 40, - "endColumn": 54, + "startColumn": 17, + "endColumn": 21, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 32, - "endColumn": 44, + "startColumn": 23, + "endColumn": 29, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportMissingParameterType", "range": { - "startColumn": 32, - "endColumn": 44, + "startColumn": 23, + "endColumn": 29, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 25, - "endColumn": 37, + "startColumn": 31, + "endColumn": 36, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportMissingParameterType", "range": { - "startColumn": 25, - "endColumn": 37, + "startColumn": 31, + "endColumn": 36, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 34, - "endColumn": 38, + "startColumn": 38, + "endColumn": 49, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 34, - "endColumn": 38, + "startColumn": 38, + "endColumn": 49, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 40, - "endColumn": 54, + "startColumn": 51, + "endColumn": 58, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 40, - "endColumn": 54, + "startColumn": 51, + "endColumn": 58, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 32, - "endColumn": 44, + "startColumn": 8, + "endColumn": 18, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportMissingParameterType", "range": { - "startColumn": 32, - "endColumn": 44, + "startColumn": 8, + "endColumn": 18, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { "startColumn": 25, - "endColumn": 37, + "endColumn": 32, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportMissingParameterType", "range": { "startColumn": 25, - "endColumn": 37, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 27, - "endColumn": 31, + "endColumn": 32, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 27, - "endColumn": 31, + "startColumn": 36, + "endColumn": 42, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 33, - "endColumn": 47, + "startColumn": 55, + "endColumn": 65, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 33, - "endColumn": 47, + "startColumn": 4, + "endColumn": 9, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 40, - "endColumn": 52, + "startColumn": 34, + "endColumn": 39, "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 40, - "endColumn": 52, + "startColumn": 52, + "endColumn": 62, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 27, - "endColumn": 31, + "startColumn": 8, + "endColumn": 13, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 27, - "endColumn": 31, + "startColumn": 33, + "endColumn": 40, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 33, - "endColumn": 47, + "startColumn": 8, + "endColumn": 19, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 33, - "endColumn": 47, + "startColumn": 27, + "endColumn": 38, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 40, - "endColumn": 52, + "startColumn": 8, + "endColumn": 19, "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 40, - "endColumn": 52, + "startColumn": 35, + "endColumn": 46, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 27, - "endColumn": 31, + "startColumn": 20, + "endColumn": 27, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 27, - "endColumn": 31, + "startColumn": 57, + "endColumn": 64, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 33, - "endColumn": 47, + "startColumn": 22, + "endColumn": 27, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 33, - "endColumn": 47, + "startColumn": 25, + "endColumn": 36, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 40, - "endColumn": 52, + "startColumn": 16, + "endColumn": 20, "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 40, - "endColumn": 52, + "startColumn": 25, + "endColumn": 43, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 44, - "endColumn": 48, + "startColumn": 32, + "endColumn": 77, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 44, - "endColumn": 48, + "startColumn": 24, + "endColumn": 31, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportArgumentType", "range": { - "startColumn": 50, - "endColumn": 64, + "startColumn": 29, + "endColumn": 41, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 50, - "endColumn": 64, + "startColumn": 16, + "endColumn": 29, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 28, - "endColumn": 45, + "startColumn": 30, + "endColumn": 41, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 32, - "endColumn": 44, + "startColumn": 11, + "endColumn": 26, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 32, - "endColumn": 44, + "startColumn": 11, + "endColumn": 49, "lineCount": 1 } - }, + } + ], + "./pytential/symbolic/mappers.py": [ { "code": "reportUnknownParameterType", "range": { - "startColumn": 43, - "endColumn": 47, + "startColumn": 8, + "endColumn": 16, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportImplicitOverride", "range": { - "startColumn": 43, - "endColumn": 47, + "startColumn": 8, + "endColumn": 16, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 49, - "endColumn": 63, + "startColumn": 23, + "endColumn": 27, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 49, - "endColumn": 63, + "startColumn": 23, + "endColumn": 27, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 16, - "endColumn": 47, - "lineCount": 4 - } - }, - { - "code": "reportUnknownVariableType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 20, - "endColumn": 24, + "startColumn": 19, + "endColumn": 40, "lineCount": 1 } }, { "code": "reportUnknownVariableType", "range": { - "startColumn": 26, - "endColumn": 30, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 34, - "endColumn": 47, + "startColumn": 19, + "endColumn": 52, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 32, - "endColumn": 44, + "startColumn": 47, + "endColumn": 51, "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 32, - "endColumn": 44, + "startColumn": 49, + "endColumn": 53, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 25, - "endColumn": 37, + "startColumn": 4, + "endColumn": 7, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnannotatedClassAttribute", "range": { - "startColumn": 25, - "endColumn": 37, + "startColumn": 4, + "endColumn": 7, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 45, - "endColumn": 49, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 45, - "endColumn": 49, + "startColumn": 8, + "endColumn": 20, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 51, - "endColumn": 65, + "startColumn": 27, + "endColumn": 31, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 51, - "endColumn": 65, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 46, - "endColumn": 58, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 46, - "endColumn": 58, + "startColumn": 27, + "endColumn": 31, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 27, - "endColumn": 31, + "startColumn": 15, + "endColumn": 19, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 27, - "endColumn": 31, + "startColumn": 4, + "endColumn": 16, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnannotatedClassAttribute", "range": { - "startColumn": 33, - "endColumn": 47, + "startColumn": 4, + "endColumn": 16, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 33, - "endColumn": 47, + "startColumn": 4, + "endColumn": 12, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnannotatedClassAttribute", "range": { - "startColumn": 46, - "endColumn": 58, + "startColumn": 4, + "endColumn": 12, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 46, - "endColumn": 58, + "startColumn": 8, + "endColumn": 20, "lineCount": 1 } }, { "code": "reportUnknownParameterType", "range": { - "startColumn": 37, - "endColumn": 53, + "startColumn": 27, + "endColumn": 31, "lineCount": 1 } }, { "code": "reportMissingParameterType", "range": { - "startColumn": 37, - "endColumn": 53, + "startColumn": 27, + "endColumn": 31, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 36, - "endColumn": 40, + "startColumn": 27, + "endColumn": 39, "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 51, - "endColumn": 59, + "startColumn": 27, + "endColumn": 39, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 24, - "endColumn": 28, + "startColumn": 22, + "endColumn": 34, "lineCount": 1 } }, { "code": "reportUnknownVariableType", "range": { - "startColumn": 30, - "endColumn": 38, + "startColumn": 19, + "endColumn": 23, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportAny", "range": { - "startColumn": 42, - "endColumn": 64, + "startColumn": 15, + "endColumn": 34, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 24, - "endColumn": 28, + "startColumn": 20, + "endColumn": 24, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 24, - "endColumn": 28, + "startColumn": 4, + "endColumn": 16, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnannotatedClassAttribute", "range": { - "startColumn": 30, - "endColumn": 44, + "startColumn": 4, + "endColumn": 16, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 30, - "endColumn": 44, + "startColumn": 4, + "endColumn": 16, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnannotatedClassAttribute", "range": { - "startColumn": 38, - "endColumn": 45, + "startColumn": 4, + "endColumn": 16, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnannotatedClassAttribute", "range": { - "startColumn": 62, - "endColumn": 75, + "startColumn": 4, + "endColumn": 16, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnannotatedClassAttribute", "range": { - "startColumn": 16, - "endColumn": 29, + "startColumn": 4, + "endColumn": 23, "lineCount": 1 } }, { - "code": "reportUnknownVariableType", + "code": "reportUnannotatedClassAttribute", "range": { - "startColumn": 31, - "endColumn": 38, + "startColumn": 4, + "endColumn": 23, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 16, - "endColumn": 35, + "startColumn": 23, + "endColumn": 34, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportMissingParameterType", "range": { - "startColumn": 16, - "endColumn": 35, + "startColumn": 23, + "endColumn": 34, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnannotatedClassAttribute", "range": { - "startColumn": 37, - "endColumn": 51, + "startColumn": 13, + "endColumn": 24, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 37, - "endColumn": 51, + "startColumn": 8, + "endColumn": 37, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportImplicitOverride", "range": { - "startColumn": 32, - "endColumn": 50, + "startColumn": 8, + "endColumn": 37, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 32, - "endColumn": 50, + "startColumn": 44, + "endColumn": 48, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportMissingParameterType", "range": { - "startColumn": 30, + "startColumn": 44, "endColumn": 48, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 30, - "endColumn": 64, + "startColumn": 8, + "endColumn": 15, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 30, - "endColumn": 66, + "startColumn": 18, + "endColumn": 30, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 32, - "endColumn": 43, + "startColumn": 11, + "endColumn": 30, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 32, - "endColumn": 43, + "startColumn": 19, + "endColumn": 23, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportAny", "range": { - "startColumn": 32, - "endColumn": 43, - "lineCount": 1 + "startColumn": 15, + "endColumn": 59, + "lineCount": 3 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 32, - "endColumn": 43, + "startColumn": 20, + "endColumn": 24, "lineCount": 1 } }, @@ -41423,231 +35343,223 @@ "code": "reportUnknownMemberType", "range": { "startColumn": 16, - "endColumn": 37, + "endColumn": 33, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownMemberType", "range": { "startColumn": 16, - "endColumn": 37, + "endColumn": 28, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportImplicitOverride", "range": { - "startColumn": 16, - "endColumn": 43, + "startColumn": 8, + "endColumn": 36, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportMissingParameterType", "range": { - "startColumn": 20, - "endColumn": 41, + "startColumn": 43, + "endColumn": 47, "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 20, - "endColumn": 41, + "startColumn": 41, + "endColumn": 57, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportMissingTypeArgument", "range": { - "startColumn": 32, - "endColumn": 36, + "startColumn": 8, + "endColumn": 17, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnsafeMultipleInheritance", "range": { - "startColumn": 32, - "endColumn": 36, + "startColumn": 6, + "endColumn": 32, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnsafeMultipleInheritance", "range": { - "startColumn": 38, - "endColumn": 52, + "startColumn": 6, + "endColumn": 28, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnannotatedClassAttribute", "range": { - "startColumn": 38, - "endColumn": 52, + "startColumn": 4, + "endColumn": 51, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnannotatedClassAttribute", "range": { - "startColumn": 32, - "endColumn": 44, + "startColumn": 4, + "endColumn": 34, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnannotatedClassAttribute", "range": { - "startColumn": 32, - "endColumn": 44, + "startColumn": 4, + "endColumn": 28, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportImplicitOverride", "range": { - "startColumn": 32, - "endColumn": 42, + "startColumn": 8, + "endColumn": 23, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportMissingParameterType", "range": { - "startColumn": 32, + "startColumn": 30, "endColumn": 42, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportMissingParameterType", "range": { - "startColumn": 25, - "endColumn": 37, + "startColumn": 44, + "endColumn": 48, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnannotatedClassAttribute", "range": { - "startColumn": 25, - "endColumn": 37, + "startColumn": 13, + "endColumn": 19, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnreachable", "range": { - "startColumn": 33, - "endColumn": 37, - "lineCount": 1 + "startColumn": 12, + "endColumn": 75, + "lineCount": 3 } }, { - "code": "reportMissingParameterType", + "code": "reportArgumentType", "range": { - "startColumn": 33, - "endColumn": 37, + "startColumn": 35, + "endColumn": 43, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnreachable", "range": { - "startColumn": 39, - "endColumn": 53, - "lineCount": 1 + "startColumn": 8, + "endColumn": 22, + "lineCount": 6 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 39, + "startColumn": 37, "endColumn": 53, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportMissingParameterType", "range": { - "startColumn": 56, - "endColumn": 68, + "startColumn": 37, + "endColumn": 53, "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 56, - "endColumn": 68, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 40, - "endColumn": 50, + "startColumn": 36, + "endColumn": 40, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 40, + "startColumn": 51, "endColumn": 59, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 40, - "endColumn": 59, + "startColumn": 24, + "endColumn": 28, "lineCount": 1 } }, { - "code": "reportUnknownParameterType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 33, - "endColumn": 37, + "startColumn": 30, + "endColumn": 38, "lineCount": 1 } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 33, - "endColumn": 37, + "startColumn": 42, + "endColumn": 64, "lineCount": 1 } }, { "code": "reportUnknownMemberType", "range": { - "startColumn": 8, - "endColumn": 18, + "startColumn": 16, + "endColumn": 43, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { - "startColumn": 8, - "endColumn": 25, + "startColumn": 33, + "endColumn": 37, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportMissingParameterType", "range": { - "startColumn": 20, - "endColumn": 31, + "startColumn": 33, + "endColumn": 37, "lineCount": 1 } }, @@ -41667,14 +35579,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 11, - "endColumn": 21, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -41683,14 +35587,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 12, - "endColumn": 27, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -41731,30 +35627,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 18, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 25, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 20, - "endColumn": 31, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -41771,14 +35643,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 15, - "endColumn": 25, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -41803,14 +35667,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 23, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -41947,30 +35803,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 18, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 25, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 52, - "endColumn": 63, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -41979,14 +35811,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 15, - "endColumn": 25, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -42043,14 +35867,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 23, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -42389,6 +36205,14 @@ "lineCount": 1 } }, + { + "code": "reportUnknownParameterType", + "range": { + "startColumn": 27, + "endColumn": 31, + "lineCount": 1 + } + }, { "code": "reportMissingParameterType", "range": { @@ -42397,6 +36221,14 @@ "lineCount": 1 } }, + { + "code": "reportUnknownArgumentType", + "range": { + "startColumn": 40, + "endColumn": 44, + "lineCount": 1 + } + }, { "code": "reportIncompatibleMethodOverride", "range": { @@ -42414,7 +36246,7 @@ } }, { - "code": "reportMissingParameterType", + "code": "reportUnknownParameterType", "range": { "startColumn": 28, "endColumn": 32, @@ -42422,13 +36254,21 @@ } }, { - "code": "reportUnnecessaryComparison", + "code": "reportMissingParameterType", "range": { - "startColumn": 11, + "startColumn": 28, "endColumn": 32, "lineCount": 1 } }, + { + "code": "reportUnknownArgumentType", + "range": { + "startColumn": 41, + "endColumn": 45, + "lineCount": 1 + } + }, { "code": "reportImplicitOverride", "range": { @@ -42437,6 +36277,14 @@ "lineCount": 1 } }, + { + "code": "reportUnknownParameterType", + "range": { + "startColumn": 22, + "endColumn": 26, + "lineCount": 1 + } + }, { "code": "reportMissingParameterType", "range": { @@ -42445,6 +36293,30 @@ "lineCount": 1 } }, + { + "code": "reportUnknownVariableType", + "range": { + "startColumn": 12, + "endColumn": 17, + "lineCount": 1 + } + }, + { + "code": "reportUnknownMemberType", + "range": { + "startColumn": 21, + "endColumn": 34, + "lineCount": 1 + } + }, + { + "code": "reportUnknownArgumentType", + "range": { + "startColumn": 33, + "endColumn": 38, + "lineCount": 1 + } + }, { "code": "reportUnknownMemberType", "range": { @@ -42477,6 +36349,14 @@ "lineCount": 1 } }, + { + "code": "reportUnknownParameterType", + "range": { + "startColumn": 26, + "endColumn": 30, + "lineCount": 1 + } + }, { "code": "reportMissingParameterType", "range": { @@ -42485,6 +36365,30 @@ "lineCount": 1 } }, + { + "code": "reportUnknownVariableType", + "range": { + "startColumn": 12, + "endColumn": 17, + "lineCount": 1 + } + }, + { + "code": "reportUnknownMemberType", + "range": { + "startColumn": 21, + "endColumn": 34, + "lineCount": 1 + } + }, + { + "code": "reportUnknownArgumentType", + "range": { + "startColumn": 33, + "endColumn": 38, + "lineCount": 1 + } + }, { "code": "reportUnknownMemberType", "range": { @@ -43493,22 +37397,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 12, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportCallIssue", - "range": { - "startColumn": 22, - "endColumn": 43, - "lineCount": 4 - } - }, { "code": "reportUnknownMemberType", "range": { @@ -43661,14 +37549,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 36, - "endColumn": 43, - "lineCount": 1 - } - }, { "code": "reportAny", "range": { @@ -44309,22 +38189,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 12, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportCallIssue", - "range": { - "startColumn": 22, - "endColumn": 43, - "lineCount": 4 - } - }, { "code": "reportUnknownMemberType", "range": { @@ -44477,14 +38341,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 36, - "endColumn": 43, - "lineCount": 1 - } - }, { "code": "reportAny", "range": { @@ -47021,6 +40877,14 @@ "lineCount": 1 } }, + { + "code": "reportUnknownParameterType", + "range": { + "startColumn": 16, + "endColumn": 25, + "lineCount": 1 + } + }, { "code": "reportUnknownParameterType", "range": { @@ -47054,15 +40918,15 @@ } }, { - "code": "reportOperatorIssue", + "code": "reportUnknownVariableType", "range": { - "startColumn": 24, - "endColumn": 36, - "lineCount": 2 + "startColumn": 23, + "endColumn": 37, + "lineCount": 3 } }, { - "code": "reportArgumentType", + "code": "reportUnknownArgumentType", "range": { "startColumn": 24, "endColumn": 36, @@ -47093,6 +40957,22 @@ "lineCount": 1 } }, + { + "code": "reportUnknownVariableType", + "range": { + "startColumn": 12, + "endColumn": 14, + "lineCount": 1 + } + }, + { + "code": "reportUnknownVariableType", + "range": { + "startColumn": 12, + "endColumn": 14, + "lineCount": 1 + } + }, { "code": "reportUnknownMemberType", "range": { @@ -49088,10 +42968,18 @@ } }, { - "code": "reportUnknownMemberType", + "code": "reportArgumentType", "range": { - "startColumn": 19, - "endColumn": 35, + "startColumn": 46, + "endColumn": 50, + "lineCount": 1 + } + }, + { + "code": "reportArgumentType", + "range": { + "startColumn": 54, + "endColumn": 60, "lineCount": 1 } }, @@ -49192,18 +43080,18 @@ } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownMemberType", "range": { "startColumn": 11, - "endColumn": 47, + "endColumn": 37, "lineCount": 1 } }, { - "code": "reportArgumentType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 23, - "endColumn": 30, + "startColumn": 11, + "endColumn": 72, "lineCount": 1 } }, @@ -49216,15 +43104,7 @@ } }, { - "code": "reportReturnType", - "range": { - "startColumn": 15, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportReturnType", + "code": "reportUnknownVariableType", "range": { "startColumn": 11, "endColumn": 25, @@ -49255,107 +43135,27 @@ "lineCount": 1 } }, - { - "code": "reportReturnType", - "range": { - "startColumn": 11, - "endColumn": 56, - "lineCount": 1 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 21, - "endColumn": 55, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 11, - "endColumn": 15, - "lineCount": 4 - } - }, { "code": "reportUnknownVariableType", "range": { - "startColumn": 11, - "endColumn": 17, - "lineCount": 4 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 8, - "endColumn": 42, - "lineCount": 2 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 22, - "endColumn": 40, - "lineCount": 1 - } - }, - { - "code": "reportAttributeAccessIssue", - "range": { - "startColumn": 6, - "endColumn": 15, - "lineCount": 1 - } - }, - { - "code": "reportAttributeAccessIssue", - "range": { - "startColumn": 6, - "endColumn": 15, - "lineCount": 1 - } - }, - { - "code": "reportAttributeAccessIssue", - "range": { - "startColumn": 6, - "endColumn": 15, - "lineCount": 1 - } - }, - { - "code": "reportAttributeAccessIssue", - "range": { - "startColumn": 6, - "endColumn": 15, - "lineCount": 1 - } - }, - { - "code": "reportAttributeAccessIssue", - "range": { - "startColumn": 6, - "endColumn": 15, + "startColumn": 4, + "endColumn": 20, "lineCount": 1 } }, { - "code": "reportAttributeAccessIssue", + "code": "reportUnknownVariableType", "range": { - "startColumn": 6, - "endColumn": 15, + "startColumn": 12, + "endColumn": 28, "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 62, - "endColumn": 78, + "startColumn": 70, + "endColumn": 86, "lineCount": 1 } }, @@ -49599,22 +43399,6 @@ "lineCount": 3 } }, - { - "code": "reportReturnType", - "range": { - "startColumn": 11, - "endColumn": 57, - "lineCount": 2 - } - }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 12, - "endColumn": 56, - "lineCount": 1 - } - }, { "code": "reportReturnType", "range": { @@ -49623,14 +43407,6 @@ "lineCount": 3 } }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 12, - "endColumn": 24, - "lineCount": 2 - } - }, { "code": "reportUnknownMemberType", "range": { @@ -49639,14 +43415,6 @@ "lineCount": 1 } }, - { - "code": "reportReturnType", - "range": { - "startColumn": 11, - "endColumn": 10, - "lineCount": 3 - } - }, { "code": "reportUnknownMemberType", "range": { @@ -49663,14 +43431,6 @@ "lineCount": 1 } }, - { - "code": "reportArgumentType", - "range": { - "startColumn": 46, - "endColumn": 64, - "lineCount": 1 - } - }, { "code": "reportArgumentType", "range": {