from typing import Any, NamedTuple, cast import numpy as np # Subtype of tuple[int, int] class XYGrid(NamedTuple): x_axis: int y_axis: int # TODO: remove this cast after: https://github.com/numpy/numpy/pull/27171 arr: np.ndarray[XYGrid, Any] = cast( np.ndarray[XYGrid, Any], np.empty(XYGrid(2, 2)), ) # Test variance of _ShapeType_co def accepts_2d(a: np.ndarray[tuple[int, int], Any]) -> None: return None accepts_2d(arr)