Skip to content

[1.19 regression] [mypyc] generator → AssertionError #20341

@mr-c

Description

@mr-c

Crash Report

Running mypyc on cwltool crashes with mypy 1.19; this didn't happen in previous versions.

Traceback

with compiled mypy (from PyPI) there is no traceback:

Traceback (most recent call last):
assertion_error.py:3: AssertionError: 

But by installing with pip install mypy --no-binary :all: we get

$ mypyc assertion_error.py 
Traceback (most recent call last):
  File "/home/michael/cwltool_main/mypyc-test/build/setup.py", line 6, in <module>
    ext_modules=mypycify(
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/build.py", line 635, in mypycify
    groups, group_cfilenames = mypyc_build(
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/build.py", line 514, in mypyc_build
    group_cfiles, ops_text = generate_c(
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/build.py", line 312, in generate_c
    modules, ctext, mapper = emitmodule.compile_modules_to_c(
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/codegen/emitmodule.py", line 458, in compile_modules_to_c
    modules = compile_modules_to_ir(result, mapper, compiler_options, errors)
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/codegen/emitmodule.py", line 298, in compile_modules_to_ir
    scc_ir = compile_scc_to_ir(trees, result, mapper, compiler_options, errors)
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/codegen/emitmodule.py", line 236, in compile_scc_to_ir
    modules = build_ir(scc, result.graph, result.types, mapper, compiler_options, errors)
  File "/home/michael/.pyenv/versions/3.13.2/lib/python3.13/contextlib.py", line 85, in inner
    return func(*args, **kwds)
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/irbuild/main.py", line 113, in build_ir
    transform_mypy_file(builder, module)
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/irbuild/main.py", line 159, in transform_mypy_file
    builder.accept(node)
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/irbuild/builder.py", line 293, in accept
    node.accept(self.visitor)
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypy/nodes.py", line 1660, in accept
    return visitor.visit_assignment_stmt(self)
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/irbuild/visitor.py", line 203, in visit_assignment_stmt
    transform_assignment_stmt(self.builder, stmt)
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/irbuild/statement.py", line 240, in transform_assignment_stmt
    rvalue_reg = builder.accept(stmt.rvalue)
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/irbuild/builder.py", line 279, in accept
    res = node.accept(self.visitor)
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypy/nodes.py", line 2738, in accept
    return visitor.visit_generator_expr(self)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/irbuild/visitor.py", line 330, in visit_generator_expr
    return transform_generator_expr(self.builder, expr)
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/irbuild/expression.py", line 1100, in transform_generator_expr
    return builder.primitive_op(iter_op, [translate_list_comprehension(builder, o)], o.line)
                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/irbuild/for_helpers.py", line 282, in translate_list_comprehension
    val = sequence_from_generator_preallocate_helper(
        builder,
    ...<2 lines>...
        set_item_op=new_list_set_item_op,
    )
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/irbuild/for_helpers.py", line 269, in sequence_from_generator_preallocate_helper
    for_loop_helper_with_index(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^
        builder, gen.indices[0], sequence_expr, sequence, set_item, line, length
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/irbuild/for_helpers.py", line 176, in for_loop_helper_with_index
    target_type = builder.get_sequence_type(expr)
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/irbuild/builder.py", line 972, in get_sequence_type
    return self.get_sequence_type_from_type(self.types[expr])
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/irbuild/builder.py", line 998, in get_sequence_type_from_type
    return RUnion.make_simplified_union(list(rtypes))
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
  File "/home/michael/cwltool_main/env3.13.2/lib/python3.13/site-packages/mypyc/ir/rtypes.py", line 976, in make_simplified_union
    assert items
           ^^^^^
assertion_error.py:3: AssertionError:

To Reproduce
Checkout common-workflow-language/cwltool#2185 and run tox -e py313-mypy.

The line where that crashes:

https://github.com/common-workflow-language/cwltool/blob/f1661438c07671b4738b1cad88c58b80541a76af/cwltool/workflow_job.py#L754

Here's a reduced reproducer:

from collections.abc import Generator
from typing import Optional, Union
jobs: Generator[Optional[str], None, None] = (_ for _ in ())

print(jobs)

Your Environment

  • Mypy version used: 1.19.0
  • Mypy command-line flags:
  • Mypy configuration options from mypy.ini (and other config files): None
  • Python version used: 3.13.2
  • Operating system and version: Debian Linux stable 13.2

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions