Skip to content

Crash when analysing qiskit #11981

Closed

Description

@DomNomNom

Crash Report

Running mypy on a library where typing has recently been added causes a crash while analyzing this line:
https://github.com/Qiskit/qiskit-terra/blob/main/qiskit/circuit/library/blueprintcircuit.py#L72

Traceback

/q/qiskit-terra/qiskit/circuit/library/blueprintcircuit.py:72: 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: 0.940+dev.fa16759dc37fa313a2a607974d51d161c8ba5ea6
Traceback (most recent call last):
  File "/.pyenv/versions/3.9.4/bin/mypy", line 33, in <module>
    sys.exit(load_entry_point('mypy', 'console_scripts', 'mypy')())
  File "/q/mypy/mypy/__main__.py", line 12, in console_entry
    main(None, sys.stdout, sys.stderr)
  File "/q/mypy/mypy/main.py", line 96, in main
    res, messages, blockers = run_build(sources, options, fscache, t0, stdout, stderr)
  File "/q/mypy/mypy/main.py", line 173, in run_build
    res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
  File "/q/mypy/mypy/build.py", line 180, in build
    result = _build(
  File "/q/mypy/mypy/build.py", line 256, in _build
    graph = dispatch(sources, manager, stdout)
  File "/q/mypy/mypy/build.py", line 2715, in dispatch
    process_graph(graph, manager)
  File "/q/mypy/mypy/build.py", line 3046, in process_graph
    process_stale_scc(graph, scc, manager)
  File "/q/mypy/mypy/build.py", line 3144, in process_stale_scc
    graph[id].type_check_first_pass()
  File "/q/mypy/mypy/build.py", line 2183, in type_check_first_pass
    self.type_checker().check_first_pass()
  File "/q/mypy/mypy/checker.py", line 314, in check_first_pass
    self.accept(d)
  File "/q/mypy/mypy/checker.py", line 420, in accept
    stmt.accept(self)
  File "/q/mypy/mypy/nodes.py", line 1005, in accept
    return visitor.visit_class_def(self)
  File "/q/mypy/mypy/checker.py", line 1785, in visit_class_def
    self.accept(defn.defs)
  File "/q/mypy/mypy/checker.py", line 420, in accept
    stmt.accept(self)
  File "/q/mypy/mypy/nodes.py", line 1074, in accept
    return visitor.visit_block(self)
  File "/q/mypy/mypy/checker.py", line 2047, in visit_block
    self.accept(s)
  File "/q/mypy/mypy/checker.py", line 420, in accept
    stmt.accept(self)
  File "/q/mypy/mypy/nodes.py", line 561, in accept
    return visitor.visit_overloaded_func_def(self)
  File "/q/mypy/mypy/checker.py", line 453, in visit_overloaded_func_def
    self._visit_overloaded_func_def(defn)
  File "/q/mypy/mypy/checker.py", line 477, in _visit_overloaded_func_def
    self.check_method_override(defn)
  File "/q/mypy/mypy/checker.py", line 1469, in check_method_override
    if self.check_method_or_accessor_override_for_base(defn, base):
  File "/q/mypy/mypy/checker.py", line 1497, in check_method_or_accessor_override_for_base
    if self.check_method_override_for_base_with_name(defn, name, base):
  File "/q/mypy/mypy/checker.py", line 1591, in check_method_override_for_base_with_name
    elif is_equivalent(original_type, typ):
  File "/q/mypy/mypy/subtypes.py", line 164, in is_equivalent
    is_subtype(a, b, ignore_type_params=ignore_type_params,
  File "/q/mypy/mypy/subtypes.py", line 94, in is_subtype
    return _is_subtype(left, right,
  File "/q/mypy/mypy/subtypes.py", line 151, in _is_subtype
    return left.accept(SubtypeVisitor(orig_right,
  File "/q/mypy/mypy/types.py", line 2057, in accept
    return visitor.visit_partial_type(self)
  File "/q/mypy/mypy/subtypes.py", line 511, in visit_partial_type
    raise RuntimeError(f'Partial type "{left}" cannot be checked with "issubtype()"')
RuntimeError: Partial type "<partial list[?]>" cannot be checked with "issubtype()"
/q/qiskit-terra/qiskit/circuit/library/blueprintcircuit.py:72: : note: use --pdb to drop into pdb

To Reproduce

Install the development version of qiskit-terra and add the marker that it should be typechecked.
Qiskit/qiskit@02f9a80
run mypy on one of the files in qiskit: mypy qiskit-terra/qiskit/providers/backend.py

Your Environment

  • Mypy version used: 0.940+dev.fa16759dc37fa313a2a607974d51d161c8ba5ea6
  • Mypy command-line flags: qiskit-terra/qiskit/providers/backend.py --show-traceback
  • Mypy configuration options from mypy.ini (and other config files): None
  • Python version used: Python 3.9.4
  • Operating system and version: macOS 11.5.2 (20G95) Darwin 20.6.0

Activity

  1. sobolevn commented on Jan 13, 2022

    @sobolevn
    Member

    Thanks for the report! I am able to reproduce it on your project.

    qregs OverloadedFuncDef:72(
      Overload(def (self: qiskit.circuit.library.blueprintcircuit.BlueprintCircuit) -> Any)
      Decorator:72(
        Var(qregs)
        FuncDef:73(
          qregs
          Args(
            Var(self))
          Property
          Block:73(
            ExpressionStmt:74(
              StrExpr(A list of the quantum registers associated with the circuit.))
            ReturnStmt:75(
              MemberExpr:75(
                NameExpr(self [l])
                _qregs)))))
      Decorator:77(
        Var(qregs)
        MemberExpr:77(
          NameExpr(qregs)
          setter)
        FuncDef:78(
          qregs
          Args(
            Var(self)
            Var(qregs))
          Block:78(
            ExpressionStmt:79(
              StrExpr(Set the quantum registers associated with the circuit.))
            AssignmentStmt:80(
              MemberExpr:80(
                NameExpr(self [l])
                _qregs)
              ListExpr:80())
            AssignmentStmt:81(
              MemberExpr:81(
                NameExpr(self [l])
                _qubits)
              ListExpr:81())
            AssignmentStmt:82(
              MemberExpr:82(
                NameExpr(self [l])
                _ancillas)
              ListExpr:82())
            AssignmentStmt:83(
              MemberExpr:83(
                NameExpr(self [l])
                _qubit_indices)
              DictExpr:83())
            ExpressionStmt:85(
              CallExpr:85(
                MemberExpr:85(
                  NameExpr(self [l])
                  add_register)
                Args(
                  NameExpr(qregs [l]))
                VarArg))
            ExpressionStmt:86(
              CallExpr:86(
                MemberExpr:86(
                  NameExpr(self [l])
                  _invalidate)
                Args())))))) qiskit.circuit.quantumcircuit.QuantumCircuit Mdef/Var (qiskit.circuit.quantumcircuit.QuantumCircuit.qregs) : <partial list[?]>
    

    Now trying to create a minimal repro.

  2. sobolevn commented on Jan 13, 2022

    @sobolevn
    Member

    Turns out - I can't. Any ideas how can we do that?

  3. AlexWaygood commented on Mar 26, 2022

    @AlexWaygood
    Member

    Similar traceback to #11686 and #12109

  4. jakelishman commented on Jun 5, 2022

    @jakelishman
    Contributor

    #11686 is a minimal reproducer of this crash - I'm a Qiskit maintainer, and this bug is the one that prompted me to track it down. Assuming I did that correctly, this issue should be a duplicate of #11686.

  5. added a commit that references this issue on Jul 8, 2022
    9f99400
  6. added a commit that references this issue on Aug 12, 2022
    81d082c
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions