join is not symmetric for type[X] vs class object X
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 20.6k
- Fork
- 3.3k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
In theory, join(a, b) should always give the same result as join(b, a) (permutation invariance). However, this is not always the case. One example I found is the following (related to the testAbstractTypeInADict unit test)
https://mypy-play.net/?mypy=1.17.0&python=3.12&gist=e4df640a72c4f61c1a33a50db60fd6e5
class Class: ...
def join[T](x: T, y: T) -> T: ...
klass: type[Class]
reveal_type(klass) # N: Revealed type is "type[__main__.Class]"
reveal_type(Class) # N: "def () -> __main__.Class"
reveal_type(join(klass, Class)) # N: Revealed type is "builtins.type"
reveal_type(join(Class, klass)) # N: Revealed type is "builtins.object"
Moreover, when debugging this, mypy actually evaluates both is_subtype(left, right) and is_subtype(right, left) to true.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con la riproduzione mypy-play e il relativo unit test testAbstractTypeInADict. Traccia le chiamate a join che coinvolgono type[Class] e l’oggetto classe, quindi esamina i controlli is_subtype indicati nel report. Il lavoro è completato quando join produce lo stesso risultato per entrambi gli ordini degli argomenti in questo caso e il test pertinente ha esito positivo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- compilers
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 45/100