Exemplo n.º 1
0
    def convert(ctx, x, strings=True):
        """
        Converts *x* to an ``mpf``, ``mpc`` or ``mpi``. If *x* is of type ``mpf``,
        ``mpc``, ``int``, ``float``, ``complex``, the conversion
        will be performed losslessly.

        If *x* is a string, the result will be rounded to the present
        working precision. Strings representing fractions or complex
        numbers are permitted.

            >>> from mpmath import *
            >>> mp.dps = 15; mp.pretty = False
            >>> mpmathify(3.5)
            mpf('3.5')
            >>> mpmathify('2.1')
            mpf('2.1000000000000001')
            >>> mpmathify('3/4')
            mpf('0.75')
            >>> mpmathify('2+3j')
            mpc(real='2.0', imag='3.0')

        """
        if type(x) in ctx.types: return x
        if isinstance(x, int_types): return ctx.make_mpf(from_int(x))
        if isinstance(x, float): return ctx.make_mpf(from_float(x))
        if isinstance(x, complex):
            return ctx.make_mpc((from_float(x.real), from_float(x.imag)))
        prec, rounding = ctx._prec_rounding
        if isinstance(x, rational.mpq):
            p, q = x
            return ctx.make_mpf(from_rational(p, q, prec))
        if strings and isinstance(x, basestring):
            try:
                _mpf_ = from_str(x, prec, rounding)
                return ctx.make_mpf(_mpf_)
            except ValueError:
                pass
        if hasattr(x, '_mpf_'): return ctx.make_mpf(x._mpf_)
        if hasattr(x, '_mpc_'): return ctx.make_mpc(x._mpc_)
        if hasattr(x, '_mpmath_'):
            return ctx.convert(x._mpmath_(prec, rounding))
        return ctx._convert_fallback(x, strings)
Exemplo n.º 2
0
    def convert(ctx, x, strings=True):
        """
        Converts *x* to an ``mpf``, ``mpc`` or ``mpi``. If *x* is of type ``mpf``,
        ``mpc``, ``int``, ``float``, ``complex``, the conversion
        will be performed losslessly.

        If *x* is a string, the result will be rounded to the present
        working precision. Strings representing fractions or complex
        numbers are permitted.

            >>> from mpmath import *
            >>> mp.dps = 15; mp.pretty = False
            >>> mpmathify(3.5)
            mpf('3.5')
            >>> mpmathify('2.1')
            mpf('2.1000000000000001')
            >>> mpmathify('3/4')
            mpf('0.75')
            >>> mpmathify('2+3j')
            mpc(real='2.0', imag='3.0')

        """
        if type(x) in ctx.types: return x
        if isinstance(x, int_types): return ctx.make_mpf(from_int(x))
        if isinstance(x, float): return ctx.make_mpf(from_float(x))
        if isinstance(x, complex):
            return ctx.make_mpc((from_float(x.real), from_float(x.imag)))
        prec, rounding = ctx._prec_rounding
        if isinstance(x, rational.mpq):
            p, q = x
            return ctx.make_mpf(from_rational(p, q, prec))
        if strings and isinstance(x, basestring):
            try:
                _mpf_ = from_str(x, prec, rounding)
                return ctx.make_mpf(_mpf_)
            except ValueError:
                pass
        if hasattr(x, '_mpf_'): return ctx.make_mpf(x._mpf_)
        if hasattr(x, '_mpc_'): return ctx.make_mpc(x._mpc_)
        if hasattr(x, '_mpmath_'):
            return ctx.convert(x._mpmath_(prec, rounding))
        return ctx._convert_fallback(x, strings)
Exemplo n.º 3
0
 def mpf_convert_arg(cls, x, prec, rounding):
     if isinstance(x, int_types): return from_int(x)
     if isinstance(x, float): return from_float(x)
     if isinstance(x, basestring): return from_str(x, prec, rounding)
     if isinstance(x, cls.context.constant): return x.func(prec, rounding)
     if hasattr(x, '_mpf_'): return x._mpf_
     if hasattr(x, '_mpmath_'):
         t = cls.context.convert(x._mpmath_(prec, rounding))
         if hasattr(t, '_mpf_'):
             return t._mpf_
     raise TypeError("cannot create mpf from " + repr(x))
