python / python/mypy

Mypy fails to infer type parameters when composing generic functions with themselves

Abierto
#18,864 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

bug topic-type-variables
Lenguaje dominante
Python
Estrellas
20.6k
Forks
3.3k
Merge medio
1 d 18 h
PR fusionados (30 d)
54

Descripción

Bug Report

Mypy incorrectly infers Never types when the same generic function is used in multiple argument positions of a higher-order generic function, preventing proper composition of identical generic functions.

To Reproduce

from collections.abc import Callable

def compose[A, B, C](first: Callable[[A], B], second: Callable[[B], C]) -> Callable[[A], C]: ...

def id[T](value: T) -> list[T]: ...  # any generic would do

compose(id, id)
# Argument 1 to "compose" has incompatible type "Callable[[T], list[T]]"; expected "Callable[[Never], Never]"
# Argument 2 to "compose" has incompatible type "Callable[[T], list[T]]"; expected "Callable[[Never], Never]"

Expected Behavior

  1. The first id function should be inferred as Callable[[T], list[T]]
  2. The second id function should be inferred as Callable[[list[T]], list[list[T]]]
  3. The resulting composition should be Callable[[T], list[list[T]]]

Actual Behavior

Mypy fails to infer type parameters.

Your Environment

  • Mypy version used: 1.15.0
  • Mypy command-line flags: --strict
  • Mypy configuration options from mypy.ini (and other config files): none
  • Python version used: 3.13

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

Empieza reproduciendo el ejemplo compose(id, id) con mypy 1.15.0, Python 3.13 y --strict. Traza la inferencia de tipos genéricos para las dos posiciones de argumentos callable; se considera completado cuando se infiere el tipo callable anidado esperado sin errores Never 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
Bien especificado
Aptitud para principiantes
38/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.