Skip to content

assert_never on exclusive union of tuples (type narrowing issue?) #16835

@hjwp

Description

@hjwp

I feel like this code should work but it doesn't. Am I missing something?

from typing_extensions import assert_never

class Left1:
    pass
class Left2:
    pass

class Right1:
    pass
class Right2:
    pass

# this function should take either left1+right1, or left2+right2

def foo(pair: tuple[Left1, Right1] | tuple[Left2, Right2]) -> str:
    match thing:
        case (Left1(), Right1()):
            return "1"
        case (Left2(), Right2()):
            return "2"
        case _:
            # at this point, we should have exhausted both possibilities in the union.
            assert_never(pair)

gives

src/pairs.py:27: error: Argument 1 to "assert_never" has incompatible type "Union[Tuple[Left1, Right1], Tuple[Left2, Right2]]"; expected "NoReturn"  [arg-type]

Activity

JelleZijlstra

JelleZijlstra commented on Jan 29, 2024

@JelleZijlstra
Member

This should be reported to your type checker (probably mypy); it's not an issue with typing-extensions which just provides the runtime version of assert_never.

I'll transfer the issue to mypy as I don't recall seeing it before.

hjwp

hjwp commented on Jan 29, 2024

@hjwp
Author

thanks very much for transferring! I didn't realise you could do that. much appreciated :)

Hnasar

Hnasar commented on Jan 30, 2024

@Hnasar
Contributor

This seems like a duplicate of #15190

JelleZijlstra

JelleZijlstra commented on Jan 30, 2024

@JelleZijlstra
Member

It's similar but unlike #15190 this one doesn't involve Literal.

changed the title [-]assert_never on exclusive union of tuples[/-] [+]assert_never on exclusive union of tuples (type narrowing issue?)[/+] on Aug 21, 2024
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

        Participants

        @Hnasar@hjwp@JelleZijlstra

        Issue actions

          assert_never on exclusive union of tuples (type narrowing issue?) · Issue #16835 · python/mypy