Skip to content

[ty] Add an opt-in unsound-yield lint - #27593

Merged
AlexWaygood merged 1 commit into
mainfrom
alex/unsound-yield
Aug 9, 2026
Merged

[ty] Add an opt-in unsound-yield lint#27593
AlexWaygood merged 1 commit into
mainfrom
alex/unsound-yield

Conversation

@AlexWaygood

@AlexWaygood AlexWaygood commented Aug 8, 2026

Copy link
Copy Markdown
Member

Summary

#27561 implemented unsound-return-statement, which flagged when unsound return statements could lead to dynamic types causing unsoundness in far-away parts of a user's code due to Any types "leaking" across fully static typed function boundaries.

This PR introduces unsound-yield, a parallel rule for unsound yield statements.

Motivation

Python type checkers normally validate a yielded value using assignability rather than strict subtyping. Because Any is assignable to essentially every type, an imprecisely typed value can cross an apparently well-typed generator boundary without any diagnostic:

from typing import Any, Iterator


def returns_any() -> Any:
    return "not an integer"


def integers() -> Iterator[int]:
    yield returns_any()


sum(integers())  # Fails at runtime.

The annotation on integers leads callers to believe that every yielded value is an int, even though its implementation silently yields an Any value containing a string. This PR introduces unsound-yield as the generator-boundary counterpart to unsound-return-statement, making fully static yield annotations meaningful typed boundaries and catching this class of gradual-typing escape at its source.

The new rule

unsound-yield is disabled by default and must be enabled explicitly:

[rules]
unsound-yield = "error"

For fully static yield annotations, the rule requires each yielded value to satisfy a stricter, subtype-like relationship with the annotated yield type. It supports direct yield expressions, delegated yield from expressions, synchronous and asynchronous generators and iterators, Never, aliases, and nested error contexts.

Example diagnostic

A delegated yield containing a nested dynamic value makes the distinction particularly clear:

from typing import Any, Iterator


def returns_any() -> Any:
    return "unexpected string"


def dynamic_values() -> Iterator[tuple[int, Any]]:
    yield (42, returns_any())


def integer_pairs() -> Iterator[tuple[int, int]]:
    yield from dynamic_values()

ty distinguishes the delegated expression from the values it yields, identifies the incompatible tuple element, explains why ordinary assignability would have accepted the delegation, and suggests narrowing individual values before yielding them:

Verbose unsound-yield diagnostic with nested tuple error context

Implementation details

We distinguish real iteration information from fabricated fallback types

Delegated iteration can fail before ty learns anything about the delegated element type. For example, yield from 42 already produces not-iterable; inventing an Unknown element type solely for error recovery and then reporting unsound-yield against that invented type would add a misleading second diagnostic.

The delegated-yield path now distinguishes an element type actually recovered from an iterable's interface from a fabricated fallback. It skips the strict check when no element type can be established, while preserving meaningful unsound-yield diagnostics when a malformed iterable nevertheless declares a genuinely dynamic element type.

@AlexWaygood AlexWaygood added the ty Multi-file analysis & type inference label Aug 8, 2026 — with ChatGPT Codex Connector
@astral-sh-bot

astral-sh-bot Bot commented Aug 8, 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 96.96%. The percentage of expected errors that received a diagnostic held steady at 92.96%. The number of fully passing files held steady at 106/133.

@astral-sh-bot

astral-sh-bot Bot commented Aug 8, 2026

Copy link
Copy Markdown

Memory usage report

Memory usage unchanged ✅

@astral-sh-bot

astral-sh-bot Bot commented Aug 8, 2026

Copy link
Copy Markdown

ecosystem-analyzer results

Lint rule Added Removed Changed
unsound-yield 434 0 0
unknown-rule 0 168 0
unused-type-ignore-comment 0 1 0
Total 434 169 0

Flaky changes detected. This PR summary excludes flaky changes; see the HTML report for details.

Showing a random sample of 453 of 603 changes. See the HTML report for the full diff.

