KotlinIsland / KotlinIsland/basedmypy

Internal error with nested `Unpack` and `@overload`

Open
#747 5 comments 0 reactions 0 assignees View on GitHub
bug crash upstream
Dominant language
Python
Stars
202
Forks
6
PR merge metrics
No merged PRs in 30d

Description

### Describe the problem, ie expected/actual result (if it's not blatantly obvious)

The relevant code:

https://github.com/jorenham/scipy-stubs/blob/master/scipy-stubs/stats/_distn_infrastructure.pyi#L197-L233

When I run `mypy --show-traceback scipy-stubs/stats/_distn_infrastructure.pyi`:

```
scipy-stubs/stats/_distn_infrastructure.pyi:197: error: INTERNAL ERROR -- Please try using mypy master on GitHub:
https://kotlinisland.github.io/basedmypy/common_issues.html#using-a-development-mypy-build
Please report a bug at https://github.com/KotlinIsland/basedmypy/issues
version: 2.7.0+dev.4c2c2e5000d53f89d59fa0b208be793b71e9c2fe
Traceback (most recent call last):
File "/dev/scipy-stubs/.venv/bin/mypy", line 8, in
sys.exit(console_entry())
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/__main__.py", line 15, in console_entry
main()
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/main.py", line 108, in main
res, messages, blockers = run_build(sources, options, fscache, t0, stdout, stderr)
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/main.py", line 217, in run_build
res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/build.py", line 198, in build
result = _build(
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/build.py", line 276, in _build
graph = dispatch(sources, manager, stdout)
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/build.py", line 3092, in dispatch
process_graph(graph, manager)
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/build.py", line 3492, in process_graph
process_stale_scc(graph, scc, manager)
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/build.py", line 3593, in process_stale_scc
graph[id].type_check_first_pass()
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/build.py", line 2455, in type_check_first_pass
self.type_checker().check_first_pass()
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/checker.py", line 505, in check_first_pass
self.accept(d)
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/checker.py", line 613, in accept
stmt.accept(self)
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/nodes.py", line 1187, in accept
return visitor.visit_class_def(self)
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/checker.py", line 2650, in visit_class_def
self.accept(defn.defs)
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/checker.py", line 613, in accept
stmt.accept(self)
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/nodes.py", line 1268, in accept
return visitor.visit_block(self)
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/checker.py", line 3116, in visit_block
self.accept(s)
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/checker.py", line 613, in accept
stmt.accept(self)
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/nodes.py", line 591, in accept
return visitor.visit_overloaded_func_def(self)
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/checker.py", line 650, in visit_overloaded_func_def
self._visit_overloaded_func_def(defn, do_items)
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/checker.py", line 681, in _visit_overloaded_func_def
self.check_overlapping_overloads(defn)
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/checker.py", line 814, in check_overlapping_overloads
if is_unsafe_overlapping_overload_signatures(sig1, sig2, type_vars):
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/checker.py", line 8549, in is_unsafe_overlapping_overload_signatures
is_callable_compatible(
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/subtypes.py", line 1623, in is_callable_compatible
return are_parameters_compatible(
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/subtypes.py", line 1730, in are_parameters_compatible
if _incompatible(left_star, right_star) or _incompatible(left_star2, right_star2):
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/subtypes.py", line 1728, in _incompatible
return not is_compat(right_arg.typ, left_arg.typ)
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/checker.py", line 9083, in is_overlapping_types_for_overload
return is_overlapping_types(
File "/dev/scipy-stubs/.venv/lib/python3.10/site-packages/mypy/meet.py", line 619, in is_overlapping_types
assert type(left) != type(right), f"{type(left)} vs {type(right)}"
AssertionError: vs
scipy-stubs/stats/_distn_infrastructure.pyi:197: : note: use --pdb to drop into pdb
```

so here I am 🤷🏻

---

(yes, I'm actually stubbing scipy 🙃)

### Gist to reproduce

```python
https://github.com/jorenham/scipy-stubs/blob/master/scipy-stubs/stats/_distn_infrastructure.pyi#L197-L233
```

### Basedmypy version

```
basedmypy 2.7.0+dev.4c2c2e5000d53f89d59fa0b208be793b71e9c2fe (compiled: no)
Based on mypy 1.11.0+dev
```

### Command-line flags

_No response_

### Configuration options from `pyproject.toml` (and other config files)

disable_bytearray_promotion=true; disable_memoryview_promotion=true; disallow_any_explicit=false; warn_unuseda_ignores=true

### Python version used

three dot ten dot twelve

### Operating system and version

PopOS! / Ubuntu 22.04 (won't recommend)

Contributor guide

Open the contributing guide

Research direction

Reproduce the failure with mypy --show-traceback on scipy-stubs/stats/_distn_infrastructure.pyi lines 197-233. Start with the traceback locations in mypy/checker.py, mypy/subtypes.py, and mypy/meet.py, especially the UnpackType assertion in is_overlapping_types. Done means the nested Unpack and @overload case no longer raises an internal error.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.