Poor inference of dict literal when dict type is unioned with certain types
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 20.6k
- Forks
- 3.3k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
Bug Report
To Reproduce
https://mypy-play.net/?mypy=master&python=3.11&gist=5cf1ab002a6dc63c5013fa0f6a00ba4d
Expected Behavior
I expect the dict literal to be inferred as dict[str, str |int] when passed to both foo and bar
Actual Behavior
It's inferred as dict[str, object] when passed to foo, which causes a false positive.
Note that the inference depends on the type you union the dict with. E.g. if you replace Iterable[tuple[str] with list[tuple[str]] you get the expected inference.
Your Environment
- Mypy version used: Tried 1.0.0, 1.0.1, 1.1.1, 1.2.0 and master in the playground, all have the same behavior
- Mypy command-line flags: See playground
- Mypy configuration options from
mypy.ini(and other config files): See playground - Python version used: 3.11
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con el ejemplo enlazado de mypy playground usando Python 3.11 y las versiones indicadas para reproducir la inferencia diferente para foo y bar. Traza el comportamiento de la inferencia de literales de dict para uniones que involucren Iterable[tuple[str]] y list[tuple[str]]. Se considera terminado cuando el dict se infiere como dict[str, str | int] en ambas llamadas y una prueba de regresión cubre el caso.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- devtools
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 38/100