ó
¡¼™\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	 m
 Z
 d d l m Z e d e e f d „  ƒ  Yƒ Z d	 S(
   s0   Implementation of :class:`FractionField` class. iÿÿÿÿ(   t   print_functiont   division(   t   CompositeDomain(   t   Field(   t   CoercionFailedt   GeneratorsError(   t   publict   FractionFieldc           B  s&  e  Z d  Z e Z Z e Z e Z d d d „ Z	 d „  Z
 e d „  ƒ Z e d „  ƒ Z e 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(   s@   A class for representing multivariate rational function fields. c         C  s§   d d l  m } t | | ƒ r@ | d  k r@ | d  k r@ | } n | | | | ƒ } | |  _ | j |  _ | j |  _ | j |  _ | j |  _ | j	 |  _	 |  j	 |  _
 d  S(   Niÿÿÿÿ(   t	   FracField(   t   sympy.polys.fieldsR   t
   isinstancet   Nonet   fieldt   dtypet   genst   ngenst   symbolst   domaint   dom(   t   selft   domain_or_fieldR   t   orderR   R   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyt   __init__   s    '		c         C  s   |  j  j | ƒ S(   N(   R   t	   field_new(   R   t   element(    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyt   new&   s    c         C  s
   |  j  j S(   N(   R   t   zero(   R   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyR   )   s    c         C  s
   |  j  j S(   N(   R   t   one(   R   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyR   -   s    c         C  s
   |  j  j S(   N(   R   R   (   R   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyR   1   s    c         C  s.   t  |  j ƒ d d j t t  |  j ƒ ƒ d S(   Nt   (t   ,t   )(   t   strR   t   joint   mapR   (   R   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyt   __str__5   s    c         C  s(   t  |  j j |  j j |  j |  j f ƒ S(   N(   t   hasht	   __class__t   __name__R   R   R   R   (   R   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyt   __hash__8   s    c         C  sC   t  | t ƒ oB |  j j |  j |  j f | j j | j | j f k S(   s.   Returns `True` if two domains are equivalent. (   R
   R   R   R   R   R   (   R   t   other(    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyt   __eq__;   s    c         C  s
   | j  ƒ  S(   s   Convert `a` to a SymPy object. (   t   as_expr(   R   t   a(    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyt   to_sympyA   s    c         C  s   |  j  j | ƒ S(   s'   Convert SymPy's expression to `dtype`. (   R   t	   from_expr(   R   R*   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyt
   from_sympyE   s    c         C  s   |  |  j  j | | ƒ ƒ S(   s*   Convert a Python `int` object to `dtype`. (   R   t   convert(   t   K1R*   t   K0(    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyt   from_ZZ_pythonI   s    c         C  s   |  |  j  j | | ƒ ƒ S(   s/   Convert a Python `Fraction` object to `dtype`. (   R   R.   (   R/   R*   R0   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyt   from_QQ_pythonM   s    c         C  s   |  |  j  j | | ƒ ƒ S(   s(   Convert a GMPY `mpz` object to `dtype`. (   R   R.   (   R/   R*   R0   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyt   from_ZZ_gmpyQ   s    c         C  s   |  |  j  j | | ƒ ƒ S(   s(   Convert a GMPY `mpq` object to `dtype`. (   R   R.   (   R/   R*   R0   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyt   from_QQ_gmpyU   s    c         C  s   |  |  j  j | | ƒ ƒ S(   s*   Convert a mpmath `mpf` object to `dtype`. (   R   R.   (   R/   R*   R0   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyt   from_RealFieldY   s    c         C  s    |  j  | k r |  j | ƒ Sd S(   s*   Convert an algebraic number to ``dtype``. N(   R   R   (   R/   R*   R0   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyt   from_AlgebraicField]   s    c         C  s0   y |  j  | ƒ SWn t t f k
 r+ d SXd S(   s#   Convert a polynomial to ``dtype``. N(   R   R   R   R   (   R/   R*   R0   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyt   from_PolynomialRingb   s    c         C  s3   y | j  |  j ƒ SWn t t f k
 r. d SXd S(   s*   Convert a rational function to ``dtype``. N(   t	   set_fieldR   R   R   R   (   R/   R*   R0   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyt   from_FractionFieldi   s    c         C  s   |  j  j ƒ  j ƒ  S(   s(   Returns a field associated with `self`. (   R   t   to_ringt	   to_domain(   R   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyt   get_ringp   s    c         C  s   |  j  j | j j ƒ S(   s%   Returns True if `LC(a)` is positive. (   R   t   is_positivet   numert   LC(   R   R*   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyR=   t   s    c         C  s   |  j  j | j j ƒ S(   s%   Returns True if `LC(a)` is negative. (   R   t   is_negativeR>   R?   (   R   R*   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyR@   x   s    c         C  s   |  j  j | j j ƒ S(   s)   Returns True if `LC(a)` is non-positive. (   R   t   is_nonpositiveR>   R?   (   R   R*   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyRA   |   s    c         C  s   |  j  j | j j ƒ S(   s)   Returns True if `LC(a)` is non-negative. (   R   t   is_nonnegativeR>   R?   (   R   R*   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyRB   €   s    c         C  s   | j  S(   s   Returns numerator of ``a``. (   R>   (   R   R*   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyR>   „   s    c         C  s   | j  S(   s   Returns denominator of ``a``. (   t   denom(   R   R*   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyRC   ˆ   s    c         C  s   |  j  |  j j | ƒ ƒ S(   s   Returns factorial of `a`. (   R   R   t	   factorial(   R   R*   (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyRD   Œ   s    N($   R%   t
   __module__t   __doc__t   Truet   is_FractionFieldt   is_Fract   has_assoc_Ringt   has_assoc_FieldR   R   R   t   propertyR   R   R   R"   R&   R(   R+   R-   R1   R2   R3   R4   R5   R6   R7   R9   R<   R=   R@   RA   RB   R>   RC   RD   (    (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyR   
   s<   
																					N(   RF   t
   __future__R    R   t#   sympy.polys.domains.compositedomainR   t   sympy.polys.domains.fieldR   t   sympy.polys.polyerrorsR   R   t   sympy.utilitiesR   R   (    (    (    s@   lib/python2.7/site-packages/sympy/polys/domains/fractionfield.pyt   <module>   s   