python / python/mypy

Assertion failure crash: assert not any(isinstance(t, Parameters) for t in arg_types)

Aperta
#21,404 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

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

Descrizione

Crash Report

mypy 1.20.2 and master (0ea16df0c) crash on the snippet below.

Traceback

Traceback (most recent call last):
  File ".venv-mypy/bin/mypy", line 6, in <module>
    sys.exit(console_entry())
  File "mypy/mypy/__main__.py", line 16, in console_entry
    main()
  File "mypy/mypy/main.py", line 154, in main
    res, messages, blockers = run_build(sources, options, fscache, t0, stdout, stderr)
  File "mypy/mypy/main.py", line 244, in run_build
    res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
  File "mypy/mypy/build.py", line 422, in build
    result = build_inner(
  File "mypy/mypy/build.py", line 537, in build_inner
    graph = dispatch(sources, manager, stdout, connect_threads)
  File "mypy/mypy/build.py", line 4150, in dispatch
    process_graph(graph, manager)
  File "mypy/mypy/build.py", line 4618, in process_graph
    done, still_working, results = manager.wait_for_done(graph)
  File "mypy/mypy/build.py", line 1492, in wait_for_done
    process_stale_scc(graph, next_scc, self)
  File "mypy/mypy/build.py", line 4785, in process_stale_scc
    mypy.semanal_main.semantic_analysis_for_scc(graph, scc, manager.errors)
  File "mypy/mypy/semanal_main.py", line 91, in semantic_analysis_for_scc
    process_top_levels(graph, scc, patches)
  File "mypy/mypy/semanal_main.py", line 200, in process_top_levels
    deferred, incomplete, progress = semantic_analyze_target(
  File "mypy/mypy/semanal_main.py", line 380, in semantic_analyze_target
    analyzer.refresh_partial(
  File "mypy/mypy/semanal.py", line 701, in refresh_partial
    self.refresh_top_level(node)
  File "mypy/mypy/semanal.py", line 728, in refresh_top_level
    self.accept(d)
  File "mypy/mypy/semanal.py", line 7701, in accept
    node.accept(self)
    ~~~~~~~~~~~^^^^^^
  File "mypy/mypy/nodes.py", line 1903, in accept
    return visitor.visit_assignment_stmt(self)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "mypy/mypy/semanal.py", line 3366, in visit_assignment_stmt
    self.process_type_annotation(s)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
  File "mypy/mypy/semanal.py", line 3901, in process_type_annotation
    analyzed = self.anal_type(s.type, allow_tuple_literal=allow_tuple_literal)
  File "mypy/mypy/semanal.py", line 7858, in anal_type
    typ = typ.accept(a)
  File "mypy/mypy/types.py", line 1094, in accept
    return visitor.visit_unbound_type(self)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "mypy/mypy/typeanal.py", line 281, in visit_unbound_type
    typ = self.visit_unbound_type_nonoptional(t, defining_literal)
  File "mypy/mypy/typeanal.py", line 461, in visit_unbound_type_nonoptional
    special = self.try_analyze_special_unbound_type(t, fullname)
  File "mypy/mypy/typeanal.py", line 655, in try_analyze_special_unbound_type
    return self.analyze_callable_type(t)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
  File "mypy/mypy/typeanal.py", line 1588, in analyze_callable_type
    ) or self.analyze_callable_args_for_concatenate(
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        callable_args, ret_type, fallback
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "mypy/mypy/typeanal.py", line 1509, in analyze_callable_args_for_concatenate
    tvar_def = self.anal_type(callable_args, allow_param_spec=True)
  File "mypy/mypy/typeanal.py", line 1923, in anal_type
    analyzed = t.accept(self)
  File "mypy/mypy/types.py", line 1094, in accept
    return visitor.visit_unbound_type(self)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "mypy/mypy/typeanal.py", line 281, in visit_unbound_type
    typ = self.visit_unbound_type_nonoptional(t, defining_literal)
  File "mypy/mypy/typeanal.py", line 514, in visit_unbound_type_nonoptional
    return self.apply_concatenate_operator(t)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
  File "mypy/mypy/typeanal.py", line 588, in apply_concatenate_operator
    pre = Parameters(
        args + pre.arg_types,
    ...<3 lines>...
        column=t.column,
    )
  File "mypy/mypy/types.py", line 1946, in __init__
    assert not any(isinstance(t, Parameters) for t in arg_types)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError

To Reproduce

from typing import Callable, Concatenate

f: Callable[Concatenate[Concatenate[...], ...], ...]

Your Environment

  • Mypy version used: 1.20.2 and 0ea16df0c
  • Mypy command-line flags: N/A
  • Mypy configuration options from mypy.ini (and other config files): N/A
  • Python version used: 3.14.4
  • Operating system and version: Arch Linux

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 con lo snippet Callable e Concatenate fornito, quindi esamina mypy/typeanal.py intorno a apply_concatenate_operator e types.py intorno a Parameters.init. Traccia il percorso con cui il Concatenate annidato raggiunge l’assertion; il lavoro è completato quando il reproducer non va più in crash e il comportamento è coperto da un test di regressione.

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à
Tranquilla
Chiarezza
Specificata chiaramente
Idoneità per principianti
72/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.