python / python/mypy

Generic default type in `type` revealed as `Any`

Abierto
#21,608 2 comentarios 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

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

Descripción

Bug Report

mypy reveals a certain nested default generic type in type as Any, while other type checkers reveal it as the default type.

This issue is motivated by pandas-dev/pandas-stubs#1764.

To Reproduce

This is complicated, see https://github.com/python/mypy/issues/21608#issuecomment-4692751812 for a much simplified example.

from typing import Any, Generic, TypeVar, reveal_type

_ItemT_co = TypeVar("_ItemT_co", default=Any, covariant=True)

class generic(Generic[_ItemT_co]): ...

_ScalarT_co = TypeVar("_ScalarT_co", bound=generic, default=Any, covariant=True)

class dtype(Generic[_ScalarT_co]): ...

_DT64ItemT_co = TypeVar(
    "_DT64ItemT_co", bound=int | None, default=int | None, covariant=True
)

class datetime64(generic[_DT64ItemT_co], Generic[_DT64ItemT_co]): ...

GenericT_co = TypeVar("GenericT_co", bound=generic, default=Any, covariant=True)
GenericT = TypeVar("GenericT", bound=generic, default=Any)

class Series(Generic[GenericT_co]):
    def to_numpy_simplified(
        self, dtype: dtype[GenericT] | type[GenericT]
    ) -> GenericT: ...

reveal_type(Series().to_numpy_simplified(datetime64))  # mypy: datetime64[Any], pyright & pyright: datetime64[int | None]

Expected Behavior

datetime64[int | None]

Actual Behavior

datetime64[Any]

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

Comienza con la reproducción minimizada en Python del issue y ejecuta mypy para confirmar que reveal_type informa datetime64[Any]. Compara el resultado con el datetime64[int | None] esperado de los ejemplos de pyright enlazados; se considera terminado cuando mypy resuelve de forma coherente el tipo genérico predeterminado de acuerdo con esa expectativa y se añade cobertura de regresión.

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

Evaluación

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

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.