Weird error with callable accepting non-positional arguments
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
When answering this question on StackOverflow, I found a weird issue with mypy, which does not happen with either pyre or pytype.
Furthermore, by changing the identity function below to only accept positional arguments the problem is fixed.
To Reproduce
Check the following code with mypy
import functools
from typing import Iterable, TypeVar, Callable
T1 = TypeVar('T1')
T2 = TypeVar('T2')
def chain(
functions: Iterable[Callable[[T1], T1]]
) -> Callable[[T1], T1]:
def compose(
f: Callable[[T1], T1],
g: Callable[[T1], T1]
) -> Callable[[T1], T1]:
def h(x: T1) -> T1:
return g(f(x))
return h
def identity(x: T1) -> T1:
return x
return functools.reduce(compose, functions, identity)
def add_one(x):
return x + 1
def mul_two(x):
return x * 2
assert chain([add_one, mul_two, mul_two, add_one])(7) == 33```
Expected Behavior
I expected no errors
Actual Behavior
src/test.py:23: error: Argument 1 to "reduce" has incompatible type "Callable[[Arg(Callable[[T1], T1], 'f'), Arg(Callable[[T1], T1], 'g')], Callable[[T1], T1]]"; expected "Callable[[Callable[[Arg(T1, 'x')], T1], Callable[[T1], T1]], Callable[[Arg(T1, 'x')], T1]]"
Your Environment
- Mypy version used: mypy 0.790
- Mypy command-line flags: none
- Mypy configuration options from
mypy.ini(and other config files): none - Python version used: 3.8.6
- Operating system and version: MacOs Catalina
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 reproductor del issue y compara cómo mypy maneja functools.reduce cuando el callable de identidad acepta argumentos posicionales frente a argumentos no posicionales. Verifica el arreglo comprobando que el ejemplo proporcionado se acepta sin errores, preservando al mismo tiempo el comportamiento de tipado del callable informado.
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
- 35/100