Skip to content

Commit 8c83725

Browse files
committed
✨ optypean binops protocols in _numtype.op
1 parent 8885bd5 commit 8c83725

File tree

2 files changed

+157
-0
lines changed

2 files changed

+157
-0
lines changed

src/_numtype/__init__.pyi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ from typing_extensions import Never, Protocol, TypeAliasType, TypeVar, Unpack
1111
import numpy as np
1212
from numpy._typing import _NestedSequence
1313

14+
from . import op as op
1415
from ._dtype import (
1516
ToDType as ToDType,
1617
ToDTypeBool as ToDTypeBool,

src/_numtype/op.pyi

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
from typing import Any, Protocol, override
2+
from typing_extensions import TypeVar
3+
4+
__all__ = [ # noqa: RUF022
5+
"CanEq",
6+
"CanNe",
7+
"CanLt",
8+
"CanLe",
9+
"CanGt",
10+
"CanGe",
11+
"CanAdd",
12+
"CanRAdd",
13+
"CanSub",
14+
"CanRSub",
15+
"CanMul",
16+
"CanRMul",
17+
"CanMatmul",
18+
"CanRMatmul",
19+
"CanPow",
20+
"CanRPow",
21+
"CanTruediv",
22+
"CanRTruediv",
23+
"CanFloordiv",
24+
"CanRFloordiv",
25+
"CanMod",
26+
"CanRMod",
27+
"CanDivmod",
28+
"CanRDivmod",
29+
"CanLshift",
30+
"CanRLshift",
31+
"CanRshift",
32+
"CanRRshift",
33+
"CanAnd",
34+
"CanRAnd",
35+
"CanXor",
36+
"CanRXor",
37+
"CanOr",
38+
"CanROr",
39+
] # fmt:
40+
41+
###
42+
43+
_T_contra = TypeVar("_T_contra", contravariant=True, default=object)
44+
_T_co = TypeVar("_T_co", covariant=True, default=Any)
45+
46+
###
47+
48+
class CanEq(Protocol[_T_contra, _T_co]):
49+
@override
50+
def __eq__(self, x: _T_contra, /) -> _T_co: ... # pyright: ignore[reportIncompatibleMethodOverride]
51+
52+
class CanNe(Protocol[_T_contra, _T_co]):
53+
@override
54+
def __ne__(self, x: _T_contra, /) -> _T_co: ... # pyright: ignore[reportIncompatibleMethodOverride]
55+
56+
class CanLt(Protocol[_T_contra, _T_co]):
57+
def __lt__(self, x: _T_contra, /) -> _T_co: ...
58+
59+
class CanLe(Protocol[_T_contra, _T_co]):
60+
def __le__(self, x: _T_contra, /) -> _T_co: ...
61+
62+
class CanGt(Protocol[_T_contra, _T_co]):
63+
def __gt__(self, x: _T_contra, /) -> _T_co: ...
64+
65+
class CanGe(Protocol[_T_contra, _T_co]):
66+
def __ge__(self, x: _T_contra, /) -> _T_co: ...
67+
68+
###
69+
70+
class CanAdd(Protocol[_T_contra, _T_co]):
71+
def __add__(self, x: _T_contra, /) -> _T_co: ...
72+
73+
class CanRAdd(Protocol[_T_contra, _T_co]):
74+
def __radd__(self, x: _T_contra, /) -> _T_co: ...
75+
76+
class CanSub(Protocol[_T_contra, _T_co]):
77+
def __sub__(self, x: _T_contra, /) -> _T_co: ...
78+
79+
class CanRSub(Protocol[_T_contra, _T_co]):
80+
def __rsub__(self, x: _T_contra, /) -> _T_co: ...
81+
82+
class CanMul(Protocol[_T_contra, _T_co]):
83+
def __mul__(self, x: _T_contra, /) -> _T_co: ...
84+
85+
class CanRMul(Protocol[_T_contra, _T_co]):
86+
def __rmul__(self, x: _T_contra, /) -> _T_co: ...
87+
88+
class CanMatmul(Protocol[_T_contra, _T_co]):
89+
def __matmul__(self, x: _T_contra, /) -> _T_co: ...
90+
91+
class CanRMatmul(Protocol[_T_contra, _T_co]):
92+
def __rmatmul__(self, x: _T_contra, /) -> _T_co: ...
93+
94+
class CanPow(Protocol[_T_contra, _T_co]):
95+
def __pow__(self, exp: _T_contra, /) -> _T_co: ...
96+
97+
class CanRPow(Protocol[_T_contra, _T_co]):
98+
def __rpow__(self, x: _T_contra, /) -> _T_co: ...
99+
100+
class CanTruediv(Protocol[_T_contra, _T_co]):
101+
def __truediv__(self, x: _T_contra, /) -> _T_co: ...
102+
103+
class CanRTruediv(Protocol[_T_contra, _T_co]):
104+
def __rtruediv__(self, x: _T_contra, /) -> _T_co: ...
105+
106+
###
107+
108+
class CanFloordiv(Protocol[_T_contra, _T_co]):
109+
def __floordiv__(self, x: _T_contra, /) -> _T_co: ...
110+
111+
class CanRFloordiv(Protocol[_T_contra, _T_co]):
112+
def __rfloordiv__(self, x: _T_contra, /) -> _T_co: ...
113+
114+
class CanMod(Protocol[_T_contra, _T_co]):
115+
def __mod__(self, x: _T_contra, /) -> _T_co: ...
116+
117+
class CanRMod(Protocol[_T_contra, _T_co]):
118+
def __rmod__(self, x: _T_contra, /) -> _T_co: ...
119+
120+
class CanDivmod(Protocol[_T_contra, _T_co]):
121+
def __divmod__(self, x: _T_contra, /) -> _T_co: ...
122+
123+
class CanRDivmod(Protocol[_T_contra, _T_co]):
124+
def __rdivmod__(self, x: _T_contra, /) -> _T_co: ...
125+
126+
###
127+
128+
class CanLshift(Protocol[_T_contra, _T_co]):
129+
def __lshift__(self, x: _T_contra, /) -> _T_co: ...
130+
131+
class CanRLshift(Protocol[_T_contra, _T_co]):
132+
def __rlshift__(self, x: _T_contra, /) -> _T_co: ...
133+
134+
class CanRshift(Protocol[_T_contra, _T_co]):
135+
def __rshift__(self, x: _T_contra, /) -> _T_co: ...
136+
137+
class CanRRshift(Protocol[_T_contra, _T_co]):
138+
def __rrshift__(self, x: _T_contra, /) -> _T_co: ...
139+
140+
class CanAnd(Protocol[_T_contra, _T_co]):
141+
def __and__(self, x: _T_contra, /) -> _T_co: ...
142+
143+
class CanRAnd(Protocol[_T_contra, _T_co]):
144+
def __rand__(self, x: _T_contra, /) -> _T_co: ...
145+
146+
class CanXor(Protocol[_T_contra, _T_co]):
147+
def __xor__(self, x: _T_contra, /) -> _T_co: ...
148+
149+
class CanRXor(Protocol[_T_contra, _T_co]):
150+
def __rxor__(self, x: _T_contra, /) -> _T_co: ...
151+
152+
class CanOr(Protocol[_T_contra, _T_co]):
153+
def __or__(self, x: _T_contra, /) -> _T_co: ...
154+
155+
class CanROr(Protocol[_T_contra, _T_co]):
156+
def __ror__(self, x: _T_contra, /) -> _T_co: ...

0 commit comments

Comments
 (0)