python / python/mypy

mypyc crashes when using a narrowed type that is not found at compile time

Aperta
#14,694 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

crash topic-mypyc
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

Bug Report

The following worked with mypy<1.0.

To Reproduce

import not_found_at_compile_time
# in my case: the PEP-517 build dependencies did not list all the runtime dependencies to be also present at build/compile time

def test(x: dict[int, int] | not_found_at_compile_time.A) -> None:
    if isinstance(x, dict):
        test = {key: value for key, value in x.items()}

Expected Behavior

mypyc does not crash.

Actual Behavior

mypyc crashes:

$ mypy test.py
Success: no issues found in 1 source file

$ mypyc test.py
Traceback (most recent call last):
File "mypyc/irbuild/builder.py", line 247, in accept
File "mypy/nodes.py", line 2368, in accept
File "mypyc/irbuild/visitor.py", line 314, in visit_dictionary_comprehension
File "mypyc/irbuild/expression.py", line 995, in transform_dictionary_comprehension
File "mypyc/irbuild/for_helpers.py", line 330, in comprehension_helper
File "mypyc/irbuild/for_helpers.py", line 290, in handle_loop
File "mypyc/irbuild/for_helpers.py", line 101, in for_loop_helper
File "mypyc/irbuild/for_helpers.py", line 467, in make_for_loop_generator
File "mypyc/irbuild/builder.py", line 901, in get_dict_item_type
File "mypyc/irbuild/builder.py", line 893, in get_dict_key_type
File "mypyc/irbuild/builder.py", line 888, in get_dict_base_type
test.py:6: AssertionError: Union[builtins.dict[builtins.int, builtins.int], builtins.dict[Any, Any]]

Your Environment

  • Mypy version used: 1.0.0
  • Python version used: 3.11.1

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci il crash dall’esempio test.py dell’issue, quindi esamina mypyc/irbuild/builder.py attorno a get_dict_base_type, get_dict_key_type e get_dict_item_type, insieme al percorso della dictionary comprehension in mypyc/irbuild/for_helpers.py. Aggiungi un test di regressione che copra un tipo ristretto la cui dipendenza non è disponibile al momento della compilazione; il lavoro è completo quando mypyc termina senza l’AssertionError.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
compilers
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
48/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.