Skip to content

Unexpectedly encountered partial type #16573

@sr-verde

Description

@sr-verde

Bug Report

With updating from mypy 1.6.1 -> 1.7.1 I get an assertion error: "AssertionError: Unexpectedly encountered partial type". This happens in the released version 1.7.1 as well as on the current git main branch.

To Reproduce

from typing import Any

from pymongo import MongoClient
from pymongo.errors import ConnectionFailure
from celery import Celery
from celery.signals import worker_process_init, worker_process_shutdown


celery_app = Celery(__name__)
celery_app.conf.broker_url = ""
celery_app.conf.result_backend = ""

# MongoDB setup
client = None
db = None
collection = None


@worker_process_init.connect
def init_worker(**_kwargs: Any) -> None:
    """
    Will be run on initialization of each worker. When you run 12 workers, you will need to have
    12 database connections. Here you can get them.
    """
    global client, db, collection
    if client := MongoClient(""):
        db = getattr(client, "")
        collection = db[""]
    else:
        raise ConnectionFailure(
            "Cannot connect to database. Please check your config and network settings."
        )


@worker_process_shutdown.connect
def shutdown_worker(**_kwargs: Any) -> None:
    """
    Shutdown everything at the end of a worker’s lifetime, e.g. database connections
    """
    if client:
        client.close()

Expected Behavior

Mypy should not raise an assertion.

Actual Behavior

This is the output from current mypy version from git:

mypy --show-traceback my_project 
my_project/worker.py:45: 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.8.0+dev.e69c5cde8643e04a54a644cc27814ab98181541d
Traceback (most recent call last):
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/__main__.py", line 15, in console_entry
    main()
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/main.py", line 100, in main
    res, messages, blockers = run_build(sources, options, fscache, t0, stdout, stderr)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/main.py", line 182, in run_build
    res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/build.py", line 191, in build
    result = _build(
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/build.py", line 265, in _build
    graph = dispatch(sources, manager, stdout)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/build.py", line 2943, in dispatch
    process_graph(graph, manager)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/build.py", line 3341, in process_graph
    process_stale_scc(graph, scc, manager)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/build.py", line 3442, in process_stale_scc
    graph[id].type_check_first_pass()
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/build.py", line 2311, in type_check_first_pass
    self.type_checker().check_first_pass()
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 481, in check_first_pass
    self.accept(d)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 591, in accept
    stmt.accept(self)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/nodes.py", line 897, in accept
    return visitor.visit_decorator(self)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 4884, in visit_decorator
    self.visit_decorator_inner(e)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 4889, in visit_decorator_inner
    self.check_func_item(e.func, name=e.func.name, allow_empty=allow_empty)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 1077, in check_func_item
    self.check_func_def(defn, typ, name, allow_empty)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 1293, in check_func_def
    self.accept(item.body)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 591, in accept
    stmt.accept(self)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/nodes.py", line 1223, in accept
    return visitor.visit_block(self)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 2770, in visit_block
    self.accept(s)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 591, in accept
    stmt.accept(self)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/nodes.py", line 1491, in accept
    return visitor.visit_if_stmt(self)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 4525, in visit_if_stmt
    self.accept(b)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 591, in accept
    stmt.accept(self)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/nodes.py", line 1223, in accept
    return visitor.visit_block(self)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 2770, in visit_block
    self.accept(s)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 591, in accept
    stmt.accept(self)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/nodes.py", line 1310, in accept
    return visitor.visit_assignment_stmt(self)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 2818, in visit_assignment_stmt
    self.check_assignment(s.lvalues[-1], s.rvalue, s.type is None, s.new_syntax)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 2922, in check_assignment
    rvalue_type = self.expr_checker.accept(rvalue)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 5727, in accept
    typ = node.accept(self)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/nodes.py", line 1904, in accept
    return visitor.visit_call_expr(self)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 473, in visit_call_expr
    return self.visit_call_expr_inner(e, allow_none_return=allow_none_return)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 602, in visit_call_expr_inner
    ret_type = self.check_call_expr_with_callee_type(
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 1440, in check_call_expr_with_callee_type
    ret_type, callee_type = self.check_call(
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 1546, in check_call
    return self.check_overload_call(
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 2606, in check_overload_call
    arg_types = self.infer_arg_types_in_empty_context(args)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 1868, in infer_arg_types_in_empty_context
    arg_type = self.accept(arg)
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 5727, in accept
    typ = node.accept(self)
          ^^^^^^^^^^^^^^^^^
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/nodes.py", line 1806, in accept
    return visitor.visit_name_expr(self)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 358, in visit_name_expr
    return self.narrow_type_from_binder(e, result)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 6062, in narrow_type_from_binder
    return narrow_declared_type(known_type, restriction)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/meet.py", line 144, in narrow_declared_type
    elif not is_overlapping_types(declared, narrowed, prohibit_none_typevar_overlap=True):
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/meet.py", line 304, in is_overlapping_types
    assert False, "Unexpectedly encountered partial type"
AssertionError: Unexpectedly encountered partial type
my_project/worker.py:45: : note: use --pdb to drop into pdb

Your Environment

  • Mypy version used: 1.7.1
  • Mypy command-line flags: none
  • Mypy configuration options from mypy.ini (and other config files):
[tool.mypy]
python_version = "3.11"
plugins = "pydantic.mypy"
follow_imports = "silent"
warn_redundant_casts = true
warn_unused_ignores = true
check_untyped_defs = true
disallow_untyped_defs = true

[tool.pydantic-mypy]
init_forbid_extra = true
init_typed = true
warn_required_dynamic_aliases = true
warn_untyped_fields = true

[[tool.mypy.overrides]]
module = "xxx.*"
ignore_missing_imports = true
  • Python version used: 3.11.6

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions