Mapping overloads cause incorrect variance inference
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 5.1k
- Forks
- 2.1k
- Merge moyen
- 1 j 19 h
- PR mergées (30 j)
- 82
Description
https://mypy-play.net/?gist=42b235155079dd44a79e66cbcffb0060
from collections.abc import Mapping
class A: ...
class B(A): ...
def test_mapping() -> None:
class MyMapping[K, V](Mapping[K, V]): ...
def _0[K](arg: Mapping[K, B]) -> Mapping[K, A]: return arg
def _1[K](arg: MyMapping[K, B]) -> MyMapping[K, A]: return arg # ❌️
mypy doesn't seem to reuse known variance of parent classes, but instead rechecks everything. For mapping, this breaks and mypy incorrectly infers invariance in the value type because of:
While I do think mypy could improve this behavior on their side, we really, really should avoid using covariant parameters in contravariant positions, especially with the knowledge that it can screw up variance inference when using 3.12 style annotations.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par reproduire l’exemple fourni dans le mypy playground, puis examinez les définitions de Mapping aux lignes 787-788 de typeshed typing.pyi indiquées. Déterminez comment leurs annotations de variance interagissent avec l’exemple 3.12-style MyMapping ; le travail est considéré comme terminé lorsque l’exemple ne produit plus l’erreur de variance incorrecte sans introduire un problème d’annotation équivalent.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- tooling
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 45/100