Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash Applying Generic Arguments #17212

Open
saulshanabrook opened this issue May 3, 2024 · 0 comments
Open

Crash Applying Generic Arguments #17212

saulshanabrook opened this issue May 3, 2024 · 0 comments
Labels

Comments

@saulshanabrook
Copy link

saulshanabrook commented May 3, 2024

Crash Report

MyPy crashes when using type var tuple with multiple generic args in overload

Traceback

$ mypy tmp.py --show-traceback
tmp.py:34: error: INTERNAL ERROR -- Please try using mypy master on GitHub:
https://mypy.readthedocs.io/en/stable/common_issues.html#using-a-development-mypy-build
Please report a bug at https://github.com/python/mypy/issues
version: 1.11.0+dev.fb31409b392c5533b25173705d62ed385ee39cfb
Traceback (most recent call last):
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/__main__.py", line 15, in console_entry
    main()
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/main.py", line 100, in main
    res, messages, blockers = run_build(sources, options, fscache, t0, stdout, stderr)
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/main.py", line 182, in run_build
    res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/build.py", line 192, in build
    result = _build(
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/build.py", line 266, in _build
    graph = dispatch(sources, manager, stdout)
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/build.py", line 2946, in dispatch
    process_graph(graph, manager)
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/build.py", line 3344, in process_graph
    process_stale_scc(graph, scc, manager)
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/build.py", line 3445, in process_stale_scc
    graph[id].type_check_first_pass()
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/build.py", line 2310, in type_check_first_pass
    self.type_checker().check_first_pass()
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/checker.py", line 481, in check_first_pass
    self.accept(d)
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/checker.py", line 589, in accept
    stmt.accept(self)
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/nodes.py", line 1310, in accept
    return visitor.visit_assignment_stmt(self)
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/checker.py", line 2850, in visit_assignment_stmt
    self.check_assignment(s.lvalues[-1], s.rvalue, s.type is None, s.new_syntax)
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/checker.py", line 3027, in check_assignment
    rvalue_type = self.check_simple_assignment(lvalue_type, rvalue, context=rvalue)
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/checker.py", line 4184, in check_simple_assignment
    rvalue_type = self.expr_checker.accept(
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/checkexpr.py", line 5760, in accept
    typ = node.accept(self)
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/nodes.py", line 1966, in accept
    return visitor.visit_index_expr(self)
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/checkexpr.py", line 4257, in visit_index_expr
    result = self.visit_index_expr_helper(e)
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/checkexpr.py", line 4271, in visit_index_expr_helper
    return self.accept(e.analyzed)
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/checkexpr.py", line 5760, in accept
    typ = node.accept(self)
          ^^^^^^^^^^^^^^^^^
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/nodes.py", line 2644, in accept
    return visitor.visit_type_alias_expr(self)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/checkexpr.py", line 4706, in visit_type_alias_expr
    return self.alias_type_in_runtime_context(alias.node, ctx=alias, alias_definition=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/checkexpr.py", line 4749, in alias_type_in_runtime_context
    return self.apply_type_arguments_to_callable(tp, item.args, ctx)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/checkexpr.py", line 4859, in apply_type_arguments_to_callable
    self.apply_generic_arguments(it, self.split_for_callable(it, args, ctx), ctx)
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/checkexpr.py", line 3205, in apply_generic_arguments
    return applytype.apply_generic_arguments(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/Caskroom/miniconda/base/envs/egg-smol-python/lib/python3.12/site-packages/mypy/applytype.py", line 97, in apply_generic_arguments
    assert min_arg_count <= len(orig_types) <= len(tvars)
AssertionError: 
tmp.py:34: : note: use --pdb to drop into pdb

To Reproduce

(I have commented out some lines which are unnecessary to reproduce the crash).
Create a tmp.py and run mypy tmp.py:

from collections.abc import Callable
from typing import Generic, TypeAlias, TypeVar, TypeVarTuple, Unpack, overload

T = TypeVar("T")
T1 = TypeVar("T1")
T2 = TypeVar("T2")
T3 = TypeVar("T3")
TS = TypeVarTuple("TS")


class PartialFn(Generic[T, Unpack[TS]]):
    @overload
    def __init__(self, f: Callable[[Unpack[TS]], T]) -> None: ...

    # @overload
    # def __init__(self, f: Callable[[T1, Unpack[TS]], T], _a: T1, /) -> None: ...

    # @overload
    # def __init__(self, f: Callable[[T1, T2, Unpack[TS]], T], _a: T1, _b: T2, /) -> None: ...

    @overload
    def __init__(self, f: Callable[[T1, T2, T3, Unpack[TS]], T], _a: T1, _b: T2, _c: T3, /) -> None: ...

    # etc, for partial application

    def __init__(self, f, *partial) -> None: ...

    # def __call__(self, *args: Unpack[TS]) -> T: ...


class Math: ...


MathFn: TypeAlias = PartialFn[Math, Math]

Your Environment

Mypy config from pyproject.toml:

[tool.mypy]
ignore_missing_imports = true
warn_redundant_casts = true
check_untyped_defs = true
strict_equality = true
warn_unused_configs = true
allow_redefinition = true
exclude = ["__snapshots__", "_build", "^conftest.py$"]

Mypy version (also fails on most recent released version):

$ mypy --version
mypy 1.11.0+dev.fb31409b392c5533b25173705d62ed385ee39cfb (compiled: no)
$ python --version
Python 3.12.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant