Skip to content

numpy dtype Statement is unreachable with mypy 1.19.0 #20358

Closed

Description

@acabal33uab

Bug Report
When checking the type field of a dtype with match, mypy 1.19.0 complains sbout some cases with error: Statement is unreachable.
It doesn't look like a numpy bug because swapping the order of the cases (eg. moving the int32 case to the top) it produces inconsistent results (eg. it generates 1 error instead of 2).

To Reproduce

import numpy as np


def f(dt: np.dtype) -> None:
    match dt.type:
        case np.float64:
            print("f")
        case np.int64:
            print("i")
        case np.int32:
            print("i")


dt: np.dtype = np.dtype(np.float64)
f(dt)

Expected Behavior

Mypy should not complain

Actual Behavior

kk.py:9: error: Statement is unreachable  [unreachable]
                print("i")
                ^~~~~~~~~~
kk.py:11: error: Statement is unreachable  [unreachable]
                print("i")
                ^~~~~~~~~~
Found 2 errors in 1 file (checked 1 source file)

Your Environment

  • Mypy version used: 1.19.0
  • Mypy command-line flags: mypy --warn-unreachable kk.py
  • Mypy configuration options from mypy.ini (and other config files): none
  • Python version used: 3.14.0

Activity

  1. sterliakov commented on Dec 3, 2025

    @sterliakov
    Collaborator

    #20146 should fix this. This is a logic bug in how mypy treats match-case arms with value patterns.

  2. added a commit that references this issue on Dec 14, 2025
    007d6de
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

    bugmypy got something wrongtopic-match-statementPython 3.10's match statement

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions