Skip to content

[ty] Enable narrowing for unions of TypedDict#25188

Open
charliermarsh wants to merge 9 commits into
mainfrom
charlie/td-required-keys
Open

[ty] Enable narrowing for unions of TypedDict#25188
charliermarsh wants to merge 9 commits into
mainfrom
charlie/td-required-keys

Conversation

@charliermarsh
Copy link
Copy Markdown
Member

@charliermarsh charliermarsh commented May 15, 2026

Summary

See the extensive discussion in astral-sh/ty#3461. To perform sound narrowing with a union of TypedDicts after validating that a key is present, we can intersect the union with a protocol that indicates existence of the member (returning object).

Closes astral-sh/ty#3461.

@astral-sh-bot astral-sh-bot Bot added the ty Multi-file analysis & type inference label May 15, 2026
@astral-sh-bot
Copy link
Copy Markdown

astral-sh-bot Bot commented May 15, 2026

Typing conformance results

No changes detected ✅

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

@astral-sh-bot
Copy link
Copy Markdown

astral-sh-bot Bot commented May 15, 2026

Memory usage report

Memory usage unchanged ✅

@astral-sh-bot
Copy link
Copy Markdown

astral-sh-bot Bot commented May 15, 2026

ecosystem-analyzer results

Lint rule Added Removed Changed
invalid-key 0 1,013 2
invalid-argument-type 22 1 2
not-iterable 3 0 0
unresolved-attribute 1 0 0
unused-type-ignore-comment 1 0 0
Total 27 1,014 4

Showing a random sample of 272 of 1045 changes. See the HTML report for the full diff.

