Skip to content

[ty] narrow tagged unions of TypedDict#22104

Merged
oconnor663 merged 10 commits into
mainfrom
typeddict_union_narrowing
Dec 23, 2025
Merged

[ty] narrow tagged unions of TypedDict#22104
oconnor663 merged 10 commits into
mainfrom
typeddict_union_narrowing

Conversation

@oconnor663

@oconnor663 oconnor663 commented Dec 20, 2025

Copy link
Copy Markdown
Contributor

Identify and narrow cases like this:

class Foo(TypedDict):
    tag: Literal["foo"]

class Bar(TypedDict):
    tag: Literal["bar"]

def _(union: Foo | Bar):
    if union["tag"] == "foo":
        reveal_type(union)  # Foo

Fixes part of astral-sh/ty#1479.

@oconnor663 oconnor663 added ty Multi-file analysis & type inference ecosystem-analyzer labels Dec 20, 2025
@astral-sh-bot

astral-sh-bot Bot commented Dec 20, 2025

Copy link
Copy Markdown

Diagnostic diff on typing conformance tests

No changes detected when running ty on typing conformance tests ✅

@astral-sh-bot

astral-sh-bot Bot commented Dec 20, 2025

Copy link
Copy Markdown

mypy_primer results

Changes were detected when running on open source projects
pydantic (https://github.com/pydantic/pydantic)
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `PlainValidatorFunctionSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `StringSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `BytesSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `DateSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `TimeSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `DatetimeSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `TimedeltaSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `LiteralSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `MissingSentinelSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `EnumSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `IsInstanceSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `IsSubclassSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `CallableSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `ListSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `TupleSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `SetSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `FrozenSetSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `GeneratorSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `DictSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `FloatSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `DecimalSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `TaggedUnionSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `ChainSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `LaxOrStrictSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `JsonOrPythonSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `TypedDictSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `ModelFieldsSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `DataclassArgsSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `ArgumentsSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `ArgumentsV3Schema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `CallSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `UrlSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `MultiHostUrlSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `DefinitionReferenceSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `UuidSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `ComplexSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `IntSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `BoolSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `NoneSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `AnySchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `InvalidSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:177:50: error[invalid-key] Unknown key "schema" for TypedDict `UnionSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `CallSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `DecimalSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `StringSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `BytesSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `DateSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `TimeSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `DatetimeSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `TimedeltaSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `LiteralSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `MissingSentinelSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `EnumSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `IsInstanceSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `IsSubclassSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `CallableSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `ListSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `TupleSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `SetSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `FrozenSetSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `GeneratorSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `DictSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `FloatSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `UnionSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `TaggedUnionSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `ChainSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `LaxOrStrictSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `JsonOrPythonSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `TypedDictSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `ModelFieldsSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `DataclassArgsSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `ArgumentsSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `ArgumentsV3Schema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `InvalidSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `UrlSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `MultiHostUrlSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `DefinitionReferenceSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `UuidSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `ComplexSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `AnySchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `NoneSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `BoolSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `IntSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:179:30: error[invalid-key] Unknown key "schema" for TypedDict `PlainValidatorFunctionSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `DatetimeSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `DecimalSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `StringSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `BytesSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `DateSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `TimeSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `InvalidSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `TimedeltaSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `LiteralSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `MissingSentinelSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `EnumSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `IsInstanceSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `IsSubclassSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `CallableSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `ListSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `TupleSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `SetSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `FrozenSetSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `GeneratorSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `DictSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `FloatSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `UnionSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `TaggedUnionSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `ChainSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `LaxOrStrictSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `JsonOrPythonSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `TypedDictSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `ModelFieldsSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `DataclassArgsSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `ArgumentsSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `ArgumentsV3Schema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `CallSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `UrlSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `MultiHostUrlSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `DefinitionReferenceSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `UuidSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `ComplexSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `IntSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `AnySchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `NoneSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `BoolSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:183:50: error[invalid-key] Unknown key "schema" for TypedDict `PlainValidatorFunctionSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `CallSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `FloatSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `DecimalSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `StringSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `BytesSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `DateSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `TimeSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `DatetimeSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `TimedeltaSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `LiteralSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `MissingSentinelSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `EnumSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `IsInstanceSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `IsSubclassSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `CallableSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `ListSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `TupleSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `SetSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `FrozenSetSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `GeneratorSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `IntSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `PlainValidatorFunctionSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `UnionSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `TaggedUnionSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `ChainSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `LaxOrStrictSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `JsonOrPythonSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `TypedDictSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `ModelFieldsSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `DataclassArgsSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `ArgumentsSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `ArgumentsV3Schema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `InvalidSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `UrlSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `MultiHostUrlSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `DefinitionReferenceSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `UuidSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `ComplexSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `AnySchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `NoneSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `BoolSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:185:33: error[invalid-key] Unknown key "schema" for TypedDict `DictSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `TypedDictSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `DecimalSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `StringSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `BytesSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `DateSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `TimeSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `DatetimeSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `TimedeltaSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `LiteralSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `MissingSentinelSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `EnumSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `IsInstanceSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `IsSubclassSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `CallableSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `ListSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `TupleSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `SetSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `FrozenSetSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `GeneratorSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `DictSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `AfterValidatorFunctionSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `BeforeValidatorFunctionSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `WrapValidatorFunctionSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `PlainValidatorFunctionSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `FloatSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `NullableSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `ChainSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `LaxOrStrictSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `JsonOrPythonSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `InvalidSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `ModelFieldsSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `ModelSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `DataclassArgsSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `DataclassSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `ArgumentsSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `ArgumentsV3Schema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `CallSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `CustomErrorSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `JsonSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `UrlSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `MultiHostUrlSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `DefinitionsSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `DefinitionReferenceSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `UuidSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `ComplexSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `IntSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `BoolSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `AnySchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `NoneSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:196:80: error[invalid-key] Unknown key "choices" for TypedDict `WithDefaultSchema`: Unknown key "choices"
- pydantic/_internal/_discriminated_union.py:197:40: error[invalid-argument-type] Argument to bound method `extend` is incorrect: Expected `Iterable[InvalidSchema | AnySchema | NoneSchema | ... omitted 49 union elements]`, found `list[@Todo | InvalidSchema | AnySchema | ... omitted 51 union elements]`
- pydantic/_internal/_discriminated_union.py:223:13: error[invalid-argument-type] Argument to function `tagged_union_schema` is incorrect: Expected `SimpleSerSchema | PlainSerializerFunctionSerSchema | WrapSerializerFunctionSerSchema | ... omitted 4 union elements`, found `SimpleSerSchema | PlainSerializerFunctionSerSchema | WrapSerializerFunctionSerSchema | ... omitted 6 union elements`
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `DataclassSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `FloatSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `DecimalSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `StringSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `BytesSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `DateSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `TimeSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `DatetimeSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `TimedeltaSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `LiteralSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `MissingSentinelSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `EnumSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `IsInstanceSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `IsSubclassSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `CallableSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `ListSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `TupleSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `SetSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `FrozenSetSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `GeneratorSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `DictSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `AfterValidatorFunctionSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `BeforeValidatorFunctionSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `WrapValidatorFunctionSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `IntSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `WithDefaultSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `NullableSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `UnionSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `TaggedUnionSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `ChainSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `LaxOrStrictSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `JsonOrPythonSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `TypedDictSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `ModelFieldsSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `ModelSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `DataclassArgsSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `InvalidSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `ArgumentsSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `ArgumentsV3Schema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `CallSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `CustomErrorSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `JsonSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `UrlSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `MultiHostUrlSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `DefinitionsSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `UuidSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `ComplexSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `AnySchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `NoneSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `BoolSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:238:23: error[invalid-key] Unknown key "schema_ref" for TypedDict `PlainValidatorFunctionSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `IsSubclassSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `FloatSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `DecimalSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `StringSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `BytesSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `DateSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `TimeSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `DatetimeSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `TimedeltaSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `LiteralSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `MissingSentinelSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `EnumSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `IsInstanceSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `InvalidSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `CallableSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `ListSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `TupleSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `SetSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `FrozenSetSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `GeneratorSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `DictSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `AfterValidatorFunctionSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `BeforeValidatorFunctionSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `WrapValidatorFunctionSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `IntSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `WithDefaultSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `NullableSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `UnionSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `TaggedUnionSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `ChainSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `LaxOrStrictSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `JsonOrPythonSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `TypedDictSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `ModelFieldsSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `ModelSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `DataclassArgsSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `DataclassSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `ArgumentsSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `ArgumentsV3Schema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `CallSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `CustomErrorSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `JsonSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `UrlSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `MultiHostUrlSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `DefinitionsSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `UuidSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `ComplexSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `BoolSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `AnySchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `NoneSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:239:59: error[invalid-key] Unknown key "schema_ref" for TypedDict `PlainValidatorFunctionSchema`: Unknown key "schema_ref"
- pydantic/_internal/_discriminated_union.py:244:40: error[invalid-key] Unknown key "schema" for TypedDict `DataclassArgsSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:244:40: error[invalid-key] Unknown key "schema" for TypedDict `IntSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:244:40: error[invalid-key] Unknown key "schema" for TypedDict `FloatSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:244:40: error[invalid-key] Unknown key "schema" for TypedDict `DecimalSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:244:40: error[invalid-key] Unknown key "schema" for TypedDict `StringSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:244:40: error[invalid-key] Unknown key "schema" for TypedDict `BytesSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:244:40: error[invalid-key] Unknown key "schema" for TypedDict `DateSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:244:40: error[invalid-key] Unknown key "schema" for TypedDict `TimeSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:244:40: error[invalid-key] Unknown key "schema" for TypedDict `DatetimeSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:244:40: error[invalid-key] Unknown key "schema" for TypedDict `TimedeltaSchema`: Unknown key "schema"
- pydantic/_internal/_discriminated_union.py:244:40: error[invalid-key] Unknown key "schema" for TypedDict `LiteralSchema`

... (truncated 3110 lines) ...

No memory usage changes detected ✅

@carljm

carljm commented Dec 20, 2025

Copy link
Copy Markdown
Contributor

omg look at those pydantic diagnostics disappear

@charliermarsh

Copy link
Copy Markdown
Member

Wow!

@astral-sh-bot

astral-sh-bot Bot commented Dec 20, 2025

Copy link
Copy Markdown

ecosystem-analyzer results

Lint rule Added Removed Changed
invalid-key 0 3,124 0
invalid-assignment 0 74 5
invalid-argument-type 2 19 19
invalid-return-type 2 0 13
possibly-missing-attribute 0 2 0
type-assertion-failure 0 1 0
Total 4 3,220 37

Full report with detailed diff (timing results)

Full report with detailed diff (timing results)

@astral-sh-bot

astral-sh-bot Bot commented Dec 20, 2025

Copy link
Copy Markdown

ruff-ecosystem results

Linter (stable)

✅ ecosystem check detected no linter changes.

Linter (preview)

✅ ecosystem check detected no linter changes.

Formatter (stable)

✅ ecosystem check detected no format changes.

Formatter (preview)

✅ ecosystem check detected no format changes.

@codspeed-hq

codspeed-hq Bot commented Dec 20, 2025

Copy link
Copy Markdown

CodSpeed Performance Report

Merging #22104 will not alter performance

Comparing typeddict_union_narrowing (05184f3) with main (4c175fa)

Summary

✅ 22 untouched
⏩ 30 skipped1

Footnotes

  1. 30 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.

Comment thread crates/ty_python_semantic/src/types/narrow.rs Outdated
zaniebot pushed a commit to zaniebot/ruff that referenced this pull request Dec 20, 2025
Adopt PR astral-sh#22104's approach for narrowing tagged TypedDict unions, with a
performance optimization that uses direct filtering for simple unions
instead of intersection-based narrowing.

The key insight is that for unions containing only TypedDict variants
(no intersections or other types), we can directly filter to matching
variants in O(n) time, rather than building up intersection types with
negations which requires O(n²) simplification.

The optimization falls back to the intersection-based approach for
complex cases like unions with intersections or non-TypedDict types.
Comment thread crates/ty_python_semantic/Cargo.toml Outdated

@AlexWaygood AlexWaygood 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.

Nice! It would be great to rebase on main and see what the codspeed report is now #22102 has landed

Comment thread crates/ty_python_semantic/src/types/narrow.rs Outdated
Comment thread crates/ty_python_semantic/src/types/narrow.rs Outdated
Comment on lines +906 to +914
let known_equality_result = match (field.declared_ty, rhs_type) {
(Type::StringLiteral(lhs), Type::StringLiteral(rhs)) => Some(lhs == rhs),
(Type::IntLiteral(lhs), Type::IntLiteral(rhs)) => Some(lhs == rhs),
// It's unlikely that the user will mix int and string literals in the same
// union, but go ahead and handle it.
(Type::StringLiteral(_), Type::IntLiteral(_))
| (Type::IntLiteral(_), Type::StringLiteral(_)) => Some(false),
_ => None,
};

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.

another important case to handle here is enum-literal types.

However, there's some additional complications with enum literals, so I think it might be good to postpone enums to a followup. Namely, an enum literal can't be used as a "tag" if the enum class has a custom __eq__ method. That's true if the enum class inherits from IntEnum or StrEnum (we handle this incorrectly in some other situations right now).

Comment thread crates/ty_python_semantic/src/types/narrow.rs Outdated
@oconnor663

Copy link
Copy Markdown
Contributor Author

Unfortunately merging main takes this from a 0.87x slowdown to a 0.60x slowdown. Looking into it...

@oconnor663
oconnor663 force-pushed the typeddict_union_narrowing branch from f1d30f5 to ae2d96f Compare December 22, 2025 20:44
@oconnor663

Copy link
Copy Markdown
Contributor Author

04ee4dc is a substantial refactoring. After staring at some profiles and adding logs and stuff, I'm pretty sure the problem is that I'm taking these unions of ~50 TypedDicts and intersecting them with ~49 negated TypedDicts in a lot of places, and that's slow. The new approach is to synthesize a TypedDict with a single field in both cases (the == case and the != case). To avoid incorrectly intersecting out non-TypedDict types in unions, I always intersect with a negated SynthesizedTypedDict, and the == case ends up as a double negative. Will look at what CodSpeed says later tonight or in the morning.

if u["tag"] == "foo":
# TODO: `dict & ~<TypedDict ...>` should simplify to `dict` here, but that's currently a
# false negative in `is_disjoint_impl`.
reveal_type(u) # revealed: Foo | (dict[Unknown, Unknown] & ~<TypedDict with items 'tag'>)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

The display here changed from ~Bar to ~<TypedDict with items 'tag'>. Probably that's fine?

@AlexWaygood AlexWaygood Dec 23, 2025

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.

I think that's fine. I think the real fix to get rid of this is to implement disjointness between dict and TypedDict types... which theoretically isn't too hard, but I'm a bit worried it might lead to false positives due to missing pieces in our TypedDict/bidirectional-inference logic elsewhere. Best done as a standalone change, anyway.

@AlexWaygood AlexWaygood reopened this Dec 23, 2025
@oconnor663
oconnor663 force-pushed the typeddict_union_narrowing branch from 04ee4dc to b31d29b Compare December 23, 2025 16:15

@AlexWaygood AlexWaygood 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.

Mostly some small simplifications:

Comment thread crates/ty_python_semantic/resources/mdtest/typed_dict.md
Comment thread crates/ty_python_semantic/src/types/narrow.rs Outdated
Comment thread crates/ty_python_semantic/src/types/narrow.rs Outdated
Comment thread crates/ty_python_semantic/src/types/narrow.rs Outdated
Comment thread crates/ty_python_semantic/src/types/narrow.rs
Comment thread crates/ty_python_semantic/src/types/narrow.rs Outdated
Comment thread crates/ty_python_semantic/src/types/narrow.rs Outdated
Comment thread crates/ty_python_semantic/src/types/narrow.rs Outdated

@AlexWaygood AlexWaygood 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.

Awesome work. Thank you!!

oconnor663 and others added 9 commits December 23, 2025 10:18
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
@oconnor663
oconnor663 enabled auto-merge (squash) December 23, 2025 19:26
@oconnor663
oconnor663 merged commit e245c1d into main Dec 23, 2025
46 checks passed
@oconnor663
oconnor663 deleted the typeddict_union_narrowing branch December 23, 2025 19:30
@carljm

carljm commented Dec 23, 2025

Copy link
Copy Markdown
Contributor

Awesome!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ecosystem-analyzer ty Multi-file analysis & type inference

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants