Skip to content

[ty] Improve disambiguation of types#22547

Merged
AlexWaygood merged 3 commits intomainfrom
alex/more-class-qualification
Jan 13, 2026
Merged

[ty] Improve disambiguation of types#22547
AlexWaygood merged 3 commits intomainfrom
alex/more-class-qualification

Conversation

@AlexWaygood
Copy link
Member

Summary

This PR improves some details around our disambiguation of types in diagnostics.


Firstly, in cases where the fully qualified class name is not enough to disambiguate two types, we now provide the column number as well as the filename and line number. Most of the time, two classes aren't defined on the same line... but once #22537 lands, that will no longer be true. In this snippet, there are two distinct classes named Url which are different types, but which have exactly the same qualified name, defining file, and line number:

from collections import namedtuple

class Url(namedtuple("Url", "host str")): ...

The only way to distinguish these two classes in diagnostics, etc., is by using the column number where the class definition starts (column 11 for the inner, inline, Url class definition created by the namedtuple call; column 1 for the outer Url class created by the class statement).


Secondly, we now use fully qualified names etc. to disambiguate classes in reveal_mro calls when necessary. This is an internal-only change, but it'll be useful for testing purposes in #22327.

Test Plan

Mdtests updated

@AlexWaygood AlexWaygood added ty Multi-file analysis & type inference diagnostics Related to reporting of diagnostics. labels Jan 13, 2026
@astral-sh-bot
Copy link

astral-sh-bot bot commented Jan 13, 2026

Diagnostic diff on typing conformance tests

No changes detected when running ty on typing conformance tests ✅

@astral-sh-bot
Copy link

astral-sh-bot bot commented Jan 13, 2026

mypy_primer results

