|
| 1 | +"""Pyright test: primitive dtype classes and NDArray subscript syntax. |
| 2 | +
|
| 3 | +This file must produce zero pyright errors. It validates that: |
| 4 | +- Primitive dtypes (f32, i32, etc.) work as type annotations |
| 5 | +- NDArray[dtype, ndim] subscript syntax is accepted |
| 6 | +- from __future__ import annotations (stringified) works |
| 7 | +- NDArray works via qd.types and top-level qd.NDArray |
| 8 | +- Return types and Optional wrappers work |
| 9 | +""" |
| 10 | + |
| 11 | +from __future__ import annotations |
| 12 | + |
| 13 | +from typing import Optional |
| 14 | + |
| 15 | +import quadrants as qd |
| 16 | + |
| 17 | + |
| 18 | +# Primitive types as annotations |
| 19 | +def accept_f32(x: qd.f32) -> None: ... |
| 20 | + |
| 21 | + |
| 22 | +def accept_i32(x: qd.i32) -> None: ... |
| 23 | + |
| 24 | + |
| 25 | +def accept_any_dtype(x: qd.f32 | qd.i32 | qd.u8) -> None: ... |
| 26 | + |
| 27 | + |
| 28 | +# NDArray subscript: dtype + ndim |
| 29 | +def kernel_2d(a: qd.types.NDArray[qd.f32, 2]) -> None: ... |
| 30 | + |
| 31 | + |
| 32 | +# NDArray subscript: dtype only |
| 33 | +def kernel_dtype(a: qd.types.NDArray[qd.i32]) -> None: ... |
| 34 | + |
| 35 | + |
| 36 | +# NDArray bare (no subscript) |
| 37 | +def kernel_bare(a: qd.types.NDArray) -> None: ... |
| 38 | + |
| 39 | + |
| 40 | +# Multiple NDArray args with different types |
| 41 | +def multi_args( |
| 42 | + a: qd.types.NDArray[qd.f32, 2], |
| 43 | + b: qd.types.NDArray[qd.i32, 1], |
| 44 | + c: qd.types.NDArray, |
| 45 | +) -> None: ... |
| 46 | + |
| 47 | + |
| 48 | +# Top-level NDArray alias (accessible via qd.types) |
| 49 | +def top_level(a: qd.types.NDArray[qd.f32, 2]) -> None: ... |
| 50 | + |
| 51 | + |
| 52 | +# Return types |
| 53 | +def make_arr() -> qd.types.NDArray[qd.f32, 2]: ... |
| 54 | + |
| 55 | + |
| 56 | +# Optional wrapping |
| 57 | +def maybe_arr(x: Optional[qd.types.NDArray[qd.f32, 2]]) -> None: ... |
| 58 | + |
| 59 | + |
| 60 | +# Variable annotations |
| 61 | +field1: qd.types.NDArray[qd.f32, 2] |
| 62 | +field2: qd.types.NDArray |
| 63 | + |
| 64 | + |
| 65 | +# In class body |
| 66 | +class MyModel: |
| 67 | + buf: qd.types.NDArray[qd.f32, 3] |
| 68 | + |
| 69 | + def forward(self, x: qd.types.NDArray[qd.f32, 2]) -> qd.types.NDArray[qd.f32, 2]: ... |
| 70 | + |
| 71 | + |
| 72 | +# Access via qd.types submodule |
| 73 | +def via_types(x: qd.types.NDArray[qd.types.f32, 2]) -> None: ... |
0 commit comments