ó
¡¼™\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(
   s1   Implementation of :class:`PolynomialRing` class. iÿÿÿÿ(   t   print_functiont   division(   t   Ring(   t   CompositeDomain(   t   CoercionFailedt   GeneratorsError(   t   publict   PolynomialRingc           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# d „  Z$ RS(   s8   A class for representing multivariate polynomial rings. c         C  sæ   d d l  m } t | | ƒ r@ | d  k r@ | d  k r@ | } n | | | | ƒ } | |  _ | j |  _ | j |  _ | j |  _ | j |  _ | j	 |  _	 | rÖ | j	 j
 rÖ | j	 j rÖ t | ƒ d k rÖ t |  _ qÖ n  |  j	 |  _ d  S(   Niÿÿÿÿ(   t   PolyRingi   (   t   sympy.polys.ringsR   t
   isinstancet   Nonet   ringt   dtypet   genst   ngenst   symbolst   domaint   is_Fieldt   is_Exactt   lent   Truet   is_PIDt   dom(   t   selft   domain_or_ringR   t   orderR   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyt   __init__   s    '		*c         C  s   |  j  j | ƒ S(   N(   R   t   ring_new(   R   t   element(    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyt   new,   s    c         C  s
   |  j  j S(   N(   R   t   zero(   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyR   /   s    c         C  s
   |  j  j S(   N(   R   t   one(   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyR    3   s    c         C  s
   |  j  j S(   N(   R   R   (   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyR   7   s    c         C  s.   t  |  j ƒ d d j t t  |  j ƒ ƒ d S(   Nt   [t   ,t   ](   t   strR   t   joint   mapR   (   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyt   __str__;   s    c         C  s(   t  |  j j |  j j |  j |  j f ƒ S(   N(   t   hasht	   __class__t   __name__R   R   R   R   (   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyt   __hash__>   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(    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyt   __eq__A   s    c         C  s
   | j  ƒ  S(   s   Convert `a` to a SymPy object. (   t   as_expr(   R   t   a(    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyt   to_sympyG   s    c         C  s   |  j  j | ƒ S(   s'   Convert SymPy's expression to `dtype`. (   R   t	   from_expr(   R   R/   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyt
   from_sympyK   s    c         C  s   |  |  j  j | | ƒ ƒ S(   s*   Convert a Python `int` object to `dtype`. (   R   t   convert(   t   K1R/   t   K0(    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyt   from_ZZ_pythonO   s    c         C  s   |  |  j  j | | ƒ ƒ S(   s/   Convert a Python `Fraction` object to `dtype`. (   R   R3   (   R4   R/   R5   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyt   from_QQ_pythonS   s    c         C  s   |  |  j  j | | ƒ ƒ S(   s(   Convert a GMPY `mpz` object to `dtype`. (   R   R3   (   R4   R/   R5   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyt   from_ZZ_gmpyW   s    c         C  s   |  |  j  j | | ƒ ƒ S(   s(   Convert a GMPY `mpq` object to `dtype`. (   R   R3   (   R4   R/   R5   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyt   from_QQ_gmpy[   s    c         C  s   |  |  j  j | | ƒ ƒ S(   s*   Convert a mpmath `mpf` object to `dtype`. (   R   R3   (   R4   R/   R5   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyt   from_RealField_   s    c         C  s    |  j  | k r |  j | ƒ Sd S(   s*   Convert an algebraic number to ``dtype``. N(   R   R   (   R4   R/   R5   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyt   from_AlgebraicFieldc   s    c         C  s3   y | j  |  j ƒ SWn t t f k
 r. d SXd S(   s#   Convert a polynomial to ``dtype``. N(   t   set_ringR   R   R   R   (   R4   R/   R5   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyt   from_PolynomialRingh   s    c         C  sT   | j  | ƒ j | j | ƒ ƒ \ } } | j rL |  j | | j j j ƒ  ƒ Sd Sd S(   s*   Convert a rational function to ``dtype``. N(	   t   numert   divt   denomt   is_zeroR=   t   fieldR   t	   to_domainR   (   R4   R/   R5   t   qt   r(    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyt   from_FractionFieldo   s    '	c         C  s   |  j  j ƒ  j ƒ  S(   s(   Returns a field associated with `self`. (   R   t   to_fieldRC   (   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyt	   get_fieldx   s    c         C  s   |  j  j | j ƒ S(   s%   Returns True if `LC(a)` is positive. (   R   t   is_positivet   LC(   R   R/   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyRI   |   s    c         C  s   |  j  j | j ƒ S(   s%   Returns True if `LC(a)` is negative. (   R   t   is_negativeRJ   (   R   R/   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyRK   €   s    c         C  s   |  j  j | j ƒ S(   s)   Returns True if `LC(a)` is non-positive. (   R   t   is_nonpositiveRJ   (   R   R/   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyRL   „   s    c         C  s   |  j  j | j ƒ S(   s)   Returns True if `LC(a)` is non-negative. (   R   t   is_nonnegativeRJ   (   R   R/   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyRM   ˆ   s    c         C  s   | j  | ƒ S(   s   Extended GCD of `a` and `b`. (   t   gcdex(   R   R/   t   b(    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyRN   Œ   s    c         C  s   | j  | ƒ S(   s   Returns GCD of `a` and `b`. (   t   gcd(   R   R/   RO   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyRP      s    c         C  s   | j  | ƒ S(   s   Returns LCM of `a` and `b`. (   t   lcm(   R   R/   RO   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyRQ   ”   s    c         C  s   |  j  |  j j | ƒ ƒ S(   s   Returns factorial of `a`. (   R   R   t	   factorial(   R   R/   (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyRR   ˜   s    N(%   R*   t
   __module__t   __doc__R   t   is_PolynomialRingt   is_Polyt   has_assoc_Ringt   has_assoc_FieldR   R   R   t   propertyR   R    R   R'   R+   R-   R0   R2   R6   R7   R8   R9   R:   R;   R=   RF   RH   RI   RK   RL   RM   RN   RP   RQ   RR   (    (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyR      s>   
																							N(   RT   t
   __future__R    R   t   sympy.polys.domains.ringR   t#   sympy.polys.domains.compositedomainR   t   sympy.polys.polyerrorsR   R   t   sympy.utilitiesR   R   (    (    (    sA   lib/python2.7/site-packages/sympy/polys/domains/polynomialring.pyt   <module>   s   