Exemplo n.º 4
0
 def mpf_convert_arg(cls, x, prec, rounding):
     if isinstance(x, int_types): return from_int(x)
     if isinstance(x, float): return from_float(x)
     if isinstance(x, basestring): return from_str(x, prec, rounding)
     if isinstance(x, cls.context.constant): return x.func(prec, rounding)
     if hasattr(x, '_mpf_'): return x._mpf_
     if hasattr(x, '_mpmath_'):
         t = cls.context.convert(x._mpmath_(prec, rounding))
         if hasattr(t, '_mpf_'):
             return t._mpf_
     raise TypeError("cannot create mpf from " + repr(x))
Exemplo n.º 5
0
 def mpf_convert_rhs(cls, x):
     if isinstance(x, int_types): return from_int(x)
     if isinstance(x, float): return from_float(x)
     if isinstance(x, complex_types): return cls.context.mpc(x)
     if isinstance(x, rational.mpq):
         p, q = x
         return from_rational(p, q, cls.context.prec)
     if hasattr(x, '_mpf_'): return x._mpf_
     if hasattr(x, '_mpmath_'):
         t = cls.context.convert(x._mpmath_(*cls.context._prec_rounding))
         if hasattr(t, '_mpf_'):
             return t._mpf_
         return t
     return NotImplemented
Exemplo n.º 6
0
 def mpf_convert_rhs(cls, x):
     if isinstance(x, int_types): return from_int(x)
     if isinstance(x, float): return from_float(x)
     if isinstance(x, complex_types): return cls.context.mpc(x)
     if isinstance(x, rational.mpq):
         p, q = x
         return from_rational(p, q, cls.context.prec)
     if hasattr(x, '_mpf_'): return x._mpf_
     if hasattr(x, '_mpmath_'):
         t = cls.context.convert(x._mpmath_(*cls.context._prec_rounding))
         if hasattr(t, '_mpf_'):
             return t._mpf_
         return t
     return NotImplemented
Exemplo n.º 7
0
 def mpf_convert_arg(cls, x, prec, rounding):
     if isinstance(x, int_types): return from_int(x)
     if isinstance(x, float): return from_float(x)
     if isinstance(x, basestring): return from_str(x, prec, rounding)
     if isinstance(x, cls.context.constant): return x.func(prec, rounding)
     if hasattr(x, '_mpf_'): return x._mpf_
     if hasattr(x, '_mpmath_'):
         t = cls.context.convert(x._mpmath_(prec, rounding))
         if hasattr(t, '_mpf_'):
             return t._mpf_
     if hasattr(x, '_mpi_'):
         a, b = x._mpi_
         if a == b:
             return a
         raise ValueError("can only create mpf from zero-width interval")
     raise TypeError("cannot create mpf from " + repr(x))
Exemplo n.º 8
0
 def mpf_convert_arg(cls, x, prec, rounding):
     if isinstance(x, int_types): return from_int(x)
     if isinstance(x, float): return from_float(x)
     if isinstance(x, basestring): return from_str(x, prec, rounding)
     if isinstance(x, cls.context.constant): return x.func(prec, rounding)
     if hasattr(x, '_mpf_'): return x._mpf_
     if hasattr(x, '_mpmath_'):
         t = cls.context.convert(x._mpmath_(prec, rounding))
         if hasattr(t, '_mpf_'):
             return t._mpf_
     if hasattr(x, '_mpi_'):
         a, b = x._mpi_
         if a == b:
             return a
         raise ValueError("can only create mpf from zero-width interval")
     raise TypeError("cannot create mpf from " + repr(x))
Exemplo n.º 9
0
def convert_mpf_(x, prec, rounding):
    if hasattr(x, "_mpf_"): return x._mpf_
    if isinstance(x, int_types): return from_int(x, prec, rounding)
    if isinstance(x, float): return from_float(x, prec, rounding)
    if isinstance(x, basestring): return from_str(x, prec, rounding)
Exemplo n.º 10
0
def convert_mpf_(x, prec, rounding):
    if hasattr(x, "_mpf_"): return x._mpf_
    if isinstance(x, int_types): return from_int(x, prec, rounding)
    if isinstance(x, float): return from_float(x, prec, rounding)
    if isinstance(x, basestring): return from_str(x, prec, rounding)