Skip to content

problem with ABCMeta as base class inside an iter without annotation #9838

Description

@idrissbellil

Crash Report

Mypy crashed, the code snippet below is enough to reproduce that.

Traceback

bug.py:34: error: INTERNAL ERROR -- Please try using mypy master on Github:
https://mypy.rtfd.io/en/latest/common_issues.html#using-a-development-mypy-build
Please report a bug at https://github.com/python/mypy/issues
version: 0.790
Traceback (most recent call last):
  File "/usr/bin/mypy", line 33, in <module>
    sys.exit(load_entry_point('mypy==0.790', 'console_scripts', 'mypy')())
  File "/usr/lib/python3.9/site-packages/mypy/__main__.py", line 8, in console_entry
    main(None, sys.stdout, sys.stderr)
  File "/usr/lib/python3.9/site-packages/mypy/main.py", line 90, in main
    res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
  File "/usr/lib/python3.9/site-packages/mypy/build.py", line 180, in build
    result = _build(
  File "/usr/lib/python3.9/site-packages/mypy/build.py", line 254, in _build
    graph = dispatch(sources, manager, stdout)
  File "/usr/lib/python3.9/site-packages/mypy/build.py", line 2630, in dispatch
    process_graph(graph, manager)
  File "/usr/lib/python3.9/site-packages/mypy/build.py", line 2953, in process_graph
    process_stale_scc(graph, scc, manager)
  File "/usr/lib/python3.9/site-packages/mypy/build.py", line 3051, in process_stale_scc
    graph[id].type_check_first_pass()
  File "/usr/lib/python3.9/site-packages/mypy/build.py", line 2111, in type_check_first_pass
    self.type_checker().check_first_pass()
  File "/usr/lib/python3.9/site-packages/mypy/checker.py", line 294, in check_first_pass
    self.accept(d)
  File "/usr/lib/python3.9/site-packages/mypy/checker.py", line 401, in accept
    stmt.accept(self)
  File "/usr/lib/python3.9/site-packages/mypy/nodes.py", line 1130, in accept
    return visitor.visit_for_stmt(self)
  File "/usr/lib/python3.9/site-packages/mypy/checker.py", line 3479, in visit_for_stmt
    iterator_type, item_type = self.analyze_iterable_item_type(s.expr)
  File "/usr/lib/python3.9/site-packages/mypy/checker.py", line 3499, in analyze_iterable_item_type
    iterator = echk.check_method_call_by_name('__iter__', iterable, [], [], expr)[0]
  File "/usr/lib/python3.9/site-packages/mypy/checkexpr.py", line 2345, in check_method_call_by_name
    method_type = analyze_member_access(method, base_type, context, False, False, True,
  File "/usr/lib/python3.9/site-packages/mypy/checkmember.py", line 126, in analyze_member_access
    result = _analyze_member_access(name, typ, mx, override_info)
  File "/usr/lib/python3.9/site-packages/mypy/checkmember.py", line 155, in _analyze_member_access
    return _analyze_member_access(name, tuple_fallback(typ), mx, override_info)
  File "/usr/lib/python3.9/site-packages/mypy/checkmember.py", line 143, in _analyze_member_access
    return analyze_instance_member_access(name, typ, mx, override_info)
  File "/usr/lib/python3.9/site-packages/mypy/checkmember.py", line 215, in analyze_instance_member_access
    dispatched_type = meet.meet_types(mx.original_type, typ)
  File "/usr/lib/python3.9/site-packages/mypy/meet.py", line 50, in meet_types
    return t.accept(TypeMeetVisitor(s))
  File "/usr/lib/python3.9/site-packages/mypy/types.py", line 794, in accept
    return visitor.visit_instance(self)
  File "/usr/lib/python3.9/site-packages/mypy/meet.py", line 526, in visit_instance
    return meet_types(t, self.s)
  File "/usr/lib/python3.9/site-packages/mypy/meet.py", line 50, in meet_types
    return t.accept(TypeMeetVisitor(s))
  File "/usr/lib/python3.9/site-packages/mypy/types.py", line 1347, in accept
    return visitor.visit_tuple_type(self)
  File "/usr/lib/python3.9/site-packages/mypy/meet.py", line 588, in visit_tuple_type
    return t.copy_modified(items=[meet_types(it, self.s.args[0]) for it in t.items])
  File "/usr/lib/python3.9/site-packages/mypy/meet.py", line 588, in <listcomp>
    return t.copy_modified(items=[meet_types(it, self.s.args[0]) for it in t.items])
  File "/usr/lib/python3.9/site-packages/mypy/meet.py", line 50, in meet_types
    return t.accept(TypeMeetVisitor(s))
  File "/usr/lib/python3.9/site-packages/mypy/types.py", line 1098, in accept
    return visitor.visit_callable_type(self)
  File "/usr/lib/python3.9/site-packages/mypy/meet.py", line 540, in visit_callable_type
    if not ((t.is_type_obj() and t.type_object().is_abstract) or
  File "/usr/lib/python3.9/site-packages/mypy/types.py", line 1094, in type_object
    assert isinstance(ret, Instance)
AssertionError:
bug.py:34: : note: use --pdb to drop into pdb

To Reproduce

import abc


class IClass(metaclass=abc.ABCMeta):
    """Base class"""


class A(IClass):
    def __init__(self, el: str, a: IClass) -> None:
        self._el = el
        self._a = a


class B(IClass):
    def __init__(self, b: float) -> None:
        self._b = b


def C(b):
    return A('-', B(b))


class D(IClass):
    def __init__(self, b: float) -> None:
        self._b = b


builders = (
        C,
        D,
)


for builder in builders:
    pass

Your Environment

  • Mypy version used: 0.790
  • Mypy command-line flags: None
  • Mypy configuration options from mypy.ini (and other config files): default
  • Python version used: 3.6 and 3.9
  • Operating system and version: ArchLinux

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions