From 20ce15b294bb4da6c584f2081b57f60aa4ae0c75 Mon Sep 17 00:00:00 2001 From: Alexandru Fikl Date: Fri, 7 Aug 2026 14:52:40 +0300 Subject: [PATCH 1/7] docs: fix typos in primitives --- pytential/symbolic/primitives.py | 47 ++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/pytential/symbolic/primitives.py b/pytential/symbolic/primitives.py index 02e075ea6..ba26b564e 100644 --- a/pytential/symbolic/primitives.py +++ b/pytential/symbolic/primitives.py @@ -104,35 +104,34 @@ Object types ^^^^^^^^^^^^ + Based on the mathematical quantity being represented, the following types of objects occur as part of a symbolic operator representation: -* If a quantity is a scalar, it is just a symbolic expression--that is, an +* If a quantity is a scalar, it is just a symbolic expression -- that is, an element of the set of formal expressions recursively generated by the placeholders (see :ref:`placeholders`), constants, and arithmetic operations - on them (see :mod:`pymbolic.primitives`). Objects of this type are created + on them (see :mod:`pymbolic.primitives`). Objects of this type are created simply by doing arithmetic on placeholders and scalar constants. * If the quantity is "just a bunch of scalars" (like, say, rows in a system of integral equations), the symbolic representation is an object array. Each element of the object array contains a symbolic expression. - - :func:`pytools.obj_array.new_1d` and - :func:`pytools.obj_array.flat` - can help create those. + :func:`pytools.obj_array.new_1d` and :func:`pytools.obj_array.flat` can + help create those. * If it is a geometric quantity (that makes sense without explicit reference to coordinates), it is a :class:`pymbolic.geometric_algebra.MultiVector`. - This can be converted to an object array by calling: - :meth:`pymbolic.geometric_algebra.MultiVector.as_vector`. + This can be converted to an object array by calling + :meth:`~pymbolic.geometric_algebra.MultiVector.as_vector`. -:class:`meshmode.dof_array.DOFArray` instances hold per-node degrees of freedom +:class:`~meshmode.dof_array.DOFArray` instances hold per-node degrees of freedom (and only those). Such instances do *not* occur on the symbolic side of :mod:`pytential` at all. They're only visible either as bound inputs (see :func:`pytential.bind`) or outputs of evaluation. Which one is used depends on the meaning of the data being represented. If the data is associated with a :class:`~meshmode.discretization.Discretization`, then -:class:`~meshmode.dof_array.DOFArray` is used and otherwise a base array +:class:`~meshmode.dof_array.DOFArray` is used. Otherwise a base array type for the underlying :class:`~arraycontext.ArrayContext` is used. .. autoclass:: ExpressionNode @@ -490,7 +489,7 @@ def for_each_expression( ) -> Callable[Concatenate[OperandTc, P], OperandTc]: """A decorator that takes a function that can only work on expressions and transforms it into a function that can be applied componentwise on - :class:`numpy.ndarray` or :class:`~pymbolic.geometric_algebra.MultiVector`. + object :class:`numpy.ndarray` or :class:`~pymbolic.geometric_algebra.MultiVector`. """ from functools import wraps @@ -668,7 +667,7 @@ class NodeCoordinateComponent(DiscretizationProperty): """ ambient_axis: int - """The axis index this node coordinate represents, i.e. 0 for $x$, etc.""" + """The axis index this node coordinate represents, i.e. 0 for :math:`x`, etc.""" # FIXME: this is added for backwards compatibility with pre-dataclass expressions def __init__(self, @@ -705,7 +704,8 @@ class NumReferenceDerivative(DiscretizationProperty): derivatives taken on the given *operand*. The tuple must be sorted with respect to the axis index. For example, ``((0, 2), (1, 1))`` is a correct 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). + with respect to :math:`x` (0) and a first derivative with respect to :math:`y` + (1). """ operand: ArithmeticExpression """An operand to differentiate.""" @@ -855,6 +855,7 @@ def area_element( dim: int | None = None, dofdesc: DOFDescriptorLike = None, ) -> ArithmeticExpression: + r"""The surface area element, :math:`\sqrt{|g|}`.""" return cse( sqrt(pseudoscalar(ambient_dim, dim, dofdesc).norm_squared()), "area_element", cse_scope.DISCRETIZATION) @@ -865,6 +866,9 @@ def sqrt_jac_q_weight( dim: int | None = None, dofdesc: DOFDescriptorLike = None, ) -> ArithmeticExpression: + """The square root of the product of the surface area element and + quadrature weights. + """ dofdesc = as_dofdesc(dofdesc) return cse( sqrt( @@ -929,6 +933,7 @@ def first_fundamental_form( dim: int | None = None, dofdesc: DOFDescriptorLike = None, ) -> ObjectArray2D[ArithmeticExpression]: + """The first fundamental form :math:`I = J^T J` of the surface parametrization.""" if dim is None: dim = ambient_dim - 1 @@ -1274,7 +1279,7 @@ def _quad_resolution( should be the same as the element length. In multiple dimensions (i.e. with multiple quadrature resolutions - depending on direction), this measure returns the coarsest of these resolution, + depending on direction), this measure returns the coarsest of these resolutions, is invariant with respect to rotation of the global coordinate system, and invariant with respect to vertex ordering of the reference element. @@ -1579,7 +1584,7 @@ def integral( operand: OperandTc, dofdesc: DOFDescriptorLike = None, ) -> OperandTc: - """A volume integral of *operand*.""" + """A surface integral of *operand*.""" dofdesc = as_dofdesc(dofdesc) return node_sum( @@ -1753,7 +1758,9 @@ def __post_init__(self) -> None: class Derivative(DerivativeBase): """A symbolic derivative. - This mechanism cannot be used to take more than one derivative at a time. + This mechanism cannot be used to take more than one derivative at a time. To + construct higher-level derivatives, the operator must be nested repeatedly + instead. .. automethod:: __call__ .. automethod:: dnabla @@ -1900,12 +1907,12 @@ class IntG(ExpressionNode): * ``'avg'``: may be used as a shorthand to evaluate this potential as an average of the ``+1`` and the ``-1`` value. * ``+2`` may be used to *allow* evaluation QBX center on the "+" side of the - (but disallow evaluation using a center on the "-" side). + boundary (but disallow evaluation using a center on the "-" side). * ``-2``: for the "-" side. Evaluation at a target with a value of ``±1`` in *qbx_forced_limit* will fail if no QBX center is found. To allow potential evaluation at the target - to succeeds even if no applicable QBX center is found use ``±2``. + to succeed even if no applicable QBX center is found use ``±2``. """ source: DOFDescriptor = field(default_factory=lambda: DEFAULT_DOFDESC) @@ -2505,6 +2512,7 @@ def project_to_tangential( xyz_vec: ObjectArray1D[ArithmeticExpression], dofdesc: DOFDescriptorLike = None, ) -> ObjectArray1D[ArithmeticExpression]: + """Project a vector onto the tangential space of the surface.""" return tangential_to_xyz( cse(xyz_to_tangential(xyz_vec, dofdesc)), dofdesc) @@ -2514,6 +2522,7 @@ def n_dot( vec: ObjectArray1D[ArithmeticExpression], dofdesc: DOFDescriptorLike = None, ) -> ArithmeticExpression: + """The dot product of *vec* with the surface unit normal.""" nrm = normal(len(vec), dofdesc=dofdesc).as_vector() return nrm @ vec @@ -2523,6 +2532,7 @@ def cross( vec_a: ObjectArray1D[ArithmeticExpression], vec_b: ObjectArray1D[ArithmeticExpression], ) -> ObjectArray1D[ArithmeticExpression]: + r"""The cross product :math:`\mathbf{a} \times \mathbf{b}` of two 3D vectors.""" assert len(vec_a) == len(vec_b) == 3 from pytools import levi_civita @@ -2537,6 +2547,7 @@ def n_cross( vec: ObjectArray1D[ArithmeticExpression], dofdesc: DOFDescriptorLike = None, ) -> ObjectArray1D[ArithmeticExpression]: + """The cross product of the surface unit normal with *vec*.""" return cross(normal(3, dofdesc=dofdesc).as_vector(), vec) From a49d7ad845ce3071a7002008f411ff746f6215a7 Mon Sep 17 00:00:00 2001 From: Alexandru Fikl Date: Fri, 7 Aug 2026 14:53:27 +0300 Subject: [PATCH 2/7] fix: add missing elementwise to __all__ --- pytential/symbolic/primitives.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pytential/symbolic/primitives.py b/pytential/symbolic/primitives.py index ba26b564e..f7cb6ee57 100644 --- a/pytential/symbolic/primitives.py +++ b/pytential/symbolic/primitives.py @@ -408,8 +408,10 @@ "expansion_radii", "expansion_centers", "h_max", "weights_and_area_elements", - "NumReferenceDerivative", "NodeSum", "NodeMax", "NodeMin", "ElementwiseSum", - "ElementwiseMax", "integral", "Ones", "ones_vec", "area", "mean", + "NumReferenceDerivative", "NodeSum", "NodeMax", "NodeMin", "node_sum", + "node_max", "node_min", "ElementwiseSum", "ElementwiseMax", "ElementwiseMin", + "elementwise_sum", "elementwise_max", "elementwise_min", "integral", "Ones", + "ones_vec", "area", "mean", "IterativeInverse", "Interpolation", "interpolate", From 25aa5f0580ee1a76d2237bca4ea22e0211faff1d Mon Sep 17 00:00:00 2001 From: Alexandru Fikl Date: Fri, 7 Aug 2026 14:54:24 +0300 Subject: [PATCH 3/7] chore: bump deprecations in primitives to 2027 --- pytential/symbolic/primitives.py | 36 ++++++++++++++++---------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/pytential/symbolic/primitives.py b/pytential/symbolic/primitives.py index f7cb6ee57..6efcb549e 100644 --- a/pytential/symbolic/primitives.py +++ b/pytential/symbolic/primitives.py @@ -634,7 +634,7 @@ def __post_init__(self) -> None: if not isinstance(self.dofdesc, DOFDescriptor): warn("Passing a 'dofdesc' that is not a 'DOFDescriptor' to " f"{type(self).__name__!r} is deprecated and will stop working " - "in 2025. Use 'as_dofdesc' to convert the descriptor.", + "in 2027. Use 'as_dofdesc' to convert the descriptor.", DeprecationWarning, stacklevel=2) object.__setattr__(self, "dofdesc", as_dofdesc(self.dofdesc)) @@ -719,7 +719,7 @@ def __new__(cls, ) -> NumReferenceDerivative | OperandTc: if isinstance(operand, ObjectArray | MultiVector): warn(f"Passing {type(operand)} directly to {cls.__name__!r} " - "is deprecated and will result in an error from 2025. Use " + "is deprecated and will result in an error from 2027. Use " "the 'num_reference_derivative' function instead.", DeprecationWarning, stacklevel=3) @@ -739,7 +739,7 @@ def __init__(self, dofdesc: DOFDescriptorLike) -> None: if isinstance(ref_axes, int): warn(f"Passing an 'int' as 'ref_axes' to {type(self).__name__!r} " - "is deprecated and will result in an error in 2025. Pass the " + "is deprecated and will result in an error in 2027. Pass the " "well-formatted tuple '((ref_axes, 1),)' instead.", DeprecationWarning, stacklevel=2) @@ -1446,7 +1446,7 @@ def __new__(cls, if isinstance(operand, ObjectArray | MultiVector): warn(f"Passing {type(operand)} directly to {cls.__name__!r} " - "is deprecated and will result in an error from 2025. Use " + "is deprecated and will result in an error from 2027. Use " "the 'interpolate' function instead.", DeprecationWarning, stacklevel=3) @@ -1461,7 +1461,7 @@ def __post_init__(self) -> None: if not isinstance(self.from_dd, DOFDescriptor): warn("Passing a 'from_dd' that is not a 'DOFDescriptor' to " f"{type(self).__name__!r} is deprecated and will stop working " - "in 2025. Use 'as_dofdesc' to convert the descriptor.", + "in 2027. Use 'as_dofdesc' to convert the descriptor.", DeprecationWarning, stacklevel=2) object.__setattr__(self, "from_dd", as_dofdesc(self.from_dd)) @@ -1469,7 +1469,7 @@ def __post_init__(self) -> None: if not isinstance(self.to_dd, DOFDescriptor): warn("Passing a 'to_dd' that is not a 'DOFDescriptor' to " f"{type(self).__name__!r} is deprecated and will stop working " - "in 2025. Use 'as_dofdesc' to convert the descriptor.", + "in 2027. Use 'as_dofdesc' to convert the descriptor.", DeprecationWarning, stacklevel=2) object.__setattr__(self, "to_dd", as_dofdesc(self.to_dd)) @@ -1529,7 +1529,7 @@ def __new__(cls, if isinstance(operand, ObjectArray | MultiVector): name = cls.mapper_method[4:] warn(f"Passing {type(operand)} directly to {cls.__name__!r} " - "is deprecated and will result in an error from 2025. Use " + "is deprecated and will result in an error from 2027. Use " f"the '{name}' function instead.", DeprecationWarning, stacklevel=3) @@ -1615,7 +1615,7 @@ def __new__(cls, if isinstance(operand, ObjectArray | MultiVector): name = cls.mapper_method[4:] warn(f"Passing {type(operand)} directly to {cls.__name__!r} " - "is deprecated and will result in an error from 2025. Use " + "is deprecated and will result in an error from 2027. Use " f"the '{name}' function instead.", DeprecationWarning, stacklevel=2) @@ -1630,7 +1630,7 @@ def __post_init__(self) -> None: if not isinstance(self.dofdesc, DOFDescriptor): warn("Passing a 'dofdesc' that is not a 'DOFDescriptor' to " f"{type(self).__name__!r} is deprecated and will stop working " - "in 2025. Use 'as_dofdesc' to convert the descriptor.", + "in 2027. Use 'as_dofdesc' to convert the descriptor.", DeprecationWarning, stacklevel=2) object.__setattr__(self, "dofdesc", as_dofdesc(self.dofdesc)) @@ -1693,7 +1693,7 @@ def __post_init__(self) -> None: if not isinstance(self.dofdesc, DOFDescriptor): warn("Passing a 'dofdesc' that is not a 'DOFDescriptor' to " f"{type(self).__name__!r} is deprecated and will stop working " - "in 2025. Use 'as_dofdesc' to convert the descriptor.", + "in 2027. Use 'as_dofdesc' to convert the descriptor.", DeprecationWarning, stacklevel=2) object.__setattr__(self, "dofdesc", as_dofdesc(self.dofdesc)) @@ -1751,7 +1751,7 @@ def __post_init__(self) -> None: if not isinstance(self.dofdesc, DOFDescriptor): warn("Passing a 'dofdesc' that is not a 'DOFDescriptor' to " f"{type(self).__name__!r} is deprecated and will stop working " - "in 2025. Use 'as_dofdesc' to convert the descriptor.", + "in 2027. Use 'as_dofdesc' to convert the descriptor.", DeprecationWarning, stacklevel=2) object.__setattr__(self, "dofdesc", as_dofdesc(self.dofdesc)) @@ -1960,7 +1960,7 @@ def __init__( if kwargs: warn(f"Passing named '**kwargs' to {type(self).__name__!r} is " - "deprecated and will result in an error in 2025. Use the " + "deprecated and will result in an error in 2027. Use the " "'kernel_arguments' argument instead.", DeprecationWarning, stacklevel=2) @@ -1993,20 +1993,20 @@ def __post_init__(self) -> None: if not isinstance(self.source_kernels, tuple): warn(f"'source_kernels' is not tuple ({type(self.source_kernels)}). " "Passing a different type is deprecated and will stop working in " - "2025.", DeprecationWarning, stacklevel=2) + "2027.", DeprecationWarning, stacklevel=2) object.__setattr__(self, "source_kernels", tuple(self.source_kernels)) if not isinstance(self.densities, tuple): warn(f"'densities' is not tuple ({type(self.densities)}). " "Passing a different type is deprecated and will stop working in " - "2025.", DeprecationWarning, stacklevel=2) + "2027.", DeprecationWarning, stacklevel=2) object.__setattr__(self, "densities", tuple(self.densities)) if not isinstance(self.source, DOFDescriptor): warn("Passing a 'source' descriptor that is not a 'DOFDescriptor' to " f"{type(self).__name__!r} is deprecated and will stop working " - "in 2025. Use 'as_dofdesc' to convert the descriptor.", + "in 2027. Use 'as_dofdesc' to convert the descriptor.", DeprecationWarning, stacklevel=2) object.__setattr__(self, "source", as_dofdesc(self.source)) @@ -2014,7 +2014,7 @@ def __post_init__(self) -> None: if not isinstance(self.target, DOFDescriptor): warn("Passing a 'target' descriptor that is not a 'DOFDescriptor' to " f"{type(self).__name__!r} is deprecated and will stop working " - "in 2025. Use 'as_dofdesc' to convert the descriptor.", + "in 2027. Use 'as_dofdesc' to convert the descriptor.", DeprecationWarning, stacklevel=2) object.__setattr__(self, "target", as_dofdesc(self.target)) @@ -2024,7 +2024,7 @@ def __post_init__(self) -> None: "'kernel_arguments' is not a constantdict " f"({type(self.kernel_arguments)}). " "Passing a different type is deprecated and will stop being " - "supported in 2025.", DeprecationWarning, stacklevel=2) + "supported in 2027.", DeprecationWarning, stacklevel=2) kernel_arguments = self.kernel_arguments if self.kernel_arguments else {} object.__setattr__(self, "kernel_arguments", constantdict(kernel_arguments)) @@ -2055,7 +2055,7 @@ def __post_init__(self) -> None: def copy(self, **kwargs: Any) -> IntG: warn(f"'{type(self).__name__}.copy' is deprecated and will be removed in " - f"2025. {type(self)} is a dataclass now and can use " + f"2027. {type(self)} is a dataclass now and can use " "'dataclasses.replace'.", DeprecationWarning, stacklevel=2) from dataclasses import replace From 1b54287f0ee7d8c4fc9d8aee216b67b111c56c35 Mon Sep 17 00:00:00 2001 From: Alexandru Fikl Date: Fri, 7 Aug 2026 14:56:46 +0300 Subject: [PATCH 4/7] fix: extra args to IntG check --- pytential/symbolic/primitives.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/pytential/symbolic/primitives.py b/pytential/symbolic/primitives.py index 6efcb549e..728cedf16 100644 --- a/pytential/symbolic/primitives.py +++ b/pytential/symbolic/primitives.py @@ -2040,15 +2040,12 @@ def __post_init__(self) -> None: kernel_arg_names.add(karg.loopy_arg.name) provided_arg_names = set(self.kernel_arguments.keys()) - missing_args = kernel_arg_names - provided_arg_names - if missing_args: + if missing_args := (kernel_arg_names - provided_arg_names): raise ValueError( "Kernel argument(s) not supplied: '{}'".format(", ".join(missing_args)) ) - # FIXME: this check is clearly wrong :( - extra_args = provided_arg_names - kernel_arg_names - if missing_args: + if extra_args := (provided_arg_names - kernel_arg_names): raise ValueError( "Kernel argument(s) not recognized: '{}'".format(", ".join(extra_args)) ) From 722ef560e9fd6f1881e31b8bb03cdad93002f195 Mon Sep 17 00:00:00 2001 From: Alexandru Fikl Date: Fri, 7 Aug 2026 15:19:46 +0300 Subject: [PATCH 5/7] chore: fix folds and sections in primitives --- pytential/symbolic/primitives.py | 207 ++++++++++++++++--------------- 1 file changed, 109 insertions(+), 98 deletions(-) diff --git a/pytential/symbolic/primitives.py b/pytential/symbolic/primitives.py index 728cedf16..822530ad2 100644 --- a/pytential/symbolic/primitives.py +++ b/pytential/symbolic/primitives.py @@ -95,6 +95,8 @@ from pymbolic.primitives import CommonSubexpression, Quotient +# {{{ docs + __doc__ = """ .. |dofdesc-blurb| replace:: A :class:`~pytential.symbolic.dof_desc.DOFDescriptor` or a symbolic @@ -223,6 +225,12 @@ :undoc-members: :members: mapper_method +.. autoclass:: Ones + :show-inheritance: + :undoc-members: + :members: mapper_method + +.. autofunction:: ones_vec .. autofunction:: nodes .. autofunction:: parametrization_derivative .. autofunction:: parametrization_derivative_matrix @@ -288,20 +296,9 @@ .. autofunction:: integral -.. autoclass:: Ones - :show-inheritance: - :undoc-members: - :members: mapper_method - -.. autofunction:: ones_vec .. autofunction:: area .. autofunction:: mean -.. autoclass:: IterativeInverse - :show-inheritance: - :undoc-members: - :members: mapper_method - Operators ^^^^^^^^^ @@ -312,6 +309,11 @@ .. autofunction:: interpolate +.. autoclass:: IterativeInverse + :show-inheritance: + :undoc-members: + :members: mapper_method + Geometric Calculus (based on Geometric/Clifford Algebra) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -369,6 +371,8 @@ .. autofunction:: pretty """ +# }}} + __all__ = ( # ruff:ignore[unsorted-dunder-all] # re-export from pymbolic "Variable", @@ -508,9 +512,29 @@ def func(operand_i: ArithmeticExpression) -> ArithmeticExpression: return wrapper + +def make_sym_mv(name: str, num_components: int) -> MultiVector[ArithmeticExpression]: + return MultiVector(make_sym_vector(name, num_components)) + + +def make_sym_surface_mv( + name: str, + ambient_dim: int, + dim: int, + dofdesc: DOFDescriptorLike = None + ) -> MultiVector[ArithmeticExpression]: + par_grad = parametrization_derivative_matrix(ambient_dim, dim, dofdesc) + + return sum( + var(f"{name}{i}") + * cse(MultiVector(vec), f"tangent{i}", cse_scope.DISCRETIZATION) + for i, vec in enumerate(par_grad.T)) + # }}} +# {{{ internal + @expr_dataclass() class NamedIntermediateResult(Variable): """Internal variables used by ``pytential.compiler``.""" @@ -527,24 +551,10 @@ class ErrorExpression(ExpressionNode): message: str """The error message to raise when this expression is encountered.""" +# }}} -def make_sym_mv(name: str, num_components: int) -> MultiVector[ArithmeticExpression]: - return MultiVector(make_sym_vector(name, num_components)) - - -def make_sym_surface_mv( - name: str, - ambient_dim: int, - dim: int, - dofdesc: DOFDescriptorLike = None - ) -> MultiVector[ArithmeticExpression]: - par_grad = parametrization_derivative_matrix(ambient_dim, dim, dofdesc) - - return sum( - var(f"{name}{i}") - * cse(MultiVector(vec), f"tangent{i}", cse_scope.DISCRETIZATION) - for i, vec in enumerate(par_grad.T)) +# {{{ function @expr_dataclass() class Function(Variable): @@ -617,6 +627,8 @@ class NumpyMathFunction(Function): exp = NumpyMathFunction("exp") log = NumpyMathFunction("log") +# }}} + # {{{ discretization properties @@ -662,6 +674,30 @@ class QWeight(DiscretizationProperty): """Bare quadrature weights (without Jacobians).""" +@expr_dataclass() +class Ones(ExpressionNode): + """A DOF-vector that is constant *one* on the whole discretization. + """ + + dofdesc: DOFDescriptor = field(default_factory=lambda: DEFAULT_DOFDESC) + """A descriptor for the discretization where the array is defined.""" + + def __post_init__(self) -> None: + if not isinstance(self.dofdesc, DOFDescriptor): + warn("Passing a 'dofdesc' that is not a 'DOFDescriptor' to " + f"{type(self).__name__!r} is deprecated and will stop working " + "in 2027. Use 'as_dofdesc' to convert the descriptor.", + DeprecationWarning, stacklevel=2) + + object.__setattr__(self, "dofdesc", as_dofdesc(self.dofdesc)) + + +def ones_vec(dim: int, + dofdesc: DOFDescriptorLike = None) -> MultiVector[ArithmeticExpression]: + dofdesc = as_dofdesc(dofdesc) + return MultiVector(obj_array.new_1d(dim*[Ones(dofdesc)])) + + @expr_dataclass(init=False) class NodeCoordinateComponent(DiscretizationProperty): """ @@ -1013,6 +1049,10 @@ def shape_operator( 1/(E*G-F*F)*from_numpy(result), "shape_operator") +# }}} + + +# {{{ qbx-specific geometry def _element_size( ambient_dim: int, @@ -1257,10 +1297,6 @@ def _scaled_max_curvature( _max_curvature(ambient_dim, dim, dofdesc=dofdesc) * _mapping_max_stretch_factor(ambient_dim, dim=dim, dofdesc=dofdesc)) -# }}} - - -# {{{ qbx-specific geometry def _expansion_radii_factor(ambient_dim: int, dim: int | None) -> float: if dim is None: @@ -1514,6 +1550,44 @@ def interleave( return Interleave(dof_desc, operand_1, operand_2) +@expr_dataclass() +class IterativeInverse(ExpressionNode): + """A symbolic :math:`A x = b` linear solve expression. + + .. autoattribute:: expression + .. autoattribute:: rhs + .. autoattribute:: variable_name + .. autoattribute:: extra_vars + .. autoattribute:: dofdesc + """ + + expression: ArithmeticExpression + """The operator *A* used in the linear solve.""" + rhs: ArithmeticExpression + """The right-hand side variable used in the linear solve.""" + variable_name: str + """The name of the variable to solve for.""" + + extra_vars: dict[str, Expression] = field(default_factory=dict) + """A dictionary of additional variables required to define the operator.""" + + dofdesc: DOFDescriptor = field(default_factory=lambda: DEFAULT_DOFDESC) + """A descriptor for the geometry on which the solution is defined.""" + + def __post_init__(self) -> None: + if not isinstance(self.dofdesc, DOFDescriptor): + warn("Passing a 'dofdesc' that is not a 'DOFDescriptor' to " + f"{type(self).__name__!r} is deprecated and will stop working " + "in 2027. Use 'as_dofdesc' to convert the descriptor.", + DeprecationWarning, stacklevel=2) + + object.__setattr__(self, "dofdesc", as_dofdesc(self.dofdesc)) + +# }}} + + +# {{{ reductions + @expr_dataclass() class SingleScalarOperandExpression(ExpressionNode): """ @@ -1681,30 +1755,6 @@ def elementwise_max(expr: ArithmeticExpression, return ElementwiseMax(expr, as_dofdesc(dofdesc)) -@expr_dataclass() -class Ones(ExpressionNode): - """A DOF-vector that is constant *one* on the whole discretization. - """ - - dofdesc: DOFDescriptor = field(default_factory=lambda: DEFAULT_DOFDESC) - """A descriptor for the discretization where the array is defined.""" - - def __post_init__(self) -> None: - if not isinstance(self.dofdesc, DOFDescriptor): - warn("Passing a 'dofdesc' that is not a 'DOFDescriptor' to " - f"{type(self).__name__!r} is deprecated and will stop working " - "in 2027. Use 'as_dofdesc' to convert the descriptor.", - DeprecationWarning, stacklevel=2) - - object.__setattr__(self, "dofdesc", as_dofdesc(self.dofdesc)) - - -def ones_vec(dim: int, - dofdesc: DOFDescriptorLike = None) -> MultiVector[ArithmeticExpression]: - dofdesc = as_dofdesc(dofdesc) - return MultiVector(obj_array.new_1d(dim*[Ones(dofdesc)])) - - def area(ambient_dim: int, dim: int, dofdesc: DOFDescriptorLike = None) -> ArithmeticExpression: @@ -1722,40 +1772,10 @@ def mean(ambient_dim: int, integral(ambient_dim, dim, operand, dofdesc) / area(ambient_dim, dim, dofdesc)) +# }}} -@expr_dataclass() -class IterativeInverse(ExpressionNode): - """A symbolic :math:`A x = b` linear solve expression. - - .. autoattribute:: expression - .. autoattribute:: rhs - .. autoattribute:: variable_name - .. autoattribute:: extra_vars - .. autoattribute:: dofdesc - """ - - expression: ArithmeticExpression - """The operator *A* used in the linear solve.""" - rhs: ArithmeticExpression - """The right-hand side variable used in the linear solve.""" - variable_name: str - """The name of the variable to solve for.""" - - extra_vars: dict[str, Expression] = field(default_factory=dict) - """A dictionary of additional variables required to define the operator.""" - - dofdesc: DOFDescriptor = field(default_factory=lambda: DEFAULT_DOFDESC) - """A descriptor for the geometry on which the solution is defined.""" - - def __post_init__(self) -> None: - if not isinstance(self.dofdesc, DOFDescriptor): - warn("Passing a 'dofdesc' that is not a 'DOFDescriptor' to " - f"{type(self).__name__!r} is deprecated and will stop working " - "in 2027. Use 'as_dofdesc' to convert the descriptor.", - DeprecationWarning, stacklevel=2) - - object.__setattr__(self, "dofdesc", as_dofdesc(self.dofdesc)) +# {{{ derivatives class Derivative(DerivativeBase): """A symbolic derivative. @@ -1844,6 +1864,8 @@ def laplace(ambient_dim: int, operand: ArithmeticExpression) -> ArithmeticExpres | d(d.resolve(nabla * d(operand))) ).as_scalar() +# }}} + # {{{ potentials @@ -2186,13 +2208,6 @@ def add_dir_vector_to_kernel_arguments(coeff: ArithmeticExpression) -> Operand: density = cse(density) return (dsource*nabla).map(add_dir_vector_to_kernel_arguments) -# }}} - - -# {{{ non-dimension-specific operators - -# {{{ geometric calculus - class _unspecified: # ruff:ignore[invalid-class-name] pass @@ -2445,10 +2460,6 @@ def Dp( # }}} -# }}} - -# }}} - # {{{ conventional vector calculus From a4295c91941c2bea9a82719ec3a925d13a66dd4b Mon Sep 17 00:00:00 2001 From: Alexandru Fikl Date: Fri, 7 Aug 2026 16:13:06 +0300 Subject: [PATCH 6/7] fix: remove kernel_arguments in NeumannOperator for Laplace --- pytential/symbolic/pde/scalar.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pytential/symbolic/pde/scalar.py b/pytential/symbolic/pde/scalar.py index 2f3ab96f5..6fbd01359 100644 --- a/pytential/symbolic/pde/scalar.py +++ b/pytential/symbolic/pde/scalar.py @@ -517,7 +517,6 @@ def Sp(density: ArithmeticExpression) -> ArithmeticExpression: Dp1 = sym.Dp( laplace, laplace_s_inv_sqrt_w_u, qbx_forced_limit=+1, - kernel_arguments=kernel_arguments, source=dofdesc, target=dofdesc) DpS0u = Dp0 - Dp1 + Dp0S0u From 977566d501bc4e557d431990c67a15613ce16711 Mon Sep 17 00:00:00 2001 From: Alexandru Fikl Date: Fri, 7 Aug 2026 15:24:22 +0300 Subject: [PATCH 7/7] chore: update baseline --- .basedpyright/baseline.json | 878 +++++------------------------------- 1 file changed, 111 insertions(+), 767 deletions(-) diff --git a/.basedpyright/baseline.json b/.basedpyright/baseline.json index 203432843..928c13b29 100644 --- a/.basedpyright/baseline.json +++ b/.basedpyright/baseline.json @@ -11753,14 +11753,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 38, - "endColumn": 39, - "lineCount": 1 - } - }, { "code": "reportArgumentType", "range": { @@ -12025,22 +12017,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 37, - "endColumn": 55, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 20, - "endColumn": 50, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -12073,14 +12049,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 35, - "endColumn": 53, - "lineCount": 1 - } - }, { "code": "reportAny", "range": { @@ -12153,22 +12121,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 37, - "endColumn": 55, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 20, - "endColumn": 46, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -12201,14 +12153,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 31, - "endColumn": 49, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -13716,10 +13660,10 @@ } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 8, - "endColumn": 24, + "startColumn": 16, + "endColumn": 26, "lineCount": 1 } }, @@ -13727,15 +13671,31 @@ "code": "reportUnknownArgumentType", "range": { "startColumn": 16, - "endColumn": 26, + "endColumn": 36, "lineCount": 1 } }, { "code": "reportUnknownArgumentType", "range": { - "startColumn": 16, - "endColumn": 36, + "startColumn": 28, + "endColumn": 39, + "lineCount": 1 + } + }, + { + "code": "reportUnknownArgumentType", + "range": { + "startColumn": 27, + "endColumn": 37, + "lineCount": 1 + } + }, + { + "code": "reportUnknownArgumentType", + "range": { + "startColumn": 35, + "endColumn": 59, "lineCount": 1 } }, @@ -13803,30 +13763,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 50, - "endColumn": 71, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 50, - "endColumn": 71, - "lineCount": 1 - } - }, - { - "code": "reportAttributeAccessIssue", - "range": { - "startColumn": 66, - "endColumn": 71, - "lineCount": 1 - } - }, { "code": "reportUnknownVariableType", "range": { @@ -13859,30 +13795,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 45, - "endColumn": 66, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 45, - "endColumn": 66, - "lineCount": 1 - } - }, - { - "code": "reportAttributeAccessIssue", - "range": { - "startColumn": 61, - "endColumn": 66, - "lineCount": 1 - } - }, { "code": "reportUnknownVariableType", "range": { @@ -13915,14 +13827,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 23, - "lineCount": 1 - } - }, { "code": "reportImplicitOverride", "range": { @@ -13931,14 +13835,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 30, - "endColumn": 42, - "lineCount": 1 - } - }, { "code": "reportMissingParameterType", "range": { @@ -13987,22 +13883,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 15, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 52, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -14027,14 +13907,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 33, - "endColumn": 43, - "lineCount": 1 - } - }, { "code": "reportMissingParameterType", "range": { @@ -14051,14 +13923,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 38, - "endColumn": 44, - "lineCount": 1 - } - }, { "code": "reportMissingParameterType", "range": { @@ -14067,14 +13931,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 46, - "endColumn": 58, - "lineCount": 1 - } - }, { "code": "reportMissingParameterType", "range": { @@ -14083,14 +13939,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 60, - "endColumn": 63, - "lineCount": 1 - } - }, { "code": "reportMissingParameterType", "range": { @@ -14099,14 +13947,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 65, - "endColumn": 69, - "lineCount": 1 - } - }, { "code": "reportMissingParameterType", "range": { @@ -14155,14 +13995,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 47, - "endColumn": 58, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -14339,14 +14171,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 46, - "endColumn": 66, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -14355,30 +14179,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 26, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 26, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportAttributeAccessIssue", - "range": { - "startColumn": 42, - "endColumn": 47, - "lineCount": 1 - } - }, { "code": "reportUnknownParameterType", "range": { @@ -14476,111 +14276,23 @@ } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownMemberType", "range": { "startColumn": 8, - "endColumn": 18, + "endColumn": 21, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportAny", "range": { - "startColumn": 21, - "endColumn": 48, + "startColumn": 8, + "endColumn": 11, "lineCount": 1 } }, { - "code": "reportAttributeAccessIssue", - "range": { - "startColumn": 37, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 40, - "endColumn": 55, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 8, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 22, - "endColumn": 40, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 11, - "endColumn": 26, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 33, - "endColumn": 59, - "lineCount": 1 - } - }, - { - "code": "reportAttributeAccessIssue", - "range": { - "startColumn": 49, - "endColumn": 59, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 24, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 48, - "endColumn": 63, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 35, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 11, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", + "code": "reportAny", "range": { "startColumn": 13, "endColumn": 21, @@ -14612,7 +14324,7 @@ } }, { - "code": "reportUnknownVariableType", + "code": "reportAny", "range": { "startColumn": 8, "endColumn": 16, @@ -14620,7 +14332,7 @@ } }, { - "code": "reportUnknownMemberType", + "code": "reportAny", "range": { "startColumn": 19, "endColumn": 29, @@ -14628,7 +14340,7 @@ } }, { - "code": "reportUnknownArgumentType", + "code": "reportAny", "range": { "startColumn": 18, "endColumn": 26, @@ -14636,7 +14348,7 @@ } }, { - "code": "reportUnknownArgumentType", + "code": "reportAny", "range": { "startColumn": 31, "endColumn": 83, @@ -14652,7 +14364,7 @@ } }, { - "code": "reportUnknownMemberType", + "code": "reportAny", "range": { "startColumn": 15, "endColumn": 29, @@ -14668,7 +14380,7 @@ } }, { - "code": "reportUnknownVariableType", + "code": "reportAny", "range": { "startColumn": 15, "endColumn": 23, @@ -14755,30 +14467,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 13, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 16, - "endColumn": 55, - "lineCount": 1 - } - }, - { - "code": "reportAttributeAccessIssue", - "range": { - "startColumn": 32, - "endColumn": 55, - "lineCount": 1 - } - }, { "code": "reportUnknownVariableType", "range": { @@ -14803,30 +14491,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 12, - "endColumn": 35, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 37, - "endColumn": 55, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 20, - "endColumn": 50, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -14875,22 +14539,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 33, - "endColumn": 59, - "lineCount": 1 - } - }, - { - "code": "reportAttributeAccessIssue", - "range": { - "startColumn": 49, - "endColumn": 59, - "lineCount": 1 - } - }, { "code": "reportUnknownMemberType", "range": { @@ -14979,14 +14627,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 44, - "endColumn": 64, - "lineCount": 1 - } - }, { "code": "reportUnknownVariableType", "range": { @@ -15083,30 +14723,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 12, - "endColumn": 17, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 74, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 37, - "endColumn": 57, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -15115,30 +14731,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 26, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 26, - "endColumn": 47, - "lineCount": 1 - } - }, - { - "code": "reportAttributeAccessIssue", - "range": { - "startColumn": 42, - "endColumn": 47, - "lineCount": 1 - } - }, { "code": "reportUnknownMemberType", "range": { @@ -15148,15 +14740,7 @@ } }, { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 26, - "endColumn": 44, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", + "code": "reportAny", "range": { "startColumn": 12, "endColumn": 17, @@ -15164,29 +14748,13 @@ } }, { - "code": "reportUnknownMemberType", + "code": "reportAny", "range": { "startColumn": 20, "endColumn": 31, "lineCount": 21 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 26, - "endColumn": 46, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 26, - "endColumn": 33, - "lineCount": 1 - } - }, { "code": "reportPossiblyUnboundVariable", "range": { @@ -15323,30 +14891,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 14, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 17, - "endColumn": 56, - "lineCount": 1 - } - }, - { - "code": "reportAttributeAccessIssue", - "range": { - "startColumn": 33, - "endColumn": 56, - "lineCount": 1 - } - }, { "code": "reportUnknownVariableType", "range": { @@ -15411,14 +14955,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 20, - "endColumn": 40, - "lineCount": 1 - } - }, { "code": "reportUnknownVariableType", "range": { @@ -15443,14 +14979,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 22, - "endColumn": 40, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -15483,30 +15011,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 12, - "endColumn": 35, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 37, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 20, - "endColumn": 46, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -15532,37 +15036,13 @@ } }, { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 33, - "endColumn": 59, - "lineCount": 1 - } - }, - { - "code": "reportAttributeAccessIssue", - "range": { - "startColumn": 49, - "endColumn": 59, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", + "code": "reportAny", "range": { "startColumn": 12, "endColumn": 17, "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 26, - "endColumn": 39, - "lineCount": 1 - } - }, { "code": "reportUnknownVariableType", "range": { @@ -15588,7 +15068,7 @@ } }, { - "code": "reportUnknownVariableType", + "code": "reportAny", "range": { "startColumn": 16, "endColumn": 21, @@ -15676,42 +15156,18 @@ } }, { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 17, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 14, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 17, - "endColumn": 54, + "startColumn": 8, + "endColumn": 17, "lineCount": 1 } }, { - "code": "reportAttributeAccessIssue", + "code": "reportUnknownVariableType", "range": { - "startColumn": 33, - "endColumn": 54, + "startColumn": 8, + "endColumn": 19, "lineCount": 1 } }, @@ -15780,7 +15236,7 @@ } }, { - "code": "reportUnknownVariableType", + "code": "reportAny", "range": { "startColumn": 16, "endColumn": 19, @@ -15788,7 +15244,7 @@ } }, { - "code": "reportUnknownVariableType", + "code": "reportAny", "range": { "startColumn": 21, "endColumn": 25, @@ -15804,18 +15260,10 @@ } }, { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 26, - "endColumn": 44, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", + "code": "reportArgumentType", "range": { - "startColumn": 16, - "endColumn": 44, + "startColumn": 45, + "endColumn": 51, "lineCount": 1 } }, @@ -15828,7 +15276,7 @@ } }, { - "code": "reportUnknownArgumentType", + "code": "reportAny", "range": { "startColumn": 66, "endColumn": 69, @@ -15836,7 +15284,7 @@ } }, { - "code": "reportUnknownArgumentType", + "code": "reportAny", "range": { "startColumn": 71, "endColumn": 75, @@ -15939,22 +15387,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 19, - "endColumn": 34, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 19, - "endColumn": 34, - "lineCount": 1 - } - }, { "code": "reportUnknownVariableType", "range": { @@ -15979,30 +15411,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 14, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 17, - "endColumn": 39, - "lineCount": 1 - } - }, - { - "code": "reportAttributeAccessIssue", - "range": { - "startColumn": 33, - "endColumn": 39, - "lineCount": 1 - } - }, { "code": "reportUnknownMemberType", "range": { @@ -16052,42 +15460,50 @@ } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 28, - "endColumn": 46, + "startColumn": 40, + "endColumn": 44, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportArgumentType", "range": { - "startColumn": 28, - "endColumn": 50, + "startColumn": 37, + "endColumn": 43, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportArgumentType", "range": { - "startColumn": 23, - "endColumn": 38, + "startColumn": 58, + "endColumn": 61, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportArgumentType", "range": { - "startColumn": 40, - "endColumn": 44, + "startColumn": 63, + "endColumn": 67, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownParameterType", "range": { "startColumn": 8, - "endColumn": 36, + "endColumn": 27, + "lineCount": 1 + } + }, + { + "code": "reportIncompatibleMethodOverride", + "range": { + "startColumn": 8, + "endColumn": 27, "lineCount": 1 } }, @@ -16099,6 +15515,14 @@ "lineCount": 1 } }, + { + "code": "reportUnknownParameterType", + "range": { + "startColumn": 34, + "endColumn": 38, + "lineCount": 1 + } + }, { "code": "reportMissingParameterType", "range": { @@ -16124,34 +15548,34 @@ } }, { - "code": "reportUnknownVariableType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 8, - "endColumn": 17, + "startColumn": 48, + "endColumn": 52, "lineCount": 1 } }, { - "code": "reportUnknownMemberType", + "code": "reportUnknownArgumentType", "range": { - "startColumn": 20, - "endColumn": 47, + "startColumn": 54, + "endColumn": 63, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownMemberType", "range": { - "startColumn": 54, - "endColumn": 63, + "startColumn": 15, + "endColumn": 30, "lineCount": 1 } }, { - "code": "reportUnknownArgumentType", + "code": "reportUnknownVariableType", "range": { - "startColumn": 31, - "endColumn": 40, + "startColumn": 15, + "endColumn": 41, "lineCount": 1 } } @@ -17469,14 +16893,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 14, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -17486,15 +16902,7 @@ } }, { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 29, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", + "code": "reportIncompatibleMethodOverride", "range": { "startColumn": 8, "endColumn": 26, @@ -17502,61 +16910,13 @@ } }, { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 15, - "endColumn": 85, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 85, - "lineCount": 1 - } - }, - { - "code": "reportAttributeAccessIssue", - "range": { - "startColumn": 51, - "endColumn": 85, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", + "code": "reportIncompatibleMethodOverride", "range": { "startColumn": 8, "endColumn": 27, "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 15, - "endColumn": 59, - "lineCount": 3 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 15, - "endColumn": 59, - "lineCount": 3 - } - }, - { - "code": "reportAttributeAccessIssue", - "range": { - "startColumn": 17, - "endColumn": 58, - "lineCount": 1 - } - }, { "code": "reportMissingParameterType", "range": { @@ -28553,6 +27913,14 @@ "lineCount": 1 } }, + { + "code": "reportAbstractUsage", + "range": { + "startColumn": 19, + "endColumn": 18, + "lineCount": 4 + } + }, { "code": "reportCallIssue", "range": { @@ -28681,6 +28049,14 @@ "lineCount": 1 } }, + { + "code": "reportAbstractUsage", + "range": { + "startColumn": 19, + "endColumn": 18, + "lineCount": 4 + } + }, { "code": "reportCallIssue", "range": { @@ -43861,14 +43237,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 32, - "endColumn": 41, - "lineCount": 1 - } - }, { "code": "reportUnknownVariableType", "range": { @@ -43917,22 +43285,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 12, - "endColumn": 18, - "lineCount": 1 - } - }, - { - "code": "reportOptionalSubscript", - "range": { - "startColumn": 21, - "endColumn": 48, - "lineCount": 1 - } - }, { "code": "reportUnknownMemberType", "range": { @@ -43941,14 +43293,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 49, - "endColumn": 55, - "lineCount": 1 - } - }, { "code": "reportUnknownMemberType", "range": {