Raw diff sample (272 of 1045 changes)
core (https://github.com/home-assistant/core)
- homeassistant/components/cloud/alexa_config.py:546:45 error[invalid-key] Unknown key "old_entity_id" for TypedDict `_EventEntityRegistryUpdatedData_CreateRemove` (subscripted object has type `_EventEntityRegistryUpdatedData_CreateRemove | _EventEntityRegistryUpdatedData_Update`)
+ homeassistant/components/cloud/alexa_config.py:546:34 error[invalid-argument-type] Argument to bound method `list.append` is incorrect: Expected `str`, found `object`

cwltool (https://github.com/common-workflow-language/cwltool)
- cwltool/builder.py:273:24 error[invalid-key] Unknown key "type" for TypedDict `CWLDirectoryType` (subscripted object has type `(int & Top[MutableMapping[Unknown, Unknown]] & ~Top[MutableSequence[Unknown]]) | (str & Top[MutableMapping[Unknown, Unknown]] & ~Top[MutableSequence[Unknown]]) | (float & Top[MutableMapping[Unknown, Unknown]] & ~Top[MutableSequence[Unknown]]) | ... omitted 3 union elements`)
- cwltool/builder.py:276:20 error[invalid-key] Unknown key "inputBinding" for TypedDict `CWLDirectoryType` (subscripted object has type `(int & Top[MutableMapping[Unknown, Unknown]] & ~Top[MutableSequence[Unknown]]) | (str & Top[MutableMapping[Unknown, Unknown]] & ~Top[MutableSequence[Unknown]]) | (float & Top[MutableMapping[Unknown, Unknown]] & ~Top[MutableSequence[Unknown]]) | ... omitted 3 union elements`)
+ cwltool/builder.py:276:20 error[invalid-key] Unknown key "inputBinding" for TypedDict `CWLDirectoryType` (subscripted object has type `(int & Top[MutableMapping[Unknown, Unknown]] & <Protocol with members '__contains__'> & ~Top[MutableSequence[Unknown]]) | (str & Top[MutableMapping[Unknown, Unknown]] & <Protocol with members '__contains__'> & ~Top[MutableSequence[Unknown]]) | (float & Top[MutableMapping[Unknown, Unknown]] & <Protocol with members '__contains__'> & ~Top[MutableSequence[Unknown]]) | ... omitted 3 union elements`)
- cwltool/process.py:1071:41 error[invalid-key] Unknown key "requirements" for TypedDict `CWLFileType` (subscripted object has type `(MutableSequence[MutableMapping[str, int | str | float | ... omitted 5 union elements]] & Top[MutableMapping[Unknown, Unknown]]) | MutableMapping[str, int | str | float | ... omitted 5 union elements] | (int & Top[MutableMapping[Unknown, Unknown]]) | ... omitted 6 union elements`)

pydantic (https://github.com/pydantic/pydantic)
- pydantic/_internal/_schema_gather.py:111:29 error[invalid-argument-type] Argument to function `traverse_schema` is incorrect: Expected `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`, found `Unknown | InvalidSchema | AnySchema | ... omitted 51 union elements`
+ pydantic/_internal/_schema_gather.py:111:29 error[invalid-argument-type] Argument to function `traverse_schema` is incorrect: Expected `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`, found `object`
- pydantic/_internal/_schema_gather.py:111:36 error[invalid-key] Unknown key "items_schema" for TypedDict `AfterValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:111:36 error[invalid-key] Unknown key "items_schema" for TypedDict `AnySchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:111:36 error[invalid-key] Unknown key "items_schema" for TypedDict `BeforeValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:111:36 error[invalid-key] Unknown key "items_schema" for TypedDict `CallableSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:111:36 error[invalid-key] Unknown key "items_schema" for TypedDict `ComputedField` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:111:36 error[invalid-key] Unknown key "items_schema" for TypedDict `CustomErrorSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:111:36 error[invalid-key] Unknown key "items_schema" for TypedDict `DictSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:111:36 error[invalid-key] Unknown key "items_schema" for TypedDict `FormatSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:111:36 error[invalid-key] Unknown key "items_schema" for TypedDict `LiteralSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:111:36 error[invalid-key] Unknown key "items_schema" for TypedDict `ModelFieldsSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:111:36 error[invalid-key] Unknown key "items_schema" for TypedDict `ModelSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:111:36 error[invalid-key] Unknown key "items_schema" for TypedDict `NoneSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:111:36 error[invalid-key] Unknown key "items_schema" for TypedDict `NullableSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:111:36 error[invalid-key] Unknown key "items_schema" for TypedDict `PlainValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:111:36 error[invalid-key] Unknown key "items_schema" for TypedDict `TaggedUnionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:111:36 error[invalid-key] Unknown key "items_schema" for TypedDict `TypedDictSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:111:36 error[invalid-key] Unknown key "items_schema" for TypedDict `WrapSerializerFunctionSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `BoolSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `ComplexSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `DataclassArgsSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `DataclassSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `DateSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `DatetimeSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `DecimalSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `InvalidSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `JsonOrPythonSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `JsonSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `LiteralSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `MissingSentinelSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `ModelFieldsSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `NoneSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `TimeSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `TypedDictSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `UnionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `WithDefaultSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:114:29 error[invalid-key] Unknown key "items_schema" for TypedDict `WrapValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:118:36 error[invalid-key] Unknown key "keys_schema" for TypedDict `AfterValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:118:36 error[invalid-key] Unknown key "keys_schema" for TypedDict `BeforeValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:118:36 error[invalid-key] Unknown key "keys_schema" for TypedDict `ComplexSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:118:36 error[invalid-key] Unknown key "keys_schema" for TypedDict `DataclassArgsSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:118:36 error[invalid-key] Unknown key "keys_schema" for TypedDict `FloatSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:118:36 error[invalid-key] Unknown key "keys_schema" for TypedDict `FormatSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:118:36 error[invalid-key] Unknown key "keys_schema" for TypedDict `InvalidSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:118:36 error[invalid-key] Unknown key "keys_schema" for TypedDict `JsonOrPythonSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:118:36 error[invalid-key] Unknown key "keys_schema" for TypedDict `LiteralSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:118:36 error[invalid-key] Unknown key "keys_schema" for TypedDict `ModelSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:118:36 error[invalid-key] Unknown key "keys_schema" for TypedDict `NullableSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:118:36 error[invalid-key] Unknown key "keys_schema" for TypedDict `PlainSerializerFunctionSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:118:36 error[invalid-key] Unknown key "keys_schema" for TypedDict `PlainValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:118:36 error[invalid-key] Unknown key "keys_schema" for TypedDict `TimeSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:118:36 error[invalid-key] Unknown key "keys_schema" for TypedDict `ToStringSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:118:36 error[invalid-key] Unknown key "keys_schema" for TypedDict `WithDefaultSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:120:36 error[invalid-key] Unknown key "values_schema" for TypedDict `ArgumentsV3Schema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:120:36 error[invalid-key] Unknown key "values_schema" for TypedDict `ComputedField` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:120:36 error[invalid-key] Unknown key "values_schema" for TypedDict `DateSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:120:36 error[invalid-key] Unknown key "values_schema" for TypedDict `DefinitionsSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:120:36 error[invalid-key] Unknown key "values_schema" for TypedDict `FloatSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:120:36 error[invalid-key] Unknown key "values_schema" for TypedDict `FormatSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:120:36 error[invalid-key] Unknown key "values_schema" for TypedDict `FrozenSetSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:120:36 error[invalid-key] Unknown key "values_schema" for TypedDict `IsInstanceSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:120:36 error[invalid-key] Unknown key "values_schema" for TypedDict `JsonSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:120:36 error[invalid-key] Unknown key "values_schema" for TypedDict `ModelSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:120:36 error[invalid-key] Unknown key "values_schema" for TypedDict `PlainSerializerFunctionSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:120:36 error[invalid-key] Unknown key "values_schema" for TypedDict `StringSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:120:36 error[invalid-key] Unknown key "values_schema" for TypedDict `UrlSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:120:36 error[invalid-key] Unknown key "values_schema" for TypedDict `WithDefaultSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
+ pydantic/_internal/_schema_gather.py:120:29 error[invalid-argument-type] Argument to function `traverse_schema` is incorrect: Expected `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`, found `object`
- pydantic/_internal/_schema_gather.py:138:36 error[invalid-key] Unknown key "extras_schema" for TypedDict `ComplexSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:138:36 error[invalid-key] Unknown key "extras_schema" for TypedDict `DataclassArgsSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:138:36 error[invalid-key] Unknown key "extras_schema" for TypedDict `DatetimeSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:138:36 error[invalid-key] Unknown key "extras_schema" for TypedDict `EnumSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:138:36 error[invalid-key] Unknown key "extras_schema" for TypedDict `FloatSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:138:36 error[invalid-key] Unknown key "extras_schema" for TypedDict `IsSubclassSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:138:36 error[invalid-key] Unknown key "extras_schema" for TypedDict `JsonSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:138:36 error[invalid-key] Unknown key "extras_schema" for TypedDict `ModelSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:138:36 error[invalid-key] Unknown key "extras_schema" for TypedDict `PlainSerializerFunctionSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:138:36 error[invalid-key] Unknown key "extras_schema" for TypedDict `TaggedUnionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:138:36 error[invalid-key] Unknown key "extras_schema" for TypedDict `TimedeltaSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:138:36 error[invalid-key] Unknown key "extras_schema" for TypedDict `UnionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
+ pydantic/_internal/_schema_gather.py:138:29 error[invalid-argument-type] Argument to function `traverse_schema` is incorrect: Expected `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`, found `object`
- pydantic/_internal/_schema_gather.py:140:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `AfterValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:140:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `ArgumentsV3Schema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:140:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `DecimalSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:140:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `DictSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:140:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `EnumSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:140:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `FormatSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:140:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `InvalidSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:140:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `ListSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:140:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `ModelSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:140:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `TimeSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:140:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `ToStringSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:140:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `TupleSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:140:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `UrlSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:140:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `WrapValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:146:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `AnySchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:146:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `BytesSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:146:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `DefinitionsSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:146:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `LiteralSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:146:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `NoneSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:146:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `PlainValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:146:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `TaggedUnionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:146:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `TimeSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:146:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `TimedeltaSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:146:29 error[invalid-key] Unknown key "computed_fields" for TypedDict `TupleSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:154:36 error[invalid-key] Unknown key "var_args_schema" for TypedDict `AfterValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:154:36 error[invalid-key] Unknown key "var_args_schema" for TypedDict `ChainSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:154:36 error[invalid-key] Unknown key "var_args_schema" for TypedDict `ComputedField` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:154:36 error[invalid-key] Unknown key "var_args_schema" for TypedDict `DateSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:154:36 error[invalid-key] Unknown key "var_args_schema" for TypedDict `DecimalSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:154:36 error[invalid-key] Unknown key "var_args_schema" for TypedDict `EnumSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:154:36 error[invalid-key] Unknown key "var_args_schema" for TypedDict `IsInstanceSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:154:36 error[invalid-key] Unknown key "var_args_schema" for TypedDict `MissingSentinelSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:154:36 error[invalid-key] Unknown key "var_args_schema" for TypedDict `ModelFieldsSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:154:36 error[invalid-key] Unknown key "var_args_schema" for TypedDict `ModelSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:154:36 error[invalid-key] Unknown key "var_args_schema" for TypedDict `MultiHostUrlSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:154:36 error[invalid-key] Unknown key "var_args_schema" for TypedDict `PlainSerializerFunctionSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:154:36 error[invalid-key] Unknown key "var_args_schema" for TypedDict `PlainValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:154:36 error[invalid-key] Unknown key "var_args_schema" for TypedDict `SimpleSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:154:36 error[invalid-key] Unknown key "var_args_schema" for TypedDict `TimeSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:154:36 error[invalid-key] Unknown key "var_args_schema" for TypedDict `WrapValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `AnySchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `BeforeValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `BoolSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `BytesSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `ChainSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `DataclassSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `DateSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `DatetimeSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `DecimalSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `DefinitionReferenceSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `DefinitionsSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `GeneratorSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `InvalidSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `IsInstanceSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `JsonOrPythonSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `JsonSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `MissingSentinelSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `ModelSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `TypedDictSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:156:36 error[invalid-key] Unknown key "var_kwargs_schema" for TypedDict `WrapSerializerFunctionSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:163:36 error[invalid-key] Unknown key "return_schema" for TypedDict `CallableSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:163:36 error[invalid-key] Unknown key "return_schema" for TypedDict `ComplexSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:163:36 error[invalid-key] Unknown key "return_schema" for TypedDict `DataclassArgsSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:163:36 error[invalid-key] Unknown key "return_schema" for TypedDict `DatetimeSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:163:36 error[invalid-key] Unknown key "return_schema" for TypedDict `FormatSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:163:36 error[invalid-key] Unknown key "return_schema" for TypedDict `IntSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:163:36 error[invalid-key] Unknown key "return_schema" for TypedDict `InvalidSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:163:36 error[invalid-key] Unknown key "return_schema" for TypedDict `IsInstanceSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:163:36 error[invalid-key] Unknown key "return_schema" for TypedDict `IsSubclassSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:163:36 error[invalid-key] Unknown key "return_schema" for TypedDict `LaxOrStrictSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:163:36 error[invalid-key] Unknown key "return_schema" for TypedDict `ListSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:163:36 error[invalid-key] Unknown key "return_schema" for TypedDict `LiteralSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:163:36 error[invalid-key] Unknown key "return_schema" for TypedDict `MultiHostUrlSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:163:36 error[invalid-key] Unknown key "return_schema" for TypedDict `StringSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:163:36 error[invalid-key] Unknown key "return_schema" for TypedDict `TimedeltaSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:163:36 error[invalid-key] Unknown key "return_schema" for TypedDict `ToStringSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
+ pydantic/_internal/_schema_gather.py:163:29 error[invalid-argument-type] Argument to function `traverse_schema` is incorrect: Expected `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`, found `object`
- pydantic/_internal/_schema_gather.py:168:36 error[invalid-key] Unknown key "schema" for TypedDict `ArgumentsV3Schema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:168:36 error[invalid-key] Unknown key "schema" for TypedDict `BoolSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:168:36 error[invalid-key] Unknown key "schema" for TypedDict `DecimalSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:168:36 error[invalid-key] Unknown key "schema" for TypedDict `IntSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:168:36 error[invalid-key] Unknown key "schema" for TypedDict `LaxOrStrictSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:168:36 error[invalid-key] Unknown key "schema" for TypedDict `PlainSerializerFunctionSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:168:36 error[invalid-key] Unknown key "schema" for TypedDict `PlainValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:168:36 error[invalid-key] Unknown key "schema" for TypedDict `SimpleSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:168:36 error[invalid-key] Unknown key "schema" for TypedDict `TaggedUnionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:168:36 error[invalid-key] Unknown key "schema" for TypedDict `ToStringSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:168:36 error[invalid-key] Unknown key "schema" for TypedDict `TypedDictSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:168:36 error[invalid-key] Unknown key "schema" for TypedDict `UuidSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
+ pydantic/_internal/_schema_gather.py:168:29 error[invalid-argument-type] Argument to function `traverse_schema` is incorrect: Expected `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`, found `object`
- pydantic/_internal/_schema_gather.py:170:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `AfterValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:170:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `AnySchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:170:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `BytesSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:170:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `CallSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:170:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `DecimalSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:170:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `GeneratorSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:170:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `IsInstanceSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:170:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `JsonOrPythonSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:170:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `LaxOrStrictSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:170:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `LiteralSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:170:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `ModelSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:170:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `NullableSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:170:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `TaggedUnionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:170:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `TimeSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:170:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `TypedDictSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:170:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `UuidSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:170:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `WrapSerializerFunctionSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:174:36 error[invalid-key] Unknown key "return_schema" for TypedDict `BeforeValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:174:36 error[invalid-key] Unknown key "return_schema" for TypedDict `DateSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:174:36 error[invalid-key] Unknown key "return_schema" for TypedDict `FormatSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:174:36 error[invalid-key] Unknown key "return_schema" for TypedDict `IntSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:174:36 error[invalid-key] Unknown key "return_schema" for TypedDict `InvalidSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:174:36 error[invalid-key] Unknown key "return_schema" for TypedDict `JsonOrPythonSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:174:36 error[invalid-key] Unknown key "return_schema" for TypedDict `ListSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:174:36 error[invalid-key] Unknown key "return_schema" for TypedDict `NoneSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:174:36 error[invalid-key] Unknown key "return_schema" for TypedDict `SimpleSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:174:36 error[invalid-key] Unknown key "return_schema" for TypedDict `UuidSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:174:36 error[invalid-key] Unknown key "return_schema" for TypedDict `WrapValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:176:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `AfterValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:176:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `ArgumentsSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:176:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `ComplexSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:176:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `ComputedField` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:176:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `DictSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:176:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `GeneratorSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:176:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `MissingSentinelSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:176:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `ModelFieldsSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:176:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `ModelSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:176:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `ModelSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:176:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `TaggedUnionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:180:36 error[invalid-key] Unknown key "return_schema" for TypedDict `ArgumentsV3Schema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:180:36 error[invalid-key] Unknown key "return_schema" for TypedDict `BeforeValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:180:36 error[invalid-key] Unknown key "return_schema" for TypedDict `BytesSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:180:36 error[invalid-key] Unknown key "return_schema" for TypedDict `ChainSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:180:36 error[invalid-key] Unknown key "return_schema" for TypedDict `ComplexSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:180:36 error[invalid-key] Unknown key "return_schema" for TypedDict `DefinitionReferenceSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:180:36 error[invalid-key] Unknown key "return_schema" for TypedDict `DefinitionsSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:180:36 error[invalid-key] Unknown key "return_schema" for TypedDict `EnumSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:180:36 error[invalid-key] Unknown key "return_schema" for TypedDict `FloatSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:180:36 error[invalid-key] Unknown key "return_schema" for TypedDict `IsInstanceSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:180:36 error[invalid-key] Unknown key "return_schema" for TypedDict `IsSubclassSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:180:36 error[invalid-key] Unknown key "return_schema" for TypedDict `JsonSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:180:36 error[invalid-key] Unknown key "return_schema" for TypedDict `ModelSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:180:36 error[invalid-key] Unknown key "return_schema" for TypedDict `SimpleSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:180:36 error[invalid-key] Unknown key "return_schema" for TypedDict `WrapValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:182:36 error[invalid-key] Unknown key "schema" for TypedDict `CallSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:182:36 error[invalid-key] Unknown key "schema" for TypedDict `DataclassArgsSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:182:36 error[invalid-key] Unknown key "schema" for TypedDict `DateSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:182:36 error[invalid-key] Unknown key "schema" for TypedDict `DefinitionReferenceSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:182:36 error[invalid-key] Unknown key "schema" for TypedDict `FloatSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:182:36 error[invalid-key] Unknown key "schema" for TypedDict `GeneratorSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:182:36 error[invalid-key] Unknown key "schema" for TypedDict `TaggedUnionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:182:36 error[invalid-key] Unknown key "schema" for TypedDict `TimedeltaSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
+ pydantic/_internal/_schema_gather.py:182:29 error[invalid-argument-type] Argument to function `traverse_schema` is incorrect: Expected `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`, found `object`
- pydantic/_internal/_schema_gather.py:184:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `ArgumentsV3Schema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:184:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `CallSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:184:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `ComplexSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:184:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `DictSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:184:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `InvalidSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:184:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `IsSubclassSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:184:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `ModelFieldsSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:184:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `ModelSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:184:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `PlainSerializerFunctionSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:184:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `TupleSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:184:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `UrlSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:184:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `WithDefaultSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:184:36 error[invalid-key] Unknown key "json_schema_input_schema" for TypedDict `WrapSerializerFunctionSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:187:36 error[invalid-key] Unknown key "schema" for TypedDict `AnySchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:187:36 error[invalid-key] Unknown key "schema" for TypedDict `CallSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:187:36 error[invalid-key] Unknown key "schema" for TypedDict `DatetimeSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:187:36 error[invalid-key] Unknown key "schema" for TypedDict `DefinitionReferenceSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:187:36 error[invalid-key] Unknown key "schema" for TypedDict `FrozenSetSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:187:36 error[invalid-key] Unknown key "schema" for TypedDict `GeneratorSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:187:36 error[invalid-key] Unknown key "schema" for TypedDict `InvalidSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:187:36 error[invalid-key] Unknown key "schema" for TypedDict `IsInstanceSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:187:36 error[invalid-key] Unknown key "schema" for TypedDict `LiteralSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:187:36 error[invalid-key] Unknown key "schema" for TypedDict `NoneSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:187:36 error[invalid-key] Unknown key "schema" for TypedDict `PlainValidatorFunctionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:187:36 error[invalid-key] Unknown key "schema" for TypedDict `UnionSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:187:36 error[invalid-key] Unknown key "schema" for TypedDict `UuidSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:190:32 error[invalid-key] Unknown key "serialization" for TypedDict `ToStringSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
- pydantic/_internal/_schema_gather.py:190:32 error[invalid-key] Unknown key "serialization" for TypedDict `WrapSerializerFunctionSerSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 56 union elements`)
+ pydantic/json_schema.py:503:47 error[invalid-argument-type] Argument to bound method `GenerateJsonSchema.ser_schema` is incorrect: Expected `SimpleSerSchema | PlainSerializerFunctionSerSchema | WrapSerializerFunctionSerSchema | ... omitted 5 union elements`, found `object`
- pydantic/json_schema.py:465:39 error[invalid-key] Unknown key "ref" for TypedDict `DataclassField` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 53 union elements`)
- pydantic/json_schema.py:465:39 error[invalid-key] Unknown key "ref" for TypedDict `ModelField` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 53 union elements`)
+ pydantic/json_schema.py:465:32 error[invalid-argument-type] Argument is incorrect: Expected `str`, found `object`
- pydantic/json_schema.py:472:48 error[invalid-key] Unknown key "ref" for TypedDict `MissingSentinelSchema` (subscripted object has type `InvalidSchema | AnySchema | NoneSchema | ... omitted 49 union elements`)

Full report with detailed diff (timing results)

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented May 15, 2026

Merging this PR will degrade performance by 7.41%

❌ 1 regressed benchmark
✅ 56 untouched benchmarks
⏩ 60 skipped benchmarks1

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Mode Benchmark BASE HEAD Efficiency
WallTime pydantic 7.8 s 8.4 s -7.41%

Tip

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


Comparing charlie/td-required-keys (9a9d64b) with main (a7ab646)

Open in CodSpeed

Footnotes

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

@charliermarsh charliermarsh force-pushed the charlie/td-required-keys branch 2 times, most recently from c22ebe7 to 250e108 Compare May 15, 2026 22:16
Comment thread crates/ty_python_semantic/src/types/narrow.rs Outdated
@charliermarsh charliermarsh force-pushed the charlie/td-required-keys branch from ac900be to d98fa0e Compare May 15, 2026 22:23
@charliermarsh charliermarsh changed the title [ty] View ecosystem results for synthesized TypedDict intersection [ty] Enable narrowing for unions of TypedDict May 15, 2026
@charliermarsh charliermarsh marked this pull request as ready for review May 15, 2026 22:25
@astral-sh-bot astral-sh-bot Bot requested a review from AlexWaygood May 15, 2026 22:25
Comment thread crates/ty_python_semantic/src/types/narrow.rs
Comment thread crates/ty_python_semantic/resources/mdtest/typed_dict.md
@charliermarsh charliermarsh marked this pull request as draft May 15, 2026 22:35
@charliermarsh charliermarsh force-pushed the charlie/td-required-keys branch from d98fa0e to efa66e3 Compare May 15, 2026 22:48
@charliermarsh charliermarsh force-pushed the charlie/td-required-keys branch 2 times, most recently from 164fe42 to 3c3c0fd Compare May 15, 2026 23:07
@charliermarsh charliermarsh force-pushed the charlie/td-required-keys branch from 3c3c0fd to b27ecd1 Compare May 15, 2026 23:08
@charliermarsh charliermarsh force-pushed the charlie/td-required-keys branch from da109f4 to 8802453 Compare May 15, 2026 23:11
@@ -1412,11 +1414,38 @@ impl<'db, 'ast> NarrowingConstraintsBuilder<'db, 'ast> {
&& let rhs_type = inference.expression_type(&comparators[0])
&& is_or_contains_typeddict(self.db, rhs_type)
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

This isn't necessary, but retaining it to avoid protocol in the type display where it isn't required.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

We can obviously gate the logic further (e.g., avoid intersecting with a Literal within a Union, etc.) if we want.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Okay, I did that part too because it was bothering me :)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Hmm, worryingly, adding this is_or_contains_typeddict gate (I removed it in a prior commit) materially changed the diagnostics:

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 we should try broadening this, it would be much more principled. But let's see about improving our subtyping and disjointness for these synthesized protocols first. And it could also have performance implications, so best done as a followup.

@charliermarsh charliermarsh marked this pull request as ready for review May 15, 2026 23:12
@astral-sh-bot astral-sh-bot Bot requested a review from AlexWaygood May 15, 2026 23:12
@charliermarsh charliermarsh force-pushed the charlie/td-required-keys branch from 30f01eb to 08145e0 Compare May 15, 2026 23:22
Comment thread crates/ty_python_semantic/src/types/narrow.rs Outdated
Copy link
Copy Markdown
Member

@AlexWaygood AlexWaygood left a comment

Choose a reason for hiding this comment

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

Nice!

Comment on lines +2049 to +2065
fn narrow_with_present_key(&self, ty: Type<'db>, key: &str) -> Type<'db> {
let key_presence_constraint = typeddict_key_getitem_protocol(self.db, key);

let db = self.db;
let constrain = |ty| IntersectionType::from_two_elements(db, ty, key_presence_constraint);

match ty.resolve_type_alias(self.db) {
Type::Union(union) => UnionType::from_elements(
self.db,
union
.elements(self.db)
.iter()
.map(|element| self.narrow_with_present_key(*element, key)),
),
_ => constrain(ty),
}
}
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.

You can simplify this. You don't need to manually map over the union elements (the IntersectionBuilder already does that). And I'd just inline the typeddict_key_getitem_protocol function, which is only called from this single callsite:

diff --git a/crates/ty_python_semantic/src/types/narrow.rs b/crates/ty_python_semantic/src/types/narrow.rs
index bfcdc0c2a0..acccb1b7b7 100644
--- a/crates/ty_python_semantic/src/types/narrow.rs
+++ b/crates/ty_python_semantic/src/types/narrow.rs
@@ -2047,21 +2047,27 @@ impl<'db, 'ast> NarrowingConstraintsBuilder<'db, 'ast> {
     }

     fn narrow_with_present_key(&self, ty: Type<'db>, key: &str) -> Type<'db> {
-        let key_presence_constraint = typeddict_key_getitem_protocol(self.db, key);
-
-        let db = self.db;
-        let constrain = |ty| IntersectionType::from_two_elements(db, ty, key_presence_constraint);
-
-        match ty.resolve_type_alias(self.db) {
-            Type::Union(union) => UnionType::from_elements(
+        let signature = Signature::new(
+            Parameters::new(
                 self.db,
-                union
-                    .elements(self.db)
-                    .iter()
-                    .map(|element| self.narrow_with_present_key(*element, key)),
+                [
+                    Parameter::positional_only(Some(Name::new_static("self"))),
+                    Parameter::positional_only(Some(Name::new_static("key")))
+                        .with_annotated_type(Type::string_literal(self.db, key)),
+                ],
             ),
-            _ => constrain(ty),
-        }
+            Type::object(),
+        );
+
+        let key_presence_constraint = Type::protocol_with_methods(
+            self.db,
+            [(
+                "__getitem__",
+                CallableType::function_like(self.db, signature),
+            )],
+        );
+
+        IntersectionType::from_two_elements(self.db, ty, key_presence_constraint)
     }

     /// Narrow tagged unions of tuples with `Literal` elements.
@@ -2187,25 +2193,6 @@ fn is_or_contains_typeddict<'db>(db: &'db dyn Db, ty: Type<'db>) -> bool {
     }
 }

-fn typeddict_key_getitem_protocol<'db>(db: &'db dyn Db, key: &str) -> Type<'db> {
-    let signature = Signature::new(
-        Parameters::new(
-            db,
-            [
-                Parameter::positional_only(Some(Name::new_static("self"))),
-                Parameter::positional_only(Some(Name::new_static("key")))
-                    .with_annotated_type(Type::string_literal(db, key)),
-            ],
-        ),
-        Type::object(),
-    );
-
-    Type::protocol_with_methods(
-        db,
-        [("__getitem__", CallableType::function_like(db, signature))],
-    )
-}
-
 fn is_supported_tag_literal(ty: Type) -> bool {
     matches!(
         ty.as_literal_value_kind(),

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.

having realised #25188 (comment), I no longer think that applying this patch directly would be a good idea :-)

Comment on lines +4553 to +4556
def literal_union(u: Foo | Literal["abc"]):
if "a" in u:
# revealed: (Foo & <Protocol with members '__getitem__'>) | (Literal["abc"] & <Protocol with members '__getitem__'>)
reveal_type(u)
Copy link
Copy Markdown
Member

@AlexWaygood AlexWaygood May 15, 2026

Choose a reason for hiding this comment

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

okay, this does reveal a problem with the approach I was suggesting... just because "a" in obj resolves to True doesn't necessarily mean that obj["a"] is a valid operation. "abc"["a"] fails at runtime even though "a" in "abc" resolves to True.

I think maybe that does suggest that something more similar to one of your earlier approaches might be better... for a TypedDict (as a standalone type or a union member), we want to intersect with a protocol that has a __getitem__(self, key: Literal["a"]) -> object method. But for any non-TypedDict, we probably just want to intersect with a protocol that has a __contains__(self, key: Literal["a"]) -> Literal[True]. Intersecting with the __getitem__ protocol is only safe for TypedDict types, not for other types.

In retrospect this feels obvious. Sorry for sending you round the houses on this, that only occurred to me now :-(

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Lol how did we not notice this

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

I guess it's also unsafe for dict and other types due to subclassing?

.iter()
.map(|element| self.narrow_with_present_key(*element, key)),
),
resolved if is_or_contains_typeddict(self.db, resolved) => {
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

(I believe is_or_contains_typeddict in this case is just checking for Type::TypedDict and intersections, since unions should be covered by the above. We could use a separate check but doesn't feel critical.)

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.

Positive TypedDict key membership does not make key access safe

2 participants