From 79729671441b58f3569d373abb54e7f6b6f26f40 Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Tue, 31 Mar 2026 01:02:23 -0500 Subject: [PATCH 1/2] Add overloads for the mod function to support various input types --- stdlib/_operator.pyi | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/stdlib/_operator.pyi b/stdlib/_operator.pyi index e1ef5c4bf067..cb21f9ebb6e5 100644 --- a/stdlib/_operator.pyi +++ b/stdlib/_operator.pyi @@ -65,7 +65,24 @@ def index(a: SupportsIndex, /) -> int: ... def inv(a: _SupportsInversion[_T_co], /) -> _T_co: ... def invert(a: _SupportsInversion[_T_co], /) -> _T_co: ... def lshift(a: Any, b: Any, /) -> Any: ... -def mod(a: Any, b: Any, /) -> Any: ... +@overload +def mod(a: bool, b: bool, /) -> int: ... +@overload +def mod(a: bool, b: int, /) -> int: ... +@overload +def mod(a: bool, b: float, /) -> float: ... +@overload +def mod(a: int, b: bool, /) -> int: ... +@overload +def mod(a: int, b: int, /) -> int: ... +@overload +def mod(a: int, b: float, /) -> float: ... +@overload +def mod(a: float, b: bool, /) -> float: ... +@overload +def mod(a: float, b: int, /) -> float: ... +@overload +def mod(a: float, b: float, /) -> float: ... def mul(a: Any, b: Any, /) -> Any: ... def matmul(a: Any, b: Any, /) -> Any: ... def neg(a: _SupportsNeg[_T_co], /) -> _T_co: ... From 13d7e532b2e342260b7e3c984d3fb8c8bb513e94 Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Sun, 5 Apr 2026 00:41:41 -0500 Subject: [PATCH 2/2] [_operator] Type `mod` by mimicking `mul` in #15598. --- stdlib/_operator.pyi | 7 +++++-- stdlib/_typeshed/__init__.pyi | 6 ++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/stdlib/_operator.pyi b/stdlib/_operator.pyi index 83344c7f96c8..8bfb432454e5 100644 --- a/stdlib/_operator.pyi +++ b/stdlib/_operator.pyi @@ -1,5 +1,5 @@ import sys -from _typeshed import SupportsGetItem, SupportsMul, SupportsRMul +from _typeshed import SupportsGetItem, SupportsMod, SupportsMul, SupportsRMod, SupportsRMul from collections.abc import Callable, Container, Iterable, MutableMapping, MutableSequence, Sequence from operator import attrgetter as attrgetter, itemgetter as itemgetter, methodcaller as methodcaller from typing import Any, AnyStr, Protocol, SupportsAbs, SupportsIndex, TypeVar, overload, type_check_only @@ -66,7 +66,10 @@ def index(a: SupportsIndex, /) -> int: ... def inv(a: _SupportsInversion[_T_co], /) -> _T_co: ... def invert(a: _SupportsInversion[_T_co], /) -> _T_co: ... def lshift(a, b, /): ... -def mod(a, b, /): ... +@overload +def mod(a: SupportsMod[_T_contra, _T_co], b: _T_contra, /) -> _T_co: ... +@overload +def mod(a: _T_contra, b: SupportsRMod[_T_contra, _T_co], /) -> _T_co: ... @overload def mul(a: SupportsMul[_T_contra, _T_co], b: _T_contra, /) -> _T_co: ... @overload diff --git a/stdlib/_typeshed/__init__.pyi b/stdlib/_typeshed/__init__.pyi index 89e93ab02706..c006322b8145 100644 --- a/stdlib/_typeshed/__init__.pyi +++ b/stdlib/_typeshed/__init__.pyi @@ -126,6 +126,12 @@ class SupportsMul(Protocol[_T_contra, _T_co]): class SupportsRMul(Protocol[_T_contra, _T_co]): def __rmul__(self, x: _T_contra, /) -> _T_co: ... +class SupportsMod(Protocol[_T_contra, _T_co]): + def __mod__(self, other: _T_contra, /) -> _T_co: ... + +class SupportsRMod(Protocol[_T_contra, _T_co]): + def __rmod__(self, other: _T_contra, /) -> _T_co: ... + class SupportsDivMod(Protocol[_T_contra, _T_co]): def __divmod__(self, other: _T_contra, /) -> _T_co: ...