Changes were detected when running on open source projects
attrs (https://github.com/python-attrs/attrs)
- tests/test_annotations.py:644:13: error[invalid-assignment] Object of type `<class 'tests.test_annotations.TestAnnotations.<locals of function 'test_init_type_hints_fake_module'>.C @ tests/test_annotations.py:640'>` is not assignable to `<class 'tests.test_annotations.TestAnnotations.<locals of function 'test_init_type_hints_fake_module'>.C @ tests/test_annotations.py:640'>`
+ tests/test_annotations.py:644:13: error[invalid-assignment] Object of type `<class 'tests.test_annotations.TestAnnotations.<locals of function 'test_init_type_hints_fake_module'>.C @ tests/test_annotations.py:640:15'>` is not assignable to `<class 'tests.test_annotations.TestAnnotations.<locals of function 'test_init_type_hints_fake_module'>.C @ tests/test_annotations.py:640:15'>`
- tests/test_make.py:620:13: error[invalid-assignment] Object of type `<class 'tests.test_make.TestAttributes.<locals of function 'test_adds_all_by_default'>.C @ tests/test_make.py:615'>` is not assignable to `<class 'tests.test_make.TestAttributes.<locals of function 'test_adds_all_by_default'>.C @ tests/test_make.py:615'>`
+ tests/test_make.py:620:13: error[invalid-assignment] Object of type `<class 'tests.test_make.TestAttributes.<locals of function 'test_adds_all_by_default'>.C @ tests/test_make.py:615:15'>` is not assignable to `<class 'tests.test_make.TestAttributes.<locals of function 'test_adds_all_by_default'>.C @ tests/test_make.py:615:15'>`
- tests/test_make.py:675:13: error[invalid-assignment] Object of type `<class 'tests.test_make.TestAttributes.<locals of function 'test_respects_init_attrs_init'>.C @ tests/test_make.py:672'>` is not assignable to `<class 'tests.test_make.TestAttributes.<locals of function 'test_respects_init_attrs_init'>.C @ tests/test_make.py:672'>`
+ tests/test_make.py:675:13: error[invalid-assignment] Object of type `<class 'tests.test_make.TestAttributes.<locals of function 'test_respects_init_attrs_init'>.C @ tests/test_make.py:672:15'>` is not assignable to `<class 'tests.test_make.TestAttributes.<locals of function 'test_respects_init_attrs_init'>.C @ tests/test_make.py:672:15'>`
- tests/test_make.py:2872:17: error[invalid-assignment] Object of type `type[tests.test_make.TestAutoDetect.<locals of function 'test_total_ordering'>.C @ tests/test_make.py:2858] | type[tests.test_make.TestAutoDetect.<locals of function 'test_total_ordering'>.C @ tests/test_make.py:2858]` is not assignable to `<class 'tests.test_make.TestAutoDetect.<locals of function 'test_total_ordering'>.C @ tests/test_make.py:2858'>`
+ tests/test_make.py:2872:17: error[invalid-assignment] Object of type `type[tests.test_make.TestAutoDetect.<locals of function 'test_total_ordering'>.C @ tests/test_make.py:2858:15] | type[tests.test_make.TestAutoDetect.<locals of function 'test_total_ordering'>.C @ tests/test_make.py:2858:15]` is not assignable to `<class 'tests.test_make.TestAutoDetect.<locals of function 'test_total_ordering'>.C @ tests/test_make.py:2858:15'>`
- tests/test_slots.py:217:10: error[invalid-argument-type] Argument to bound method `__init__` is incorrect: Expected `tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193`, found `tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193`
+ tests/test_slots.py:217:10: error[invalid-argument-type] Argument to bound method `__init__` is incorrect: Expected `tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193:11`, found `tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193:11`
- tests/test_slots.py:224:17: error[invalid-argument-type] Argument to bound method `method` is incorrect: Expected `tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193`, found `tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193`
+ tests/test_slots.py:224:17: error[invalid-argument-type] Argument to bound method `method` is incorrect: Expected `tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193:11`, found `tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193:11`
- tests/test_slots.py:225:27: error[invalid-argument-type] Argument to bound method `classmethod` is incorrect: Expected `type[tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193]`, found `type[tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193]`
+ tests/test_slots.py:225:27: error[invalid-argument-type] Argument to bound method `classmethod` is incorrect: Expected `type[tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193:11]`, found `type[tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193:11]`
- tests/test_slots.py:230:10: error[invalid-argument-type] Argument to bound method `__init__` is incorrect: Expected `tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193`, found `tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193`
+ tests/test_slots.py:230:10: error[invalid-argument-type] Argument to bound method `__init__` is incorrect: Expected `tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193:11`, found `tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193:11`
- tests/test_slots.py:232:11: error[invalid-argument-type] Argument to bound method `__init__` is incorrect: Expected `tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193`, found `tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193`
+ tests/test_slots.py:232:11: error[invalid-argument-type] Argument to bound method `__init__` is incorrect: Expected `tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193:11`, found `tests.test_slots.<locals of function 'test_nonslots_these'>.SimpleOrdinaryClass @ tests/test_slots.py:193:11`

pandera (https://github.com/pandera-dev/pandera)
- pandera/engines/numpy_engine.py:276:15: warning[unsupported-base] Unsupported class base with type `<class 'pandera.engines.numpy_engine.Float64 @ pandera/engines/numpy_engine.py:261'> | <class 'pandera.engines.numpy_engine.Float64 @ pandera/engines/numpy_engine.py:269'>`
+ pandera/engines/numpy_engine.py:276:15: warning[unsupported-base] Unsupported class base with type `<class 'pandera.engines.numpy_engine.Float64 @ pandera/engines/numpy_engine.py:261:11'> | <class 'pandera.engines.numpy_engine.Float64 @ pandera/engines/numpy_engine.py:269:11'>`
- pandera/engines/numpy_engine.py:325:17: warning[unsupported-base] Unsupported class base with type `<class 'pandera.engines.numpy_engine.Complex128 @ pandera/engines/numpy_engine.py:310'> | <class 'pandera.engines.numpy_engine.Complex128 @ pandera/engines/numpy_engine.py:318'>`
+ pandera/engines/numpy_engine.py:325:17: warning[unsupported-base] Unsupported class base with type `<class 'pandera.engines.numpy_engine.Complex128 @ pandera/engines/numpy_engine.py:310:11'> | <class 'pandera.engines.numpy_engine.Complex128 @ pandera/engines/numpy_engine.py:318:11'>`

scikit-build-core (https://github.com/scikit-build/scikit-build-core)
- src/scikit_build_core/build/wheel.py:99:20: error[no-matching-overload] No overload of bound method `__init__` matches arguments
- Found 48 diagnostics
+ Found 47 diagnostics

prefect (https://github.com/PrefectHQ/prefect)
- src/prefect/deployments/runner.py:795:70: warning[possibly-missing-attribute] Attribute `__name__` may be missing on object of type `Unknown | (((...) -> Any) & ((*args: object, **kwargs: object) -> object))`
+ src/prefect/deployments/runner.py:795:70: warning[possibly-missing-attribute] Attribute `__name__` may be missing on object of type `Unknown | ((...) -> Any)`
+ src/prefect/flow_engine.py:812:32: error[invalid-await] `Unknown | R@FlowRunEngine | Coroutine[Any, Any, R@FlowRunEngine]` is not awaitable
+ src/prefect/flow_engine.py:1401:24: error[invalid-await] `Unknown | R@AsyncFlowRunEngine | Coroutine[Any, Any, R@AsyncFlowRunEngine]` is not awaitable
+ src/prefect/flow_engine.py:1482:43: error[invalid-argument-type] Argument to function `next` is incorrect: Expected `SupportsNext[Unknown]`, found `Unknown | R@run_generator_flow_sync`
+ src/prefect/flow_engine.py:1490:21: warning[possibly-missing-attribute] Attribute `throw` may be missing on object of type `Unknown | R@run_generator_flow_sync`
+ src/prefect/flow_engine.py:1524:44: warning[possibly-missing-attribute] Attribute `__anext__` may be missing on object of type `Unknown | R@run_generator_flow_async`
+ src/prefect/flow_engine.py:1531:25: warning[possibly-missing-attribute] Attribute `throw` may be missing on object of type `Unknown | R@run_generator_flow_async`
- src/prefect/flows.py:286:34: error[unresolved-attribute] Object of type `((**P@Flow) -> R@Flow) & ((*args: object, **kwargs: object) -> object)` has no attribute `__name__`
+ src/prefect/flows.py:286:34: error[unresolved-attribute] Object of type `(**P@Flow) -> R@Flow` has no attribute `__name__`
- src/prefect/flows.py:404:68: error[unresolved-attribute] Object of type `((**P@Flow) -> R@Flow) & ((*args: object, **kwargs: object) -> object)` has no attribute `__name__`
+ src/prefect/flows.py:404:68: error[unresolved-attribute] Object of type `(**P@Flow) -> R@Flow` has no attribute `__name__`
- src/prefect/flows.py:1750:53: warning[unused-ignore-comment] Unused blanket `type: ignore` directive
- Found 5363 diagnostics
+ Found 5368 diagnostics

dd-trace-py (https://github.com/DataDog/dd-trace-py)
- ddtrace/contrib/internal/tornado/stack_context.py:77:24: error[invalid-super-argument] `<class 'ddtrace.contrib.internal.tornado.stack_context.TracerStackContext @ ddtrace/contrib/internal/tornado/stack_context.py:17'> | <class 'ddtrace.contrib.internal.tornado.stack_context.TracerStackContext @ ddtrace/contrib/internal/tornado/stack_context.py:129'>` is not a valid class
+ ddtrace/contrib/internal/tornado/stack_context.py:77:24: error[invalid-super-argument] `<class 'ddtrace.contrib.internal.tornado.stack_context.TracerStackContext @ ddtrace/contrib/internal/tornado/stack_context.py:17:11'> | <class 'ddtrace.contrib.internal.tornado.stack_context.TracerStackContext @ ddtrace/contrib/internal/tornado/stack_context.py:129:11'>` is not a valid class
- ddtrace/contrib/internal/tornado/stack_context.py:104:24: error[invalid-super-argument] `<class 'ddtrace.contrib.internal.tornado.stack_context.TracerStackContext @ ddtrace/contrib/internal/tornado/stack_context.py:17'> | <class 'ddtrace.contrib.internal.tornado.stack_context.TracerStackContext @ ddtrace/contrib/internal/tornado/stack_context.py:129'>` is not a valid class
+ ddtrace/contrib/internal/tornado/stack_context.py:104:24: error[invalid-super-argument] `<class 'ddtrace.contrib.internal.tornado.stack_context.TracerStackContext @ ddtrace/contrib/internal/tornado/stack_context.py:17:11'> | <class 'ddtrace.contrib.internal.tornado.stack_context.TracerStackContext @ ddtrace/contrib/internal/tornado/stack_context.py:129:11'>` is not a valid class
- ddtrace/contrib/internal/tornado/stack_context.py:119:17: error[invalid-super-argument] `<class 'ddtrace.contrib.internal.tornado.stack_context.TracerStackContext @ ddtrace/contrib/internal/tornado/stack_context.py:17'> | <class 'ddtrace.contrib.internal.tornado.stack_context.TracerStackContext @ ddtrace/contrib/internal/tornado/stack_context.py:129'>` is not a valid class
+ ddtrace/contrib/internal/tornado/stack_context.py:119:17: error[invalid-super-argument] `<class 'ddtrace.contrib.internal.tornado.stack_context.TracerStackContext @ ddtrace/contrib/internal/tornado/stack_context.py:17:11'> | <class 'ddtrace.contrib.internal.tornado.stack_context.TracerStackContext @ ddtrace/contrib/internal/tornado/stack_context.py:129:11'>` is not a valid class

ibis (https://github.com/ibis-project/ibis)
- ibis/expr/types/generic.py:1572:21: warning[unsupported-base] Unsupported class base with type `<class 'ibis.expr.types.rich.FixedTextJupyterMixin @ ibis/expr/types/rich.py:24'> | <class 'ibis.expr.types.rich.FixedTextJupyterMixin @ ibis/expr/types/rich.py:28'>`
+ ibis/expr/types/generic.py:1572:21: warning[unsupported-base] Unsupported class base with type `<class 'ibis.expr.types.rich.FixedTextJupyterMixin @ ibis/expr/types/rich.py:24:11'> | <class 'ibis.expr.types.rich.FixedTextJupyterMixin @ ibis/expr/types/rich.py:28:11'>`
- ibis/expr/types/relations.py:517:19: warning[unsupported-base] Unsupported class base with type `<class 'ibis.expr.types.rich.FixedTextJupyterMixin @ ibis/expr/types/rich.py:24'> | <class 'ibis.expr.types.rich.FixedTextJupyterMixin @ ibis/expr/types/rich.py:28'>`
+ ibis/expr/types/relations.py:517:19: warning[unsupported-base] Unsupported class base with type `<class 'ibis.expr.types.rich.FixedTextJupyterMixin @ ibis/expr/types/rich.py:24:11'> | <class 'ibis.expr.types.rich.FixedTextJupyterMixin @ ibis/expr/types/rich.py:28:11'>`

bokeh (https://github.com/bokeh/bokeh)
- src/bokeh/model/model.py:496:16: error[invalid-return-type] Return type does not match returned value: expected `set[bokeh.model.model.Model @ src/bokeh/model/model.py:79]`, found `set[bokeh.model.model.Model @ src/bokeh/model/model.py:79 | bokeh.model.model.Model @ src/bokeh/model/model.pyi:40]`
+ src/bokeh/model/model.py:496:16: error[invalid-return-type] Return type does not match returned value: expected `set[bokeh.model.model.Model @ src/bokeh/model/model.py:79:7]`, found `set[bokeh.model.model.Model @ src/bokeh/model/model.py:79:7 | bokeh.model.model.Model @ src/bokeh/model/model.pyi:40:7]`
- src/bokeh/model/model.py:510:16: error[invalid-return-type] Return type does not match returned value: expected `Iterable[bokeh.model.model.Model @ src/bokeh/model/model.py:79]`, found `Iterable[bokeh.model.model.Model @ src/bokeh/model/model.pyi:40]`
+ src/bokeh/model/model.py:510:16: error[invalid-return-type] Return type does not match returned value: expected `Iterable[bokeh.model.model.Model @ src/bokeh/model/model.py:79:7]`, found `Iterable[bokeh.model.model.Model @ src/bokeh/model/model.pyi:40:7]`
- src/bokeh/model/model.py:510:21: error[invalid-argument-type] Argument to function `find` is incorrect: Expected `Iterable[bokeh.model.model.Model @ src/bokeh/model/model.pyi:40]`, found `set[bokeh.model.model.Model @ src/bokeh/model/model.py:79]`
+ src/bokeh/model/model.py:510:21: error[invalid-argument-type] Argument to function `find` is incorrect: Expected `Iterable[bokeh.model.model.Model @ src/bokeh/model/model.pyi:40:7]`, found `set[bokeh.model.model.Model @ src/bokeh/model/model.py:79:7]`

static-frame (https://github.com/static-frame/static-frame)
- static_frame/core/index.py:580:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemLocReduces[TVContainer_co@loc, TVDtype@Index]`, found `InterGetItemLocReduces[Bottom[Series[Any, Any]] | Any, TVDtype@Index]`
+ static_frame/core/index.py:580:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemLocReduces[TVContainer_co@loc, TVDtype@Index]`, found `InterGetItemLocReduces[Any | Bottom[Series[Any, Any]], TVDtype@Index]`
- static_frame/core/node_selector.py:526:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemLocReduces[TVContainer_co@InterfaceSelectQuartet, Any]`, found `InterGetItemLocReduces[Unknown | Bottom[Series[Any, Any]], Any]`
+ static_frame/core/node_selector.py:526:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemLocReduces[TVContainer_co@InterfaceSelectQuartet, Any]`, found `InterGetItemLocReduces[Bottom[Series[Any, Any]] | Unknown, Any]`
- static_frame/core/yarn.py:418:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemILocReduces[Yarn[Any], object_]`, found `InterGetItemILocReduces[Yarn[Any] | Bottom[Index[Any]] | TypeBlocks | ... omitted 6 union elements, object_]`
+ static_frame/core/yarn.py:418:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemILocReduces[Yarn[Any], object_]`, found `InterGetItemILocReduces[Yarn[Any] | ndarray[Never, Never] | TypeBlocks | ... omitted 6 union elements, object_]`

sympy (https://github.com/sympy/sympy)
- sympy/core/tests/test_function.py:145:31: error[unresolved-attribute] Object of type `sympy.core.tests.test_function.<locals of function 'test_Function'>.myfunc @ sympy/core/tests/test_function.py:138 | sympy.core.tests.test_function.<locals of function 'test_Function'>.myfunc @ sympy/core/tests/test_function.py:147 | sympy.core.tests.test_function.<locals of function 'test_Function'>.myfunc @ sympy/core/tests/test_function.py:156` has no attribute `nargs`
+ sympy/core/tests/test_function.py:145:31: error[unresolved-attribute] Object of type `sympy.core.tests.test_function.<locals of function 'test_Function'>.myfunc @ sympy/core/tests/test_function.py:138:11 | sympy.core.tests.test_function.<locals of function 'test_Function'>.myfunc @ sympy/core/tests/test_function.py:147:11 | sympy.core.tests.test_function.<locals of function 'test_Function'>.myfunc @ sympy/core/tests/test_function.py:156:11` has no attribute `nargs`
- sympy/core/tests/test_function.py:154:31: error[unresolved-attribute] Object of type `sympy.core.tests.test_function.<locals of function 'test_Function'>.myfunc @ sympy/core/tests/test_function.py:147 | sympy.core.tests.test_function.<locals of function 'test_Function'>.myfunc @ sympy/core/tests/test_function.py:156` has no attribute `nargs`
+ sympy/core/tests/test_function.py:154:31: error[unresolved-attribute] Object of type `sympy.core.tests.test_function.<locals of function 'test_Function'>.myfunc @ sympy/core/tests/test_function.py:147:11 | sympy.core.tests.test_function.<locals of function 'test_Function'>.myfunc @ sympy/core/tests/test_function.py:156:11` has no attribute `nargs`
- sympy/parsing/c/c_parser.py:1056:15: warning[possibly-missing-attribute] Attribute `parse` may be missing on object of type `sympy.parsing.c.c_parser.CCodeConverter @ sympy/parsing/c/c_parser.py:85 | sympy.parsing.c.c_parser.CCodeConverter @ sympy/parsing/c/c_parser.py:1036`
+ sympy/parsing/c/c_parser.py:1056:15: warning[possibly-missing-attribute] Attribute `parse` may be missing on object of type `sympy.parsing.c.c_parser.CCodeConverter @ sympy/parsing/c/c_parser.py:85:11 | sympy.parsing.c.c_parser.CCodeConverter @ sympy/parsing/c/c_parser.py:1036:11`
- sympy/parsing/c/c_parser.py:1058:15: warning[possibly-missing-attribute] Attribute `parse_str` may be missing on object of type `sympy.parsing.c.c_parser.CCodeConverter @ sympy/parsing/c/c_parser.py:85 | sympy.parsing.c.c_parser.CCodeConverter @ sympy/parsing/c/c_parser.py:1036`
+ sympy/parsing/c/c_parser.py:1058:15: warning[possibly-missing-attribute] Attribute `parse_str` may be missing on object of type `sympy.parsing.c.c_parser.CCodeConverter @ sympy/parsing/c/c_parser.py:85:11 | sympy.parsing.c.c_parser.CCodeConverter @ sympy/parsing/c/c_parser.py:1036:11`
- sympy/parsing/fortran/fortran_parser.py:323:5: warning[possibly-missing-attribute] Attribute `visit` may be missing on object of type `sympy.parsing.fortran.fortran_parser.ASR2PyVisitor @ sympy/parsing/fortran/fortran_parser.py:58 | sympy.parsing.fortran.fortran_parser.ASR2PyVisitor @ sympy/parsing/fortran/fortran_parser.py:298`
+ sympy/parsing/fortran/fortran_parser.py:323:5: warning[possibly-missing-attribute] Attribute `visit` may be missing on object of type `sympy.parsing.fortran.fortran_parser.ASR2PyVisitor @ sympy/parsing/fortran/fortran_parser.py:58:11 | sympy.parsing.fortran.fortran_parser.ASR2PyVisitor @ sympy/parsing/fortran/fortran_parser.py:298:11`
- sympy/parsing/fortran/fortran_parser.py:324:15: warning[possibly-missing-attribute] Attribute `ret_ast` may be missing on object of type `sympy.parsing.fortran.fortran_parser.ASR2PyVisitor @ sympy/parsing/fortran/fortran_parser.py:58 | sympy.parsing.fortran.fortran_parser.ASR2PyVisitor @ sympy/parsing/fortran/fortran_parser.py:298`
+ sympy/parsing/fortran/fortran_parser.py:324:15: warning[possibly-missing-attribute] Attribute `ret_ast` may be missing on object of type `sympy.parsing.fortran.fortran_parser.ASR2PyVisitor @ sympy/parsing/fortran/fortran_parser.py:58:11 | sympy.parsing.fortran.fortran_parser.ASR2PyVisitor @ sympy/parsing/fortran/fortran_parser.py:298:11`

pandas-stubs (https://github.com/pandas-dev/pandas-stubs)
+ pandas-stubs/_typing.pyi:1232:16: warning[unused-ignore-comment] Unused blanket `type: ignore` directive
- tests/frame/test_groupby.py:229:15: error[type-assertion-failure] Type `Series[Any]` does not match asserted type `Series[str | bytes | int | ... omitted 12 union elements]`
- tests/frame/test_groupby.py:625:15: error[type-assertion-failure] Type `Series[Any]` does not match asserted type `Series[str | bytes | int | ... omitted 12 union elements]`
- Found 5169 diagnostics
+ Found 5168 diagnostics

core (https://github.com/home-assistant/core)
+ homeassistant/util/variance.py:47:12: error[invalid-return-type] Return type does not match returned value: expected `(**_P@ignore_variance) -> _R@ignore_variance`, found `_Wrapped[_P@ignore_variance, _R@ignore_variance | int | float | datetime, _P@ignore_variance, _R@ignore_variance | int | float | datetime]`
- Found 14499 diagnostics
+ Found 14500 diagnostics

No memory usage changes detected ✅

@AlexWaygood AlexWaygood force-pushed the alex/more-class-qualification branch from 8c43491 to 8a8d105 Compare January 13, 2026 12:59
@AlexWaygood AlexWaygood force-pushed the alex/more-class-qualification branch from 8a8d105 to 10898b5 Compare January 13, 2026 13:08
@AlexWaygood AlexWaygood force-pushed the alex/more-class-qualification branch from 8160fba to a3456f8 Compare January 13, 2026 14:33
Copy link
Member

@charliermarsh charliermarsh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This makes sense to me, thanks.

@AlexWaygood AlexWaygood merged commit c7b4106 into main Jan 13, 2026
48 checks passed
@AlexWaygood AlexWaygood deleted the alex/more-class-qualification branch January 13, 2026 14:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

diagnostics Related to reporting of diagnostics. ty Multi-file analysis & type inference

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants