From 4da6c4d691c9a259ced83175ff6c07bfcbb92aee Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Thu, 3 Jul 2025 14:03:01 -0500 Subject: [PATCH 1/6] ExpressionNode: allow arithmetic only with ArithmeticExpression --- pymbolic/primitives.py | 50 ++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/pymbolic/primitives.py b/pymbolic/primitives.py index 5011ab3..54786e7 100644 --- a/pymbolic/primitives.py +++ b/pymbolic/primitives.py @@ -1,3 +1,5 @@ +# pyright: reportUnreachable=none + from __future__ import annotations @@ -490,81 +492,81 @@ def init_arg_names(self) -> tuple[str, ...]: # {{{ arithmetic - def __add__(self, other: object) -> Sum: + def __add__(self, other: ArithmeticExpression) -> Sum: if not is_arithmetic_expression(other): return NotImplemented return Sum((self, other)) - def __radd__(self, other: object) -> Sum: + def __radd__(self, other: ArithmeticExpression) -> Sum: if not is_arithmetic_expression(other): return NotImplemented return Sum((other, self)) - def __sub__(self, other: object) -> Sum: + def __sub__(self, other: ArithmeticExpression) -> Sum: if not is_arithmetic_expression(other): return NotImplemented return Sum((self, -other)) - def __rsub__(self, other: object) -> Sum: + def __rsub__(self, other: ArithmeticExpression) -> Sum: if not is_arithmetic_expression(other): return NotImplemented return Sum((other, -self)) - def __mul__(self, other: object) -> Product: + def __mul__(self, other: ArithmeticExpression) -> Product: if not is_arithmetic_expression(other): return NotImplemented return Product((self, other)) - def __rmul__(self, other: object) -> Product: + def __rmul__(self, other: ArithmeticExpression) -> Product: if not is_arithmetic_expression(other): return NotImplemented return Product((other, self)) - def __truediv__(self, other: object) -> Quotient: + def __truediv__(self, other: ArithmeticExpression) -> Quotient: if not is_arithmetic_expression(other): return NotImplemented return Quotient(self, other) - def __rtruediv__(self, other: object) -> Quotient: + def __rtruediv__(self, other: ArithmeticExpression) -> Quotient: if not is_arithmetic_expression(other): return NotImplemented return Quotient(other, self) - def __floordiv__(self, other: object) -> FloorDiv: + def __floordiv__(self, other: ArithmeticExpression) -> FloorDiv: if not is_arithmetic_expression(other): return NotImplemented return FloorDiv(self, other) - def __rfloordiv__(self, other: object) -> FloorDiv: + def __rfloordiv__(self, other: ArithmeticExpression) -> FloorDiv: if not is_arithmetic_expression(other): return NotImplemented return FloorDiv(other, self) - def __mod__(self, other: object) -> Remainder: + def __mod__(self, other: ArithmeticExpression) -> Remainder: if not is_arithmetic_expression(other): return NotImplemented return Remainder(self, other) - def __rmod__(self, other: object) -> Remainder: + def __rmod__(self, other: ArithmeticExpression) -> Remainder: if not is_arithmetic_expression(other): return NotImplemented return Remainder(other, self) - def __pow__(self, other: object) -> Power: + def __pow__(self, other: ArithmeticExpression) -> Power: if not is_arithmetic_expression(other): return NotImplemented return Power(self, other) - def __rpow__(self, other: object) -> Power: + def __rpow__(self, other: ArithmeticExpression) -> Power: if not is_arithmetic_expression(other): return NotImplemented @@ -574,25 +576,25 @@ def __rpow__(self, other: object) -> Power: # {{{ shifts - def __lshift__(self, other: object) -> LeftShift: + def __lshift__(self, other: _Expression) -> LeftShift: if not is_valid_operand(other): return NotImplemented return LeftShift(self, other) - def __rlshift__(self, other: object) -> LeftShift: + def __rlshift__(self, other: _Expression) -> LeftShift: if not is_valid_operand(other): return NotImplemented return LeftShift(other, self) - def __rshift__(self, other: object) -> RightShift: + def __rshift__(self, other: _Expression) -> RightShift: if not is_valid_operand(other): return NotImplemented return RightShift(self, other) - def __rrshift__(self, other: object) -> RightShift: + def __rrshift__(self, other: _Expression) -> RightShift: if not is_valid_operand(other): return NotImplemented @@ -605,37 +607,37 @@ def __rrshift__(self, other: object) -> RightShift: def __invert__(self) -> BitwiseNot: return BitwiseNot(self) - def __or__(self, other: object) -> BitwiseOr: + def __or__(self, other: _Expression) -> BitwiseOr: if not is_valid_operand(other): return NotImplemented return BitwiseOr((self, other)) - def __ror__(self, other: object) -> BitwiseOr: + def __ror__(self, other: _Expression) -> BitwiseOr: if not is_valid_operand(other): return NotImplemented return BitwiseOr((other, self)) - def __xor__(self, other: object) -> BitwiseXor: + def __xor__(self, other: _Expression) -> BitwiseXor: if not is_valid_operand(other): return NotImplemented return BitwiseXor((self, other)) - def __rxor__(self, other: object) -> BitwiseXor: + def __rxor__(self, other: _Expression) -> BitwiseXor: if not is_valid_operand(other): return NotImplemented return BitwiseXor((other, self)) - def __and__(self, other: object) -> BitwiseAnd: + def __and__(self, other: _Expression) -> BitwiseAnd: if not is_valid_operand(other): return NotImplemented return BitwiseAnd((self, other)) - def __rand__(self, other: object) -> BitwiseAnd: + def __rand__(self, other: _Expression) -> BitwiseAnd: if not is_valid_operand(other): return NotImplemented From 9f4eef93da14a478a0147649626df162a9870555 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Thu, 3 Jul 2025 14:03:20 -0500 Subject: [PATCH 2/6] Dependencies is not a type var, drop the T --- pymbolic/mapper/collector.py | 4 ++-- pymbolic/mapper/dependency.py | 32 ++++++++++++++++++-------------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/pymbolic/mapper/collector.py b/pymbolic/mapper/collector.py index 8a9134e..cead0d7 100644 --- a/pymbolic/mapper/collector.py +++ b/pymbolic/mapper/collector.py @@ -36,7 +36,7 @@ if TYPE_CHECKING: from collections.abc import Sequence, Set - from pymbolic.mapper.dependency import DependenciesT + from pymbolic.mapper.dependency import Dependencies from pymbolic.typing import ArithmeticExpression, Expression @@ -53,7 +53,7 @@ def __init__(self, parameters: Set[p.AlgebraicLeaf] | None = None): parameters = set() self.parameters = parameters - def get_dependencies(self, expr: Expression) -> DependenciesT: + def get_dependencies(self, expr: Expression) -> Dependencies: from pymbolic.mapper.dependency import DependencyMapper return DependencyMapper()(expr) diff --git a/pymbolic/mapper/dependency.py b/pymbolic/mapper/dependency.py index c5dbcb4..63bce1f 100644 --- a/pymbolic/mapper/dependency.py +++ b/pymbolic/mapper/dependency.py @@ -5,8 +5,6 @@ from __future__ import annotations -from typing_extensions import override - __copyright__ = "Copyright (C) 2009-2013 Andreas Kloeckner" @@ -31,17 +29,23 @@ """ from collections.abc import Set -from typing import Literal, TypeAlias +from typing import TYPE_CHECKING, Literal, TypeAlias + +from typing_extensions import override import pymbolic.primitives as p from pymbolic.mapper import CachedMapper, Collector, CSECachingMapperMixin, P -DependenciesT: TypeAlias = Set[p.AlgebraicLeaf | p.CommonSubexpression] +Dependency: TypeAlias = p.AlgebraicLeaf | p.CommonSubexpression +Dependencies: TypeAlias = Set[Dependency] + +if not TYPE_CHECKING: + DependenciesT: TypeAlias = Dependencies class DependencyMapper( - CSECachingMapperMixin[DependenciesT, P], + CSECachingMapperMixin[Dependencies, P], Collector[p.AlgebraicLeaf | p.CommonSubexpression, P], ): """Maps an expression to the :class:`set` of expressions it @@ -84,13 +88,13 @@ def __init__( @override def map_variable( self, expr: p.Variable, *args: P.args, **kwargs: P.kwargs - ) -> DependenciesT: + ) -> Dependencies: return {expr} @override def map_call( self, expr: p.Call, *args: P.args, **kwargs: P.kwargs - ) -> DependenciesT: + ) -> Dependencies: if self.include_calls == "descend_args": return self.combine([ self.rec(child, *args, **kwargs) for child in expr.parameters @@ -103,7 +107,7 @@ def map_call( @override def map_call_with_kwargs( self, expr: p.CallWithKwargs, *args: P.args, **kwargs: P.kwargs - ) -> DependenciesT: + ) -> Dependencies: if self.include_calls == "descend_args": return self.combine( [self.rec(child, *args, **kwargs) for child in expr.parameters] @@ -120,7 +124,7 @@ def map_call_with_kwargs( @override def map_lookup( self, expr: p.Lookup, *args: P.args, **kwargs: P.kwargs - ) -> DependenciesT: + ) -> Dependencies: if self.include_lookups: return {expr} else: @@ -129,7 +133,7 @@ def map_lookup( @override def map_subscript( self, expr: p.Subscript, *args: P.args, **kwargs: P.kwargs - ) -> DependenciesT: + ) -> Dependencies: if self.include_subscripts: return {expr} else: @@ -138,7 +142,7 @@ def map_subscript( @override def map_common_subexpression_uncached( self, expr: p.CommonSubexpression, *args: P.args, **kwargs: P.kwargs - ) -> DependenciesT: + ) -> Dependencies: if self.include_cses: return {expr} else: @@ -148,7 +152,7 @@ def map_common_subexpression_uncached( @override def map_slice( self, expr: p.Slice, *args: P.args, **kwargs: P.kwargs - ) -> DependenciesT: + ) -> Dependencies: return self.combine([ self.rec(child, *args, **kwargs) for child in expr.children @@ -156,11 +160,11 @@ def map_slice( ]) @override - def map_nan(self, expr: p.NaN, *args: P.args, **kwargs: P.kwargs) -> DependenciesT: + def map_nan(self, expr: p.NaN, *args: P.args, **kwargs: P.kwargs) -> Dependencies: return set() -class CachedDependencyMapper(CachedMapper[DependenciesT, P], +class CachedDependencyMapper(CachedMapper[Dependencies, P], DependencyMapper[P]): def __init__( self, From 2173a8f0c1d611d760087e6f9829f5547791d5cd Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Thu, 3 Jul 2025 14:03:56 -0500 Subject: [PATCH 3/6] MultiVector.as_vector: return 1D array --- pymbolic/geometric_algebra/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pymbolic/geometric_algebra/__init__.py b/pymbolic/geometric_algebra/__init__.py index 900a74c..b54b278 100644 --- a/pymbolic/geometric_algebra/__init__.py +++ b/pymbolic/geometric_algebra/__init__.py @@ -1196,7 +1196,9 @@ def as_scalar(self) -> CoeffT | int: return result - def as_vector(self, dtype: DTypeLike = None) -> NDArray[Any]: + def as_vector(self, + dtype: DTypeLike = None + ) -> np.ndarray[tuple[int], np.dtype[Any]]: """Return a :mod:`numpy` vector corresponding to the grade-1 :class:`MultiVector` *self*. From fcf48eb232f32c6e1ae522971211c0228b49e11c Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Thu, 3 Jul 2025 14:06:22 -0500 Subject: [PATCH 4/6] Improve GA mapper types --- pymbolic/geometric_algebra/mapper.py | 44 +++++++++++++++--------- pymbolic/geometric_algebra/primitives.py | 7 ++-- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/pymbolic/geometric_algebra/mapper.py b/pymbolic/geometric_algebra/mapper.py index a66a66d..05ad0b7 100644 --- a/pymbolic/geometric_algebra/mapper.py +++ b/pymbolic/geometric_algebra/mapper.py @@ -27,6 +27,8 @@ # Consider yourself warned. from typing import TYPE_CHECKING, ClassVar +from typing_extensions import override + import pymbolic.geometric_algebra.primitives as prim from pymbolic.geometric_algebra import MultiVector from pymbolic.mapper import ( @@ -48,6 +50,7 @@ PREC_NONE, StringifyMapper as StringifyMapperBase, ) +from pymbolic.typing import ArithmeticExpression if TYPE_CHECKING: @@ -117,13 +120,20 @@ def map_derivative_source( self.post_visit(expr, *args, **kwargs) -class EvaluationMapper(EvaluationMapperBase): +class EvaluationMapper(EvaluationMapperBase[ResultT]): def map_nabla_component(self, expr): return expr map_nabla = map_nabla_component - def map_derivative_source(self, expr): + +class EvaluationRewriter(EvaluationMapperBase[ArithmeticExpression]): + def map_nabla_component(self, expr: prim.NablaComponent) -> ArithmeticExpression: + return expr + + def map_derivative_source(self, + expr: prim.DerivativeSource + ) -> ArithmeticExpression: operand = self.rec(expr.operand) if operand is expr.operand: return expr @@ -160,7 +170,7 @@ def map_derivative_source(self, expr): # {{{ dimensionalizer -class Dimensionalizer(EvaluationMapper): +class Dimensionalizer(EvaluationRewriter): """ .. attribute:: ambient_dim @@ -168,7 +178,7 @@ class Dimensionalizer(EvaluationMapper): """ @property - def ambient_dim(self): + def ambient_dim(self) -> int: raise NotImplementedError def map_multivector_variable(self, expr): @@ -183,7 +193,8 @@ def map_nabla(self, expr): [prim.NablaComponent(axis, expr.nabla_id) for axis in range(self.ambient_dim)])) - def map_derivative_source(self, expr): + @override + def map_derivative_source(self, expr: prim.DerivativeSource): rec_op = self.rec(expr.operand) if isinstance(rec_op, MultiVector): @@ -214,25 +225,26 @@ def map_derivative_source(self, expr): return {expr} | self.rec(expr.operand) -class NablaComponentToUnitVector(EvaluationMapper): +class NablaComponentToUnitVector(EvaluationRewriter): def __init__(self, nabla_id, ambient_axis): - self.nabla_id = nabla_id - self.ambient_axis = ambient_axis + self.nabla_id: prim.NablaId = nabla_id + self.ambient_axis: int = ambient_axis def map_variable(self, expr): return expr - def map_nabla_component(self, expr): + @override + def map_nabla_component(self, expr: prim.NablaComponent) -> ArithmeticExpression: if expr.nabla_id == self.nabla_id: if expr.ambient_axis == self.ambient_axis: return 1 else: return 0 else: - return EvaluationMapper.map_nabla_component(self, expr) + return super().map_nabla_component(expr) -class DerivativeSourceFinder(EvaluationMapper): +class DerivativeSourceFinder(EvaluationRewriter): """Recurses down until it finds the :class:`pymbolic.geometric_algebra.primitives.DerivativeSource` with the right *nabla_id*, then calls :method:`DerivativeBinder.take_derivative` @@ -240,18 +252,18 @@ class DerivativeSourceFinder(EvaluationMapper): """ def __init__(self, nabla_id, binder, ambient_axis): - self.nabla_id = nabla_id - self.binder = binder - self.ambient_axis = ambient_axis + self.nabla_id: prim.NablaId = nabla_id + self.binder: DerivativeBinder = binder + self.ambient_axis: int = ambient_axis def map_derivative_source(self, expr): if expr.nabla_id == self.nabla_id: return self.binder.take_derivative(self.ambient_axis, expr.operand) else: - return EvaluationMapper.map_derivative_source(self, expr) + return super().map_derivative_source(expr) -class DerivativeBinder(IdentityMapper): +class DerivativeBinder(IdentityMapper[[]]): derivative_source_and_nabla_component_collector = \ DerivativeSourceAndNablaComponentCollector nabla_component_to_unit_vector = NablaComponentToUnitVector diff --git a/pymbolic/geometric_algebra/primitives.py b/pymbolic/geometric_algebra/primitives.py index 552fbf1..b62d7e9 100644 --- a/pymbolic/geometric_algebra/primitives.py +++ b/pymbolic/geometric_algebra/primitives.py @@ -26,7 +26,7 @@ # This is experimental, undocumented, and could go away any second. # Consider yourself warned. -from typing import TYPE_CHECKING, ClassVar +from typing import TYPE_CHECKING, ClassVar, TypeAlias from pymbolic.primitives import ExpressionNode, Variable, expr_dataclass @@ -49,10 +49,13 @@ def stringifier(self): return StringifyMapper +NablaId: TypeAlias = "Hashable" + + @expr_dataclass() class NablaComponent(_GeometricCalculusExpression): ambient_axis: int - nabla_id: Hashable + nabla_id: NablaId @expr_dataclass() From 7bf78cd0418b61c47cd4155fa5401c4ba719fef1 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Thu, 3 Jul 2025 14:59:03 -0500 Subject: [PATCH 5/6] Slices consist of ArithmeticExpressions --- pymbolic/parser.py | 11 +++++++---- pymbolic/primitives.py | 8 ++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/pymbolic/parser.py b/pymbolic/parser.py index b449af4..9b7b715 100644 --- a/pymbolic/parser.py +++ b/pymbolic/parser.py @@ -31,7 +31,7 @@ import pytools.lex from pytools import memoize_method -from pymbolic.primitives import is_arithmetic_expression +from pymbolic.primitives import Slice, is_arithmetic_expression if TYPE_CHECKING: @@ -104,7 +104,9 @@ _PREC_CALL = 250 -def _join_to_slice(left, right): +def _join_to_slice( + left: Slice | ArithmeticExpression | None, + right: ArithmeticExpression | None): from pymbolic.primitives import Slice if isinstance(right, Slice): return Slice((left, *right.children)) @@ -247,7 +249,7 @@ def parse_prefix(self, pstate: LexIterator): expr_pstate = pstate.copy() from pytools.lex import ParseError try: - next_expr = self.parse_expression(expr_pstate, _PREC_SLICE) + next_expr = self.parse_arith_expression(expr_pstate, _PREC_SLICE) except ParseError: # no expression follows, too bad. left_exp = primitives.Slice((None,)) @@ -489,10 +491,11 @@ def parse_postfix(self, expr_pstate = pstate.copy() assert not isinstance(left_exp, primitives.Slice) + assert is_arithmetic_expression(left_exp) from pytools.lex import ParseError try: - next_expr = self.parse_expression(expr_pstate, _PREC_SLICE) + next_expr = self.parse_arith_expression(expr_pstate, _PREC_SLICE) except ParseError: # no expression follows, too bad. left_exp = primitives.Slice((left_exp, None,)) diff --git a/pymbolic/primitives.py b/pymbolic/primitives.py index 54786e7..3acfdb6 100644 --- a/pymbolic/primitives.py +++ b/pymbolic/primitives.py @@ -1670,10 +1670,10 @@ class Derivative(ExpressionNode): SliceChildrenT: TypeAlias = (tuple[()] - | tuple[_Expression | None] - | tuple[_Expression | None, _Expression | None] - | tuple[_Expression | None, _Expression | None, _Expression - | None]) + | tuple[ArithmeticExpression | None] + | tuple[ArithmeticExpression | None, ArithmeticExpression | None] + | tuple[ArithmeticExpression | None, ArithmeticExpression | None, + ArithmeticExpression | None]) @expr_dataclass() From 9bd44d911e0462b01eb170987e9fb2094fe474b1 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Thu, 3 Jul 2025 14:06:32 -0500 Subject: [PATCH 6/6] Update baseline --- .basedpyright/baseline.json | 506 ++---------------------------------- 1 file changed, 17 insertions(+), 489 deletions(-) diff --git a/.basedpyright/baseline.json b/.basedpyright/baseline.json index 02e3954..3cafdf0 100644 --- a/.basedpyright/baseline.json +++ b/.basedpyright/baseline.json @@ -4225,14 +4225,6 @@ "lineCount": 1 } }, - { - "code": "reportMissingTypeArgument", - "range": { - "startColumn": 23, - "endColumn": 43, - "lineCount": 1 - } - }, { "code": "reportUnknownParameterType", "range": { @@ -4281,94 +4273,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 29, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 36, - "endColumn": 40, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 36, - "endColumn": 40, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 15, - "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": 49, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 35, - "endColumn": 48, - "lineCount": 1 - } - }, { "code": "reportUnknownParameterType", "range": { @@ -4689,14 +4593,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 8, - "endColumn": 19, - "lineCount": 1 - } - }, { "code": "reportUnknownParameterType", "range": { @@ -4729,22 +4625,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 43, - "endColumn": 59, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 43, - "endColumn": 59, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -4761,14 +4641,6 @@ "lineCount": 1 } }, - { - "code": "reportImplicitOverride", - "range": { - "startColumn": 8, - "endColumn": 17, - "lineCount": 1 - } - }, { "code": "reportUnknownParameterType", "range": { @@ -4801,22 +4673,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 34, - "endColumn": 50, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 34, - "endColumn": 50, - "lineCount": 1 - } - }, { "code": "reportUnknownParameterType", "range": { @@ -4826,53 +4682,13 @@ } }, { - "code": "reportImplicitOverride", + "code": "reportIncompatibleMethodOverride", "range": { "startColumn": 8, "endColumn": 29, "lineCount": 1 } }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 36, - "endColumn": 40, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 36, - "endColumn": 40, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 8, - "endColumn": 14, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 26, - "endColumn": 38, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 26, - "endColumn": 38, - "lineCount": 1 - } - }, { "code": "reportUnknownMemberType", "range": { @@ -4905,46 +4721,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 58, - "endColumn": 71, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 58, - "endColumn": 71, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 19, - "endColumn": 48, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 19, - "endColumn": 54, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 49, - "endColumn": 53, - "lineCount": 1 - } - }, { "code": "reportMissingTypeArgument", "range": { @@ -5129,22 +4905,6 @@ "lineCount": 1 } }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 25, - "lineCount": 1 - } - }, { "code": "reportImplicitOverride", "range": { @@ -5161,78 +4921,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownParameterType", - "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": "reportUnknownMemberType", - "range": { - "startColumn": 11, - "endColumn": 24, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 15, - "endColumn": 32, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 19, - "endColumn": 55, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 19, - "endColumn": 67, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 62, - "endColumn": 66, - "lineCount": 1 - } - }, { "code": "reportMissingSuperCall", "range": { @@ -5289,30 +4977,6 @@ "lineCount": 1 } }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 21, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 19, - "lineCount": 1 - } - }, - { - "code": "reportUnannotatedClassAttribute", - "range": { - "startColumn": 13, - "endColumn": 25, - "lineCount": 1 - } - }, { "code": "reportUnknownParameterType", "range": { @@ -5329,14 +4993,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 36, - "endColumn": 40, - "lineCount": 1 - } - }, { "code": "reportMissingParameterType", "range": { @@ -5345,14 +5001,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 11, - "endColumn": 24, - "lineCount": 1 - } - }, { "code": "reportUnknownMemberType", "range": { @@ -5369,46 +5017,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 66, - "endColumn": 78, - "lineCount": 1 - } - }, - { - "code": "reportUnknownMemberType", - "range": { - "startColumn": 19, - "endColumn": 57, - "lineCount": 1 - } - }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 19, - "endColumn": 69, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 64, - "endColumn": 68, - "lineCount": 1 - } - }, - { - "code": "reportMissingTypeArgument", - "range": { - "startColumn": 23, - "endColumn": 37, - "lineCount": 1 - } - }, { "code": "reportUnannotatedClassAttribute", "range": { @@ -6225,14 +5833,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 20, - "endColumn": 33, - "lineCount": 2 - } - }, { "code": "reportUnknownMemberType", "range": { @@ -28283,38 +27883,6 @@ } ], "./pymbolic/parser.py": [ - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 19, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 19, - "endColumn": 23, - "lineCount": 1 - } - }, - { - "code": "reportUnknownParameterType", - "range": { - "startColumn": 25, - "endColumn": 30, - "lineCount": 1 - } - }, - { - "code": "reportMissingParameterType", - "range": { - "startColumn": 25, - "endColumn": 30, - "lineCount": 1 - } - }, { "code": "reportArgumentType", "range": { @@ -28323,14 +27891,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 21, - "endColumn": 34, - "lineCount": 1 - } - }, { "code": "reportMissingTypeArgument", "range": { @@ -28387,14 +27947,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 16, - "endColumn": 25, - "lineCount": 1 - } - }, { "code": "reportUnknownVariableType", "range": { @@ -28523,14 +28075,6 @@ "lineCount": 1 } }, - { - "code": "reportUnnecessaryCast", - "range": { - "startColumn": 15, - "endColumn": 49, - "lineCount": 1 - } - }, { "code": "reportUnknownParameterType", "range": { @@ -28691,22 +28235,6 @@ "lineCount": 1 } }, - { - "code": "reportUnknownVariableType", - "range": { - "startColumn": 16, - "endColumn": 25, - "lineCount": 1 - } - }, - { - "code": "reportUnknownArgumentType", - "range": { - "startColumn": 52, - "endColumn": 61, - "lineCount": 1 - } - }, { "code": "reportUnknownVariableType", "range": { @@ -30479,14 +30007,6 @@ "lineCount": 1 } }, - { - "code": "reportOperatorIssue", - "range": { - "startColumn": 28, - "endColumn": 34, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -30951,14 +30471,6 @@ "lineCount": 1 } }, - { - "code": "reportOperatorIssue", - "range": { - "startColumn": 24, - "endColumn": 47, - "lineCount": 1 - } - }, { "code": "reportUnknownArgumentType", "range": { @@ -31847,6 +31359,22 @@ "lineCount": 1 } }, + { + "code": "reportUnknownVariableType", + "range": { + "startColumn": 4, + "endColumn": 11, + "lineCount": 1 + } + }, + { + "code": "reportOperatorIssue", + "range": { + "startColumn": 14, + "endColumn": 62, + "lineCount": 1 + } + }, { "code": "reportUnknownLambdaType", "range": {