# Buggy code
def check_second_pass(self, todo: Optional[List[DeferredNode]] = None) -> bool:
    """Run second or following pass of type checking.

    This goes through deferred nodes, returning True if there were any.
    """
    self.recurse_into_functions = True
    with experiments.strict_optional_set(self.options.strict_optional):
        if not todo and not self.deferred_nodes:
            return False
        self.errors.set_file(self.path, self.tree.fullname(), scope=self.tscope)
        self.tscope.enter_file(self.tree.fullname())
        self.pass_num += 1
        if not todo:
            todo = self.deferred_nodes
        else:
            assert not self.deferred_nodes
        self.deferred_nodes = []
        done = set()  # type: Set[Union[FuncDef, LambdaExpr, MypyFile, OverloadedFuncDef]]
        for node, type_name, active_typeinfo in todo:
            if node in done:
                continue
            # This is useful for debugging:
            # print("XXX in pass %d, class %s, function %s" %
            #       (self.pass_num, type_name, node.fullname() or node.name()))
            done.add(node)
            with (
                self.tscope.class_scope(active_typeinfo)
                if active_typeinfo
                else nothing()
            ):
                with (
                    self.scope.push_class(active_typeinfo)
                    if active_typeinfo
                    else nothing()
                ):
                    self.check_partial(node)
        self.tscope.leave()
        return True


# Traceback (AssertionError)
pymc3/model.py:672: error: Decorated property not supported
pymc3/variational/opvi.py:1556: error: Decorated property not supported
pymc3/variational/flows.py:193: error: Decorated property not supported
pymc3/__init__.py:25: error: Name 'utils' already defined (by an import)
pymc3/data.py:226: error: Need type annotation for 'RNG'
Traceback (most recent call last):
File "/Users/rpg/Library/Python/3.7/bin/mypy", line 11, in <module>
sys.exit(console_entry())
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/__main__.py", line 7, in console_entry
main(None)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/main.py", line 91, in main
res = type_check_only(sources, bin_dir, options, flush_errors, fscache)  # noqa
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/main.py", line 148, in type_check_only
fscache=fscache)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/build.py", line 177, in build
flush_errors, fscache)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/build.py", line 350, in _build
graph = dispatch(sources, manager)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/build.py", line 2560, in dispatch
process_graph(graph, manager)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/build.py", line 2853, in process_graph
process_stale_scc(graph, scc, manager)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/build.py", line 2976, in process_stale_scc
graph[id].type_check_first_pass()
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/build.py", line 2151, in type_check_first_pass
self.type_checker().check_first_pass()
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/checker.py", line 253, in check_first_pass
self.accept(d)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/checker.py", line 352, in accept
stmt.accept(self)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/nodes.py", line 808, in accept
return visitor.visit_class_def(self)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/checker.py", line 1368, in visit_class_def
self.accept(defn.defs)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/checker.py", line 352, in accept
stmt.accept(self)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/nodes.py", line 873, in accept
return visitor.visit_block(self)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/checker.py", line 1514, in visit_block
self.accept(s)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/checker.py", line 352, in accept
stmt.accept(self)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/nodes.py", line 443, in accept
return visitor.visit_overloaded_func_def(self)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/checker.py", line 385, in visit_overloaded_func_def
self._visit_overloaded_func_def(defn)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/checker.py", line 409, in _visit_overloaded_func_def
self.check_method_override(defn)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/checker.py", line 1198, in check_method_override
self.check_method_or_accessor_override_for_base(defn, base)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/checker.py", line 1208, in check_method_or_accessor_override_for_base
self.check_method_override_for_base_with_name(defn, name, base)
File "/Users/rpg/Library/Python/3.7/lib/python/site-packages/mypy/checker.py", line 1252, in check_method_override_for_base_with_name
assert False, str(base_attr.node)
AssertionError: Var(sampler_vars)

# Fixed code
def check_second_pass(
    self, todo: Optional[Sequence[Union[DeferredNode, FineGrainedDeferredNode]]] = None
) -> bool:
    """Run second or following pass of type checking.

    This goes through deferred nodes, returning True if there were any.
    """
    self.recurse_into_functions = True
    with experiments.strict_optional_set(self.options.strict_optional):
        if not todo and not self.deferred_nodes:
            return False
        self.errors.set_file(self.path, self.tree.fullname(), scope=self.tscope)
        self.tscope.enter_file(self.tree.fullname())
        self.pass_num += 1
        if not todo:
            todo = self.deferred_nodes
        else:
            assert not self.deferred_nodes
        self.deferred_nodes = []
        done = set()  # type: Set[Union[DeferredNodeType, FineGrainedDeferredNodeType]]
        for node, type_name, active_typeinfo in todo:
            if node in done:
                continue
            # This is useful for debugging:
            # print("XXX in pass %d, class %s, function %s" %
            #       (self.pass_num, type_name, node.fullname() or node.name()))
            done.add(node)
            with (
                self.tscope.class_scope(active_typeinfo)
                if active_typeinfo
                else nothing()
            ):
                with (
                    self.scope.push_class(active_typeinfo)
                    if active_typeinfo
                    else nothing()
                ):
                    self.check_partial(node)
        self.tscope.leave()
        return True