Skip to content

Commit 4e6345d

Browse files
committed
🐴 special-case around mypy's inconsistent error codes
1 parent 79a4043 commit 4e6345d

File tree

6 files changed

+41
-24
lines changed

6 files changed

+41
-24
lines changed

src/numpy-stubs/@test/generated/ndarray_invert.pyi

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/numpy-stubs/@test/generated/ndarray_neg.pyi

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/numpy-stubs/@test/generated/ndarray_pos.pyi

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/numpy-stubs/@test/generated/ndarray_truediv.pyi

Lines changed: 13 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/numpy-stubs/@test/static/reject/arithmetic.pyi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ AR_f *= AR_LIKE_m # type: ignore[arg-type] # pyright: ignore[reportOperatorIss
9090
# Array power
9191

9292
AR_b **= AR_LIKE_b # type: ignore[arg-type] # pyright: ignore[reportAssignmentType]
93-
AR_b **= AR_LIKE_u # type: ignore[arg-type] # pyright: ignore[reportAssignmentType]
93+
AR_b **= AR_LIKE_u # type: ignore[arg-type] # pyright: ignore[reportOperatorIssue, reportUnknownVariableType]
9494
AR_b **= AR_LIKE_i # type: ignore[arg-type] # pyright: ignore[reportAssignmentType]
9595
AR_b **= AR_LIKE_f # type: ignore[arg-type] # pyright: ignore[reportAssignmentType]
9696
AR_b **= AR_LIKE_c # type: ignore[arg-type] # pyright: ignore[reportAssignmentType]

tool/testgen.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1142,6 +1142,8 @@ def __init__(self, opname: _OpName, /, *, shape: tuple[int, ...] = (1, 1)) -> No
11421142
def __op_expr_template(self) -> str:
11431143
if self.opname == "abs":
11441144
return "abs({})"
1145+
if self.opname == "pow":
1146+
return "{}**{}"
11451147
if self.opname == "divmod":
11461148
return "divmod({}, {})"
11471149

@@ -1172,6 +1174,10 @@ def _scalars_py(self) -> Mapping[str, type[complex | bytes | str]]:
11721174
}
11731175
return {f"{kind}_py": kindmap[kind] for kind in kinds if kind in kindmap}
11741176

1177+
@property
1178+
def _mypy_rules(self) -> str:
1179+
return "misc" if self.n_in == 1 else "operator"
1180+
11751181
@property
11761182
def _pyright_rules(self) -> str:
11771183
if self.opname in {"abs", "divmod"}:
@@ -1306,7 +1312,7 @@ def _gen_unop(self, /) -> Generator[str | None]:
13061312
else:
13071313
yield " ".join((
13081314
expr,
1309-
"# type: ignore[operator]",
1315+
f"# type: ignore[{self._mypy_rules}]",
13101316
f"# pyright: ignore[{self._pyright_rules}]",
13111317
))
13121318

@@ -1331,9 +1337,20 @@ def _gen_testcases_binop_np_nd(self, label1: str, /) -> Generator[str | None]:
13311337
out_type_expr = _array_expr(*out_dtypes, npt=True)
13321338
yield _expr_assert_type(expr, out_type_expr)
13331339
elif "O" not in {dtypes1[0].char, dtypes2[0].char}: # impossible to reject
1340+
# 🐴
1341+
if (
1342+
self.opname == "truediv"
1343+
and label2 == "m8"
1344+
and label1[0] in "biu"
1345+
and label1 != "iufc"
1346+
):
1347+
mypy_rules = "type-var"
1348+
else:
1349+
mypy_rules = self._mypy_rules
1350+
13341351
yield " ".join((
13351352
expr,
1336-
"# type: ignore[operator]",
1353+
f"# type: ignore[{mypy_rules}]",
13371354
f"# pyright: ignore[{self._pyright_rules}]",
13381355
))
13391356

@@ -1379,7 +1396,7 @@ def _gen_testcases_binop_py_0d(
13791396
else:
13801397
testcase = " ".join((
13811398
expr,
1382-
"# type: ignore[operator]",
1399+
f"# type: ignore[{self._mypy_rules}]",
13831400
f"# pyright: ignore[{self._pyright_rules}]",
13841401
))
13851402

0 commit comments

Comments
 (0)