python / python/mypy

Stubtest crashes if an `@overload` is decorated

Ouverte
#20,064 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

crash topic-stubtest
Langage dominant
Python
Étoiles
20.6k
Forks
3.3k
Métriques de merge des PR
Métriques de PR en attente

Description

Crash Report

I tried running stubtest on the numpy codebase using the compiled mypy 1.18.2 version + the patch from #20063. This triggered an assertion failure in hypothesis.extra.numpy.arrays (huh?). The relevant code contains code like

@overload
@defines_strategy(force_reusable_values=True)
def arrays(
   # --snip--

which I believe is what is triggering this asserion to fail. See HypothesisWorks/hypothesis#4564 for the relevant code.

Traceback

Traceback (most recent call last):
  File "/home/joren/Workspace/numpy/.venv/bin/stubtest", line 10, in <module>
    sys.exit(main())
             ~~~~^^
  File "/home/joren/Workspace/numpy/.venv/lib/python3.14/site-packages/mypy/stubtest.py", line 2448, in main
    return test_stubs(parse_options(sys.argv[1:]))
  File "/home/joren/Workspace/numpy/.venv/lib/python3.14/site-packages/mypy/stubtest.py", line 2296, in test_stubs
    for error in test_module(module):
                 ~~~~~~~~~~~^^^^^^^^
  File "/home/joren/Workspace/numpy/.venv/lib/python3.14/site-packages/mypy/stubtest.py", line 257, in test_module
    yield from verify(stub, runtime, [module_name])
  File "/home/joren/Workspace/numpy/.venv/lib/python3.14/site-packages/mypy/stubtest.py", line 436, in verify_mypyfile
    yield from verify(stub_entry, runtime_entry, object_path + [entry])
  File "/home/joren/Workspace/numpy/.venv/lib/python3.14/site-packages/mypy/stubtest.py", line 1347, in verify_overloadedfuncdef
    stub_sig = Signature.from_overloadedfuncdef(stub)
  File "/home/joren/Workspace/numpy/.venv/lib/python3.14/site-packages/mypy/stubtest.py", line 971, in from_overloadedfuncdef
    assert func is not None, f"Failed to resolve decorated overload of {stub.fullname!r}"
           ^^^^^^^^^^^^^^^^
AssertionError: Failed to resolve decorated overload of 'hypothesis.extra.numpy.arrays'

To Reproduce

  • clone https://github.com/numpy/numpy
  • uv venv .venv
  • source .venv/bin/activate
  • uv pip install -r requirements/build_requirements.txt -r requirements/test_requirements.txt
  • spin build
  • create mypy.ini:
    [mypy]
    ignore_errors = True
    
  • create allowlist.txt:
    numpy\._typing.*
    numpy\.typing\.mypy_plugin
    numpy\.conftest.*
    numpy\.random\._generator\.__test__
    numpy(\.\w+)?\.tests.*
    numpy\._core\.cversions
    numpy\.f2py\.__main__
    numpy\.distutils.*
    numpy\.f2py\._backends\._distutils
    numpy\._build_utils.*
    numpy\._pyinstaller.*
    
  • stubtest --mypy-config-file=mypy.ini --allowlist=allowlist.txt --concise --tb numpy

Your Environment

  • Mypy version used: 1.18.2 (compiled: yes)
  • Mypy command-line flags: see above
  • Mypy configuration options from mypy.ini (and other config files): see above
  • Python version used: 3.14.0
  • Operating system and version: Ubuntu 22.04

BTW, adding hypothesis.* to the allowlist doesn't seem to help.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez dans mypy/stubtest.py, au niveau de Signature.from_overloadedfuncdef et verify_overloadedfuncdef, et suivez le traceback pour retracer la manière dont les fonctions @overload décorées sont résolues. Reproduisez le problème avec la configuration NumPy et la commande stubtest fournies ; le travail est terminé lorsque cet overload décoré ne déclenche plus l’échec de l’assertion.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
testing-qa, tooling
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
52/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.