WIP: use assign expr on if by vstinner · Pull Request #8116 · python/cpython
Expand Up
@@ -886,35 +886,31 @@ def __lt__(self, other, context=None):
self, other = _convert_for_comparison(self, other)
if other is NotImplemented:
return other
ans = self._compare_check_nans(other, context)
if ans:
if self._compare_check_nans(other, context):
return False
return self._cmp(other) < 0
def __le__(self, other, context=None): self, other = _convert_for_comparison(self, other) if other is NotImplemented: return other ans = self._compare_check_nans(other, context) if ans: if self._compare_check_nans(other, context): return False return self._cmp(other) <= 0
def __gt__(self, other, context=None): self, other = _convert_for_comparison(self, other) if other is NotImplemented: return other ans = self._compare_check_nans(other, context) if ans: if self._compare_check_nans(other, context): return False return self._cmp(other) > 0
def __ge__(self, other, context=None): self, other = _convert_for_comparison(self, other) if other is NotImplemented: return other ans = self._compare_check_nans(other, context) if ans: if self._compare_check_nans(other, context): return False return self._cmp(other) >= 0
Expand All @@ -930,8 +926,7 @@ def compare(self, other, context=None):
# Compare(NaN, NaN) = NaN if (self._is_special or other and other._is_special): ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
return Decimal(self._cmp(other)) Expand Down Expand Up @@ -1090,10 +1085,8 @@ def __neg__(self, context=None):
Rounds, if it has reason. """ if self._is_special: ans = self._check_nans(context=context) if ans: return ans if self._is_special and (ans := self._check_nans(context=context)): return ans
if context is None: context = getcontext() Expand All @@ -1112,10 +1105,8 @@ def __pos__(self, context=None):
Rounds the number (if more than precision digits) """ if self._is_special: ans = self._check_nans(context=context) if ans: return ans if self._is_special and (ans := self._check_nans(context=context)): return ans
if context is None: context = getcontext() Expand All @@ -1138,10 +1129,8 @@ def __abs__(self, round=True, context=None): if not round: return self.copy_abs()
if self._is_special: ans = self._check_nans(context=context) if ans: return ans if self._is_special and (ans := self._check_nans(context=context)): return ans
if self._sign: ans = self.__neg__(context=context) Expand All @@ -1163,8 +1152,7 @@ def __add__(self, other, context=None): context = getcontext()
if self._is_special or other._is_special: ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
if self._isinfinity(): Expand Down Expand Up @@ -1244,10 +1232,9 @@ def __sub__(self, other, context=None): if other is NotImplemented: return other
if self._is_special or other._is_special: ans = self._check_nans(other, context=context) if ans: return ans if (self._is_special or other._is_special and (ans := self._check_nans(other, context=context))): return ans
# self - other is computed as self + other.copy_negate() return self.__add__(other.copy_negate(), context=context) Expand Down Expand Up @@ -1275,8 +1262,7 @@ def __mul__(self, other, context=None): resultsign = self._sign ^ other._sign
if self._is_special or other._is_special: ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
if self._isinfinity(): Expand Down Expand Up @@ -1329,8 +1315,7 @@ def __truediv__(self, other, context=None): sign = self._sign ^ other._sign
if self._is_special or other._is_special: ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
if self._isinfinity() and other._isinfinity(): Expand Down Expand Up @@ -1427,8 +1412,7 @@ def __divmod__(self, other, context=None): if context is None: context = getcontext()
ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return (ans, ans)
sign = self._sign ^ other._sign Expand Down Expand Up @@ -1470,8 +1454,7 @@ def __mod__(self, other, context=None): if context is None: context = getcontext()
ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
if self._isinfinity(): Expand Down Expand Up @@ -1502,8 +1485,7 @@ def remainder_near(self, other, context=None):
other = _convert_other(other, raiseit=True)
ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
# self == +/-infinity -> InvalidOperation Expand Down Expand Up @@ -1577,8 +1559,7 @@ def __floordiv__(self, other, context=None): if context is None: context = getcontext()
ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
if self._isinfinity(): Expand Down Expand Up @@ -2316,8 +2297,7 @@ def __pow__(self, other, modulo=None, context=None): context = getcontext()
# either argument is a NaN => result is NaN ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
# 0**0 = NaN (!), x**0 = 1 for nonzero x (including +/-Infinity) Expand Down Expand Up @@ -2511,8 +2491,7 @@ def normalize(self, context=None): context = getcontext()
if self._is_special: ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans
dup = self._fix(context) Expand Down Expand Up @@ -2542,8 +2521,7 @@ def quantize(self, exp, rounding=None, context=None): rounding = context.rounding
if self._is_special or exp._is_special: ans = self._check_nans(exp, context) if ans: if (ans := self._check_nans(exp, context)): return ans
if exp._isinfinity() or self._isinfinity(): Expand Down Expand Up @@ -2673,8 +2651,7 @@ def to_integral_exact(self, rounding=None, context=None): this method except that it doesn't raise Inexact or Rounded. """ if self._is_special: ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans return Decimal(self) if self._exp >= 0: Expand All @@ -2698,8 +2675,7 @@ def to_integral_value(self, rounding=None, context=None): if rounding is None: rounding = context.rounding if self._is_special: ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans return Decimal(self) if self._exp >= 0: Expand All @@ -2716,8 +2692,7 @@ def sqrt(self, context=None): context = getcontext()
if self._is_special: ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans
if self._isinfinity() and self._sign == 0: Expand Down Expand Up @@ -2923,8 +2898,7 @@ def compare_signal(self, other, context=None): NaNs taking precedence over quiet NaNs. """ other = _convert_other(other, raiseit = True) ans = self._compare_check_nans(other, context) if ans: if (ans := self._compare_check_nans(other, context)): return ans return self.compare(other, context=context)
Expand Down Expand Up @@ -3036,8 +3010,7 @@ def exp(self, context=None): context = getcontext()
# exp(NaN) = NaN ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans
# exp(-Infinity) = 0 Expand Down Expand Up @@ -3192,8 +3165,7 @@ def ln(self, context=None): context = getcontext()
# ln(NaN) = NaN ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans
# ln(0.0) == -Infinity Expand Down Expand Up @@ -3272,8 +3244,7 @@ def log10(self, context=None): context = getcontext()
# log10(NaN) = NaN ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans
# log10(0.0) == -Infinity Expand Down Expand Up @@ -3325,8 +3296,7 @@ def logb(self, context=None): without limiting the resulting exponent). """ # logb(NaN) = NaN ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans
if context is None: Expand Down Expand Up @@ -3496,8 +3466,7 @@ def next_minus(self, context=None): if context is None: context = getcontext()
ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans
if self._isinfinity() == -1: Expand All @@ -3519,8 +3488,7 @@ def next_plus(self, context=None): if context is None: context = getcontext()
ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans
if self._isinfinity() == 1: Expand Down Expand Up @@ -3551,8 +3519,7 @@ def next_toward(self, other, context=None): if context is None: context = getcontext()
ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
comparison = self._cmp(other) Expand Down Expand Up @@ -3636,8 +3603,7 @@ def rotate(self, other, context=None):
other = _convert_other(other, raiseit=True)
ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
if other._exp != 0: Expand Down Expand Up @@ -3669,8 +3635,7 @@ def scaleb(self, other, context=None):
other = _convert_other(other, raiseit=True)
ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
if other._exp != 0: Expand All @@ -3694,8 +3659,7 @@ def shift(self, other, context=None):
other = _convert_other(other, raiseit=True)
ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
if other._exp != 0: Expand Down
def __le__(self, other, context=None): self, other = _convert_for_comparison(self, other) if other is NotImplemented: return other ans = self._compare_check_nans(other, context) if ans: if self._compare_check_nans(other, context): return False return self._cmp(other) <= 0
def __gt__(self, other, context=None): self, other = _convert_for_comparison(self, other) if other is NotImplemented: return other ans = self._compare_check_nans(other, context) if ans: if self._compare_check_nans(other, context): return False return self._cmp(other) > 0
def __ge__(self, other, context=None): self, other = _convert_for_comparison(self, other) if other is NotImplemented: return other ans = self._compare_check_nans(other, context) if ans: if self._compare_check_nans(other, context): return False return self._cmp(other) >= 0
Expand All @@ -930,8 +926,7 @@ def compare(self, other, context=None):
# Compare(NaN, NaN) = NaN if (self._is_special or other and other._is_special): ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
return Decimal(self._cmp(other)) Expand Down Expand Up @@ -1090,10 +1085,8 @@ def __neg__(self, context=None):
Rounds, if it has reason. """ if self._is_special: ans = self._check_nans(context=context) if ans: return ans if self._is_special and (ans := self._check_nans(context=context)): return ans
if context is None: context = getcontext() Expand All @@ -1112,10 +1105,8 @@ def __pos__(self, context=None):
Rounds the number (if more than precision digits) """ if self._is_special: ans = self._check_nans(context=context) if ans: return ans if self._is_special and (ans := self._check_nans(context=context)): return ans
if context is None: context = getcontext() Expand All @@ -1138,10 +1129,8 @@ def __abs__(self, round=True, context=None): if not round: return self.copy_abs()
if self._is_special: ans = self._check_nans(context=context) if ans: return ans if self._is_special and (ans := self._check_nans(context=context)): return ans
if self._sign: ans = self.__neg__(context=context) Expand All @@ -1163,8 +1152,7 @@ def __add__(self, other, context=None): context = getcontext()
if self._is_special or other._is_special: ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
if self._isinfinity(): Expand Down Expand Up @@ -1244,10 +1232,9 @@ def __sub__(self, other, context=None): if other is NotImplemented: return other
if self._is_special or other._is_special: ans = self._check_nans(other, context=context) if ans: return ans if (self._is_special or other._is_special and (ans := self._check_nans(other, context=context))): return ans
# self - other is computed as self + other.copy_negate() return self.__add__(other.copy_negate(), context=context) Expand Down Expand Up @@ -1275,8 +1262,7 @@ def __mul__(self, other, context=None): resultsign = self._sign ^ other._sign
if self._is_special or other._is_special: ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
if self._isinfinity(): Expand Down Expand Up @@ -1329,8 +1315,7 @@ def __truediv__(self, other, context=None): sign = self._sign ^ other._sign
if self._is_special or other._is_special: ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
if self._isinfinity() and other._isinfinity(): Expand Down Expand Up @@ -1427,8 +1412,7 @@ def __divmod__(self, other, context=None): if context is None: context = getcontext()
ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return (ans, ans)
sign = self._sign ^ other._sign Expand Down Expand Up @@ -1470,8 +1454,7 @@ def __mod__(self, other, context=None): if context is None: context = getcontext()
ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
if self._isinfinity(): Expand Down Expand Up @@ -1502,8 +1485,7 @@ def remainder_near(self, other, context=None):
other = _convert_other(other, raiseit=True)
ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
# self == +/-infinity -> InvalidOperation Expand Down Expand Up @@ -1577,8 +1559,7 @@ def __floordiv__(self, other, context=None): if context is None: context = getcontext()
ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
if self._isinfinity(): Expand Down Expand Up @@ -2316,8 +2297,7 @@ def __pow__(self, other, modulo=None, context=None): context = getcontext()
# either argument is a NaN => result is NaN ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
# 0**0 = NaN (!), x**0 = 1 for nonzero x (including +/-Infinity) Expand Down Expand Up @@ -2511,8 +2491,7 @@ def normalize(self, context=None): context = getcontext()
if self._is_special: ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans
dup = self._fix(context) Expand Down Expand Up @@ -2542,8 +2521,7 @@ def quantize(self, exp, rounding=None, context=None): rounding = context.rounding
if self._is_special or exp._is_special: ans = self._check_nans(exp, context) if ans: if (ans := self._check_nans(exp, context)): return ans
if exp._isinfinity() or self._isinfinity(): Expand Down Expand Up @@ -2673,8 +2651,7 @@ def to_integral_exact(self, rounding=None, context=None): this method except that it doesn't raise Inexact or Rounded. """ if self._is_special: ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans return Decimal(self) if self._exp >= 0: Expand All @@ -2698,8 +2675,7 @@ def to_integral_value(self, rounding=None, context=None): if rounding is None: rounding = context.rounding if self._is_special: ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans return Decimal(self) if self._exp >= 0: Expand All @@ -2716,8 +2692,7 @@ def sqrt(self, context=None): context = getcontext()
if self._is_special: ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans
if self._isinfinity() and self._sign == 0: Expand Down Expand Up @@ -2923,8 +2898,7 @@ def compare_signal(self, other, context=None): NaNs taking precedence over quiet NaNs. """ other = _convert_other(other, raiseit = True) ans = self._compare_check_nans(other, context) if ans: if (ans := self._compare_check_nans(other, context)): return ans return self.compare(other, context=context)
Expand Down Expand Up @@ -3036,8 +3010,7 @@ def exp(self, context=None): context = getcontext()
# exp(NaN) = NaN ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans
# exp(-Infinity) = 0 Expand Down Expand Up @@ -3192,8 +3165,7 @@ def ln(self, context=None): context = getcontext()
# ln(NaN) = NaN ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans
# ln(0.0) == -Infinity Expand Down Expand Up @@ -3272,8 +3244,7 @@ def log10(self, context=None): context = getcontext()
# log10(NaN) = NaN ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans
# log10(0.0) == -Infinity Expand Down Expand Up @@ -3325,8 +3296,7 @@ def logb(self, context=None): without limiting the resulting exponent). """ # logb(NaN) = NaN ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans
if context is None: Expand Down Expand Up @@ -3496,8 +3466,7 @@ def next_minus(self, context=None): if context is None: context = getcontext()
ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans
if self._isinfinity() == -1: Expand All @@ -3519,8 +3488,7 @@ def next_plus(self, context=None): if context is None: context = getcontext()
ans = self._check_nans(context=context) if ans: if (ans := self._check_nans(context=context)): return ans
if self._isinfinity() == 1: Expand Down Expand Up @@ -3551,8 +3519,7 @@ def next_toward(self, other, context=None): if context is None: context = getcontext()
ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
comparison = self._cmp(other) Expand Down Expand Up @@ -3636,8 +3603,7 @@ def rotate(self, other, context=None):
other = _convert_other(other, raiseit=True)
ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
if other._exp != 0: Expand Down Expand Up @@ -3669,8 +3635,7 @@ def scaleb(self, other, context=None):
other = _convert_other(other, raiseit=True)
ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
if other._exp != 0: Expand All @@ -3694,8 +3659,7 @@ def shift(self, other, context=None):
other = _convert_other(other, raiseit=True)
ans = self._check_nans(other, context) if ans: if (ans := self._check_nans(other, context)): return ans
if other._exp != 0: Expand Down