Starred unpack does not equal `Unpack` in Python 3.11
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
Línea de trabajo
Empieza por src/typing_extensions.py alrededor de la línea 2473 y reproduce los ejemplos de igualdad de Python 3.11 del issue. Revisa las alternativas propuestas de igualdad, herencia, monkey-patching y documentación, y determina después qué comportamiento quieren los maintainers; se considera terminado cuando el comportamiento o la limitación elegidos estén documentados y verificados.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Equivalence between typing and typing_extensions is something I do not expect, however I think the following example is an exception as the non-equivalence comes as a surprise:
# python 3.11
import typing
from typing_extensions import Unpack, TypeVarTuple, get_type_hints
Ts = TypeVarTuple("Ts")
def foo(*x: *Ts): ...
print(get_type_hints(foo)['x'] == Unpack[Ts]) # <--- False
print(get_type_hints(foo)['x'] == typing.Unpack[Ts]) # <--- True
# or minimal example:
print(next(iter(Ts)) == Unpack[Ts]) # False
Why does this happen?
The 3.11+ backport of TypeVarTuple returns a patched instance tvt = typing.TypeVarTuple, which in turn will unpack to typing.Unpack[Ts] when __iter__ is used. (Unpack is backported until 3.11)
Possible Fixes
-
Likely bad idea: overwrite
tvt.__iter__to returntyping_extensions.Unpack; might cause same problem at other places. -
Add
__eq__totyping_extensions.Unpackto equal withtyping.Unpack. BUT, this will only be valid for the left-hand-side.print(Unpack[Ts] == get_type_hints(foo)['x']) # <--- True print(get_type_hints(foo)['x'] == Unpack[Ts]) # <--- FalseFix for the right-hand-side:
a)typing_extensions._UnpackAliasmust inherit fromtyping._UnpackGenericAliasfor right-hand side priority.
b) addtyping._UnpackGenericAlias.__eq__via monkey-patchSideeffects: All
Unpackand*-unpacks will be equivalent -
do not fix, but add a limitation/warning to the documentation that in 3.11
typing_extensions.Unpack[Ts] != *Ts == typing.Unpack[Ts] # pseudocode
I already have the necessary code for 2.a, but I am not sure what your stance is on this. Should equality be introduced, and if so is subclassing acceptable?
- Lenguaje dominante
- Python
- Estrellas
- 583
- Forks
- 146
- Merge medio
- 10 h 11 min
- PR fusionados (30 d)
- 5
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.
Más de python/typing_extensions
-
Dependency Dashboard Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
python/typing_extensions#793 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
python/typing_extensions#681 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
python/typing_extensions#672 · 10 comentarios ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
python/typing_extensions#643 · 1 comentario ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
python/typing_extensions#636 ·
Todos los issues de python/typing_extensions
Issues similares
-
link-check link-check:sphinx-theme
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
qgis/QGIS-Documentation#11275 ·
-
bug priority:normal ready-for-dev
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
OpenHands/extensions#626 · 1 comentario ·
-
Change observation tooltip text Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
CSCfi/sd-search-api#39 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100