Format: application/octet-stream
⬇ Download File (17.4 KB)
   1  import numbers
   2  import sys
   3  from types import TracebackType
   4  from typing import Any, Container, Dict, List, NamedTuple, Optional, Sequence, Text, Tuple, Type, TypeVar, Union, overload
   5  
   6  _Decimal = Union[Decimal, int]
   7  _DecimalNew = Union[Decimal, float, Text, Tuple[int, Sequence[int], int]]
   8  if sys.version_info >= (3,):
   9      _ComparableNum = Union[Decimal, float, numbers.Rational]
  10  else:
  11      _ComparableNum = Union[Decimal, float]
  12  _DecimalT = TypeVar("_DecimalT", bound=Decimal)
  13  
  14  class DecimalTuple(NamedTuple):
  15      sign: int
  16      digits: Tuple[int, ...]
  17      exponent: int
  18  
  19  ROUND_DOWN: str
  20  ROUND_HALF_UP: str
  21  ROUND_HALF_EVEN: str
  22  ROUND_CEILING: str
  23  ROUND_FLOOR: str
  24  ROUND_UP: str
  25  ROUND_HALF_DOWN: str
  26  ROUND_05UP: str
  27  
  28  if sys.version_info >= (3,):
  29      HAVE_THREADS: bool
  30      MAX_EMAX: int
  31      MAX_PREC: int
  32      MIN_EMIN: int
  33      MIN_ETINY: int
  34  
  35  class DecimalException(ArithmeticError):
  36      if sys.version_info < (3,):
  37          def handle(self, context: Context, *args: Any) -> Optional[Decimal]: ...
  38  
  39  class Clamped(DecimalException): ...
  40  class InvalidOperation(DecimalException): ...
  41  class ConversionSyntax(InvalidOperation): ...
  42  class DivisionByZero(DecimalException, ZeroDivisionError): ...
  43  class DivisionImpossible(InvalidOperation): ...
  44  class DivisionUndefined(InvalidOperation, ZeroDivisionError): ...
  45  class Inexact(DecimalException): ...
  46  class InvalidContext(InvalidOperation): ...
  47  class Rounded(DecimalException): ...
  48  class Subnormal(DecimalException): ...
  49  class Overflow(Inexact, Rounded): ...
  50  class Underflow(Inexact, Rounded, Subnormal): ...
  51  
  52  if sys.version_info >= (3,):
  53      class FloatOperation(DecimalException, TypeError): ...
  54  
  55  def setcontext(__context: Context) -> None: ...
  56  def getcontext() -> Context: ...
  57  def localcontext(ctx: Optional[Context] = ...) -> _ContextManager: ...
  58  
  59  class Decimal(object):
  60      def __new__(cls: Type[_DecimalT], value: _DecimalNew = ..., context: Optional[Context] = ...) -> _DecimalT: ...
  61      @classmethod
  62      def from_float(cls, __f: float) -> Decimal: ...
  63      if sys.version_info >= (3,):
  64          def __bool__(self) -> bool: ...
  65      else:
  66          def __nonzero__(self) -> bool: ...
  67          def __div__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
  68          def __rdiv__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
  69          def __ne__(self, other: object, context: Optional[Context] = ...) -> bool: ...
  70      def compare(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
  71      def __hash__(self) -> int: ...
  72      def as_tuple(self) -> DecimalTuple: ...
  73      if sys.version_info >= (3, 6):
  74          def as_integer_ratio(self) -> Tuple[int, int]: ...
  75      def to_eng_string(self, context: Optional[Context] = ...) -> str: ...
  76      if sys.version_info >= (3,):
  77          def __abs__(self) -> Decimal: ...
  78          def __add__(self, other: _Decimal) -> Decimal: ...
  79          def __divmod__(self, other: _Decimal) -> Tuple[Decimal, Decimal]: ...
  80          def __eq__(self, other: object) -> bool: ...
  81          def __floordiv__(self, other: _Decimal) -> Decimal: ...
  82          def __ge__(self, other: _ComparableNum) -> bool: ...
  83          def __gt__(self, other: _ComparableNum) -> bool: ...
  84          def __le__(self, other: _ComparableNum) -> bool: ...
  85          def __lt__(self, other: _ComparableNum) -> bool: ...
  86          def __mod__(self, other: _Decimal) -> Decimal: ...
  87          def __mul__(self, other: _Decimal) -> Decimal: ...
  88          def __neg__(self) -> Decimal: ...
  89          def __pos__(self) -> Decimal: ...
  90          def __pow__(self, other: _Decimal, modulo: Optional[_Decimal] = ...) -> Decimal: ...
  91          def __radd__(self, other: _Decimal) -> Decimal: ...
  92          def __rdivmod__(self, other: _Decimal) -> Tuple[Decimal, Decimal]: ...
  93          def __rfloordiv__(self, other: _Decimal) -> Decimal: ...
  94          def __rmod__(self, other: _Decimal) -> Decimal: ...
  95          def __rmul__(self, other: _Decimal) -> Decimal: ...
  96          def __rsub__(self, other: _Decimal) -> Decimal: ...
  97          def __rtruediv__(self, other: _Decimal) -> Decimal: ...
  98          def __str__(self) -> str: ...
  99          def __sub__(self, other: _Decimal) -> Decimal: ...
 100          def __truediv__(self, other: _Decimal) -> Decimal: ...
 101      else:
 102          def __abs__(self, round: bool = ..., context: Optional[Context] = ...) -> Decimal: ...
 103          def __add__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 104          def __divmod__(self, other: _Decimal, context: Optional[Context] = ...) -> Tuple[Decimal, Decimal]: ...
 105          def __eq__(self, other: object, context: Optional[Context] = ...) -> bool: ...
 106          def __floordiv__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 107          def __ge__(self, other: _ComparableNum, context: Optional[Context] = ...) -> bool: ...
 108          def __gt__(self, other: _ComparableNum, context: Optional[Context] = ...) -> bool: ...
 109          def __le__(self, other: _ComparableNum, context: Optional[Context] = ...) -> bool: ...
 110          def __lt__(self, other: _ComparableNum, context: Optional[Context] = ...) -> bool: ...
 111          def __mod__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 112          def __mul__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 113          def __neg__(self, context: Optional[Context] = ...) -> Decimal: ...
 114          def __pos__(self, context: Optional[Context] = ...) -> Decimal: ...
 115          def __pow__(self, other: _Decimal, modulo: Optional[_Decimal] = ..., context: Optional[Context] = ...) -> Decimal: ...
 116          def __radd__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 117          def __rdivmod__(self, other: _Decimal, context: Optional[Context] = ...) -> Tuple[Decimal, Decimal]: ...
 118          def __rfloordiv__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 119          def __rmod__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 120          def __rmul__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 121          def __rsub__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 122          def __rtruediv__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 123          def __str__(self, eng: bool = ..., context: Optional[Context] = ...) -> str: ...
 124          def __sub__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 125          def __truediv__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 126      def remainder_near(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 127      def __float__(self) -> float: ...
 128      def __int__(self) -> int: ...
 129      def __trunc__(self) -> int: ...
 130      @property
 131      def real(self) -> Decimal: ...
 132      @property
 133      def imag(self) -> Decimal: ...
 134      def conjugate(self) -> Decimal: ...
 135      def __complex__(self) -> complex: ...
 136      if sys.version_info >= (3,):
 137          @overload
 138          def __round__(self) -> int: ...
 139          @overload
 140          def __round__(self, ndigits: int) -> Decimal: ...
 141          def __floor__(self) -> int: ...
 142          def __ceil__(self) -> int: ...
 143      else:
 144          def __long__(self) -> long: ...
 145      def fma(self, other: _Decimal, third: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 146      def __rpow__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 147      def normalize(self, context: Optional[Context] = ...) -> Decimal: ...
 148      if sys.version_info >= (3,):
 149          def quantize(self, exp: _Decimal, rounding: Optional[str] = ..., context: Optional[Context] = ...) -> Decimal: ...
 150          def same_quantum(self, other: _Decimal, context: Optional[Context] = ...) -> bool: ...
 151      else:
 152          def quantize(
 153              self, exp: _Decimal, rounding: Optional[str] = ..., context: Optional[Context] = ..., watchexp: bool = ...
 154          ) -> Decimal: ...
 155          def same_quantum(self, other: _Decimal) -> bool: ...
 156      def to_integral_exact(self, rounding: Optional[str] = ..., context: Optional[Context] = ...) -> Decimal: ...
 157      def to_integral_value(self, rounding: Optional[str] = ..., context: Optional[Context] = ...) -> Decimal: ...
 158      def to_integral(self, rounding: Optional[str] = ..., context: Optional[Context] = ...) -> Decimal: ...
 159      def sqrt(self, context: Optional[Context] = ...) -> Decimal: ...
 160      def max(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 161      def min(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 162      def adjusted(self) -> int: ...
 163      if sys.version_info >= (3,):
 164          def canonical(self) -> Decimal: ...
 165      else:
 166          def canonical(self, context: Optional[Context] = ...) -> Decimal: ...
 167      def compare_signal(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 168      if sys.version_info >= (3,):
 169          def compare_total(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 170          def compare_total_mag(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 171      else:
 172          def compare_total(self, other: _Decimal) -> Decimal: ...
 173          def compare_total_mag(self, other: _Decimal) -> Decimal: ...
 174      def copy_abs(self) -> Decimal: ...
 175      def copy_negate(self) -> Decimal: ...
 176      if sys.version_info >= (3,):
 177          def copy_sign(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 178      else:
 179          def copy_sign(self, other: _Decimal) -> Decimal: ...
 180      def exp(self, context: Optional[Context] = ...) -> Decimal: ...
 181      def is_canonical(self) -> bool: ...
 182      def is_finite(self) -> bool: ...
 183      def is_infinite(self) -> bool: ...
 184      def is_nan(self) -> bool: ...
 185      def is_normal(self, context: Optional[Context] = ...) -> bool: ...
 186      def is_qnan(self) -> bool: ...
 187      def is_signed(self) -> bool: ...
 188      def is_snan(self) -> bool: ...
 189      def is_subnormal(self, context: Optional[Context] = ...) -> bool: ...
 190      def is_zero(self) -> bool: ...
 191      def ln(self, context: Optional[Context] = ...) -> Decimal: ...
 192      def log10(self, context: Optional[Context] = ...) -> Decimal: ...
 193      def logb(self, context: Optional[Context] = ...) -> Decimal: ...
 194      def logical_and(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 195      def logical_invert(self, context: Optional[Context] = ...) -> Decimal: ...
 196      def logical_or(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 197      def logical_xor(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 198      def max_mag(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 199      def min_mag(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 200      def next_minus(self, context: Optional[Context] = ...) -> Decimal: ...
 201      def next_plus(self, context: Optional[Context] = ...) -> Decimal: ...
 202      def next_toward(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 203      def number_class(self, context: Optional[Context] = ...) -> str: ...
 204      def radix(self) -> Decimal: ...
 205      def rotate(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 206      def scaleb(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 207      def shift(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ...
 208      def __reduce__(self) -> Tuple[Type[Decimal], Tuple[str]]: ...
 209      def __copy__(self) -> Decimal: ...
 210      def __deepcopy__(self, memo: Any) -> Decimal: ...
 211      def __format__(self, specifier: str, context: Optional[Context] = ...) -> str: ...
 212  
 213  class _ContextManager(object):
 214      new_context: Context
 215      saved_context: Context
 216      def __init__(self, new_context: Context) -> None: ...
 217      def __enter__(self) -> Context: ...
 218      def __exit__(self, t: Optional[Type[BaseException]], v: Optional[BaseException], tb: Optional[TracebackType]) -> None: ...
 219  
 220  _TrapType = Type[DecimalException]
 221  
 222  class Context(object):
 223      prec: int
 224      rounding: str
 225      Emin: int
 226      Emax: int
 227      capitals: int
 228      if sys.version_info >= (3,):
 229          clamp: int
 230      else:
 231          _clamp: int
 232      traps: Dict[_TrapType, bool]
 233      flags: Dict[_TrapType, bool]
 234      if sys.version_info >= (3,):
 235          def __init__(
 236              self,
 237              prec: Optional[int] = ...,
 238              rounding: Optional[str] = ...,
 239              Emin: Optional[int] = ...,
 240              Emax: Optional[int] = ...,
 241              capitals: Optional[int] = ...,
 242              clamp: Optional[int] = ...,
 243              flags: Union[None, Dict[_TrapType, bool], Container[_TrapType]] = ...,
 244              traps: Union[None, Dict[_TrapType, bool], Container[_TrapType]] = ...,
 245              _ignored_flags: Optional[List[_TrapType]] = ...,
 246          ) -> None: ...
 247      else:
 248          def __init__(
 249              self,
 250              prec: Optional[int] = ...,
 251              rounding: Optional[str] = ...,
 252              traps: Union[None, Dict[_TrapType, bool], Container[_TrapType]] = ...,
 253              flags: Union[None, Dict[_TrapType, bool], Container[_TrapType]] = ...,
 254              Emin: Optional[int] = ...,
 255              Emax: Optional[int] = ...,
 256              capitals: Optional[int] = ...,
 257              _clamp: Optional[int] = ...,
 258              _ignored_flags: Optional[List[_TrapType]] = ...,
 259          ) -> None: ...
 260      if sys.version_info >= (3,):
 261          # __setattr__() only allows to set a specific set of attributes,
 262          # already defined above.
 263          def __delattr__(self, name: str) -> None: ...
 264          def __reduce__(self) -> Tuple[Type[Context], Tuple[Any, ...]]: ...
 265      def clear_flags(self) -> None: ...
 266      if sys.version_info >= (3,):
 267          def clear_traps(self) -> None: ...
 268      def copy(self) -> Context: ...
 269      def __copy__(self) -> Context: ...
 270      __hash__: Any = ...
 271      def Etiny(self) -> int: ...
 272      def Etop(self) -> int: ...
 273      def create_decimal(self, __num: _DecimalNew = ...) -> Decimal: ...
 274      def create_decimal_from_float(self, __f: float) -> Decimal: ...
 275      def abs(self, __x: _Decimal) -> Decimal: ...
 276      def add(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 277      def canonical(self, __x: Decimal) -> Decimal: ...
 278      def compare(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 279      def compare_signal(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 280      def compare_total(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 281      def compare_total_mag(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 282      def copy_abs(self, __x: _Decimal) -> Decimal: ...
 283      def copy_decimal(self, __x: _Decimal) -> Decimal: ...
 284      def copy_negate(self, __x: _Decimal) -> Decimal: ...
 285      def copy_sign(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 286      def divide(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 287      def divide_int(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 288      def divmod(self, __x: _Decimal, __y: _Decimal) -> Tuple[Decimal, Decimal]: ...
 289      def exp(self, __x: _Decimal) -> Decimal: ...
 290      def fma(self, __x: _Decimal, __y: _Decimal, __z: _Decimal) -> Decimal: ...
 291      def is_canonical(self, __x: _Decimal) -> bool: ...
 292      def is_finite(self, __x: _Decimal) -> bool: ...
 293      def is_infinite(self, __x: _Decimal) -> bool: ...
 294      def is_nan(self, __x: _Decimal) -> bool: ...
 295      def is_normal(self, __x: _Decimal) -> bool: ...
 296      def is_qnan(self, __x: _Decimal) -> bool: ...
 297      def is_signed(self, __x: _Decimal) -> bool: ...
 298      def is_snan(self, __x: _Decimal) -> bool: ...
 299      def is_subnormal(self, __x: _Decimal) -> bool: ...
 300      def is_zero(self, __x: _Decimal) -> bool: ...
 301      def ln(self, __x: _Decimal) -> Decimal: ...
 302      def log10(self, __x: _Decimal) -> Decimal: ...
 303      def logb(self, __x: _Decimal) -> Decimal: ...
 304      def logical_and(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 305      def logical_invert(self, __x: _Decimal) -> Decimal: ...
 306      def logical_or(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 307      def logical_xor(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 308      def max(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 309      def max_mag(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 310      def min(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 311      def min_mag(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 312      def minus(self, __x: _Decimal) -> Decimal: ...
 313      def multiply(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 314      def next_minus(self, __x: _Decimal) -> Decimal: ...
 315      def next_plus(self, __x: _Decimal) -> Decimal: ...
 316      def next_toward(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 317      def normalize(self, __x: _Decimal) -> Decimal: ...
 318      def number_class(self, __x: _Decimal) -> str: ...
 319      def plus(self, __x: _Decimal) -> Decimal: ...
 320      def power(self, a: _Decimal, b: _Decimal, modulo: Optional[_Decimal] = ...) -> Decimal: ...
 321      def quantize(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 322      def radix(self) -> Decimal: ...
 323      def remainder(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 324      def remainder_near(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 325      def rotate(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 326      def same_quantum(self, __x: _Decimal, __y: _Decimal) -> bool: ...
 327      def scaleb(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 328      def shift(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 329      def sqrt(self, __x: _Decimal) -> Decimal: ...
 330      def subtract(self, __x: _Decimal, __y: _Decimal) -> Decimal: ...
 331      def to_eng_string(self, __x: _Decimal) -> str: ...
 332      def to_sci_string(self, __x: _Decimal) -> str: ...
 333      def to_integral_exact(self, __x: _Decimal) -> Decimal: ...
 334      def to_integral_value(self, __x: _Decimal) -> Decimal: ...
 335      def to_integral(self, __x: _Decimal) -> Decimal: ...
 336  
 337  DefaultContext: Context
 338  BasicContext: Context
 339  ExtendedContext: Context
 340