mirror of
https://github.com/davidhalter/typeshed.git
synced 2025-12-16 00:37:10 +08:00
move _operator classes to operator (#12745)
This commit is contained in:
@@ -1,18 +1,16 @@
|
||||
import sys
|
||||
from _typeshed import SupportsGetItem
|
||||
from collections.abc import Callable, Container, Iterable, MutableMapping, MutableSequence, Sequence
|
||||
from typing import Any, AnyStr, Generic, Protocol, SupportsAbs, SupportsIndex, TypeVar, final, overload
|
||||
from typing_extensions import ParamSpec, TypeAlias, TypeIs, TypeVarTuple, Unpack
|
||||
from operator import attrgetter as attrgetter, itemgetter as itemgetter, methodcaller as methodcaller
|
||||
from typing import Any, AnyStr, Protocol, SupportsAbs, SupportsIndex, TypeVar, overload
|
||||
from typing_extensions import ParamSpec, TypeAlias, TypeIs
|
||||
|
||||
_R = TypeVar("_R")
|
||||
_T = TypeVar("_T")
|
||||
_T_co = TypeVar("_T_co", covariant=True)
|
||||
_T1 = TypeVar("_T1")
|
||||
_T2 = TypeVar("_T2")
|
||||
_K = TypeVar("_K")
|
||||
_V = TypeVar("_V")
|
||||
_P = ParamSpec("_P")
|
||||
_Ts = TypeVarTuple("_Ts")
|
||||
|
||||
# The following protocols return "Any" instead of bool, since the comparison
|
||||
# operators can be overloaded to return an arbitrary object. For example,
|
||||
@@ -92,40 +90,6 @@ def setitem(a: MutableSequence[_T], b: slice, c: Sequence[_T], /) -> None: ...
|
||||
@overload
|
||||
def setitem(a: MutableMapping[_K, _V], b: _K, c: _V, /) -> None: ...
|
||||
def length_hint(obj: object, default: int = 0, /) -> int: ...
|
||||
@final
|
||||
class attrgetter(Generic[_T_co]):
|
||||
@overload
|
||||
def __new__(cls, attr: str, /) -> attrgetter[Any]: ...
|
||||
@overload
|
||||
def __new__(cls, attr: str, attr2: str, /) -> attrgetter[tuple[Any, Any]]: ...
|
||||
@overload
|
||||
def __new__(cls, attr: str, attr2: str, attr3: str, /) -> attrgetter[tuple[Any, Any, Any]]: ...
|
||||
@overload
|
||||
def __new__(cls, attr: str, attr2: str, attr3: str, attr4: str, /) -> attrgetter[tuple[Any, Any, Any, Any]]: ...
|
||||
@overload
|
||||
def __new__(cls, attr: str, /, *attrs: str) -> attrgetter[tuple[Any, ...]]: ...
|
||||
def __call__(self, obj: Any, /) -> _T_co: ...
|
||||
|
||||
@final
|
||||
class itemgetter(Generic[_T_co]):
|
||||
@overload
|
||||
def __new__(cls, item: _T, /) -> itemgetter[_T]: ...
|
||||
@overload
|
||||
def __new__(cls, item1: _T1, item2: _T2, /, *items: Unpack[_Ts]) -> itemgetter[tuple[_T1, _T2, Unpack[_Ts]]]: ...
|
||||
# __key: _KT_contra in SupportsGetItem seems to be causing variance issues, ie:
|
||||
# TypeVar "_KT_contra@SupportsGetItem" is contravariant
|
||||
# "tuple[int, int]" is incompatible with protocol "SupportsIndex"
|
||||
# preventing [_T_co, ...] instead of [Any, ...]
|
||||
#
|
||||
# A suspected mypy issue prevents using [..., _T] instead of [..., Any] here.
|
||||
# https://github.com/python/mypy/issues/14032
|
||||
def __call__(self, obj: SupportsGetItem[Any, Any]) -> Any: ...
|
||||
|
||||
@final
|
||||
class methodcaller:
|
||||
def __init__(self, name: str, /, *args: Any, **kwargs: Any) -> None: ...
|
||||
def __call__(self, obj: Any) -> Any: ...
|
||||
|
||||
def iadd(a: Any, b: Any, /) -> Any: ...
|
||||
def iand(a: Any, b: Any, /) -> Any: ...
|
||||
def iconcat(a: Any, b: Any, /) -> Any: ...
|
||||
|
||||
@@ -1,5 +1,66 @@
|
||||
import sys
|
||||
from _operator import *
|
||||
from _operator import (
|
||||
abs as abs,
|
||||
add as add,
|
||||
and_ as and_,
|
||||
concat as concat,
|
||||
contains as contains,
|
||||
countOf as countOf,
|
||||
delitem as delitem,
|
||||
eq as eq,
|
||||
floordiv as floordiv,
|
||||
ge as ge,
|
||||
getitem as getitem,
|
||||
gt as gt,
|
||||
iadd as iadd,
|
||||
iand as iand,
|
||||
iconcat as iconcat,
|
||||
ifloordiv as ifloordiv,
|
||||
ilshift as ilshift,
|
||||
imatmul as imatmul,
|
||||
imod as imod,
|
||||
imul as imul,
|
||||
index as index,
|
||||
indexOf as indexOf,
|
||||
inv as inv,
|
||||
invert as invert,
|
||||
ior as ior,
|
||||
ipow as ipow,
|
||||
irshift as irshift,
|
||||
is_ as is_,
|
||||
is_not as is_not,
|
||||
isub as isub,
|
||||
itruediv as itruediv,
|
||||
ixor as ixor,
|
||||
le as le,
|
||||
length_hint as length_hint,
|
||||
lshift as lshift,
|
||||
lt as lt,
|
||||
matmul as matmul,
|
||||
mod as mod,
|
||||
mul as mul,
|
||||
ne as ne,
|
||||
neg as neg,
|
||||
not_ as not_,
|
||||
or_ as or_,
|
||||
pos as pos,
|
||||
pow as pow,
|
||||
rshift as rshift,
|
||||
setitem as setitem,
|
||||
sub as sub,
|
||||
truediv as truediv,
|
||||
truth as truth,
|
||||
xor as xor,
|
||||
)
|
||||
from _typeshed import SupportsGetItem
|
||||
from typing import Any, Generic, TypeVar, final, overload
|
||||
from typing_extensions import TypeVarTuple, Unpack
|
||||
|
||||
_T = TypeVar("_T")
|
||||
_T_co = TypeVar("_T_co", covariant=True)
|
||||
_T1 = TypeVar("_T1")
|
||||
_T2 = TypeVar("_T2")
|
||||
_Ts = TypeVarTuple("_Ts")
|
||||
|
||||
__all__ = [
|
||||
"abs",
|
||||
@@ -59,9 +120,13 @@ __all__ = [
|
||||
]
|
||||
|
||||
if sys.version_info >= (3, 11):
|
||||
from _operator import call as call
|
||||
|
||||
__all__ += ["call"]
|
||||
|
||||
if sys.version_info >= (3, 14):
|
||||
from _operator import is_none as is_none, is_not_none as is_not_none
|
||||
|
||||
__all__ += ["is_none", "is_not_none"]
|
||||
|
||||
__lt__ = lt
|
||||
@@ -111,3 +176,40 @@ __itruediv__ = itruediv
|
||||
__ixor__ = ixor
|
||||
if sys.version_info >= (3, 11):
|
||||
__call__ = call
|
||||
|
||||
# At runtime, these classes are implemented in C as part of the _operator module
|
||||
# However, they consider themselves to live in the operator module, so we'll put
|
||||
# them here.
|
||||
@final
|
||||
class attrgetter(Generic[_T_co]):
|
||||
@overload
|
||||
def __new__(cls, attr: str, /) -> attrgetter[Any]: ...
|
||||
@overload
|
||||
def __new__(cls, attr: str, attr2: str, /) -> attrgetter[tuple[Any, Any]]: ...
|
||||
@overload
|
||||
def __new__(cls, attr: str, attr2: str, attr3: str, /) -> attrgetter[tuple[Any, Any, Any]]: ...
|
||||
@overload
|
||||
def __new__(cls, attr: str, attr2: str, attr3: str, attr4: str, /) -> attrgetter[tuple[Any, Any, Any, Any]]: ...
|
||||
@overload
|
||||
def __new__(cls, attr: str, /, *attrs: str) -> attrgetter[tuple[Any, ...]]: ...
|
||||
def __call__(self, obj: Any, /) -> _T_co: ...
|
||||
|
||||
@final
|
||||
class itemgetter(Generic[_T_co]):
|
||||
@overload
|
||||
def __new__(cls, item: _T, /) -> itemgetter[_T]: ...
|
||||
@overload
|
||||
def __new__(cls, item1: _T1, item2: _T2, /, *items: Unpack[_Ts]) -> itemgetter[tuple[_T1, _T2, Unpack[_Ts]]]: ...
|
||||
# __key: _KT_contra in SupportsGetItem seems to be causing variance issues, ie:
|
||||
# TypeVar "_KT_contra@SupportsGetItem" is contravariant
|
||||
# "tuple[int, int]" is incompatible with protocol "SupportsIndex"
|
||||
# preventing [_T_co, ...] instead of [Any, ...]
|
||||
#
|
||||
# A suspected mypy issue prevents using [..., _T] instead of [..., Any] here.
|
||||
# https://github.com/python/mypy/issues/14032
|
||||
def __call__(self, obj: SupportsGetItem[Any, Any]) -> Any: ...
|
||||
|
||||
@final
|
||||
class methodcaller:
|
||||
def __init__(self, name: str, /, *args: Any, **kwargs: Any) -> None: ...
|
||||
def __call__(self, obj: Any) -> Any: ...
|
||||
|
||||
Reference in New Issue
Block a user