Skip to content

[ty] Separate out upper and lower bound constraints#22400

Closed
dcreager wants to merge 10 commits into
mainfrom
dcreager/separate-constraints
Closed

[ty] Separate out upper and lower bound constraints#22400
dcreager wants to merge 10 commits into
mainfrom
dcreager/separate-constraints

Conversation

@dcreager

@dcreager dcreager commented Jan 5, 2026

Copy link
Copy Markdown
Member

A refactoring I poked at over the holiday break. Pushing up to see what CI says about the performance.

Closes astral-sh/ty#3558

@astral-sh-bot

astral-sh-bot Bot commented Jan 5, 2026

Copy link
Copy Markdown

Typing conformance results

No changes detected ✅

Current numbers
The percentage of diagnostics emitted that were expected errors held steady at 91.94%. The percentage of expected errors that received a diagnostic held steady at 87.09%. The number of fully passing files held steady at 92/134.

@astral-sh-bot

astral-sh-bot Bot commented Jan 5, 2026

Copy link
Copy Markdown

mypy_primer results

Changes were detected when running on open source projects
async-utils (https://github.com/mikeshardmind/async-utils)
+ src/async_utils/corofunc_cache.py:146:16: error[invalid-return-type] Return type does not match returned value: expected `CoroFunc[P@wrapper, R@wrapper]`, found `_Wrapped[Never, Awaitable[R@wrapper], Never, CoroutineType[Any, Any, R@wrapper]]`
+ src/async_utils/task_cache.py:211:16: error[invalid-return-type] Return type does not match returned value: expected `TaskFunc[P@wrapper, R@wrapper]`, found `_Wrapped[Never, Coroutine[Any, Any, R@wrapper] | Task[R@wrapper], Never, Task[R@wrapper]]`
+ src/async_utils/task_cache.py:299:16: error[invalid-return-type] Return type does not match returned value: expected `TaskFunc[P@wrapper, R@wrapper]`, found `_Wrapped[Never, Coroutine[Any, Any, R@wrapper] | Task[R@wrapper], Never, Task[R@wrapper]]`
- Found 9 diagnostics
+ Found 12 diagnostics

pytest-robotframework (https://github.com/detachhead/pytest-robotframework)
+ pytest_robotframework/__init__.py:306:16: error[invalid-return-type] Return type does not match returned value: expected `(**P@call) -> T@call`, found `_Wrapped[(...), Unknown, Never, T@call]`
+ pytest_robotframework/__init__.py:647:16: error[invalid-return-type] Return type does not match returned value: expected `(**P@wrapped) -> T@wrapped`, found `_Wrapped[Never, T@wrapped, Never, T@wrapped]`
+ pytest_robotframework/_internal/robot/listeners_and_suite_visitors.py:604:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@_hide_already_raised_exception_from_robot_log) -> T@_hide_already_raised_exception_from_robot_log`, found `_Wrapped[Never, T@_hide_already_raised_exception_from_robot_log, Never, T@_hide_already_raised_exception_from_robot_log]`
+ pytest_robotframework/_internal/utils.py:51:16: error[invalid-return-type] Return type does not match returned value: expected `(**P@patch_method) -> T@patch_method`, found `_Wrapped[(...), T@patch_method, Never, T@patch_method]`
+ tests/fixtures/test_robot/test_keyword_decorator_and_other_decorator/foo.py:21:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@decorator) -> T@decorator`, found `_Wrapped[Never, T@decorator, Never, T@decorator]`
- Found 172 diagnostics
+ Found 177 diagnostics

scrapy (https://github.com/scrapy/scrapy)
+ scrapy/utils/decorators.py:37:16: error[invalid-return-type] Return type does not match returned value: expected `(**_P@deprecated) -> _T@deprecated`, found `_Wrapped[Never, _T@deprecated, Never, _T@deprecated]`
+ scrapy/utils/decorators.py:57:12: error[invalid-return-type] Return type does not match returned value: expected `(**_P@defers) -> Unknown`, found `_Wrapped[Never, _T@defers, Never, Unknown]`
+ scrapy/utils/decorators.py:69:12: error[invalid-return-type] Return type does not match returned value: expected `(**_P@inthread) -> Unknown`, found `_Wrapped[Never, _T@inthread, Never, Unknown]`
+ scrapy/utils/decorators.py:114:31: error[invalid-argument-type] Argument is incorrect: Expected `Never`, found `_P@_warn_spider_arg.args`
+ scrapy/utils/decorators.py:114:38: error[invalid-argument-type] Argument is incorrect: Expected `Never`, found `_P@_warn_spider_arg.kwargs`
+ scrapy/utils/decorators.py:116:16: error[invalid-return-type] Return type does not match returned value: expected `((**_P@_warn_spider_arg) -> _T@_warn_spider_arg) | ((**_P@_warn_spider_arg) -> Coroutine[Any, Any, _T@_warn_spider_arg]) | ((**_P@_warn_spider_arg) -> AsyncGenerator[_T@_warn_spider_arg, None])`, found `_Wrapped[Never, CoroutineType[Any, Any, Any], Never, CoroutineType[Any, Any, _T@_warn_spider_arg]]`
+ scrapy/utils/decorators.py:125:36: error[invalid-argument-type] Argument is incorrect: Expected `Never`, found `_P@_warn_spider_arg.args`
+ scrapy/utils/decorators.py:125:43: error[invalid-argument-type] Argument is incorrect: Expected `Never`, found `_P@_warn_spider_arg.kwargs`
+ scrapy/utils/decorators.py:128:16: error[invalid-return-type] Return type does not match returned value: expected `((**_P@_warn_spider_arg) -> _T@_warn_spider_arg) | ((**_P@_warn_spider_arg) -> Coroutine[Any, Any, _T@_warn_spider_arg]) | ((**_P@_warn_spider_arg) -> AsyncGenerator[_T@_warn_spider_arg, None])`, found `_Wrapped[Never, AsyncGeneratorType[Any, Any], Never, AsyncGenerator[_T@_warn_spider_arg, None]]`
+ scrapy/utils/decorators.py:135:12: error[invalid-return-type] Return type does not match returned value: expected `((**_P@_warn_spider_arg) -> _T@_warn_spider_arg) | ((**_P@_warn_spider_arg) -> Coroutine[Any, Any, _T@_warn_spider_arg]) | ((**_P@_warn_spider_arg) -> AsyncGenerator[_T@_warn_spider_arg, None])`, found `_Wrapped[Never, _T@_warn_spider_arg, Never, _T@_warn_spider_arg]`
+ scrapy/utils/defer.py:417:12: error[invalid-return-type] Return type does not match returned value: expected `(**_P@deferred_f_from_coro_f) -> Unknown`, found `_Wrapped[Never, Awaitable[_T@deferred_f_from_coro_f], Never, Unknown]`
- Found 1784 diagnostics
+ Found 1795 diagnostics

dulwich (https://github.com/dulwich/dulwich)
+ dulwich/__init__.py:91:24: error[invalid-return-type] Return type does not match returned value: expected `(**P@decorator) -> R@decorator`, found `_Wrapped[Never, R@decorator, Never, R@decorator]`
- Found 235 diagnostics
+ Found 236 diagnostics

tornado (https://github.com/tornadoweb/tornado)
+ tornado/concurrent.py:182:37: error[invalid-argument-type] Argument to bound method `add_future` is incorrect: Expected `_asyncio.Future[Never] | concurrent.futures._base.Future[Never]`, found `concurrent.futures._base.Future[_T@chain_future] & ~Top[_asyncio.Future[Unknown]]`
+ tornado/concurrent.py:182:40: error[invalid-argument-type] Argument to bound method `add_future` is incorrect: Expected `(Future[Never], /) -> None`, found `def copy(a: Future[_T@chain_future]) -> None`
- Found 327 diagnostics
+ Found 329 diagnostics

sphinx (https://github.com/sphinx-doc/sphinx)
+ sphinx/util/display.py:95:16: error[invalid-return-type] Return type does not match returned value: expected `(**P@__call__) -> R@__call__`, found `_Wrapped[Never, R@__call__, Never, R@__call__]`
- Found 345 diagnostics
+ Found 346 diagnostics

pydantic (https://github.com/pydantic/pydantic)
+ pydantic/plugin/_schema_validator.py:125:16: error[invalid-return-type] Return type does not match returned value: expected `(**P@build_wrapper) -> R@build_wrapper`, found `_Wrapped[Never, R@build_wrapper, Never, R@build_wrapper]`
- Found 3159 diagnostics
+ Found 3160 diagnostics

antidote (https://github.com/Finistere/antidote)
+ tests/core/test_thread_safety.py:71:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@delayed) -> T@delayed`, found `_Wrapped[Never, T@delayed, Never, T@delayed]`
- Found 247 diagnostics
+ Found 248 diagnostics

Tanjun (https://github.com/FasterSpeeding/Tanjun)
+ tanjun/_internal/__init__.py:276:16: error[invalid-return-type] Return type does not match returned value: expected `(**_P@log_task_exc) -> Coroutine[Any, Any, _T@log_task_exc]`, found `_Wrapped[Never, Awaitable[_T@log_task_exc], Never, CoroutineType[Any, Any, _T@log_task_exc]]`
- Found 141 diagnostics
+ Found 142 diagnostics

pyodide (https://github.com/pyodide/pyodide)
+ src/py/pyodide/http/_pyfetch.py:69:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@_abort_on_cancel) -> Awaitable[T@_abort_on_cancel]`, found `_Wrapped[Never, Awaitable[T@_abort_on_cancel], Never, CoroutineType[Any, Any, T@_abort_on_cancel]]`
- Found 932 diagnostics
+ Found 933 diagnostics

discord.py (https://github.com/Rapptz/discord.py)
+ discord/ext/commands/core.py:257:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@wrap_callback) -> Coroutine[Any, Any, T@wrap_callback | None]`, found `_Wrapped[Never, Coroutine[Any, Any, T@wrap_callback], Never, CoroutineType[Any, Any, T@wrap_callback | None]]`
+ discord/ext/commands/core.py:283:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@hooked_wrapped_callback) -> Coroutine[Any, Any, T@hooked_wrapped_callback | None]`, found `_Wrapped[Never, Coroutine[Any, Any, T@hooked_wrapped_callback], Never, CoroutineType[Any, Any, T@hooked_wrapped_callback | None]]`
- Found 552 diagnostics
+ Found 554 diagnostics

trio (https://github.com/python-trio/trio)
+ src/trio/testing/_trio_test.py:50:12: error[invalid-return-type] Return type does not match returned value: expected `(**ArgsT@trio_test) -> RetT@trio_test`, found `_Wrapped[Never, Awaitable[RetT@trio_test], Never, RetT@trio_test]`
- Found 483 diagnostics
+ Found 484 diagnostics

meson (https://github.com/mesonbuild/meson)
+ unittests/helpers.py:51:16: error[invalid-return-type] Return type does not match returned value: expected `(**P@skip_if_not_base_option) -> R@skip_if_not_base_option`, found `_Wrapped[Never, R@skip_if_not_base_option, Never, R@skip_if_not_base_option]`
+ unittests/helpers.py:69:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@skipIfNoPkgconfig) -> R@skipIfNoPkgconfig`, found `_Wrapped[Never, R@skipIfNoPkgconfig, Never, R@skipIfNoPkgconfig]`
+ unittests/helpers.py:84:16: error[invalid-return-type] Return type does not match returned value: expected `(**P@skipIfNoPkgconfigDep) -> R@skipIfNoPkgconfigDep`, found `_Wrapped[Never, R@skipIfNoPkgconfigDep, Never, R@skipIfNoPkgconfigDep]`
+ unittests/helpers.py:100:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@skip_if_no_cmake) -> R@skip_if_no_cmake`, found `_Wrapped[Never, R@skip_if_no_cmake, Never, R@skip_if_no_cmake]`
+ unittests/helpers.py:112:16: error[invalid-return-type] Return type does not match returned value: expected `(**P@skip_if_not_language) -> R@skip_if_not_language`, found `_Wrapped[Never, R@skip_if_not_language, Never, R@skip_if_not_language]`
+ unittests/helpers.py:128:16: error[invalid-return-type] Return type does not match returned value: expected `(**P@skip_if_env_set) -> R@skip_if_env_set`, found `_Wrapped[Never, R@skip_if_env_set, Never, R@skip_if_env_set]`
+ unittests/helpers.py:142:16: error[invalid-return-type] Return type does not match returned value: expected `(**P@skipIfNoExecutable) -> R@skipIfNoExecutable`, found `_Wrapped[Never, R@skipIfNoExecutable, Never, R@skipIfNoExecutable]`
- Found 1944 diagnostics
+ Found 1951 diagnostics

prefect (https://github.com/PrefectHQ/prefect)
+ src/integrations/prefect-docker/prefect_docker/deployments/steps.py:120:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@cacheable) -> T@cacheable`, found `_Wrapped[Never, T@cacheable, Never, T@cacheable]`
+ src/prefect/_internal/compatibility/async_dispatch.py:99:16: error[invalid-return-type] Return type does not match returned value: expected `(**P@async_dispatch) -> R@async_dispatch | Coroutine[Any, Any, R@async_dispatch]`, found `_Wrapped[Never, R@async_dispatch, Never, R@async_dispatch | Coroutine[Any, Any, R@async_dispatch]]`
+ src/prefect/_internal/compatibility/deprecated.py:130:16: error[invalid-return-type] Return type does not match returned value: expected `(**P@deprecated_callable) -> R@deprecated_callable`, found `_Wrapped[Never, R@deprecated_callable, Never, R@deprecated_callable]`
+ src/prefect/_internal/compatibility/deprecated.py:208:16: error[invalid-return-type] Return type does not match returned value: expected `(**P@deprecated_parameter) -> R@deprecated_parameter`, found `_Wrapped[Never, R@deprecated_parameter, Never, R@deprecated_parameter]`
+ src/prefect/_internal/concurrency/api.py:32:30: error[invalid-argument-type] Argument to bound method `new` is incorrect: Expected `Never`, found `P@create_call.args`
+ src/prefect/_internal/concurrency/api.py:32:37: error[invalid-argument-type] Argument to bound method `new` is incorrect: Expected `Never`, found `P@create_call.kwargs`
+ src/prefect/_internal/retries.py:74:16: error[invalid-return-type] Return type does not match returned value: expected `(**P@retry_async_fn) -> Coroutine[Any, Any, R@retry_async_fn]`, found `_Wrapped[Never, Coroutine[Any, Any, R@retry_async_fn], Never, CoroutineType[Any, Any, R@retry_async_fn]]`
+ src/prefect/client/utilities.py:71:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@client_injector) -> Coroutine[Any, Any, R@client_injector]`, found `_Wrapped[(...), Coroutine[Any, Any, R@client_injector], Never, CoroutineType[Any, Any, R@client_injector]]`
+ src/prefect/client/utilities.py:101:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@inject_client) -> Coroutine[Any, Any, R@inject_client]`, found `_Wrapped[Never, Coroutine[Any, Any, R@inject_client], Never, CoroutineType[Any, Any, R@inject_client]]`
- src/prefect/deployments/runner.py:795:70: warning[possibly-missing-attribute] Attribute `__name__` may be missing on object of type `Unknown | ((...) -> Any)`
+ 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/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` has no attribute `__name__`
+ 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:404:68: 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:1750:53: warning[unused-ignore-comment] Unused blanket `type: ignore` directive
+ src/prefect/futures.py:658:9: error[invalid-argument-type] Argument to function `_resolve_futures` is incorrect: Expected `(PrefectFuture[Never], /) -> Any`, found `def _resolve_state(future: PrefectFuture[R@resolve_futures_to_states]) -> Unknown`
+ src/prefect/futures.py:680:35: error[invalid-argument-type] Argument to function `_resolve_futures` is incorrect: Expected `(PrefectFuture[Never], /) -> Any`, found `def _resolve_result(future: PrefectFuture[R@resolve_futures_to_results]) -> Any`
+ src/prefect/server/database/dependencies.py:166:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@inject_db) -> R@inject_db`, found `_Wrapped[Never, R@inject_db, Never, R@inject_db]`
- Found 5531 diagnostics
+ Found 5538 diagnostics

xarray (https://github.com/pydata/xarray)
- xarray/core/dataarray.py:5757:16: error[invalid-return-type] Return type does not match returned value: expected `T_Xarray@map_blocks`, found `T_Xarray@map_blocks | DataArray | Dataset`
+ xarray/core/dataarray.py:5757:16: error[invalid-return-type] Return type does not match returned value: expected `T_Xarray@map_blocks`, found `DataArray | Dataset`
- xarray/core/dataset.py:8873:16: error[invalid-return-type] Return type does not match returned value: expected `T_Xarray@map_blocks`, found `T_Xarray@map_blocks | DataArray | Dataset`
+ xarray/core/dataset.py:8873:16: error[invalid-return-type] Return type does not match returned value: expected `T_Xarray@map_blocks`, found `DataArray | Dataset`

pwndbg (https://github.com/pwndbg/pwndbg)
+ pwndbg/aglib/kernel/__init__.py:78:16: error[invalid-return-type] Return type does not match returned value: expected `(**P@requires_debug_symbols) -> T@requires_debug_symbols | D@requires_debug_symbols`, found `_Wrapped[Never, T@requires_debug_symbols, Never, T@requires_debug_symbols | D@requires_debug_symbols]`
+ pwndbg/aglib/kernel/__init__.py:97:16: error[invalid-return-type] Return type does not match returned value: expected `(**P@requires_debug_info) -> T@requires_debug_info | D@requires_debug_info`, found `_Wrapped[Never, T@requires_debug_info, Never, T@requires_debug_info | D@requires_debug_info]`
+ pwndbg/commands/__init__.py:730:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@OnlyWhenLocal) -> T@OnlyWhenLocal | None`, found `_Wrapped[Never, T@OnlyWhenLocal, Never, T@OnlyWhenLocal | None]`
+ pwndbg/commands/__init__.py:745:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@OnlyWithFile) -> T@OnlyWithFile | None`, found `_Wrapped[Never, T@OnlyWithFile, Never, T@OnlyWithFile | None]`
+ pwndbg/commands/__init__.py:759:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@OnlyWhenQemuKernel) -> T@OnlyWhenQemuKernel | None`, found `_Wrapped[Never, T@OnlyWhenQemuKernel, Never, T@OnlyWhenQemuKernel | None]`
+ pwndbg/commands/__init__.py:773:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@OnlyWhenUserspace) -> T@OnlyWhenUserspace | None`, found `_Wrapped[Never, T@OnlyWhenUserspace, Never, T@OnlyWhenUserspace | None]`
+ pwndbg/commands/__init__.py:787:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@OnlyWithKernelDebugInfo) -> T@OnlyWithKernelDebugInfo | None`, found `_Wrapped[Never, T@OnlyWithKernelDebugInfo, Never, T@OnlyWithKernelDebugInfo | None]`
+ pwndbg/commands/__init__.py:804:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@OnlyWithKernelSymbols) -> T@OnlyWithKernelSymbols | None`, found `_Wrapped[Never, T@OnlyWithKernelSymbols, Never, T@OnlyWithKernelSymbols | None]`
+ pwndbg/commands/__init__.py:818:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@OnlyWhenPagingEnabled) -> T@OnlyWhenPagingEnabled | None`, found `_Wrapped[Never, T@OnlyWhenPagingEnabled, Never, T@OnlyWhenPagingEnabled | None]`
+ pwndbg/commands/__init__.py:831:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@OnlyWhenRunning) -> T@OnlyWhenRunning | None`, found `_Wrapped[Never, T@OnlyWhenRunning, Never, T@OnlyWhenRunning | None]`
+ pwndbg/commands/__init__.py:846:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@OnlyWithTcache) -> T@OnlyWithTcache | None`, found `_Wrapped[Never, T@OnlyWithTcache, Never, T@OnlyWithTcache | None]`
+ pwndbg/commands/__init__.py:858:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@OnlyWhenHeapIsInitialized) -> T@OnlyWhenHeapIsInitialized | None`, found `_Wrapped[Never, T@OnlyWhenHeapIsInitialized, Never, T@OnlyWhenHeapIsInitialized | None]`
+ pwndbg/commands/__init__.py:975:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@OnlyWithResolvedHeapSyms) -> T@OnlyWithResolvedHeapSyms | None`, found `_Wrapped[Never, T@OnlyWithResolvedHeapSyms, Never, T@OnlyWithResolvedHeapSyms | None]`
+ pwndbg/commands/context.py:441:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@serve_context_history) -> list[str]`, found `_Wrapped[Never, list[str], Never, list[str]]`
+ pwndbg/dbg_mod/lldb/repl/readline.py:93:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@wrap_with_history) -> T@wrap_with_history`, found `_Wrapped[Never, T@wrap_with_history, Never, T@wrap_with_history]`
- Found 2162 diagnostics
+ Found 2177 diagnostics

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

