ó
¡¼™\c           @  s¾   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 d d l m Z d d l m Z m Z m Z d d	 l m Z e d
 e e	 e f d „  ƒ  Yƒ Z d S(   s0   Implementation of :class:`FractionField` class. iÿÿÿÿ(   t   print_functiont   division(   t   Field(   t   CompositeDomain(   t   CharacteristicZero(   t   DMF(   t   GeneratorsNeeded(   t   dict_from_basict   basic_from_dictt   _dict_reorder(   t   publict   FractionFieldc           B  s  e  Z d  Z e Z e Z Z e Z e Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z  d „  Z! RS(   s3   A class for representing rational function fields. c         G  s”   | s t  d ƒ ‚ n  t | ƒ d } t | ƒ |  _ |  j j | | d |  ƒ|  _ |  j j | | d |  ƒ|  _ | |  _ |  _ | |  _ |  _	 d  S(   Ns   generators not specifiedi   t   ring(
   R   t   lent   ngenst   dtypet   zerot   onet   domaint   domt   symbolst   gens(   t   selfR   R   t   lev(    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyt   __init__   s    c         C  s)   |  j  | |  j t |  j ƒ d d |  ƒS(   Ni   R   (   R   R   R   R   (   R   t   element(    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyt   new$   s    c         C  s.   t  |  j ƒ d d j t t  |  j ƒ ƒ d S(   Nt   (t   ,t   )(   t   strR   t   joint   mapR   (   R   (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyt   __str__'   s    c         C  s%   t  |  j j |  j |  j |  j f ƒ S(   N(   t   hasht	   __class__t   __name__R   R   R   (   R   (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyt   __hash__*   s    c         C  sC   t  | t ƒ oB |  j | j k oB |  j | j k oB |  j | j k S(   s0   Returns ``True`` if two domains are equivalent. (   t
   isinstanceR   R   R   R   (   R   t   other(    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyt   __eq__-   s    c         C  s8   t  | j ƒ  j ƒ  |  j Œ t  | j ƒ  j ƒ  |  j Œ S(   s!   Convert ``a`` to a SymPy object. (   R   t   numert   to_sympy_dictR   t   denom(   R   t   a(    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyt   to_sympy2   s    c   	      C  sÄ   | j  ƒ  \ } } t | d |  j ƒ\ } } t | d |  j ƒ\ } } x0 | j ƒ  D]" \ } } |  j j | ƒ | | <qU Wx0 | j ƒ  D]" \ } } |  j j | ƒ | | <qˆ W|  | | f ƒ j ƒ  S(   s)   Convert SymPy's expression to ``dtype``. R   (   t   as_numer_denomR   R   t   itemsR   t
   from_sympyt   cancel(	   R   R,   t   pt   qt   numt   _t   dent   kt   v(    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyR0   7   s    c         C  s   |  |  j  j | | ƒ ƒ S(   s.   Convert a Python ``int`` object to ``dtype``. (   R   t   convert(   t   K1R,   t   K0(    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyt   from_ZZ_pythonF   s    c         C  s   |  |  j  j | | ƒ ƒ S(   s3   Convert a Python ``Fraction`` object to ``dtype``. (   R   R9   (   R:   R,   R;   (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyt   from_QQ_pythonJ   s    c         C  s   |  |  j  j | | ƒ ƒ S(   s,   Convert a GMPY ``mpz`` object to ``dtype``. (   R   R9   (   R:   R,   R;   (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyt   from_ZZ_gmpyN   s    c         C  s   |  |  j  j | | ƒ ƒ S(   s,   Convert a GMPY ``mpq`` object to ``dtype``. (   R   R9   (   R:   R,   R;   (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyt   from_QQ_gmpyR   s    c         C  s   |  |  j  j | | ƒ ƒ S(   s.   Convert a mpmath ``mpf`` object to ``dtype``. (   R   R9   (   R:   R,   R;   (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyt   from_RealFieldV   s    c         C  sÎ   |  j  | j  k rM |  j | j k r1 |  | j ƒ S|  | j |  j ƒ j ƒ Sn} t | j ƒ  | j  |  j  ƒ \ } } |  j | j k r± g  | D] } |  j j | | j ƒ ^ qŠ } n  |  t t | | ƒ ƒ ƒ Sd S(   s'   Convert a ``DMF`` object to ``dtype``. N(   R   R   t   repR9   R	   t   to_dictt   dictt   zip(   R:   R,   R;   t   monomst   coeffst   c(    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyt   from_GlobalPolynomialRingZ   s    $.c         C  sq  |  j  | j  k re |  j | j k r( | S|  | j ƒ  j |  j ƒ j | j ƒ  j |  j ƒ j f ƒ Snt | j  ƒ j |  j  ƒ rmt | j ƒ  j	 ƒ  | j  |  j  ƒ \ } } t | j ƒ  j	 ƒ  | j  |  j  ƒ \ } } |  j | j k r?g  | D] } |  j j | | j ƒ ^ qí } g  | D] } |  j j | | j ƒ ^ q} n  |  t
 t | | ƒ ƒ t
 t | | ƒ ƒ f ƒ Sd S(   sË  
        Convert a fraction field element to another fraction field.

        Examples
        ========

        >>> from sympy.polys.polyclasses import DMF
        >>> from sympy.polys.domains import ZZ, QQ
        >>> from sympy.abc import x

        >>> f = DMF(([ZZ(1), ZZ(2)], [ZZ(1), ZZ(1)]), ZZ)

        >>> QQx = QQ.old_frac_field(x)
        >>> ZZx = ZZ.old_frac_field(x)

        >>> QQx.from_FractionField(f, ZZx)
        (x + 2)/(x + 1)

        N(   R   R   R)   R9   RA   R+   t   sett   issubsetR	   RB   RC   RD   (   R:   R,   R;   t   nmonomst   ncoeffst   dmonomst   dcoeffsRG   (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyt   from_FractionFieldi   s    "''+.c         C  s#   d d l  m } | |  j |  j Œ S(   s)   Returns a ring associated with ``self``. iÿÿÿÿ(   t   PolynomialRing(   t   sympy.polys.domainsRP   R   R   (   R   RP   (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyt   get_ring   s    c         G  s   t  d ƒ ‚ d S(   s(   Returns a polynomial ring, i.e. `K[X]`. s   nested domains not allowedN(   t   NotImplementedError(   R   R   (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyt	   poly_ring”   s    c         G  s   t  d ƒ ‚ d S(   s'   Returns a fraction field, i.e. `K(X)`. s   nested domains not allowedN(   RS   (   R   R   (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyt
   frac_field˜   s    c         C  s   |  j  j | j ƒ  j ƒ  ƒ S(   s#   Returns True if ``a`` is positive. (   R   t   is_positiveR)   t   LC(   R   R,   (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyRV   œ   s    c         C  s   |  j  j | j ƒ  j ƒ  ƒ S(   s#   Returns True if ``a`` is negative. (   R   t   is_negativeR)   RW   (   R   R,   (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyRX       s    c         C  s   |  j  j | j ƒ  j ƒ  ƒ S(   s'   Returns True if ``a`` is non-positive. (   R   t   is_nonpositiveR)   RW   (   R   R,   (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyRY   ¤   s    c         C  s   |  j  j | j ƒ  j ƒ  ƒ S(   s'   Returns True if ``a`` is non-negative. (   R   t   is_nonnegativeR)   RW   (   R   R,   (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyRZ   ¨   s    c         C  s
   | j  ƒ  S(   s   Returns numerator of ``a``. (   R)   (   R   R,   (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyR)   ¬   s    c         C  s
   | j  ƒ  S(   s   Returns denominator of ``a``. (   R+   (   R   R,   (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyR+   °   s    c         C  s   |  j  |  j j | ƒ ƒ S(   s   Returns factorial of ``a``. (   R   R   t	   factorial(   R   R,   (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyR[   ´   s    ("   R$   t
   __module__t   __doc__R   R   t   Truet   is_FractionFieldt   is_Fract   has_assoc_Ringt   has_assoc_FieldR   R   R!   R%   R(   R-   R0   R<   R=   R>   R?   R@   RH   RO   RR   RT   RU   RV   RX   RY   RZ   R)   R+   R[   (    (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyR      s:   
														&									N(   R]   t
   __future__R    R   t   sympy.polys.domains.fieldR   t#   sympy.polys.domains.compositedomainR   t&   sympy.polys.domains.characteristiczeroR   t   sympy.polys.polyclassesR   t   sympy.polys.polyerrorsR   t   sympy.polys.polyutilsR   R   R	   t   sympy.utilitiesR
   R   (    (    (    sD   lib/python2.7/site-packages/sympy/polys/domains/old_fractionfield.pyt   <module>   s   