Raw diff sample (453 of 603 changes)
AutoSplit (https://github.com/Toufool/AutoSplit)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

CPython (Argument Clinic) (https://github.com/python/cpython)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

DateType (https://github.com/glyph/DateType)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

Expression (https://github.com/cognitedata/Expression)
+ README.py:570:24 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `int`
+ README.py:382:20 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `int`
+ tests/test_async_option_builder.py:297:19 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `int`
+ tests/test_async_result_builder.py:47:24 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `int`
+ tests/test_async_result_builder.py:134:24 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `int`
+ tests/test_async_result_builder.py:321:19 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `int`
+ tests/test_catch.py:83:24 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `int`
+ tests/test_gen.py:131:20 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `int`
+ tests/test_option_builder.py:43:29 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `int`
+ tests/test_option_builder.py:123:29 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `int`
+ tests/test_result_builder.py:204:37 warning[unsound-yield] Unsound `yield`: `Result[Literal[42], Any]` is not a subtype of `Result[int, str]`
+ tests/test_result_builder.py:42:29 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `int`
+ tests/test_result_builder.py:122:29 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `int`
+ tests/test_seq_builder.py:43:20 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `int`
+ tests/test_seq_builder.py:244:20 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `int`

PyGithub (https://github.com/PyGithub/PyGithub)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

PyWinCtl (https://github.com/Kalmat/PyWinCtl)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

aiohttp (https://github.com/aio-libs/aiohttp)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

aiohttp-devtools (https://github.com/aio-libs/aiohttp-devtools)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

aioredis (https://github.com/aio-libs/aioredis)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

aiortc (https://github.com/aiortc/aiortc)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

alectryon (https://github.com/cpitclaudel/alectryon)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

alerta (https://github.com/alerta/alerta)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

altair (https://github.com/vega/altair)
+ altair/vegalite/v6/api.py:822:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `BinaryExpression`

antidote (https://github.com/Finistere/antidote)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

anyio (https://github.com/agronholm/anyio)
+ src/anyio/itertools.py:165:11 warning[unsound-yield] Unsound `yield`: `Unknown | (T@accumulate & ~None)` is not a subtype of `T@accumulate`
+ src/anyio/itertools.py:218:27 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `T@from_iterable`
+ src/anyio/itertools.py:268:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `T@compress`
+ src/anyio/itertools.py:287:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `T@cycle`
+ src/anyio/itertools.py:312:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `T@dropwhile`
+ src/anyio/itertools.py:327:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `T@filterfalse`
+ src/anyio/itertools.py:370:11 warning[unsound-yield] Unsound `yield`: `tuple[object, list[Unknown]]` is not a subtype of `tuple[object, list[T@groupby]]`
+ src/anyio/itertools.py:458:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `T@islice`
+ src/anyio/itertools.py:481:15 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, Unknown]` is not a subtype of `tuple[T@pairwise, T@pairwise]`
+ src/anyio/itertools.py:584:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `T@takewhile`

apprise (https://github.com/caronc/apprise)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ apprise/apprise.py:393:27 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `NotifyBase`

archinstall (https://github.com/archlinux/archinstall)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

artigraph (https://github.com/artigraph/artigraph)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ src/arti/internal/mappings.py:240:28 warning[unsound-yield] Unsound `yield from`: `tuple[str, Unknown] | tuple[str, V@TypedBox]` is not a subtype of `tuple[str, V@TypedBox]`
+ tests/conftest.py:25:19 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, Unknown]` is not a subtype of `tuple[str, int]`

async-utils (https://github.com/mikeshardmind/async-utils)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

asynq (https://github.com/quora/asynq)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

attrs (https://github.com/python-attrs/attrs)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

bandersnatch (https://github.com/pypa/bandersnatch)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ src/bandersnatch_storage_plugins/s3.py:887:23 warning[unsound-yield] Unsound `yield`: `S3Path` is not a subtype of `Path | str`

bidict (https://github.com/jab/bidict)
+ bidict/_orderedbase.py:242:23 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `KT@OrderedBidictBase`

black (https://github.com/psf/black)
+ src/black/nodes.py:169:24 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `T@Visitor`
+ src/black/ranges.py:332:20 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `None`
+ src/blib2to3/pytree.py:924:23 warning[unsound-yield] Unsound `yield`: `tuple[int, dict[str, Unknown]]` is not a subtype of `tuple[int, dict[str, Node | Leaf]]`
+ src/blib2to3/pytree.py:976:39 warning[unsound-yield] Unsound `yield`: `tuple[int | Divergent, dict[str, Node | Leaf]]` is not a subtype of `tuple[int, dict[str, Node | Leaf]]`

bokeh (https://github.com/bokeh/bokeh)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ src/bokeh/plotting/_tools.py:207:27 warning[unsound-yield] Unsound `yield`: `Tool | Divergent` is not a subtype of `Tool`

boostedblob (https://github.com/hauntsaninja/boostedblob)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

build (https://github.com/pypa/build)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ tests/test_main.py:1016:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `MagicMock`

check-jsonschema (https://github.com/python-jsonschema/check-jsonschema)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ src/check_jsonschema/regex_variants.py:137:32 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `ValidationError`
+ src/check_jsonschema/schema_loader/main.py:37:20 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `ValidationError`

cibuildwheel (https://github.com/pypa/cibuildwheel)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ cibuildwheel/util/cmd.py:102:19 warning[unsound-yield] Unsound `yield`: `list[str] | list[Unknown]` is not a subtype of `list[str]`
+ cibuildwheel/util/cmd.py:106:11 warning[unsound-yield] Unsound `yield`: `list[str] | list[Unknown]` is not a subtype of `list[str]`

cki-lib (https://gitlab.com/cki-project/cki-lib)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

cloud-init (https://github.com/canonical/cloud-init)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ tests/integration_tests/conftest.py:399:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `IntegrationInstance`
+ tests/integration_tests/datasources/test_oci_networking.py:93:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `IntegrationInstance`

colour (https://github.com/colour-science/colour)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

comtypes (https://github.com/enthought/comtypes)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ comtypes/server/register.py:347:11 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, str, Literal[""], Any | Literal[""]]` is not a subtype of `tuple[int, str, str, str]`
+ comtypes/server/register.py:368:23 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, Any & ~AlwaysFalsy, Literal[""], Any & ~AlwaysFalsy]` is not a subtype of `tuple[int, str, str, str]`
+ comtypes/server/register.py:369:19 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, str, Literal[""], Any & ~AlwaysFalsy]` is not a subtype of `tuple[int, str, str, str]`
+ comtypes/server/register.py:370:19 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, str, Literal[""], str]` is not a subtype of `tuple[int, str, str, str]`
+ comtypes/server/register.py:379:11 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, str, Literal[""], str]` is not a subtype of `tuple[int, str, str, str]`
+ comtypes/server/register.py:385:11 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, str, Literal[""], str]` is not a subtype of `tuple[int, str, str, str]`
+ comtypes/server/register.py:391:11 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, str, Literal[""], str]` is not a subtype of `tuple[int, str, str, str]`
+ comtypes/server/register.py:396:11 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, str, Literal["PythonClass"], str]` is not a subtype of `tuple[int, str, str, str]`
+ comtypes/server/register.py:402:11 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, str, Literal["PythonPath"], str]` is not a subtype of `tuple[int, str, str, str]`
+ comtypes/server/register.py:413:15 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, str, Literal["ThreadingModel"], Any & ~None]` is not a subtype of `tuple[int, str, str, str]`
+ comtypes/server/register.py:424:15 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, str, Literal[""], Any]` is not a subtype of `tuple[int, str, str, str]`
+ comtypes/test/gdi_helper.py:95:15 warning[unsound-yield] Unsound `yield`: `Unknown & ~AlwaysFalsy` is not a subtype of `int`
+ comtypes/test/gdi_helper.py:107:15 warning[unsound-yield] Unsound `yield`: `Unknown & ~AlwaysFalsy` is not a subtype of `int`
+ comtypes/test/gdi_helper.py:134:15 warning[unsound-yield] Unsound `yield`: `tuple[Unknown & ~AlwaysFalsy, int & ~AlwaysFalsy]` is not a subtype of `tuple[int, int]`
+ comtypes/test/test_logutil.py:101:15 warning[unsound-yield] Unsound `yield`: `Unknown & ~AlwaysFalsy` is not a subtype of `int`
+ comtypes/test/test_logutil.py:116:15 warning[unsound-yield] Unsound `yield`: `Unknown & ~AlwaysFalsy` is not a subtype of `int`
+ comtypes/test/test_logutil.py:132:15 warning[unsound-yield] Unsound `yield`: `Unknown & ~AlwaysFalsy` is not a subtype of `int`
+ comtypes/test/test_stream.py:434:15 warning[unsound-yield] Unsound `yield`: `Unknown & ~AlwaysFalsy` is not a subtype of `int`

core (https://github.com/home-assistant/core)
+ homeassistant/helpers/chat_session.py:158:11 warning[unsound-yield] Unsound `yield`: `ChatSession | (Unknown & ~None)` is not a subtype of `ChatSession`
+ homeassistant/components/assist_pipeline/websocket_api.py:184:23 warning[unsound-yield] Unsound `yield`: `(bytes & ~AlwaysFalsy) | Unknown` is not a subtype of `bytes`
+ homeassistant/components/conversation/chat_log.py:128:11 warning[unsound-yield] Unsound `yield`: `ChatLog | (Unknown & ~AlwaysFalsy)` is not a subtype of `ChatLog`
+ homeassistant/components/elevenlabs/tts.py:292:35 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `bytes`
+ homeassistant/components/homeassistant_hardware/helpers.py:196:27 warning[unsound-yield] Unsound `yield`: `(Unknown & ~None) | FirmwareInfo` is not a subtype of `FirmwareInfo`
+ homeassistant/components/homekit/aidmanager.py:48:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `int`
+ homeassistant/components/homekit/aidmanager.py:52:11 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `int`
+ homeassistant/components/improv_ble/config_flow.py:306:19 warning[unsound-yield] Unsound `yield`: `Future[Any]` is not a subtype of `Future[str]`
+ homeassistant/components/mcp_server/session.py:46:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str`
+ homeassistant/components/wyoming/tts.py:218:27 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `bytes`

cryptography (https://github.com/pyca/cryptography)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

cwltool (https://github.com/common-workflow-language/cwltool)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

dacite (https://github.com/konradhalas/dacite)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

dd-trace-py (https://github.com/DataDog/dd-trace-py)
+ ddtrace/vendor/packaging/specifiers.py:646:23 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `UnparsedVersionVar@filter`
+ ddtrace/aiguard/_streaming.py:194:24 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `str`
+ tests/appsec/utils.py:89:19 warning[unsound-yield] Unsound `yield`: `Unknown | Span` is not a subtype of `Span`
+ tests/llmobs/test_experiments.py:213:11 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Dataset`

dedupe (https://github.com/dedupeio/dedupe)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

discord.py (https://github.com/Rapptz/discord.py)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ discord/abc.py:1821:23 warning[unsound-yield] Unsound `yield`: `@Todo` is not a subtype of `PinnedMessage`
+ discord/poll.py:320:23 warning[unsound-yield] Unsound `yield`: `(@Todo & ~AlwaysFalsy) | User` is not a subtype of `User | Member`
+ discord/ui/view.py:108:24 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `Component`
+ discord/utils.py:1065:19 warning[unsound-yield] Unsound `yield`: `list[Unknown]` is not a subtype of `list[T@_achunk]`
+ discord/utils.py:1069:15 warning[unsound-yield] Unsound `yield`: `list[Unknown] & ~AlwaysFalsy` is not a subtype of `list[T@_achunk]`
+ discord/utils.py:745:24 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `str`

django-modern-rest (https://github.com/wemake-services/django-modern-rest)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

django-test-migrations (https://github.com/wemake-services/django-test-migrations)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

downforeveryone (https://github.com/rpdelaney/downforeveryone)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

dragonchain (https://github.com/dragonchain/dragonchain)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

dulwich (https://github.com/dulwich/dulwich)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ dulwich/config.py:1441:27 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str`
+ dulwich/porcelain/__init__.py:4230:20 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `str`
+ dulwich/worktree.py:349:20 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `WorkTreeInfo`

ecosystem-analyzer (https://github.com/astral-sh/ecosystem-analyzer)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

egglog-python (https://github.com/egraphs-good/egglog-python)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

flake8 (https://github.com/pycqa/flake8)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ src/flake8/plugins/pycodestyle.py:62:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:63:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:64:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:65:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:66:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:67:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:68:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:69:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:70:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:71:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:72:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:74:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:75:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:79:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:80:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:81:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:82:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:84:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:103:15 warning[unsound-yield] Unsound `yield`: `Unknown & ~None` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:106:15 warning[unsound-yield] Unsound `yield`: `Unknown & ~None` is not a subtype of `tuple[int, str]`
+ src/flake8/plugins/pycodestyle.py:109:15 warning[unsound-yield] Unsound `yield`: `Unknown & ~None` is not a subtype of `tuple[int, str]`

flake8-pyi (https://github.com/PyCQA/flake8-pyi)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

graphql-core (https://github.com/graphql-python/graphql-core)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

httpx-caching (https://github.com/johtso/httpx-caching)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

hydpy (https://github.com/hydpy-dev/hydpy)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ hydpy/core/filetools.py:130:20 warning[unsound-yield] Unsound `yield from`: `tuple[str, Any]` is not a subtype of `tuple[str, str]`
+ hydpy/core/masktools.py:405:19 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `type[BaseMask]`
+ hydpy/core/modeltools.py:2708:35 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `type[Method]`
+ hydpy/core/modeltools.py:2713:27 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `type[Method]`
+ hydpy/core/objecttools.py:1894:15 warning[unsound-yield] Unsound `yield`: `TextIO | Any` is not a subtype of `TextIO`
+ hydpy/exe/xmltools.py:1556:31 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `IOSequence`
+ hydpy/exe/xmltools.py:1563:27 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `IOSequence`

hydra-zen (https://github.com/mit-ll-responsible-ai/hydra-zen)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

ibis (https://github.com/ibis-project/ibis)
+ ibis/common/collections.py:85:23 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `V@__iter__`
+ ibis/common/graph.py:66:19 warning[unsound-yield] Unsound `yield`: `Any & Node` is not a subtype of `N@_flatten_collections`
+ ibis/expr/rewrites.py:125:19 warning[unsound-yield] Unsound `yield`: `tuple[Unknown & ~Field & ~None, int]` is not a subtype of `tuple[Field, int]`
+ ibis/expr/types/relations.py:474:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Value`
+ ibis/expr/types/relations.py:476:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Value`
+ ibis/expr/types/relations.py:481:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Value`
+ ibis/expr/types/relations.py:483:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Value`
+ ibis/expr/types/relations.py:485:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Value`

ignite (https://github.com/pytorch/ignite)
+ ignite/engine/engine.py:1214:40 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `State`
+ ignite/engine/engine.py:1225:36 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `State`
+ ignite/engine/engine.py:1258:36 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `State`
+ ignite/engine/engine.py:1271:28 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `State`

imagehash (https://github.com/JohannesBuchner/imagehash)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

isort (https://github.com/pycqa/isort)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ isort/files.py:37:35 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str | Path`
+ isort/identify.py:144:35 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Import`
+ isort/identify.py:146:35 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Import`
+ isort/identify.py:155:35 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Import`
+ isort/identify.py:157:35 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Import`
+ isort/identify.py:166:31 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Import`

itsdangerous (https://github.com/pallets/itsdangerous)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

jax (https://github.com/google/jax)
+ jax/experimental/mosaic/gpu/layout_inference.py:290:15 warning[unsound-yield] Unsound `yield`: `tuple[tuple[int, ...], Unknown]` is not a subtype of `tuple[tuple[int, ...], Literal[32, 64, 128] | None]`

jinja (https://github.com/pallets/jinja)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ src/jinja2/filters.py:1809:23 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `V@async_select_or_reject`
+ src/jinja2/lexer.py:768:43 warning[unsound-yield] Unsound `yield`: `tuple[int | Any, str, str | (Any & ~None)]` is not a subtype of `tuple[int, str, str]`
+ src/jinja2/lexer.py:781:39 warning[unsound-yield] Unsound `yield`: `tuple[int | Any, str & ~Failure & ~Literal["#bygroup"], str | Any]` is not a subtype of `tuple[int, str, str]`
+ src/jinja2/lexer.py:816:31 warning[unsound-yield] Unsound `yield`: `tuple[int | Any, str, str]` is not a subtype of `tuple[int, str, str]`

koda-validate (https://github.com/keithasaurus/koda-validate)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

kopf (https://github.com/nolar/kopf)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ kopf/_cogs/aiokits/aioenums.py:175:24 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `None`
+ kopf/_cogs/structs/dicts.py:244:24 warning[unsound-yield] Unsound `yield from`: `_T@walk | Unknown` is not a subtype of `_T@walk`

kornia (https://github.com/kornia/kornia)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

manticore (https://github.com/trailofbits/manticore)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

materialize (https://github.com/MaterializeInc/materialize)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ misc/python/materialize/cli/ci_closed_issues_detect.py:148:19 warning[unsound-yield] Unsound `yield`: `tuple[int, str | Unknown]` is not a subtype of `tuple[int, str]`
+ misc/python/materialize/cli/ci_closed_issues_detect.py:152:19 warning[unsound-yield] Unsound `yield`: `tuple[int, str | Unknown]` is not a subtype of `tuple[int, str]`
+ misc/python/materialize/cli/ci_closed_issues_detect.py:154:15 warning[unsound-yield] Unsound `yield`: `tuple[int, Unknown]` is not a subtype of `tuple[int, str]`
+ misc/python/materialize/cli/ci_closed_issues_detect.py:157:15 warning[unsound-yield] Unsound `yield`: `tuple[int, str | Unknown]` is not a subtype of `tuple[int, str]`

meson (https://github.com/mesonbuild/meson)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ mesonbuild/build.py:3231:19 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `CustomTargetIndex`
+ mesonbuild/interpreter/type_checking.py:638:15 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `FeatureCheckBase`
+ mesonbuild/programs.py:438:19 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `ExternalProgram`

mitmproxy (https://github.com/mitmproxy/mitmproxy)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ examples/contrib/ntlm_upstream_proxy.py:101:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Command`
+ examples/contrib/ntlm_upstream_proxy.py:130:36 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `Command`
+ mitmproxy/proxy/layer.py:139:23 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Command`
+ mitmproxy/proxy/layer.py:142:28 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `Command`
+ mitmproxy/proxy/layer.py:147:23 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Command`
+ mitmproxy/proxy/layer.py:164:31 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Command`
+ mitmproxy/proxy/layers/http/__init__.py:202:24 warning[unsound-yield] Unsound `yield from`: `Unknown | Command` is not a subtype of `Command`
+ mitmproxy/proxy/layers/http/__init__.py:204:24 warning[unsound-yield] Unsound `yield from`: `Unknown | Command` is not a subtype of `Command`
+ mitmproxy/proxy/layers/http/__init__.py:387:28 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `Command`
+ mitmproxy/proxy/layers/http/__init__.py:476:24 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `Command`
+ mitmproxy/proxy/layers/http/__init__.py:782:24 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `Command`
+ mitmproxy/proxy/layers/http/_http1.py:79:24 warning[unsound-yield] Unsound `yield from`: `Command | Unknown` is not a subtype of `Command`
+ mitmproxy/proxy/layers/modes.py:29:20 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `Command`
+ mitmproxy/proxy/layers/modes.py:37:20 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `Command`
+ mitmproxy/proxy/layers/modes.py:300:28 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `Command`

mkdocs (https://github.com/mkdocs/mkdocs)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

mkosi (https://github.com/systemd/mkosi)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ mkosi/util.py:99:23 warning[unsound-yield] Unsound `yield`: `tuple[str | Any, str | Any]` is not a subtype of `tuple[str, str]`

mongo-python-driver (https://github.com/mongodb/mongo-python-driver)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ bson/son.py:96:20 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `_Key@SON`
+ pymongo/asynchronous/encryption.py:313:23 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `bytes | memoryview[int]`

more-itertools (https://github.com/more-itertools/more-itertools)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

mypy (https://github.com/python/mypy)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ mypy/stubgen.py:440:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str`

mypy-protobuf (https://github.com/dropbox/mypy-protobuf)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

mypy_primer (https://github.com/hauntsaninja/mypy_primer)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

nionutils (https://github.com/nion-software/nionutils)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

nox (https://github.com/wntrblm/nox)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

numpy-stl (https://github.com/WoLpH/numpy-stl)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

openlibrary (https://github.com/internetarchive/openlibrary)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ openlibrary/catalog/marc/marc_binary.py:137:23 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, Unknown]` is not a subtype of `tuple[str, str | BinaryDataField]`
+ openlibrary/catalog/marc/marc_binary.py:139:23 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, BinaryDataField]` is not a subtype of `tuple[str, str | BinaryDataField]`
+ openlibrary/catalog/marc/marc_xml.py:95:19 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, str | DataField]` is not a subtype of `tuple[str, str | DataField]`
+ openlibrary/core/ia.py:396:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str`
+ openlibrary/plugins/upstream/utils.py:712:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str | None`
+ openlibrary/plugins/upstream/utils.py:715:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str | None`

operator (https://github.com/canonical/operator)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ ops/storage.py:184:23 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `str`

optuna (https://github.com/optuna/optuna)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ optuna/storages/_rdb/storage.py:79:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Session`

paasta (https://github.com/yelp/paasta)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ paasta_tools/utils.py:3176:27 warning[unsound-yield] Unsound `yield`: `tuple[str | Any, str]` is not a subtype of `tuple[str, str]`

packaging (https://github.com/pypa/packaging)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

pandas (https://github.com/pandas-dev/pandas)
+ pandas/core/groupby/ops.py:651:20 warning[unsound-yield] Unsound `yield from`: `tuple[Unknown, NDFrameT@get_iterator | Unknown]` is not a subtype of `tuple[Hashable, NDFrameT@get_iterator]`
+ pandas/io/formats/css.py:427:28 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `tuple[str, str]`
+ pandas/io/formats/css.py:429:23 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, str]` is not a subtype of `tuple[str, str]`
+ pandas/io/formats/csvs.py:299:19 warning[unsound-yield] Unsound `yield`: `list[Any | str]` is not a subtype of `list[Hashable]`
+ pandas/io/pytables.py:2012:19 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, list[Unknown], list[Unknown]]` is not a subtype of `tuple[str, list[str], list[str]]`

pandera (https://github.com/pandera-dev/pandera)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

paroxython (https://github.com/laowantong/paroxython)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

parso (https://github.com/davidhalter/parso)
+ parso/pgen2/grammar_parser.py:62:19 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, Unknown]` is not a subtype of `tuple[NFAState, NFAState]`
+ parso/python/tokenize.py:515:32 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `PythonToken`
+ parso/python/tokenize.py:536:36 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `PythonToken`

pip (https://github.com/pypa/pip)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ src/pip/_internal/metadata/pkg_resources.py:204:20 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `str`
+ src/pip/_internal/network/utils.py:106:19 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `bytes`
+ src/pip/_vendor/pkg_resources/__init__.py:1297:23 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str`
+ src/pip/_vendor/pkg_resources/__init__.py:3534:27 warning[unsound-yield] Unsound `yield`: `tuple[None | Unknown, list[Unknown]]` is not a subtype of `tuple[str | None, list[str]]`
+ src/pip/_vendor/pkg_resources/__init__.py:3543:11 warning[unsound-yield] Unsound `yield`: `tuple[None | Unknown, list[Unknown]]` is not a subtype of `tuple[str | None, list[str]]`
+ src/pip/_vendor/requests/cookies.py:257:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str`
+ src/pip/_vendor/requests/cookies.py:274:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str | None`
+ src/pip/_vendor/requests/cookies.py:291:19 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, Unknown]` is not a subtype of `tuple[str, str | None]`
+ src/pip/_vendor/requests/models.py:937:32 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `bytes`
+ src/pip/_vendor/requests/models.py:1028:19 warning[unsound-yield] Unsound `yield`: `(Unknown & ~None) | bytes | str` is not a subtype of `str | bytes`

poetry (https://github.com/python-poetry/poetry)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ src/poetry/repositories/http_repository.py:159:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Path`
+ tests/config/test_config.py:113:23 warning[unsound-yield] Unsound `yield`: `tuple[str, str, str, Any]` is not a subtype of `tuple[str, str, str, bool]`

porcupine (https://github.com/Akuli/porcupine)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ porcupine/plugins/highlight/tree_sitter_highlighter.py:117:35 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, Unknown & ~Literal["recurse"]]` is not a subtype of `tuple[Node, str]`
+ porcupine/plugins/highlight/tree_sitter_highlighter.py:123:27 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, Literal["recurse"]]` is not a subtype of `tuple[Node, str]`

prefect (https://github.com/PrefectHQ/prefect)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ src/prefect/server/events/counting.py:107:19 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, Unknown]` is not a subtype of `int | tuple[datetime, datetime]`
+ src/prefect/server/events/storage/database.py:323:19 warning[unsound-yield] Unsound `yield`: `list[Unknown] | list[ReceivedEvent]` is not a subtype of `list[ReceivedEvent]`
+ src/integrations/prefect-dask/tests/test_task_runners.py:80:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `DaskTaskRunner`
+ src/integrations/prefect-docker/prefect_docker/worker.py:918:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `None`
+ src/integrations/prefect-docker/prefect_docker/worker.py:950:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `None`
+ src/prefect/_internal/concurrency/calls.py:92:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `AsyncCancelScope`
+ src/prefect/server/events/models/automations.py:64:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `AsyncSession`
+ src/prefect/server/services/db_vacuum.py:94:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `AsyncSession`
+ src/prefect/task_engine.py:1832:35 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `R@run_generator_task_async`
+ src/prefect/utilities/collections.py:112:23 warning[unsound-yield] Unsound `yield`: `tuple[tuple[*tuple[KT@dict_to_flatdict, ...], @Todo], VT@dict_to_flatdict]` is not a subtype of `tuple[tuple[KT@dict_to_flatdict, ...], VT@dict_to_flatdict]`

psycopg (https://github.com/psycopg/psycopg)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ psycopg/psycopg/_pipeline_base.py:112:30 warning[unsound-yield] Unsound `yield from`: `Any | Wait` is not a subtype of `Wait`
+ psycopg/psycopg/_pipeline_base.py:138:24 warning[unsound-yield] Unsound `yield from`: `Any | Wait` is not a subtype of `Wait`
+ psycopg/psycopg/_pipeline_base.py:142:44 warning[unsound-yield] Unsound `yield from`: `Any | Wait` is not a subtype of `Wait`
+ psycopg/psycopg/_connection_base.py:320:20 warning[unsound-yield] Unsound `yield from`: `Any | tuple[int, Wait]` is not a subtype of `tuple[int, Wait]`
+ psycopg/psycopg/_connection_base.py:441:29 warning[unsound-yield] Unsound `yield from`: `Any | tuple[int, Wait]` is not a subtype of `tuple[int, Wait]`
+ psycopg/psycopg/_connection_base.py:523:40 warning[unsound-yield] Unsound `yield from`: `Any | Wait` is not a subtype of `Wait`
+ psycopg/psycopg/_connection_base.py:698:24 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `Wait`
+ psycopg/psycopg/_cursor_base.py:292:42 warning[unsound-yield] Unsound `yield from`: `Any | Wait` is not a subtype of `Wait`
+ psycopg/psycopg/_cursor_base.py:312:30 warning[unsound-yield] Unsound `yield from`: `Any | Wait` is not a subtype of `Wait`
+ psycopg/psycopg/_cursor_base.py:345:20 warning[unsound-yield] Unsound `yield from`: `Any | Wait` is not a subtype of `Wait`
+ psycopg/psycopg/_cursor_base.py:348:43 warning[unsound-yield] Unsound `yield from`: `Any | Wait` is not a subtype of `Wait`
+ psycopg/psycopg/_server_cursor_base.py:118:30 warning[unsound-yield] Unsound `yield from`: `Any | Wait` is not a subtype of `Wait`
+ psycopg/psycopg/_server_cursor_base.py:133:30 warning[unsound-yield] Unsound `yield from`: `Any | Wait` is not a subtype of `Wait`

pybind11 (https://github.com/pybind/pybind11)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

pydantic (https://github.com/pydantic/pydantic)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ pydantic/v1/generics.py:218:19 warning[unsound-yield] Unsound `yield`: `type[Any]` is not a subtype of `type[GenericModel]`

pyodide (https://github.com/pyodide/pyodide)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ pyodide-build/pyodide_build/out_of_tree/pypi.py:356:23 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `str`
+ pyodide-build/pyodide_build/recipe/builder.py:895:20 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `Path`

pyppeteer (https://github.com/pyppeteer/pyppeteer)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

pytest (https://github.com/pytest-dev/pytest)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ src/_pytest/_io/pprint.py:187:15 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `str`
+ src/_pytest/_io/pprint.py:276:19 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `str`
+ src/_pytest/_io/pprint.py:421:15 warning[unsound-yield] Unsound `yield`: `Literal["namespace("] | Any` is not a subtype of `str`
+ src/_pytest/_io/pprint.py:465:19 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `str`
+ src/_pytest/_io/pprint.py:531:15 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `str`
+ src/_pytest/_io/pprint.py:569:15 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `str`
+ src/_pytest/capture.py:1029:11 warning[unsound-yield] Unsound `yield`: `CaptureFixture[Unknown]` is not a subtype of `CaptureFixture[str]`
+ src/_pytest/capture.py:1064:11 warning[unsound-yield] Unsound `yield`: `CaptureFixture[Unknown]` is not a subtype of `CaptureFixture[str]`
+ src/_pytest/capture.py:1092:11 warning[unsound-yield] Unsound `yield`: `CaptureFixture[Unknown]` is not a subtype of `CaptureFixture[bytes]`
+ src/_pytest/capture.py:1120:11 warning[unsound-yield] Unsound `yield`: `CaptureFixture[Unknown]` is not a subtype of `CaptureFixture[str]`
+ src/_pytest/capture.py:1149:11 warning[unsound-yield] Unsound `yield`: `CaptureFixture[Unknown]` is not a subtype of `CaptureFixture[bytes]`
+ src/_pytest/fixtures.py:1949:24 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `str`

pytest-autoprofile (https://gitlab.com/TTsangSC/pytest-autoprofile)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

pytest-robotframework (https://github.com/detachhead/pytest-robotframework)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

python-chess (https://github.com/niklasf/python-chess)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ chess/__init__.py:463:15 warning[unsound-yield] Unsound `yield`: `int | Unknown` is not a subtype of `int`

python-htmlgen (https://github.com/srittau/python-htmlgen)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

pywin32 (https://github.com/mhammond/pywin32)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

rclip (https://github.com/yurijmikhalevich/rclip)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ rclip/main.py:245:13 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, ImageMeta]` is not a subtype of `tuple[str, ImageMeta]`

rotki (https://github.com/rotki/rotki)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ rotkehlchen/chain/ethereum/modules/makerdao/cache.py:100:15 warning[unsound-yield] Unsound `yield`: `tuple[Any, int, CryptoAsset, Any]` is not a subtype of `tuple[str, int, CryptoAsset, ChecksumAddress]`
+ rotkehlchen/chain/zksync_lite/manager.py:570:19 warning[unsound-yield] Unsound `yield`: `list[ZKSyncLiteTransaction] | list[Unknown]` is not a subtype of `list[ZKSyncLiteTransaction]`
+ rotkehlchen/db/drivers/sqlite.py:735:23 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `DBCursor`

schema_salad (https://github.com/common-workflow-language/schema_salad)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

schemathesis (https://github.com/schemathesis/schemathesis)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ src/schemathesis/engine/run/stateful/__init__.py:57:23 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `EngineEvent`
+ src/schemathesis/engine/run/unit/__init__.py:131:31 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `EngineEvent`
+ src/schemathesis/pytest/plugin.py:245:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `SchemathesisFunction`
+ src/schemathesis/specs/graphql/schemas.py:127:23 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str`
+ src/schemathesis/specs/graphql/substitution.py:531:19 warning[unsound-yield] Unsound `yield`: `tuple[Handle, Unknown]` is not a subtype of `tuple[Handle, str]`
+ src/schemathesis/specs/openapi/adapter/responses.py:629:31 warning[unsound-yield] Unsound `yield`: `tuple[Any | str, Any]` is not a subtype of `tuple[str, object]`
+ src/schemathesis/specs/openapi/adapter/responses.py:632:27 warning[unsound-yield] Unsound `yield`: `tuple[Any | str, Any]` is not a subtype of `tuple[str, object]`
+ src/schemathesis/specs/openapi/stateful/dependencies/resources.py:77:19 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, ExtractedResource]` is not a subtype of `tuple[OpenApiResponse, ExtractedResource]`

scikit-build-core (https://github.com/scikit-build/scikit-build-core)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ src/scikit_build_core/builder/get_requires.py:205:28 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `str`
+ src/scikit_build_core/builder/get_requires.py:213:28 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `str`

scikit-learn (https://github.com/scikit-learn/scikit-learn)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ sklearn/externals/_packaging/version.py:219:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str`
+ sklearn/externals/_packaging/version.py:221:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str`

scipy (https://github.com/scipy/scipy)
+ subprojects/array_api_extra/tests/conftest.py:153:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `ModuleType`
+ subprojects/array_api_extra/tests/conftest.py:199:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `ModuleType`
+ subprojects/array_api_extra/tests/conftest.py:210:15 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `ModuleType`

scipy-stubs (https://github.com/scipy/scipy-stubs)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

scrapy (https://github.com/scrapy/scrapy)
+ conftest.py:91:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str`
+ scrapy/utils/decorators.py:142:23 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `_T@_warn_spider_arg`
+ scrapy/utils/iterators.py:61:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Selector`
+ tests/test_downloader_handler_twisted_ftp.py:72:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `FTPDownloadHandler`
+ tests/test_http2_client_protocol.py:228:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `int`

setuptools (https://github.com/pypa/setuptools)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ setuptools/_vendor/packaging/specifiers.py:671:24 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `UnparsedVersionVar@filter`
+ setuptools/command/bdist_egg.py:345:11 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, list[Unknown], list[Unknown]]` is not a subtype of `tuple[str, list[str], list[str]]`
+ setuptools/command/build_py.py:160:19 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, Unknown]` is not a subtype of `tuple[str, str]`
+ setuptools/command/editable_wheel.py:676:16 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `str`
+ setuptools/command/editable_wheel.py:681:15 warning[unsound-yield] Unsound `yield`: `Any & ~AlwaysFalsy` is not a subtype of `str`
+ setuptools/command/editable_wheel.py:693:16 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `str`
+ setuptools/dist.py:1061:20 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `str`
+ setuptools/dist.py:1063:20 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `str`
+ setuptools/dist.py:1071:19 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `str`
+ setuptools/glob.py:72:20 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `_StrOrBytesT@_iglob`
+ setuptools/glob.py:157:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str | bytes`

sockeye (https://github.com/awslabs/sockeye)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ sockeye/lexicon.py:59:19 warning[unsound-yield] Unsound `yield`: `tuple[int, int, Unknown]` is not a subtype of `tuple[int, int, float]`

spack (https://github.com/spack/spack)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ lib/spack/spack/cmd/__init__.py:814:19 warning[unsound-yield] Unsound `yield`: `list[str] | list[Unknown]` is not a subtype of `list[str]`
+ lib/spack/spack/config.py:1713:20 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `Configuration`
+ lib/spack/spack/config.py:2127:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Configuration`
+ lib/spack/spack/stage.py:589:24 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `FetchStrategy`
+ lib/spack/spack/vendor/jinja2/environment.py:1365:23 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str`
+ lib/spack/spack/vendor/jinja2/lexer.py:769:43 warning[unsound-yield] Unsound `yield`: `tuple[int | Any, str, str | (Any & ~None)]` is not a subtype of `tuple[int, str, str]`
+ lib/spack/spack/vendor/jinja2/lexer.py:817:31 warning[unsound-yield] Unsound `yield`: `tuple[int | Any, str, str]` is not a subtype of `tuple[int, str, str]`

spark (https://github.com/apache/spark)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ python/pyspark/shuffle.py:535:31 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `V@ExternalSorter`
+ python/pyspark/shuffle.py:620:27 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `V@ExternalList`
+ python/pyspark/shuffle.py:623:19 warning[unsound-yield] Unsound `yield`: `V@ExternalList | Unknown` is not a subtype of `V@ExternalList`

speedrun.com_global_scoreboard_webapp (https://github.com/Avasam/speedrun.com_global_scoreboard_webapp)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

sphinx (https://github.com/sphinx-doc/sphinx)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ sphinx/ext/apidoc/_generate.py:261:15 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, list[Unknown], list[Unknown]]` is not a subtype of `tuple[str, list[str], list[str]]`
+ sphinx/builders/html/__init__.py:215:24 warning[unsound-yield] Unsound `yield from`: `Any` is not a subtype of `str`
+ sphinx/domains/c/__init__.py:970:19 warning[unsound-yield] Unsound `yield`: `tuple[str, Any, Any, Any & ~AlwaysFalsy, Any, Literal[1]]` is not a subtype of `tuple[str, str, str, str, str, int]`
+ sphinx/domains/rst.py:338:19 warning[unsound-yield] Unsound `yield`: `tuple[Any, Any, Any, Any, Any, Literal[1]]` is not a subtype of `tuple[str, str, str, str, str, int]`
+ sphinx/domains/std/__init__.py:1343:19 warning[unsound-yield] Unsound `yield`: `tuple[str, str, str, str, str, Any]` is not a subtype of `tuple[str, str, str, str, str, int]`
+ sphinx/transforms/__init__.py:415:23 warning[unsound-yield] Unsound `yield`: `tuple[Literal["literal"], Unknown]` is not a subtype of `tuple[Literal["literal", "plain"], str]`
+ sphinx/versioning.py:108:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Node`
+ sphinx/versioning.py:113:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Node`

starlette (https://github.com/encode/starlette)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ starlette/concurrency.py:57:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `T@iterate_in_threadpool`

static-frame (https://github.com/static-frame/static-frame)
- static_frame/core/archive_npy.py:450:65 warning[unused-type-ignore-comment] Unused blanket `type: ignore` directive
+ static_frame/core/memory_measure.py:268:23 warning[unsound-yield] Unsound `yield`: `list[Unknown]` is not a subtype of `Sequence[str]`

steam.py (https://github.com/Gobot1234/steam.py)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ steam/http.py:251:23 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `User`
+ steam/http.py:949:23 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `AppListApp`

stone (https://github.com/dropbox/stone)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

strawberry (https://github.com/strawberry-graphql/strawberry)
+ strawberry/http/streaming.py:278:23 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `str`

svcs (https://github.com/hynek/svcs)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ src/svcs/starlette.py:108:23 warning[unsound-yield] Unsound `yield`: `(Unknown & ~AlwaysFalsy) | dict[str, object]` is not a subtype of `dict[str, object]`

sympy (https://github.com/sympy/sympy)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ sympy/combinatorics/graycode.py:200:23 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str`
+ sympy/core/facts.py:550:20 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `str`
+ sympy/core/facts.py:556:20 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `str`
+ sympy/core/facts.py:559:20 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `str`
+ sympy/ntheory/factor_.py:1807:20 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `int`
+ sympy/ntheory/factor_.py:1809:20 warning[unsound-yield] Unsound `yield from`: `Unknown` is not a subtype of `int`
+ sympy/polys/polytools.py:5654:19 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, Unknown, Unknown]` is not a subtype of `tuple[Expr, Expr, Expr] | tuple[Poly, Poly, Poly]`
+ sympy/sets/powerset.py:115:15 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Set`
+ sympy/sets/powerset.py:122:23 warning[unsound-yield] Unsound `yield`: `Divergent` is not a subtype of `Set`

tornado (https://github.com/tornadoweb/tornado)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

trio (https://github.com/python-trio/trio)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ src/trio/_core/_run.py:1584:27 warning[unsound-yield] Unsound `yield`: `tuple[Any & ~AlwaysFalsy, Any]` is not a subtype of `tuple[FrameType, int]`
+ src/trio/_core/_run.py:1589:27 warning[unsound-yield] Unsound `yield`: `tuple[Any & ~AlwaysFalsy, Any]` is not a subtype of `tuple[FrameType, int]`
+ src/trio/_core/_run.py:1599:31 warning[unsound-yield] Unsound `yield`: `tuple[Any, Any]` is not a subtype of `tuple[FrameType, int]`
+ src/trio/_core/_run.py:2764:28 warning[unsound-yield] Unsound `yield`: `float | Any` is not a subtype of `float`
+ src/trio/_tests/test_dtls.py:101:19 warning[unsound-yield] Unsound `yield`: `tuple[DTLSEndpoint, Any]` is not a subtype of `tuple[DTLSEndpoint, tuple[str, int]]`
+ src/trio/_tools/sync_requirements.py:38:15 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, Unknown]` is not a subtype of `tuple[str, str]`

twine (https://github.com/pypa/twine)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

typeshed-stats (https://github.com/AlexWaygood/typeshed-stats)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

urllib3 (https://github.com/urllib3/urllib3)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ test/conftest.py:121:11 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `str`
+ test/conftest.py:383:15 warning[unsound-yield] Unsound `yield`: `Any` is not a subtype of `str`

vision (https://github.com/pytorch/vision)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

werkzeug (https://github.com/pallets/werkzeug)
+ src/werkzeug/_reloader.py:60:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str`
+ src/werkzeug/datastructures/headers.py:649:23 warning[unsound-yield] Unsound `yield`: `tuple[str, Any]` is not a subtype of `tuple[str, str]`
+ src/werkzeug/datastructures/structures.py:35:20 warning[unsound-yield] Unsound `yield from`: `tuple[Unknown, Unknown]` is not a subtype of `tuple[K@iter_multi_items, V@iter_multi_items]`

xarray (https://github.com/pydata/xarray)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ xarray/computation/rolling.py:324:19 warning[unsound-yield] Unsound `yield`: `tuple[Any, DataArray]` is not a subtype of `tuple[DataArray, DataArray]`
+ xarray/core/coordinates.py:107:23 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Hashable`
+ xarray/core/datatree_render.py:313:23 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, Literal[False]]` is not a subtype of `tuple[DataTree, bool]`
+ xarray/core/datatree_render.py:315:23 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, Literal[True]]` is not a subtype of `tuple[DataTree, bool]`
+ xarray/core/groupby.py:871:23 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `T_Xarray@GroupBy`
+ xarray/structure/combine.py:736:15 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, GeneratorType[Unknown, None, None]]` is not a subtype of `tuple[K@groupby_defaultdict, Iterator[T@groupby_defaultdict]]`
+ xarray/tests/test_backends.py:2026:19 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `Dataset`
+ xarray/util/generate_ops.py:305:23 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `str`

xarray-dataclasses (https://github.com/astropenguin/xarray-dataclasses)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

yarl (https://github.com/aio-libs/yarl)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

zipp (https://github.com/jaraco/zipp)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

zope.interface (https://github.com/zopefoundation/zope.interface)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`

zulip (https://github.com/zulip/zulip)
- /home/runner/.config/ty/ty.toml:13:1 warning[unknown-rule] Unknown rule `unsound-yield`
+ zerver/data_import/rocketchat.py:1252:31 warning[unsound-yield] Unsound `yield`: `Unknown` is not a subtype of `bytes`
+ zerver/lib/test_classes.py:2970:19 warning[unsound-yield] Unsound `yield`: `tuple[MagicMock | AsyncMock, MagicMock | AsyncMock]` is not a subtype of `tuple[MagicMock, MagicMock]`
+ zerver/lib/test_classes.py:3092:23 warning[unsound-yield] Unsound `yield`: `MagicMock | AsyncMock` is not a subtype of `MagicMock`
+ zerver/lib/upload/local.py:145:23 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, datetime]` is not a subtype of `tuple[str, datetime]`
+ zerver/lib/upload/s3.py:349:27 warning[unsound-yield] Unsound `yield`: `tuple[Unknown, Unknown]` is not a subtype of `tuple[str, datetime]`
+ zerver/tests/test_external.py:266:19 warning[unsound-yield] Unsound `yield`: `MagicMock | Any` is not a subtype of `Mock`

Full report with detailed diff (timing results)

@AlexWaygood
AlexWaygood marked this pull request as ready for review August 8, 2026 15:47
@AlexWaygood
AlexWaygood requested review from a team as code owners August 8, 2026 15:47
@astral-sh-bot
astral-sh-bot Bot requested a review from charliermarsh August 8, 2026 15:47
@AlexWaygood AlexWaygood changed the title [ty] Add an opt-in unsound-yield lint [ty] Add an opt-in unsound-yield lint Aug 8, 2026

@charliermarsh charliermarsh left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Sweet, thanks.

@MichaReiser

Copy link
Copy Markdown
Member

Lol, the unknown-rule errors are funny. Took me a minute to understand why they show up.

@charliermarsh

Copy link
Copy Markdown
Member

Haha same

@AlexWaygood

Copy link
Copy Markdown
Member Author
Codex ecosystem analysis

PR #27593 ecosystem summary

The PR adds 434 unsound-yield warnings: 308 on direct yield expressions and 126 on yield from expressions. Of these, 293 involve Unknown, 130 involve Any without Unknown, and the remaining 11 involve dynamic inheritance, mock types, or ty's internal inference placeholders. Most changes are the intended consequence of enforcing strict soundness at annotated generator boundaries. The significant exceptions are three Divergent warnings and four @Todo warnings, which expose existing inference limitations as misleading new diagnostics. The report also contains 168 removed unknown-rule warnings caused by the shared ecosystem configuration and one removed unused-ignore warning where an existing ignore starts suppressing the new lint.

Direct yields expose dynamic values in synchronous and asynchronous generators

Report entries:

The merge base accepts values inferred as Any or Unknown because they are assignable to the annotated yield type. With the new lint enabled, the PR additionally requires those values to be genuine subtypes. The same rule applies to synchronous and asynchronous generators.

from collections.abc import AsyncIterator, Iterator
from typing import Any


def sync_values(value: Any) -> Iterator[int]:
    # Merge base: no diagnostic
    # PR: [unsound-yield] "Unsound `yield`: `Any` is not a subtype of `int`"
    yield value


async def async_values(value: Any) -> AsyncIterator[int]:
    # Merge base: no diagnostic
    # PR: [unsound-yield] "Unsound `yield`: `Any` is not a subtype of `int`"
    yield value


def unknown_values(value) -> Iterator[int]:
    # Merge base: no diagnostic
    # PR: [unsound-yield] "Unsound `yield`: `Unknown` is not a subtype of `int`"
    yield value

Delegated yields expose untyped iterators and library functions

Report entries:

For yield from, the new lint checks the delegated iterator's element type against the enclosing generator's annotated yield type. The largest concentration is flake8, where 25 separate delegations to untyped pycodestyle functions produce Unknown elements. Existing invalid-yield diagnostics for incompatible send types remain present alongside the new warning when they describe a separate problem.

from collections.abc import Iterator
from typing import Any


def explicit_values(values: Iterator[Any]) -> Iterator[int]:
    # Merge base: no diagnostic
    # PR: [unsound-yield] "Unsound `yield from`: `Any` is not a subtype of `int`"
    yield from values


def unknown_values(values) -> Iterator[tuple[int, str]]:
    # Merge base: no diagnostic
    # PR: [unsound-yield] "Unsound `yield from`: `Unknown` is not a subtype of `tuple[int, str]`"
    yield from values

Dynamic types nested inside containers and generic arguments are rejected

Report entries:

The subtype check inspects the complete yielded type, so Result[Any, str], CaptureFixture[Unknown], list[Any], and tuples containing dynamic elements are rejected even when their outer container has the expected shape.

from collections.abc import Iterator
from typing import Any


def lists(values: list[Any]) -> Iterator[list[int]]:
    # Merge base: no diagnostic
    # PR: [unsound-yield] "Unsound `yield`: `list[Any]` is not a subtype of `list[int]`"
    yield values


def pairs(value: Any) -> Iterator[tuple[str, int]]:
    # Merge base: no diagnostic
    # PR: [unsound-yield] "Unsound `yield`: `tuple[Literal[\"label\"], Any]` is not a subtype of `tuple[str, int]`"
    yield "label", value

Dynamic alternatives make otherwise compatible unions unsound

Report entries:

A union is not accepted merely because one alternative matches the annotated yield type. If another alternative is Any or Unknown, the whole yielded union remains assignable but is not a subtype.

from collections.abc import Iterator
from typing import Any


def values(value: int | Any) -> Iterator[int | None]:
    # Merge base: no diagnostic
    # PR: [unsound-yield] "Unsound `yield`: `int | Any` is not a subtype of `int | None`"
    yield value

Divergent produces false positives for ordinary loop-carried values

Report entries:

These three warnings expose ty's internal Divergent placeholder instead of identifying a real dynamically typed value. In the minimized bokeh case, every element starts as Tool and repeated starred assignment cannot introduce any other runtime type, but loop inference widens the element to Tool | Divergent. The new lint therefore reports sound code as unsound.

from collections.abc import Iterator


class Tool:
    pass


def values(items: list[Tool]) -> Iterator[Tool]:
    while len(items) > 1:
        first, *items = items
        for item in items:
            # Merge base: no diagnostic
            # PR: [unsound-yield] "Unsound `yield`: `Tool | Divergent` is not a subtype of `Tool`"
            yield item

@Todo exposes unsupported type-expression inference as a false positive

Report entries:

Four warnings expose ty's internal @Todo placeholder. A standalone example shows that a valid type[Annotated[int, ...]] annotation is currently inferred as @Todo, so yielding the actual int class into Iterator[type[int]] incorrectly produces an unsound-yield warning. This is an inference limitation, not evidence that the generator can yield an incompatible value.

from collections.abc import Iterator
from typing import Annotated


def source() -> type[Annotated[int, "metadata"]]:
    return int


def values() -> Iterator[type[int]]:
    # Merge base: no diagnostic
    # PR: [unsound-yield] "Unsound `yield`: `@Todo` is not a subtype of `type[int]`"
    yield source()

Missing optional dependencies make concrete-looking subclasses dynamic

Report entries:

The apparently concrete S3Path warning is explained by the existing unresolved s3path import. Because the parent class comes from an optional dependency absent from the primer environment, ty treats S3Path as having a dynamic base: it remains assignable to Path | str, but its ancestry cannot establish that it is a subtype.

from collections.abc import Iterator
from pathlib import Path
from typing import Any


class S3Path(Any):
    pass


def paths(path: S3Path) -> Iterator[Path | str]:
    # Merge base: no diagnostic
    # PR: [unsound-yield] "Unsound `yield`: `S3Path` is not a subtype of `Path | str`"
    yield path

Mock patching introduces a MagicMock | AsyncMock union

Report entries:

unittest.mock.patch is typed as potentially returning either MagicMock or AsyncMock. Context managers annotated as yielding only MagicMock consequently fail the new subtype check, including when the mocks are nested inside a tuple. These are the three remaining warnings that contain neither an explicitly dynamic type nor an internal inference placeholder.

from collections.abc import Iterator
from unittest.mock import MagicMock, patch


def mocks() -> Iterator[MagicMock]:
    with patch("package.target") as value:
        # Merge base: no diagnostic
        # PR: [unsound-yield] "Unsound `yield`: `MagicMock | AsyncMock` is not a subtype of `MagicMock`"
        yield value


def paired_mocks() -> Iterator[tuple[MagicMock, MagicMock]]:
    with patch("package.first") as first, patch("package.second") as second:
        # Merge base: no diagnostic
        # PR: [unsound-yield] "Unsound `yield`: `tuple[MagicMock | AsyncMock, MagicMock | AsyncMock]` is not a subtype of `tuple[MagicMock, MagicMock]`"
        yield first, second

An existing blanket ignore starts suppressing the new delegated-yield warning

Report entries:

The merge base reports an unused blanket type: ignore on a yield from expression. On the PR, the delegated element type is inferred as Unknown, so the existing ignore suppresses the new unsound-yield diagnostic and is no longer unused. Removing the ignore produces [unsound-yield] "Unsoundyield from:Unknownis not a subtype ofstr".

from collections.abc import Iterator
from os import PathLike, scandir
from typing import Any


def labels(path: str | PathLike[Any]) -> Iterator[str]:
    # Merge base: [unused-type-ignore-comment] "Unused blanket `type: ignore` directive"
    # PR: no diagnostic; the ignore suppresses [unsound-yield]
    yield from (entry.name for entry in scandir(path))  # type: ignore

Removed unknown-rule warnings are ecosystem-configuration artifacts

Report entries:

The ecosystem analyzer applies the PR's configuration to both revisions. Its new unsound-yield = "warn" entry is unknown to the merge-base binary, producing 168 [unknown-rule] "Unknown ruleunsound-yield" warnings across the project runs. The PR recognizes the rule, so those warnings disappear. This is expected comparison noise rather than a behavioral improvement in the analyzed projects.

[rules]
# Merge base: [unknown-rule] "Unknown rule `unsound-yield`"
# PR: no diagnostic
unsound-yield = "warn"

Reproduction

This all seems fine to me. I've kicked off a Codex run locally to fix the type[Annotated[int, "metadata"]] TODO.

@AlexWaygood
AlexWaygood merged commit 78cad66 into main Aug 9, 2026
65 checks passed
@AlexWaygood
AlexWaygood deleted the alex/unsound-yield branch August 9, 2026 14:02
@AlexWaygood

Copy link
Copy Markdown
Member Author

I've kicked off a Codex run locally to fix the type[Annotated[int, "metadata"]] TODO.

This is #27629, but it has zero ecosystem impact -- a fresh codex thread informs me that codex saw fit to substitute a completely unrelated @Todo type when minimizing the ecosystem hits here 🙃 so I'm now looking into improving the ecosystem-summary skill so that doesn't happen again...

George-Ogden pushed a commit to George-Ogden/ruff that referenced this pull request Aug 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ty Multi-file analysis & type inference

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants