Beispiel #1
0
 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))
Beispiel #2
0
 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))
Beispiel #3
0
 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)
Beispiel #4
0
 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))
Beispiel #5
0
 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))
Beispiel #6
0
 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))
Beispiel #7
0
 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))