static-frame (https://github.com/static-frame/static-frame)
- static_frame/core/batch.py:774:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemLocCompound[Batch]`, found `InterGetItemLocCompound[Batch | Bottom[Series[Any, Any]]]`
+ static_frame/core/batch.py:774:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemLocCompound[Batch]`, found `InterGetItemLocCompound[Batch | Bottom[Index[Any]] | Bottom[Series[Any, Any]] | ... omitted 7 union elements]`
- static_frame/core/batch.py:778:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemILocCompound[Batch]`, found `InterGetItemILocCompound[Batch | Bottom[Series[Any, Any]]]`
+ static_frame/core/batch.py:778:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemILocCompound[Batch]`, found `InterGetItemILocCompound[Batch | Bottom[Index[Any]] | Bottom[Series[Any, Any]] | ... omitted 7 union elements]`
- static_frame/core/batch.py:782:16: error[invalid-return-type] Return type does not match returned value: expected `InterfaceGetItemBLoc[Batch]`, found `InterfaceGetItemBLoc[Batch | Bottom[Series[Any, Any]]]`
+ static_frame/core/batch.py:782:16: error[invalid-return-type] Return type does not match returned value: expected `InterfaceGetItemBLoc[Batch]`, found `InterfaceGetItemBLoc[Batch | Bottom[Index[Any]] | Bottom[Series[Any, Any]] | ... omitted 7 union elements]`
- static_frame/core/bus.py:671:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemLocReduces[Bus[Any], object_]`, found `InterGetItemLocReduces[Top[Bus[Any]] | TypeBlocks | Batch | ... omitted 6 union elements, object_]`
+ static_frame/core/bus.py:671:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemLocReduces[Bus[Any], object_]`, found `InterGetItemLocReduces[Top[Index[Any]] | Bus[Any] | Top[Series[Any, Any]] | ... omitted 7 union elements, object_]`
- static_frame/core/bus.py:675:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemILocReduces[Bus[Any], object_]`, found `InterGetItemILocReduces[Top[Index[Any]] | TypeBlocks | Top[Bus[Any]] | ... omitted 6 union elements, generic[object]]`
+ static_frame/core/bus.py:675:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemILocReduces[Bus[Any], object_]`, found `InterGetItemILocReduces[Top[Index[Any]] | Bus[Any] | Top[Series[Any, Any]] | ... omitted 7 union elements, generic[object]]`
+ static_frame/core/frame.py:3707:16: error[invalid-return-type] Return type does not match returned value: expected `InterfaceGetItemBLoc[Series[Any, Any]]`, found `InterfaceGetItemBLoc[Bottom[Index[Any]] | Top[Series[Any, Any]] | IndexHierarchy | ... omitted 8 union elements]`
- 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[Top[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[Index[Any]] | Bottom[Series[Any, Any]] | ... omitted 8 union elements, TVDtype@Index]`
- static_frame/core/index.py:763:16: error[invalid-return-type] Return type does not match returned value: expected `InterfaceString[ndarray[Any, Any]]`, found `InterfaceString[ndarray[object, object] | Bottom[Series[Any, Any]]]`
+ static_frame/core/index.py:763:16: error[invalid-return-type] Return type does not match returned value: expected `InterfaceString[ndarray[Any, Any]]`, found `InterfaceString[Bottom[Index[Any]] | Bottom[Series[Any, Any]] | ndarray[Any, Any] | ... omitted 7 union elements]`
- static_frame/core/index.py:781:16: error[invalid-return-type] Return type does not match returned value: expected `InterfaceDatetime[ndarray[Any, Any]]`, found `InterfaceDatetime[ndarray[object, object] | Bottom[Series[Any, Any]]]`
+ static_frame/core/index.py:781:16: error[invalid-return-type] Return type does not match returned value: expected `InterfaceDatetime[ndarray[Any, Any]]`, found `InterfaceDatetime[Bottom[Index[Any]] | Bottom[Series[Any, Any]] | ndarray[Any, Any] | ... omitted 7 union elements]`
- static_frame/core/index.py:801:16: error[invalid-return-type] Return type does not match returned value: expected `InterfaceRe[ndarray[Any, Any]]`, found `InterfaceRe[ndarray[object, object] | Bottom[Series[Any, Any]]]`
+ static_frame/core/index.py:801:16: error[invalid-return-type] Return type does not match returned value: expected `InterfaceRe[ndarray[Any, Any]]`, found `InterfaceRe[Bottom[Index[Any]] | Bottom[Series[Any, Any]] | ndarray[Any, Any] | ... omitted 7 union elements]`
- static_frame/core/node_fill_value.py:534:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemLocReduces[Batch, Any]`, found `InterGetItemLocReduces[Batch | Bottom[Series[Any, Any]], Any]`
+ static_frame/core/node_fill_value.py:534:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemLocReduces[Batch, Any]`, found `InterGetItemLocReduces[IndexHierarchy | Bottom[Series[Any, Any]] | Batch | ... omitted 7 union elements, 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[Top[Series[Any, Any]] | Unknown, 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[Unknown | Bottom[Index[Any]] | Bottom[Series[Any, Any]] | ... omitted 8 union elements, Any]`
- static_frame/core/series.py:765:59: warning[unused-ignore-comment] Unused blanket `type: ignore` directive
- static_frame/core/series.py:772:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemILocReduces[Series[Any, Any], TVDtype@Series]`, found `InterGetItemILocReduces[Top[Index[Any]] | TypeBlocks | Top[Bus[Any]] | ... omitted 6 union elements, generic[object]]`
+ static_frame/core/series.py:772:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemILocReduces[Series[Any, Any], TVDtype@Series]`, found `InterGetItemILocReduces[Top[Series[Any, Any]] | IndexHierarchy | Top[Index[Any]] | ... omitted 7 union elements, generic[object]]`
+ static_frame/core/series.py:842:16: error[invalid-return-type] Return type does not match returned value: expected `InterfaceString[Series[Any, Any]]`, found `InterfaceString[Top[Series[Any, Any]] | Bottom[Index[Any]] | IndexHierarchy | TypeBlocks]`
+ static_frame/core/series.py:863:16: error[invalid-return-type] Return type does not match returned value: expected `InterfaceDatetime[Series[Any, Any]]`, found `InterfaceDatetime[Top[Series[Any, Any]] | Bottom[Index[Any]] | IndexHierarchy | TypeBlocks]`
+ static_frame/core/series.py:899:16: error[invalid-return-type] Return type does not match returned value: expected `InterfaceRe[Series[Any, Any]]`, found `InterfaceRe[Top[Series[Any, Any]] | Bottom[Index[Any]] | IndexHierarchy | TypeBlocks]`
- static_frame/core/series.py:4072:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemILocReduces[SeriesHE[Any, Any], TVDtype@SeriesHE]`, found `InterGetItemILocReduces[Top[Index[Any]] | TypeBlocks | Top[Bus[Any]] | ... omitted 7 union elements, generic[object]]`
+ static_frame/core/series.py:4072:16: error[invalid-return-type] Return type does not match returned value: expected `InterGetItemILocReduces[SeriesHE[Any, Any], TVDtype@SeriesHE]`, found `InterGetItemILocReduces[Self@iloc | SeriesHE[Any, Any], generic[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[Top[Index[Any]] | TypeBlocks | Top[Bus[Any]] | ... omitted 6 union elements, generic[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] | IndexHierarchy | Top[Series[Any, Any]] | ... omitted 7 union elements, generic[object]]`
- Found 1842 diagnostics
+ Found 1845 diagnostics

zulip (https://github.com/zulip/zulip)
+ zerver/lib/cache.py:203:16: error[invalid-return-type] Return type does not match returned value: expected `(**ParamT@cache_with_key) -> ReturnT@cache_with_key`, found `_Wrapped[Never, ReturnT@cache_with_key, Never, ReturnT@cache_with_key]`
+ zerver/tornado/views.py:38:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@in_tornado_thread) -> T@in_tornado_thread`, found `(**_P@async_to_sync) -> T@in_tornado_thread`
- Found 3667 diagnostics
+ Found 3669 diagnostics

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 5156 diagnostics
+ Found 5153 diagnostics

core (https://github.com/home-assistant/core)
+ homeassistant/components/arcam_fmj/media_player.py:77:12: error[invalid-return-type] Return type does not match returned value: expected `(**_P@convert_exception) -> Coroutine[Any, Any, _R@convert_exception]`, found `_Wrapped[Never, Coroutine[Any, Any, _R@convert_exception], Never, CoroutineType[Any, Any, _R@convert_exception]]`
+ homeassistant/components/pilight/__init__.py:191:16: error[invalid-return-type] Return type does not match returned value: expected `(**_P@limited) -> None`, found `_Wrapped[Never, Any, Never, None]`
+ homeassistant/components/recorder/util.py:638:12: error[invalid-return-type] Return type does not match returned value: expected `_FuncOrMethType[_P@_wrap_retryable_database_job_func_or_meth, bool]`, found `_Wrapped[Never, bool, Never, bool]`
+ homeassistant/components/recorder/util.py:707:12: error[invalid-return-type] Return type does not match returned value: expected `_FuncOrMethType[_P@_database_job_retry_wrapper_func_or_meth, _R@_database_job_retry_wrapper_func_or_meth]`, found `_Wrapped[Never, _R@_database_job_retry_wrapper_func_or_meth, Never, _R@_database_job_retry_wrapper_func_or_meth]`
+ homeassistant/core.py:1605:50: error[invalid-argument-type] Argument to bound method `_async_listen_filterable_job` is incorrect: Expected `EventType[Never] | str`, found `EventType[_DataT@async_listen] | str`
+ homeassistant/helpers/config_validation.py:166:12: error[invalid-return-type] Return type does not match returned value: expected `(**_P@not_async_friendly) -> _R@not_async_friendly`, found `_Wrapped[Never, _R@not_async_friendly, Never, _R@not_async_friendly]`
+ homeassistant/helpers/deprecation.py:111:16: error[invalid-return-type] Return type does not match returned value: expected `(**_P@deprecated_class) -> _R@deprecated_class`, found `_Wrapped[Never, _R@deprecated_class, Never, _R@deprecated_class]`
+ homeassistant/helpers/deprecation.py:136:16: error[invalid-return-type] Return type does not match returned value: expected `(**_P@deprecated_function) -> _R@deprecated_function`, found `_Wrapped[Never, _R@deprecated_function, Never, _R@deprecated_function]`
+ homeassistant/helpers/deprecation.py:171:16: error[invalid-return-type] Return type does not match returned value: expected `(**_P@deprecated_hass_argument) -> _T@deprecated_hass_argument`, found `_Wrapped[Never, _T@deprecated_hass_argument, Never, _T@deprecated_hass_argument]`
+ homeassistant/util/loop.py:203:12: error[invalid-return-type] Return type does not match returned value: expected `(**_P@protect_loop) -> _R@protect_loop`, found `_Wrapped[Never, _R@protect_loop, Never, _R@protect_loop]`
- 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]`
+ 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[Never, _R@ignore_variance | int | float | datetime, Never, _R@ignore_variance | int | float | datetime]`
- Found 14471 diagnostics
+ Found 14481 diagnostics

scipy (https://github.com/scipy/scipy)
+ scipy/_lib/array_api_extra/src/array_api_extra/_lib/_utils/_helpers.py:619:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@jax_autojit) -> T@jax_autojit`, found `_Wrapped[Never, T@jax_autojit, Never, T@jax_autojit]`
+ scipy/_lib/array_api_extra/src/array_api_extra/testing.py:415:12: error[invalid-return-type] Return type does not match returned value: expected `(**P@_dask_wrap) -> T@_dask_wrap`, found `_Wrapped[Never, T@_dask_wrap, Never, T@_dask_wrap]`
+ scipy/_lib/array_api_extra/tests/conftest.py:109:16: error[invalid-return-type] Return type does not match returned value: expected `(**P@_wrap) -> T@_wrap`, found `_Wrapped[Never, T@_wrap, Never, T@_wrap]`
- Found 8048 diagnostics
+ Found 8051 diagnostics

No memory usage changes detected ✅

@codspeed-hq

codspeed-hq Bot commented Jan 5, 2026

Copy link
Copy Markdown

Merging this PR will degrade performance by 4.54%

⚠️ Different runtime environments detected

Some benchmarks with significant performance changes were compared across different runtime environments,
which may affect the accuracy of the results.

Open the report in CodSpeed to investigate

⚡ 5 improved benchmarks
❌ 15 regressed benchmarks
✅ 44 untouched benchmarks
⏩ 61 skipped benchmarks1

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Mode Benchmark BASE HEAD Efficiency
Memory ty_check_file[incremental] 164.3 KB 173.4 KB -5.22%
Simulation ty_check_file[incremental] 8.8 ms 9.5 ms -7.28%
Simulation hydra-zen 3.5 s 7 s -49.28%
Simulation ty_check_file[cold] 164.4 ms 180.6 ms -8.99%
Simulation anyio 1.4 s 1.7 s -17.49%
Simulation attrs 600.6 ms 756.8 ms -20.65%
WallTime pydantic 34.7 s 20 s +73.6%
WallTime multithreaded 2.3 s 2.6 s -10.39%
WallTime freqtrade 11.3 s 14.7 s -22.77%
WallTime altair 7.5 s 10.1 s -25.39%
WallTime pandas 82.5 s 109.8 s -24.89%
WallTime tanjun 3.7 s 4.6 s -19.66%
Simulation ty_micro[typevar_mapping_small_accumulations] 210.5 ms 221.3 ms -4.89%
Simulation ty_micro[typevar_mapping_accumulation] 1.2 s 1.2 s +4.7%
Simulation ty_micro[typeis_narrowing] 198.2 ms 207.1 ms -4.31%
Simulation ty_micro[pydantic_core_schema_dict] 419.9 ms 116.2 ms ×3.6
WallTime colour_science 51.7 s 62.7 s -17.54%
WallTime static_frame 26 s 33.6 s -22.63%
Memory ty_micro[typevar_mapping_accumulation] 106 MB 94.9 MB +11.7%
Memory ty_micro[pydantic_core_schema_dict] 20.8 MB 18.6 MB +11.96%

Tip

Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.


Comparing dcreager/separate-constraints (56ace79) with main (7e1bc1e)

Open in CodSpeed

Footnotes

  1. 61 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@AlexWaygood AlexWaygood added the ty Multi-file analysis & type inference label Jan 5, 2026
@dcreager dcreager force-pushed the dcreager/separate-constraints branch from 832131f to 4989e39 Compare March 3, 2026 15:32
@dcreager dcreager added the internal An internal refactor or improvement label Mar 3, 2026
@astral-sh-bot

astral-sh-bot Bot commented Mar 3, 2026

Copy link
Copy Markdown

Memory usage report

Summary

Project Old New Diff Outcome
prefect 723.15MB 727.79MB +0.64% (4.64MB)
sphinx 268.00MB 269.78MB +0.66% (1.77MB)
trio 113.98MB 114.52MB +0.48% (557.48kB)
flake8 46.88MB 47.01MB +0.29% (138.88kB)

Significant changes

Click to expand detailed breakdown

prefect

Name Old New Diff Outcome
infer_expression_types_impl 60.28MB 61.65MB +2.28% (1.38MB)
infer_definition_types 89.69MB 90.93MB +1.38% (1.24MB)
infer_scope_types_impl 50.81MB 51.23MB +0.84% (437.03kB)
when_constraint_set_assignable_to_owned_impl::interned_arguments 1.52MB 1.15MB -24.49% (380.45kB)
UnionType<'db>::from_two_elements_::interned_arguments 689.05kB 1007.62kB +46.23% (318.57kB)
UnionType<'db>::from_two_elements_ 786.60kB 1005.24kB +27.80% (218.64kB)
CallableType 2.79MB 2.95MB +5.78% (164.91kB)
Specialization 2.63MB 2.76MB +5.21% (139.97kB)
infer_expression_type_impl 8.22MB 8.35MB +1.63% (136.78kB)
FunctionType 10.01MB 10.14MB +1.23% (126.17kB)
all_negative_narrowing_constraints_for_expression 6.62MB 6.70MB +1.32% (89.52kB)
infer_statement_types_impl 1.08MB 1.16MB +7.71% (85.20kB)
GenericAlias 1.13MB 1.21MB +7.23% (83.32kB)
infer_unpack_types 1.20MB 1.28MB +6.55% (80.74kB)
StaticClassLiteral<'db>::try_mro_ 5.34MB 5.42MB +1.42% (77.46kB)
... 52 more

sphinx

Name Old New Diff Outcome
infer_expression_types_impl 21.94MB 22.53MB +2.68% (601.49kB)
infer_definition_types 23.94MB 24.25MB +1.30% (318.09kB)
when_constraint_set_assignable_to_owned_impl 2.90MB 3.05MB +5.01% (148.92kB)
when_constraint_set_assignable_to_owned_impl::interned_arguments 715.00kB 578.27kB -19.12% (136.73kB)
UnionType<'db>::from_two_elements_::interned_arguments 320.80kB 455.64kB +42.03% (134.84kB)
infer_scope_types_impl 13.47MB 13.59MB +0.83% (114.86kB)
UnionType<'db>::from_two_elements_ 327.92kB 421.14kB +28.43% (93.22kB)
Specialization 1.28MB 1.34MB +4.83% (63.36kB)
all_negative_narrowing_constraints_for_expression 2.54MB 2.60MB +2.06% (53.55kB)
infer_unpack_types 516.83kB 562.88kB +8.91% (46.04kB)
GenericAlias 560.88kB 600.82kB +7.12% (39.94kB)
assignable_solutions_impl 357.12kB 391.85kB +9.73% (34.73kB)
infer_expression_type_impl 3.01MB 3.04MB +1.10% (33.88kB)
all_narrowing_constraints_for_expression 2.60MB 2.63MB +1.23% (32.62kB)
infer_statement_types_impl 565.09kB 596.13kB +5.49% (31.04kB)
... 49 more

trio

Name Old New Diff Outcome
infer_expression_types_impl 6.74MB 6.90MB +2.34% (161.84kB)
infer_definition_types 7.69MB 7.77MB +1.01% (79.50kB)
UnionType<'db>::from_two_elements_::interned_arguments 53.62kB 105.10kB +95.99% (51.48kB)
when_constraint_set_assignable_to_owned_impl 787.43kB 836.16kB +6.19% (48.73kB)
UnionType<'db>::from_two_elements_ 50.41kB 85.25kB +69.09% (34.83kB)
infer_scope_types_impl 4.14MB 4.16MB +0.69% (29.09kB)
infer_expression_type_impl 1.36MB 1.39MB +1.74% (24.23kB)
FunctionType 1.57MB 1.59MB +1.16% (18.61kB)
when_constraint_set_assignable_to_owned_impl::interned_arguments 183.39kB 165.52kB -9.75% (17.88kB)
Specialization 463.75kB 480.27kB +3.56% (16.52kB)
infer_unpack_types 173.45kB 184.89kB +6.60% (11.45kB)
assignable_solutions_impl 85.04kB 95.53kB +12.33% (10.49kB)
GenericAlias 192.38kB 202.15kB +5.08% (9.77kB)
all_negative_narrowing_constraints_for_expression 591.81kB 600.63kB +1.49% (8.82kB)
CallableType 692.66kB 701.38kB +1.26% (8.72kB)
... 33 more

flake8

Name Old New Diff Outcome
infer_expression_types_impl 1.09MB 1.12MB +2.33% (25.98kB)
when_constraint_set_assignable_to_owned_impl 314.95kB 334.91kB +6.34% (19.96kB)
infer_definition_types 1.84MB 1.86MB +1.03% (19.43kB)
UnionType<'db>::from_two_elements_::interned_arguments 33.00kB 51.73kB +56.77% (18.73kB)
infer_scope_types_impl 871.64kB 885.95kB +1.64% (14.31kB)
UnionType<'db>::from_two_elements_ 33.97kB 46.33kB +36.37% (12.36kB)
when_constraint_set_assignable_to_owned_impl::interned_arguments 79.49kB 67.55kB -15.03% (11.95kB)
FunctionType 492.88kB 499.31kB +1.31% (6.44kB)
Specialization 178.64kB 183.05kB +2.47% (4.41kB)
assignable_solutions_impl 35.28kB 39.61kB +12.29% (4.34kB)
FunctionType<'db>::signature_ 403.04kB 406.27kB +0.80% (3.23kB)
CallableType 206.03kB 208.88kB +1.38% (2.84kB)
GenericAlias 79.10kB 81.77kB +3.38% (2.67kB)
all_negative_narrowing_constraints_for_expression 96.00kB 98.30kB +2.39% (2.30kB)
infer_unpack_types 38.77kB 41.04kB +5.86% (2.27kB)
... 28 more

@dcreager dcreager force-pushed the dcreager/separate-constraints branch from 4989e39 to 56ace79 Compare May 28, 2026 00:40
@astral-sh-bot

astral-sh-bot Bot commented May 28, 2026

Copy link
Copy Markdown

ecosystem-analyzer results: new timeouts detected ❌

Failing projects:

Project Old Status New Status Old Return Code New Return Code
sympy success timeout 1 None

Diagnostic changes:

Lint rule Added Removed Changed
type-assertion-failure 8 26 1
invalid-argument-type 6 2 9
unsupported-operator 0 11 0
invalid-return-type 0 0 8
no-matching-overload 0 8 0
invalid-assignment 3 0 4
missing-argument 2 0 0
Total 19 47 22

Large timing changes:

Project Old Time New Time Change
hydra-zen 0.71s 2.65s +271%
sockeye 0.11s 0.37s +249%
svcs 0.05s 0.13s +166%
freqtrade 0.28s 0.66s +139%
manticore 4.27s 9.05s +112%
cloud-init 0.49s 0.98s +100%
rotki 0.62s 1.15s +86%
xarray 0.61s 1.13s +85%
ibis 0.56s 0.91s +63%
more-itertools 0.20s 0.32s +62%
pydantic 2.13s 0.89s -58%
schemathesis 0.26s 0.41s +58%
setuptools 0.37s 0.57s +54%
Raw diff (88 changes)
Expression (https://github.com/cognitedata/Expression)
- tests/test_map.py:74:21 error[invalid-argument-type] Argument to function `pipe` is incorrect: Expected `(Map[str, int] | Unknown, /) -> Unknown | Map[str, int] | _A'return@curry_flip`, found `(_A'return@curry_flip, /) -> _A'return@curry_flip`
+ tests/test_map.py:74:21 error[invalid-argument-type] Argument to function `pipe` is incorrect: Expected `(Map[str, int] | Unknown, /) -> _A'return@curry_flip | Unknown | Map[str, int]`, found `(_A'return@curry_flip, /) -> _A'return@curry_flip`

Tanjun (https://github.com/FasterSpeeding/Tanjun)
- tanjun/clients.py:2801:16 error[invalid-return-type] Return type does not match returned value: expected `((...) -> Coroutine[Any, Any, _T@get_callback_override] | _T@get_callback_override) | None`, found `((...) -> Coroutine[Any, Any, _T@get_callback_override | Coroutine[Any, Any, _T@get_callback_override]] | _T@get_callback_override) | None`
+ tanjun/clients.py:2801:16 error[invalid-return-type] Return type does not match returned value: expected `((...) -> Coroutine[Any, Any, _T@get_callback_override] | _T@get_callback_override) | None`, found `((...) -> Coroutine[Any, Any, Coroutine[Any, Any, _T@get_callback_override] | _T@get_callback_override] | _T@get_callback_override) | None`
- tanjun/dependencies/data.py:171:32 error[invalid-argument-type] Argument to bound method `LazyConstant.set_value` is incorrect: Expected `_T@make_lc_resolver`, found `_T@make_lc_resolver | Coroutine[Any, Any, _T@make_lc_resolver]`
+ tanjun/dependencies/data.py:171:32 error[invalid-argument-type] Argument to bound method `LazyConstant.set_value` is incorrect: Expected `_T@make_lc_resolver`, found `Coroutine[Any, Any, _T@make_lc_resolver] | _T@make_lc_resolver`
- tanjun/dependencies/data.py:172:20 error[invalid-return-type] Return type does not match returned value: expected `_T@make_lc_resolver`, found `_T@make_lc_resolver | Coroutine[Any, Any, _T@make_lc_resolver]`
+ tanjun/dependencies/data.py:172:20 error[invalid-return-type] Return type does not match returned value: expected `_T@make_lc_resolver`, found `Coroutine[Any, Any, _T@make_lc_resolver] | _T@make_lc_resolver`
- tanjun/dependencies/data.py:220:12 error[invalid-return-type] Return type does not match returned value: expected `_T@inject_lc`, found `_T@inject_lc | Coroutine[Any, Any, _T@inject_lc]`
+ tanjun/dependencies/data.py:220:12 error[invalid-return-type] Return type does not match returned value: expected `_T@inject_lc`, found `Coroutine[Any, Any, _T@inject_lc] | _T@inject_lc`
- tanjun/dependencies/data.py:265:13 error[invalid-assignment] Object of type `_T@_CacheCallback | Coroutine[Any, Any, _T@_CacheCallback]` is not assignable to attribute `_result` of type `_T@_CacheCallback | Literal[_DefaultFlag.NO_DEFAULT]`
+ tanjun/dependencies/data.py:265:13 error[invalid-assignment] Object of type `Coroutine[Any, Any, _T@_CacheCallback] | _T@_CacheCallback` is not assignable to attribute `_result` of type `_T@_CacheCallback | Literal[_DefaultFlag.NO_DEFAULT]`
- tanjun/dependencies/data.py:269:20 error[invalid-return-type] Return type does not match returned value: expected `_T@_CacheCallback`, found `_T@_CacheCallback | Coroutine[Any, Any, _T@_CacheCallback]`
+ tanjun/dependencies/data.py:269:20 error[invalid-return-type] Return type does not match returned value: expected `_T@_CacheCallback`, found `Coroutine[Any, Any, _T@_CacheCallback] | _T@_CacheCallback`
- tanjun/dependencies/data.py:301:12 error[invalid-return-type] Return type does not match returned value: expected `(...) -> Coroutine[Any, Any, _T@cache_callback]`, found `_CacheCallback[_T@cache_callback | Coroutine[Any, Any, _T@cache_callback]]`
+ tanjun/dependencies/data.py:301:12 error[invalid-return-type] Return type does not match returned value: expected `(...) -> Coroutine[Any, Any, _T@cache_callback]`, found `_CacheCallback[_T@_CacheCallback]`
+ tanjun/dependencies/data.py:301:12 error[invalid-argument-type] Argument to `_CacheCallback.__init__` is incorrect: Expected `_CacheCallback[_T@cache_callback] | _CacheCallback[Coroutine[Any, Any, Coroutine[Any, Any, _T@cache_callback] | _T@cache_callback] | _T@cache_callback]`, found `_CacheCallback[Coroutine[Any, Any, _T@cache_callback] | _T@cache_callback]`
- tanjun/dependencies/data.py:347:12 error[invalid-return-type] Return type does not match returned value: expected `_T@cached_inject`, found `_T@cached_inject | Coroutine[Any, Any, _T@cached_inject | Coroutine[Any, Any, _T@cached_inject]]`
+ tanjun/dependencies/data.py:347:12 error[invalid-return-type] Return type does not match returned value: expected `_T@cached_inject`, found `Coroutine[Any, Any, Coroutine[Any, Any, _T@cached_inject] | _T@cached_inject] | _T@cached_inject`

anyio (https://github.com/agronholm/anyio)
- src/anyio/from_thread.py:382:60 error[invalid-argument-type] Argument to bound method `BlockingPortal._spawn_task_from_thread` is incorrect: Expected `Future[T_Retval@start_task_soon | Awaitable[T_Retval@start_task_soon]]`, found `Future[T_Retval@start_task_soon]`
+ src/anyio/from_thread.py:382:60 error[invalid-argument-type] Argument to bound method `BlockingPortal._spawn_task_from_thread` is incorrect: Expected `Future[Awaitable[T_Retval@start_task_soon] | T_Retval@start_task_soon]`, found `Future[T_Retval@start_task_soon]`

bokeh (https://github.com/bokeh/bokeh)
- src/bokeh/settings.py:775:46 error[invalid-argument-type] Argument to `PrioritizedSetting.__init__` is incorrect: Expected `((str | int | None, /) -> str | int | None) | None`, found `def convert_logging(value: str | int) -> int | None`
+ src/bokeh/settings.py:775:46 error[invalid-argument-type] Argument to `PrioritizedSetting.__init__` is incorrect: Expected `((str, /) -> str) | None`, found `def convert_logging(value: str | int) -> int | None`

dd-trace-py (https://github.com/DataDog/dd-trace-py)
+ ddtrace/debugging/_encoding.py:161:9 error[invalid-assignment] Object of type `enumerate[str]` is not assignable to attribute `_iter` of type `enumerate[LiteralString]`

discord.py (https://github.com/Rapptz/discord.py)
- discord/app_commands/checks.py:390:42 error[invalid-assignment] Object of type `Cooldown | None | Coroutine[Any, Any, Cooldown | None]` is not assignable to `Cooldown | None`
+ discord/app_commands/checks.py:390:42 error[invalid-assignment] Object of type `Coroutine[Any, Any, Cooldown | None] | None | Cooldown` is not assignable to `Cooldown | None`

ibis (https://github.com/ibis-project/ibis)
- ibis/backends/bigquery/tests/system/test_client.py:516:21 error[invalid-argument-type] Argument to constructor `map.__new__` is incorrect: Expected `(Iterable[list[str]] | Iterable[list[bytes]], /) -> dict[str, str] | dict[bytes, bytes]`, found `<class 'dict'>`

jax (https://github.com/google/jax)
+ jax/_src/numpy/einsum.py:498:55 error[invalid-argument-type] Method `__getitem__` of type `bound method Counter[LiteralString].__getitem__(key: LiteralString, /) -> int` cannot be called with key of type `str` on object of type `Counter[LiteralString]`
- jax/_src/pallas/fuser/block_spec.py:1792:21 error[invalid-argument-type] Argument to constructor `map.__new__` is incorrect: Expected `(Element | Squeezed | Blocked | ... omitted 4 union elements, /) -> int | None`, found `def _block_size(dim: Element | int | None) -> int | None`
+ jax/_src/pallas/fuser/block_spec.py:1792:21 error[invalid-argument-type] Argument to constructor `map.__new__` is incorrect: Expected `(Element | int | None | ... omitted 4 union elements, /) -> int | None`, found `def _block_size(dim: Element | int | None) -> int | None`
- jax/_src/pallas/fuser/block_spec.py:1792:34 error[invalid-argument-type] Argument to constructor `map.__new__` is incorrect: Expected `Iterable[Element | Squeezed | Blocked | ... omitted 4 union elements]`, found `Sequence[Element | Squeezed | Blocked | ... omitted 4 union elements] | None`
+ jax/_src/pallas/fuser/block_spec.py:1792:34 error[invalid-argument-type] Argument to constructor `map.__new__` is incorrect: Expected `Iterable[Element | int | None | ... omitted 4 union elements]`, found `Sequence[Element | Squeezed | Blocked | ... omitted 4 union elements] | None`

pandas (https://github.com/pandas-dev/pandas)
- pandas/tests/arithmetic/test_datetime64.py:2217:36 error[invalid-argument-type] Argument to constructor `map.__new__` is incorrect: Expected `(Unknown, str, /) -> timedelta64[int] | timedelta64[None] | timedelta64[timedelta]`, found `<class 'timedelta64'>`
+ pandas/tests/arithmetic/test_datetime64.py:2217:36 error[invalid-argument-type] Argument to constructor `map.__new__` is incorrect: Expected `(str | bytes | None | ... omitted 7 union elements, str | Literal[b"Y", b"M", b"W", b"D", b"h", ... omitted 8 literals] | tuple[Literal["Y", "M", "W", "D", "h", ... omitted 22 literals], SupportsIndex], /) -> timedelta64[None] | timedelta64[int] | timedelta64[timedelta]`, found `<class 'timedelta64'>`
- pandas/tests/io/json/test_readlines.py:417:35 error[invalid-argument-type] Argument is incorrect: Expected `DataFrame`, found `DataFrame | Series | Unknown`
+ pandas/tests/io/json/test_readlines.py:417:35 error[invalid-argument-type] Argument is incorrect: Expected `DataFrame`, found `Unknown | DataFrame | Series`

pandas-stubs (https://github.com/pandas-dev/pandas-stubs)
- tests/indexes/float/test_floordiv.py:42:15 error[unsupported-operator] Operator `//` is not supported between objects of type `Index[int | float]` and `timedelta`
+ tests/indexes/float/test_floordiv.py:50:11 error[type-assertion-failure] Type `Index[int]` does not match asserted type `TimedeltaIndex`
- tests/indexes/int/test_floordiv.py:41:15 error[unsupported-operator] Operator `//` is not supported between objects of type `Index[int]` and `timedelta`
+ tests/indexes/int/test_floordiv.py:49:11 error[type-assertion-failure] Type `Index[int]` does not match asserted type `TimedeltaIndex`
- tests/indexes/str/test_add.py:32:11 error[type-assertion-failure] Type `Unknown` does not match asserted type `Index[str]`
- tests/indexes/str/test_add.py:32:23 error[unsupported-operator] Operator `+` is not supported between objects of type `Index[str]` and `Literal["right"]`
- tests/indexes/test_add.py:112:11 error[type-assertion-failure] Type `Unknown` does not match asserted type `Index[str]`
- tests/indexes/test_add.py:117:9 error[type-assertion-failure] Type `Unknown` does not match asserted type `Index[str]`
- tests/indexes/test_floordiv.py:40:15 error[unsupported-operator] Operator `//` is not supported between objects of type `Index[Any]` and `timedelta`
+ tests/indexes/test_floordiv.py:48:11 error[type-assertion-failure] Type `Index[int]` does not match asserted type `TimedeltaIndex`
- tests/series/float/test_floordiv.py:41:15 error[unsupported-operator] Operator `//` is not supported between objects of type `Series[int | float]` and `timedelta`
- tests/series/float/test_floordiv.py:57:9 error[no-matching-overload] No overload of bound method `Series.floordiv` matches arguments
+ tests/series/float/test_floordiv.py:49:11 error[type-assertion-failure] Type `Series[int]` does not match asserted type `Series[Timedelta]`
+ tests/series/float/test_floordiv.py:66:9 error[type-assertion-failure] Type `Series[int]` does not match asserted type `Series[Timedelta]`
- tests/series/int/test_floordiv.py:42:15 error[unsupported-operator] Operator `//` is not supported between objects of type `Series[int]` and `timedelta`
- tests/series/int/test_floordiv.py:58:9 error[no-matching-overload] No overload of bound method `Series.floordiv` matches arguments
+ tests/series/int/test_floordiv.py:50:11 error[type-assertion-failure] Type `Series[int]` does not match asserted type `Series[Timedelta]`
+ tests/series/int/test_floordiv.py:67:9 error[type-assertion-failure] Type `Series[int]` does not match asserted type `Series[Timedelta]`
- tests/series/str/test_add.py:32:11 error[type-assertion-failure] Type `Unknown` does not match asserted type `Series[str]`
- tests/series/str/test_add.py:32:23 error[unsupported-operator] Operator `+` is not supported between objects of type `Series[str]` and `Literal["right"]`
- tests/series/str/test_add.py:40:11 error[type-assertion-failure] Type `Unknown` does not match asserted type `Series[str]`
- tests/series/str/test_add.py:40:23 error[no-matching-overload] No overload of bound method `Series.add` matches arguments
- tests/series/str/test_add.py:59:15 error[type-assertion-failure] Type `Unknown` does not match asserted type `Series[str]`
- tests/series/str/test_add.py:59:27 error[unsupported-operator] Operator `+` is not supported between objects of type `Series[str]` and `tuple[str, ...]`
- tests/series/str/test_add.py:81:15 error[type-assertion-failure] Type `Unknown` does not match asserted type `Series[str]`
- tests/series/str/test_add.py:81:27 error[no-matching-overload] No overload of bound method `Series.add` matches arguments
- tests/series/test_add.py:193:11 error[type-assertion-failure] Type `Unknown` does not match asserted type `Series[str]`
- tests/series/test_add.py:195:11 error[type-assertion-failure] Type `Unknown` does not match asserted type `Series[str]`
+ tests/series/test_floordiv.py:48:11 error[type-assertion-failure] Type `Series[int]` does not match asserted type `Series[Timedelta]`
- tests/series/test_floordiv.py:65:9 error[type-assertion-failure] Type `Unknown` does not match asserted type `Series[Timedelta]`
+ tests/series/test_floordiv.py:65:9 error[type-assertion-failure] Type `Series[int]` does not match asserted type `Series[Timedelta]`
- tests/series/timedelta/test_floordiv.py:43:11 error[type-assertion-failure] Type `Series[Timedelta]` does not match asserted type `Series[int]`
- tests/series/timedelta/test_floordiv.py:51:11 error[type-assertion-failure] Type `Unknown` does not match asserted type `Series[int]`
- tests/series/timedelta/test_floordiv.py:51:23 error[unsupported-operator] Operator `//` is not supported between objects of type `timedelta` and `Series[Timedelta]`
- tests/series/timedelta/test_floordiv.py:68:11 error[type-assertion-failure] Type `Series[Timedelta]` does not match asserted type `Series[int]`
- tests/series/timedelta/test_floordiv.py:188:11 error[type-assertion-failure] Type `Series[Timedelta]` does not match asserted type `Series[int]`
- tests/series/timedelta/test_floordiv.py:196:11 error[type-assertion-failure] Type `Series[Timedelta]` does not match asserted type `Series[int]`
- tests/series/timedelta/test_truediv.py:42:11 error[type-assertion-failure] Type `Series[Timedelta]` does not match asserted type `Series[int | float]`
- tests/series/timedelta/test_truediv.py:50:11 error[type-assertion-failure] Type `Unknown` does not match asserted type `Series[int | float]`
- tests/series/timedelta/test_truediv.py:50:23 error[unsupported-operator] Operator `/` is not supported between objects of type `timedelta` and `Series[Timedelta]`
- tests/series/timedelta/test_truediv.py:63:11 error[type-assertion-failure] Type `Series[Timedelta]` does not match asserted type `Series[int | float]`
- tests/series/timedelta/test_truediv.py:72:11 error[type-assertion-failure] Type `Series[Timedelta]` does not match asserted type `Series[int | float]`
- tests/series/timedelta/test_truediv.py:80:11 error[type-assertion-failure] Type `Unknown` does not match asserted type `Series[int | float]`
- tests/series/timedelta/test_truediv.py:80:23 error[no-matching-overload] No overload of bound method `Series.rtruediv` matches arguments
- tests/series/timedelta/test_truediv.py:88:11 error[type-assertion-failure] Type `Unknown` does not match asserted type `Series[int | float]`
- tests/series/timedelta/test_truediv.py:88:23 error[no-matching-overload] No overload of bound method `Series.rtruediv` matches arguments
- tests/series/timedelta/test_truediv.py:226:11 error[type-assertion-failure] Type `Series[Timedelta]` does not match asserted type `Series[int | float]`
- tests/series/timedelta/test_truediv.py:234:11 error[type-assertion-failure] Type `Series[Timedelta]` does not match asserted type `Series[int | float]`
- tests/series/timedelta/test_truediv.py:238:11 error[type-assertion-failure] Type `Series[Timedelta]` does not match asserted type `Series[int | float]`
- tests/series/timedelta/test_truediv.py:242:11 error[type-assertion-failure] Type `Unknown` does not match asserted type `Series[int | float]`
- tests/series/timedelta/test_truediv.py:242:23 error[no-matching-overload] No overload of bound method `Series.rtruediv` matches arguments
- tests/series/timedelta/test_truediv.py:246:11 error[type-assertion-failure] Type `Unknown` does not match asserted type `Series[int | float]`
- tests/series/timedelta/test_truediv.py:246:23 error[no-matching-overload] No overload of bound method `Series.rtruediv` matches arguments
- tests/test_timefuncs.py:1750:11 error[type-assertion-failure] Type `Series[Timedelta]` does not match asserted type `Series[int | float]`
- tests/test_timefuncs.py:1753:14 error[unsupported-operator] Operator `/` is not supported between objects of type `Series[Timestamp]` and `timedelta64[timedelta]`

pip (https://github.com/pypa/pip)
+ src/pip/_internal/cli/spinners.py:54:9 error[invalid-assignment] Object of type `cycle[str]` is not assignable to attribute `_spin_cycle` of type `cycle[LiteralString]`
+ src/pip/_internal/cli/spinners.py:165:9 error[invalid-assignment] Object of type `cycle[str]` is not assignable to attribute `_spin_cycle` of type `cycle[LiteralString]`

prefect (https://github.com/PrefectHQ/prefect)
- src/prefect/utilities/asyncutils/__init__.py:198:16 error[invalid-return-type] Return type does not match returned value: expected `R@run_coro_as_sync | None`, found `CoroutineType[Any, Any, R@run_coro_as_sync | None] | R@run_coro_as_sync | None`
+ src/prefect/utilities/asyncutils/__init__.py:198:16 error[invalid-return-type] Return type does not match returned value: expected `R@run_coro_as_sync | None`, found `CoroutineType[Any, Any, R@run_coro_as_sync | None] | None | R@run_coro_as_sync`
- src/prefect/utilities/asyncutils/__init__.py:207:20 error[invalid-return-type] Return type does not match returned value: expected `R@run_coro_as_sync | None`, found `CoroutineType[Any, Any, R@run_coro_as_sync | None] | R@run_coro_as_sync | None`
+ src/prefect/utilities/asyncutils/__init__.py:207:20 error[invalid-return-type] Return type does not match returned value: expected `R@run_coro_as_sync | None`, found `CoroutineType[Any, Any, R@run_coro_as_sync | None] | None | R@run_coro_as_sync`

rotki (https://github.com/rotki/rotki)
+ rotkehlchen/chain/ethereum/oracles/uniswap.py:326:22 error[invalid-argument-type] Argument to `FVal.__init__` is incorrect: Expected `int | float | bytes | ... omitted 3 union elements`, found `SupportsMul[SupportsRMul[Never, Never] | Divergent, Never] | Literal[1]`

scikit-learn (https://github.com/scikit-learn/scikit-learn)
+ sklearn/model_selection/_search.py:177:13 error[missing-argument] No argument provided for required parameter `initial`
+ sklearn/model_selection/_search.py:177:21 error[invalid-argument-type] Argument is incorrect: Expected `Iterable[SupportsRMul[SupportsMul[SupportsRMul[SupportsMul[SupportsRMul[Never, Never], Never], SupportsMul[SupportsRMul[Never, Never], Never]], Never], SupportsMul[SupportsRMul[SupportsMul[SupportsRMul[Never, Never], Never], SupportsMul[SupportsRMul[Never, Never], Never]], Never]]]`, found `GeneratorType[int, None, None]`

sympy (https://github.com/sympy/sympy)
- FAILED old=success(1) new=timeout(None)

tornado (https://github.com/tornadoweb/tornado)
- tornado/gen.py:239:62 error[invalid-argument-type] Argument to `Runner.__init__` is incorrect: Expected `None | Awaitable[Unknown] | list[Awaitable[Unknown]] | dict[Any, Awaitable[Unknown]] | Future[Unknown]`, found `_T@next | _T@next | _VT@next`
+ tornado/gen.py:239:62 error[invalid-argument-type] Argument to `Runner.__init__` is incorrect: Expected `None | Awaitable[Unknown] | list[Awaitable[Unknown]] | dict[Any, Awaitable[Unknown]] | Future[Unknown]`, found `_T@next | _VT@next | _T@next`

vision (https://github.com/pytorch/vision)
+ torchvision/prototype/datasets/_builtin/mnist.py:51:25 error[missing-argument] No argument provided for required parameter `initial`
+ torchvision/prototype/datasets/_builtin/mnist.py:51:30 error[invalid-argument-type] Argument is incorrect: Expected `Iterable[SupportsRMul[SupportsMul[SupportsRMul[SupportsMul[SupportsRMul[Never, Never], Never], SupportsMul[SupportsRMul[Never, Never], Never]], Never], SupportsMul[SupportsRMul[SupportsMul[SupportsRMul[Never, Never], Never], SupportsMul[SupportsRMul[Never, Never], Never]], Never]]]`, found `(list[int] & ~AlwaysFalsy) | (list[Unknown] & ~AlwaysFalsy)`
+ torchvision/prototype/datasets/_builtin/mnist.py:61:45 error[invalid-argument-type] Argument is incorrect: Expected `int`, found `SupportsMul[SupportsRMul[Never, Never], Never] | Literal[1]`

xarray (https://github.com/pydata/xarray)
- xarray/core/dataarray.py:1494:29 error[invalid-assignment] Object of type `dict[Hashable, object]` is not assignable to `str | int | tuple[int, ...] | None | Mapping[Any, Resampler | str | int | tuple[int, ...] | None]`
+ xarray/core/dataarray.py:1494:29 error[invalid-assignment] Object of type `dict[object, object]` is not assignable to `str | int | tuple[int, ...] | None | Mapping[Any, Resampler | str | int | tuple[int, ...] | None]`
- xarray/core/indexes.py:1748:9 error[invalid-assignment] Object of type `dict[Any, T_PandasOrXarrayIndex@Indexes | Index | Unknown]` is not assignable to attribute `_indexes` of type `dict[Any, T_PandasOrXarrayIndex@Indexes]`
+ xarray/core/indexes.py:1748:9 error[invalid-assignment] Object of type `dict[Any, Index | T_PandasOrXarrayIndex@Indexes]` is not assignable to attribute `_indexes` of type `dict[Any, T_PandasOrXarrayIndex@Indexes]`
- xarray/structure/combine.py:40:50 error[invalid-argument-type] Argument to function `_infer_tile_ids_from_nested_list` is incorrect: Expected `NestedSequence[NestedSequence[T@_infer_concat_order_from_positions]]`, found `NestedSequence[T@_infer_concat_order_from_positions]`

Full report with detailed diff (timing results)

@dcreager

dcreager commented Jun 2, 2026

Copy link
Copy Markdown
Member Author

Closing in favor of #25435

@dcreager dcreager closed this Jun 2, 2026
@dcreager dcreager deleted the dcreager/separate-constraints branch June 2, 2026 12:36
dcreager added a commit that referenced this pull request Jun 3, 2026
This is a simpler alternative to #22400. Instead of completely reworking
our representation of individual constraints, we just wrap the lower and
upper bounds in `Option`. If either is `None`, that bound is _missing_,
as opposed to having an explicit `Never` lower bound / `object` upper
bound. This is much less invasive of a change!

Closes astral-sh/ty#3558
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

internal An internal refactor or improvement ty Multi-file analysis & type inference

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Distinguish "missing" constraint set lower/upper bounds from Never and object

2 participants