ó
¡¼™\c           @  sC  d  Z  d d l m Z m Z d d l m Z d d l m Z d d l m	 Z	 d d l
 m Z m Z m Z m Z d d l m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z d d l m Z e	 d	 e e f d
 „  ƒ  Yƒ Z  e	 d e e f d „  ƒ  Yƒ Z! e" j# Z$ e	 d e f d „  ƒ  Yƒ Z% d S(   s   Real and complex elements. iÿÿÿÿ(   t   print_functiont   division(   t   string_types(   t   DomainElement(   t   public(   t   PythonMPContextt   _mpft   _mpct	   _constant(   t   MPZ_ONEt   fzerot   fonet   finft   fninft   fnant   round_nearestt   mpf_mult   repr_dpst	   int_typest   from_intt
   from_floatt   from_strt   to_rational(   t   mpqt   RealElementc           B  s;   e  Z d  Z d g Z d „  Z e d „  e ƒ Z d „  Z RS(   s   An element of a real domain. t   __mpf__c         C  s   | |  _  d  S(   N(   R   (   t   selft   val(    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyt   _set_mpf   s    c         C  s   |  j  S(   N(   R   (   R   (    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyt   <lambda>   t    c         C  s
   |  j  j S(   N(   t   contextt   _parent(   R   (    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyt   parent   s    (   t   __name__t
   __module__t   __doc__t	   __slots__R   t   propertyt   _mpf_R!   (    (    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyR      s
   		t   ComplexElementc           B  s;   e  Z d  Z d g Z d „  Z e d „  e ƒ Z d „  Z RS(   s    An element of a complex domain. t   __mpc__c         C  s   | |  _  d  S(   N(   R)   (   R   R   (    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyt   _set_mpc$   s    c         C  s   |  j  S(   N(   R)   (   R   (    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyR   '   R   c         C  s
   |  j  j S(   N(   R   R    (   R   (    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyR!   )   s    (   R"   R#   R$   R%   R*   R&   t   _mpc_R!   (    (    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyR(      s
   		t	   MPContextc           B  sw   e  Z d  d
 d
 d „ Z d „  Z d „  Z d „  Z d „  Z e d „  ƒ Z	 e d „  ƒ Z
 e d „ Z d
 d
 d	 „ Z RS(   i5   c         C  só  | t  g |  _ | d  k r+ |  j | ƒ n |  j | ƒ t |  _ t |  _ |  j t	 |  j g |  j _
 |  j t	 |  j g |  j _
 |  |  j _ |  |  j _ t |  _ |  j t	 |  j g |  j _
 |  |  j _ |  j |  j |  j g |  _ t |  _ t |  _ | d  k r|  j ƒ  |  _ n* | t k r+t |  _ n |  j | ƒ |  _ |  j |  j ƒ |  _ |  j sgd |  _ n t d |  j ƒ |  _ |  j t ƒ |  _ |  j t ƒ |  _ |  j t t f ƒ |  _ |  j t  ƒ |  _! |  j t" ƒ |  _# |  j t$ ƒ |  _% d  S(   Ni@B i   (&   R   t   _prec_roundingt   Nonet	   _set_prect   _set_dpsR   t   mpfR(   t   mpct   newt   _ctxdataR   R   t   constantt   typest   Truet   trap_complext   prettyt	   _make_tolt   tolt   FalseR
   t   _convert_tolt   make_mpft	   tolerancet	   max_denomt   intt   zeroR   t   onet   make_mpct   jR   t   infR   t   ninfR   t   nan(   t   ctxt   prect   dpsR;   (    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyt   __init__1   s>    						c         C  s,   d } d t  d |  j d f } t | | ƒ S(   Ni    i   i   i   i   (   i    i   i   i   (   R	   RJ   R   (   RI   t   hundredt   eps(    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyR:   \   s    c         C  s   |  j  |  j ƒ  ƒ S(   N(   R>   R:   (   RI   (    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyt   make_tola   s    c         C  sŠ   t  | t ƒ r t | ƒ St  | t ƒ r2 t | ƒ St | d ƒ rH | j S|  j \ } } t  | t ƒ rv t	 | | | ƒ St
 d | ƒ ‚ d  S(   NR'   s   expected a real number, got %s(   t
   isinstanceR   R   t   floatR   t   hasattrR'   R-   R   R   t
   ValueError(   RI   R;   RJ   t   rounding(    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyR=   d   s    

c         C  s   t  d t | ƒ ƒ ‚ d  S(   Ns   cannot create mpf from (   t	   TypeErrort   repr(   RI   t   xt   strings(    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyt   _convert_fallbackp   s    c         C  s   t  |  j ƒ S(   N(   R   t   _prec(   RI   (    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyt   _repr_digitss   s    c         C  s   |  j  S(   N(   t   _dps(   RI   (    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyt   _str_digitsw   s    c         C  s_  t  | j ƒ \ } } | s+ | |  j k r5 | | f Sd \ } } } } | | }	 }
 xp t rÆ |	 |
 } | | | } | |  j k rˆ Pn  | | | | | | f \ } } } } |
 |	 | |
 }	 }
 qW W|  j | | } t | | ƒ } t | | | | | | ƒ } t | | ƒ } | s#| r-| | f St | | ƒ t | | ƒ k rT| j S| j Sd  S(   Ni    i   (   i    i   i   i    (   R   R'   R@   R7   R   t   abst   _mpq_(   RI   t   st   limitt   pt   qt   p0t   q0t   p1t   q1t   nt   dt   at   q2t   kt   numbert   bound1t   bound2(    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyR   {   s*    
	
&
 c   	      C  sä   |  j  | ƒ } | d  k rC | d  k rC |  j p9 |  j ƒ  } } n  | d  k ra |  j  | ƒ } n | d  k r |  j  | ƒ } n  t | | ƒ } | | k rŸ t St | ƒ } t | ƒ } | | k  rÐ | | } n
 | | } | | k S(   N(   t   convertR.   R?   RO   R^   R7   (	   RI   R`   t   tt   rel_epst   abs_epst   difft   absst   abstt   err(    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyt   almosteq™   s     
N(   R"   R#   R.   RL   R:   RO   R=   RY   R&   R[   R]   R7   R   Rx   (    (    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyR,   .   s   +				N(&   R$   t
   __future__R    R   t   sympy.core.compatibilityR   t!   sympy.polys.domains.domainelementR   t   sympy.utilitiesR   t   mpmath.ctx_mp_pythonR   R   R   R   t   mpmath.libmpR	   R
   R   R   R   R   R   R   R   R   R   R   R   R   t   mpmath.rationalR   R   R(   t   objectt   __new__R3   R,   (    (    (    s=   lib/python2.7/site-packages/sympy/polys/domains/mpelements.pyt   <module>   s   "^	