python / python/mypy

Identical, anonymous intersection types causes incompatible import [assignment] error when imported via *

Abierto
#16,262 1 comentario 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

bug
Lenguaje dominante
Python
Estrellas
20.6k
Forks
3.3k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

Bug Report

If you import * from two modules that infer an identical intersection type, mypy will report an error along the lines of

Incompatible import of "<intersection>" (imported name has type "type[a.<intersection>]", local name has type "type[b.<intersection>]")  [assignment]

To Reproduce

This repro requires multiple files. They are delineated by comments.

# shared.py
class Foo: ...
class Bar: ...

# a.py
from shared import Foo, Bar
a_foos: list[Foo]
a_bars = [f for f in a_foos if isinstance(f, Bar)]

# b.py
from shared import Foo, Bar
b_foos: list[Foo]
b_bars = [f for f in b_foos if isinstance(f, Bar)]

# c.py
from a import *
from b import *

The offending mypy invocation is as follows:

$ mypy -m c

Expected Behavior

This should not emit an error because no runtime locals are actually assigned, or at the very least, because the intersections are identical.

Actual Behavior

c.py:2: error: Incompatible import of "<subclass of "Foo" and "Bar">" (imported name has type "type[b.<subclass of "Foo" and "Bar">]", local name has type "type[a.<subclass of "Foo" and "Bar">]")  [assignment]
Found 1 error in 1 file (checked 1 source file)

Your Environment

This bug was reproduced in a fresh venv on Debian GNU/Linux 10 (buster):

$ python --version
Python 3.10.13
$ mypy --version
mypy 1.6.0 (compiled: yes)

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Crea los cuatro archivos mostrados en el informe: shared.py, a.py, b.py y c.py, y ejecuta mypy -m c para reproducir el error de importación incompatible. Rastrea el manejo de las importaciones con asterisco y los tipos de intersección anónimos inferidos; se considera terminado cuando las intersecciones idénticas ya no producen un error y el repro sigue pasando correctamente la comprobación de tipos.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python
Área
compilers
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.