def _to_mpmath(self, prec): # mpmath functions accept ints as input errmsg = 'cannot convert to mpmath number' if hasattr(self, '_as_mpf_val'): return make_mpf(self._as_mpf_val(prec)) try: re, im, _, _ = evalf(self, prec, {'maxprec': DEFAULT_MAXPREC}) if im: if not re: re = fzero return make_mpc((re, im)) elif re: return make_mpf(re) else: return make_mpf(fzero) except NotImplementedError as exc: v = self._eval_evalf(prec) # pylint: disable=assignment-from-none if v is None: raise ValueError(errmsg) from exc re, im = v.as_real_imag() if re.is_Float: re = re._mpf_ else: raise ValueError(errmsg) from exc if im.is_Float: im = im._mpf_ else: raise ValueError(errmsg) from exc return make_mpc((re, im))
def _to_mpmath(self, prec): # mpmath functions accept ints as input errmsg = "cannot convert to mpmath number" if hasattr(self, '_as_mpf_val'): return make_mpf(self._as_mpf_val(prec)) try: re, im, _, _ = evalf(self, prec, {'maxprec': DEFAULT_MAXPREC}) if im: if not re: re = fzero return make_mpc((re, im)) elif re: return make_mpf(re) else: return make_mpf(fzero) except NotImplementedError: v = self._eval_evalf(prec) if v is None: raise ValueError(errmsg) re, im = v.as_real_imag() if re.is_Float: re = re._mpf_ else: raise ValueError(errmsg) if im.is_Float: im = im._mpf_ else: raise ValueError(errmsg) return make_mpc((re, im))
def __new__(cls, value): if isinstance(value, cls): return value if isinstance(value, Integer): value = value.p elif isinstance(value, (Float, Rational)): value = mpmath.make_mpf(value._as_mpf_val(mpmath.mp.prec)) if not isinstance(value, FixedPointNumber): value = FixedPointNumber.from_value(value) return cls._new(value)
def _to_mpmath(self, prec, allow_ints=True): # mpmath functions accept ints as input errmsg = "cannot convert to mpmath number" if allow_ints and self.is_Integer: return self.p if hasattr(self, '_as_mpf_val'): return make_mpf(self._as_mpf_val(prec)) try: re, im, _, _ = evalf(self, prec, {}) if im: if not re: re = fzero return make_mpc((re, im)) elif re: return make_mpf(re) else: return make_mpf(fzero) except NotImplementedError: v = self._eval_evalf(prec) if v is None: raise ValueError(errmsg) if v.is_Float: return make_mpf(v._mpf_) # Number + Number*I is also fine re, im = v.as_real_imag() if allow_ints and re.is_Integer: re = from_int(re.p) elif re.is_Float: re = re._mpf_ else: raise ValueError(errmsg) if allow_ints and im.is_Integer: im = from_int(im.p) elif im.is_Float: im = im._mpf_ else: raise ValueError(errmsg) return make_mpc((re, im))
def summand(k, _term=[term0]): if k: k = int(k) _term[0] *= MPZ(func1(k - 1)) _term[0] //= MPZ(func2(k - 1)) return make_mpf(from_man_exp(_term[0], -prec2))