mirror of
https://github.com/davidhalter/typeshed.git
synced 2025-12-16 00:37:10 +08:00
Refine stubs for Python 2's decimal module (#545)
* Refine stubs for Python 2's decimal module
The decimal module for Python 2 was relatively incomplete, unlike the
decimal module for Python 3. This commit copies the relevant type
signatures from Python 3's decimal module to Python 2's.
There was a lot of code in both stubs and it wasn't clear to me if it
was safe to merge the two modules together, so I refrained from doing
so.
* Allow comparisions with Decimals and Floats
This commit loosens the types for Decimals to allow comparisons like
`Decimal('3.14') < 4.2`. Previously, you could compare decimals with
only other decimals or ints.
This commit is contained in:
committed by
Guido van Rossum
parent
f29a996501
commit
748428d8a4
@@ -1,17 +1,26 @@
|
||||
# Stubs for decimal (Python 2)
|
||||
#
|
||||
# NOTE: This dynamically typed stub was automatically generated by stubgen.
|
||||
|
||||
from typing import Any, SupportsAbs, SupportsFloat, SupportsInt
|
||||
from typing import (
|
||||
Any, Dict, NamedTuple, Optional, Sequence, Tuple, Union,
|
||||
SupportsAbs, SupportsFloat, SupportsInt,
|
||||
)
|
||||
|
||||
ROUND_DOWN = ... # type: Any
|
||||
ROUND_HALF_UP = ... # type: Any
|
||||
ROUND_HALF_EVEN = ... # type: Any
|
||||
ROUND_CEILING = ... # type: Any
|
||||
ROUND_FLOOR = ... # type: Any
|
||||
ROUND_UP = ... # type: Any
|
||||
ROUND_HALF_DOWN = ... # type: Any
|
||||
ROUND_05UP = ... # type: Any
|
||||
_Decimal = Union[Decimal, int]
|
||||
_ComparableNum = Union[Decimal, int, float]
|
||||
|
||||
DecimalTuple = NamedTuple('DecimalTuple',
|
||||
[('sign', int),
|
||||
('digits', Sequence[int]), # TODO: Use Tuple[int, ...]
|
||||
('exponent', int)])
|
||||
|
||||
ROUND_DOWN = ... # type: str
|
||||
ROUND_HALF_UP = ... # type: str
|
||||
ROUND_HALF_EVEN = ... # type: str
|
||||
ROUND_CEILING = ... # type: str
|
||||
ROUND_FLOOR = ... # type: str
|
||||
ROUND_UP = ... # type: str
|
||||
ROUND_HALF_DOWN = ... # type: str
|
||||
ROUND_05UP = ... # type: str
|
||||
|
||||
class DecimalException(ArithmeticError):
|
||||
def handle(self, context, *args): ...
|
||||
@@ -40,120 +49,125 @@ class Overflow(Inexact, Rounded): ...
|
||||
|
||||
class Underflow(Inexact, Rounded, Subnormal): ...
|
||||
|
||||
def setcontext(context): ...
|
||||
def getcontext(): ...
|
||||
def localcontext(ctx=None): ...
|
||||
def setcontext(context: Context): ...
|
||||
def getcontext() -> Context: ...
|
||||
def localcontext(ctx: Optional[Context] = None) -> _ContextManager: ...
|
||||
|
||||
class Decimal(SupportsAbs[Decimal], SupportsFloat, SupportsInt):
|
||||
def __new__(cls, value=..., context=None): ...
|
||||
def __init__(cls, value: Union[_Decimal, float, str,
|
||||
Tuple[int, Sequence[int], int]] = ...,
|
||||
context: Context = ...) -> None: ...
|
||||
@classmethod
|
||||
def from_float(cls, f): ...
|
||||
def __nonzero__(self): ...
|
||||
def __eq__(self, other, context=None): ...
|
||||
def __ne__(self, other, context=None): ...
|
||||
def __lt__(self, other, context=None): ...
|
||||
def __le__(self, other, context=None): ...
|
||||
def __gt__(self, other, context=None): ...
|
||||
def __ge__(self, other, context=None): ...
|
||||
def compare(self, other, context=None): ...
|
||||
def __hash__(self): ...
|
||||
def as_tuple(self): ...
|
||||
def to_eng_string(self, context=None): ...
|
||||
def __neg__(self, context=None): ...
|
||||
def __pos__(self, context=None): ...
|
||||
def __abs__(self, round=True, context=None): ...
|
||||
def __add__(self, other, context=None): ...
|
||||
def __radd__(self, other, context=None): ...
|
||||
def __sub__(self, other, context=None): ...
|
||||
def __rsub__(self, other, context=None): ...
|
||||
def __mul__(self, other, context=None): ...
|
||||
def __rmul__(self, other, context=None): ...
|
||||
def __truediv__(self, other, context=None): ...
|
||||
def __rtruediv__(self, other, context=None): ...
|
||||
def __div__(self, other, context=None): ...
|
||||
def __rdiv__(self, other, context=None): ...
|
||||
def __divmod__(self, other, context=None): ...
|
||||
def __rdivmod__(self, other, context=None): ...
|
||||
def __mod__(self, other, context=None): ...
|
||||
def __rmod__(self, other, context=None): ...
|
||||
def remainder_near(self, other, context=None): ...
|
||||
def __floordiv__(self, other, context=None): ...
|
||||
def __rfloordiv__(self, other, context=None): ...
|
||||
def __float__(self): ...
|
||||
def __int__(self): ...
|
||||
def __trunc__(self): ...
|
||||
real = ... # type: property
|
||||
imag = ... # type: property
|
||||
def conjugate(self): ...
|
||||
def __complex__(self): ...
|
||||
def __long__(self): ...
|
||||
def fma(self, other, third, context=None): ...
|
||||
def __pow__(self, other, modulo=None, context=None): ...
|
||||
def __rpow__(self, other, context=None): ...
|
||||
def normalize(self, context=None): ...
|
||||
def quantize(self, exp, rounding=None, context=None, watchexp=True): ...
|
||||
def same_quantum(self, other): ...
|
||||
def to_integral_exact(self, rounding=None, context=None): ...
|
||||
def to_integral_value(self, rounding=None, context=None): ...
|
||||
def to_integral(self, rounding=None, context=None): ...
|
||||
def sqrt(self, context=None): ...
|
||||
def max(self, other, context=None): ...
|
||||
def min(self, other, context=None): ...
|
||||
def adjusted(self): ...
|
||||
def canonical(self, context=None): ...
|
||||
def compare_signal(self, other, context=None): ...
|
||||
def compare_total(self, other): ...
|
||||
def compare_total_mag(self, other): ...
|
||||
def copy_abs(self): ...
|
||||
def copy_negate(self): ...
|
||||
def copy_sign(self, other): ...
|
||||
def exp(self, context=None): ...
|
||||
def is_canonical(self): ...
|
||||
def is_finite(self): ...
|
||||
def is_infinite(self): ...
|
||||
def is_nan(self): ...
|
||||
def is_normal(self, context=None): ...
|
||||
def is_qnan(self): ...
|
||||
def is_signed(self): ...
|
||||
def is_snan(self): ...
|
||||
def is_subnormal(self, context=None): ...
|
||||
def is_zero(self): ...
|
||||
def ln(self, context=None): ...
|
||||
def log10(self, context=None): ...
|
||||
def logb(self, context=None): ...
|
||||
def logical_and(self, other, context=None): ...
|
||||
def logical_invert(self, context=None): ...
|
||||
def logical_or(self, other, context=None): ...
|
||||
def logical_xor(self, other, context=None): ...
|
||||
def max_mag(self, other, context=None): ...
|
||||
def min_mag(self, other, context=None): ...
|
||||
def next_minus(self, context=None): ...
|
||||
def next_plus(self, context=None): ...
|
||||
def next_toward(self, other, context=None): ...
|
||||
def number_class(self, context=None): ...
|
||||
def radix(self): ...
|
||||
def rotate(self, other, context=None): ...
|
||||
def scaleb(self, other, context=None): ...
|
||||
def shift(self, other, context=None): ...
|
||||
def from_float(cls, f: float) -> Decimal: ...
|
||||
def __nonzero__(self) -> bool: ...
|
||||
def __eq__(self, other: object) -> bool: ...
|
||||
def __ne__(self, other: object) -> bool: ...
|
||||
def __lt__(self, other: _ComparableNum) -> bool: ...
|
||||
def __le__(self, other: _ComparableNum) -> bool: ...
|
||||
def __gt__(self, other: _ComparableNum) -> bool: ...
|
||||
def __ge__(self, other: _ComparableNum) -> bool: ...
|
||||
def compare(self, other: _Decimal) -> Decimal: ...
|
||||
def __hash__(self) -> int: ...
|
||||
def as_tuple(self) -> DecimalTuple: ...
|
||||
def to_eng_string(self, context: Context = ...) -> str: ...
|
||||
def __neg__(self) -> Decimal: ...
|
||||
def __pos__(self) -> Decimal: ...
|
||||
def __abs__(self, round: bool = True) -> Decimal: ...
|
||||
def __add__(self, other: _Decimal) -> Decimal: ...
|
||||
def __radd__(self, other: int) -> Decimal: ...
|
||||
def __sub__(self, other: _Decimal) -> Decimal: ...
|
||||
def __rsub__(self, other: int) -> Decimal: ...
|
||||
def __mul__(self, other: _Decimal) -> Decimal: ...
|
||||
def __rmul__(self, other: int) -> Decimal: ...
|
||||
def __truediv__(self, other: _Decimal) -> Decimal: ...
|
||||
def __rtruediv__(self, other: int) -> Decimal: ...
|
||||
def __div__(self, other: _Decimal) -> Decimal: ...
|
||||
def __rdiv__(self, other: int) -> Decimal: ...
|
||||
def __divmod__(self, other: _Decimal) -> Tuple[Decimal, Decimal]: ...
|
||||
def __rdivmod__(self, other: int) -> Tuple[Decimal, Decimal]: ...
|
||||
def __mod__(self, other: _Decimal) -> Decimal: ...
|
||||
def __rmod__(self, other: int) -> Decimal: ...
|
||||
def remainder_near(self, other: _Decimal, context: Context = ...) -> Decimal: ...
|
||||
def __floordiv__(self, other: _Decimal) -> Decimal: ...
|
||||
def __rfloordiv__(self, other: int) -> Decimal: ...
|
||||
def __float__(self) -> float: ...
|
||||
def __int__(self) -> int: ...
|
||||
def __trunc__(self) -> int: ...
|
||||
@property
|
||||
def imag(self) -> Decimal: ...
|
||||
@property
|
||||
def real(self) -> Decimal: ...
|
||||
def conjugate(self) -> Decimal: ...
|
||||
def __complex__(self) -> complex: ...
|
||||
def __long__(self) -> long: ...
|
||||
def fma(self, other: _Decimal, third: _Decimal, context: Context = ...) -> Decimal: ...
|
||||
def __pow__(self, other: _Decimal) -> Decimal: ...
|
||||
def __rpow__(self, other: int) -> Decimal: ...
|
||||
def normalize(self, context: Context = ...) -> Decimal: ...
|
||||
def quantize(self, exp: _Decimal, rounding: str = ...,
|
||||
context: Context = ...) -> Decimal: ...
|
||||
def same_quantum(self, other: Decimal) -> bool: ...
|
||||
def to_integral(self, rounding: str = ..., context: Context = ...) -> Decimal: ...
|
||||
def to_integral_exact(self, rounding: str = ..., context: Context = ...) -> Decimal: ...
|
||||
def to_integral_value(self, rounding: str = ..., context: Context = ...) -> Decimal: ...
|
||||
def sqrt(self, context: Context = ...) -> Decimal: ...
|
||||
def max(self, other: _Decimal, context: Context = ...) -> Decimal: ...
|
||||
def min(self, other: _Decimal, context: Context = ...) -> Decimal: ...
|
||||
def adjusted(self) -> int: ...
|
||||
def canonical(self, context: Context = ...) -> Decimal: ...
|
||||
def compare_signal(self, other: _Decimal, context: Context = ...) -> Decimal: ...
|
||||
def compare_total(self, other: _Decimal) -> Decimal: ...
|
||||
def compare_total_mag(self, other: _Decimal) -> Decimal: ...
|
||||
def copy_abs(self) -> Decimal: ...
|
||||
def copy_negate(self) -> Decimal: ...
|
||||
def copy_sign(self, other: _Decimal) -> Decimal: ...
|
||||
def exp(self, context: Context = ...) -> Decimal: ...
|
||||
def is_canonical(self) -> bool: ...
|
||||
def is_finite(self) -> bool: ...
|
||||
def is_infinite(self) -> bool: ...
|
||||
def is_nan(self) -> bool: ...
|
||||
def is_normal(self, context: Context = ...) -> bool: ...
|
||||
def is_qnan(self) -> bool: ...
|
||||
def is_signed(self) -> bool: ...
|
||||
def is_snan(self) -> bool: ...
|
||||
def is_subnormal(self, context: Context = ...) -> bool: ...
|
||||
def is_zero(self) -> bool: ...
|
||||
def ln(self, context: Context = ...) -> Decimal: ...
|
||||
def log10(self, context: Context = ...) -> Decimal: ...
|
||||
def logb(self, context: Context = ...) -> Decimal: ...
|
||||
def logical_and(self, other: _Decimal, context: Context = ...) -> Decimal: ...
|
||||
def logical_invert(self, context: Context = ...) -> Decimal: ...
|
||||
def logical_or(self, other: _Decimal, context: Context = ...) -> Decimal: ...
|
||||
def logical_xor(self, other: _Decimal, context: Context = ...) -> Decimal: ...
|
||||
def max_mag(self, other: _Decimal, context: Context = ...) -> Decimal: ...
|
||||
def min_mag(self, other: _Decimal, context: Context = ...) -> Decimal: ...
|
||||
def next_minus(self, context: Context = ...) -> Decimal: ...
|
||||
def next_plus(self, context: Context = ...) -> Decimal: ...
|
||||
def next_toward(self, other: _Decimal, context: Context = ...) -> Decimal: ...
|
||||
def number_class(self, context: Context = ...) -> str: ...
|
||||
def radix(self) -> Decimal: ...
|
||||
def rotate(self, other: _Decimal, context: Context = ...) -> Decimal: ...
|
||||
def scaleb(self, other: _Decimal, context: Context = ...) -> Decimal: ...
|
||||
def shift(self, other: _Decimal, context: Context = ...) -> Decimal: ...
|
||||
def __reduce__(self): ...
|
||||
def __copy__(self): ...
|
||||
def __deepcopy__(self, memo): ...
|
||||
def __format__(self, specifier, context=None, _localeconv=None): ...
|
||||
def __format__(self, specifier, context=None, _localeconv=None) -> str: ...
|
||||
|
||||
class _ContextManager:
|
||||
new_context = ... # type: Any
|
||||
def __init__(self, new_context): ...
|
||||
saved_context = ... # type: Any
|
||||
new_context = ... # type: Context
|
||||
saved_context = ... # type: Context
|
||||
def __init__(self, new_context: Context) -> None: ...
|
||||
def __enter__(self): ...
|
||||
def __exit__(self, t, v, tb): ...
|
||||
|
||||
class Context:
|
||||
prec = ... # type: Any
|
||||
rounding = ... # type: Any
|
||||
Emin = ... # type: Any
|
||||
Emax = ... # type: Any
|
||||
capitals = ... # type: Any
|
||||
traps = ... # type: Any
|
||||
prec = ... # type: int
|
||||
rounding = ... # type: str
|
||||
Emin = ... # type: int
|
||||
Emax = ... # type: int
|
||||
capitals = ... # type: int
|
||||
traps = ... # type: Dict[type, bool]
|
||||
flags = ... # type: Any
|
||||
def __init__(self, prec=None, rounding=None, traps=None, flags=None, Emin=None, Emax=None, capitals=None, _clamp=0, _ignored_flags=None): ...
|
||||
def clear_flags(self): ...
|
||||
@@ -226,6 +240,6 @@ class Context:
|
||||
def to_integral_value(self, a): ...
|
||||
def to_integral(self, a): ...
|
||||
|
||||
DefaultContext = ... # type: Any
|
||||
BasicContext = ... # type: Any
|
||||
ExtendedContext = ... # type: Any
|
||||
DefaultContext = ... # type: Context
|
||||
BasicContext = ... # type: Context
|
||||
ExtendedContext = ... # type: Context
|
||||
|
||||
@@ -6,6 +6,7 @@ from typing import (
|
||||
)
|
||||
|
||||
_Decimal = Union[Decimal, int]
|
||||
_ComparableNum = Union[Decimal, int, float]
|
||||
|
||||
BasicContext = ... # type: Context
|
||||
DefaultContext = ... # type: Context
|
||||
@@ -201,12 +202,12 @@ class Decimal(SupportsInt, SupportsFloat, SupportsAbs[Decimal], SupportsRound[in
|
||||
def __floor__(self) -> int: ...
|
||||
def __floordiv__(self, other: _Decimal) -> Decimal: ...
|
||||
def __format__(self, specifier, context=..., _localeconv=...) -> str: ...
|
||||
def __ge__(self, other: _Decimal) -> bool: ...
|
||||
def __gt__(self, other: _Decimal) -> bool: ...
|
||||
def __ge__(self, other: _ComparableNum) -> bool: ...
|
||||
def __gt__(self, other: _ComparableNum) -> bool: ...
|
||||
def __hash__(self) -> int: ...
|
||||
def __int__(self) -> int: ...
|
||||
def __le__(self, other: _Decimal) -> bool: ...
|
||||
def __lt__(self, other: _Decimal) -> bool: ...
|
||||
def __le__(self, other: _ComparableNum) -> bool: ...
|
||||
def __lt__(self, other: _ComparableNum) -> bool: ...
|
||||
def __mod__(self, other: _Decimal) -> Decimal: ...
|
||||
def __mul__(self, other: _Decimal) -> Decimal: ...
|
||||
def __ne__(self, other: object) -> bool: ...
|
||||
|
||||
Reference in New Issue
Block a user