ó
¡¼™\c           @  s¨   d  Z  d d l m Z m 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 e d	 e
 e e f d
 „  ƒ  Yƒ Z d S(   s3   Implementation of :class:`ExpressionDomain` class. iÿÿÿÿ(   t   print_functiont   division(   t   sympifyt   SympifyError(   t   CharacteristicZero(   t   Field(   t   SimpleDomain(   t   PicklableWithSlots(   t   publict   ExpressionDomainc           B  s  e  Z d  Z e Z Z d e f d „  ƒ  YZ e Z e d ƒ Z	 e d ƒ Z
 d 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# RS(   s#   A class for arbitrary expressions. t
   Expressionc           B  s
  e  Z d  Z d g 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 e Z e Z d „  Z d „  Z d „  Z e Z d „  Z d „  Z RS(   s   An arbitrary expression. t   exc         C  s4   t  | |  j ƒ s$ t | ƒ |  _ n | j |  _ d  S(   N(   t
   isinstancet	   __class__R   R   (   t   selfR   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   __init__   s    c         C  s   d t  |  j ƒ S(   Ns   EX(%s)(   t   reprR   (   t   f(    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   __repr__   s    c         C  s   d t  |  j ƒ S(   Ns   EX(%s)(   t   strR   (   R   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   __str__    s    c         C  s   t  |  j j |  j f ƒ S(   N(   t   hashR   t   __name__R   (   R   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   __hash__#   s    c         C  s   |  j  S(   N(   R   (   R   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   as_expr&   s    c         C  s   |  j  |  j j ƒ  d ƒ S(   Ni    (   R   R   t   as_numer_denom(   R   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   numer)   s    c         C  s   |  j  |  j j ƒ  d ƒ S(   Ni   (   R   R   R   (   R   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   denom,   s    c         C  s   |  j  | j ƒ  ƒ S(   N(   R   t   cancel(   R   R   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   simplify/   s    c         C  s   |  j  t |  j ƒ ƒ S(   N(   R   t   absR   (   R   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   __abs__2   s    c         C  s   |  j  |  j ƒ S(   N(   R   R   (   R   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   __neg__5   s    c         C  s*   y |  j  | ƒ SWn t k
 r% d  SXd  S(   N(   R   R   t   None(   R   t   g(    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   _to_ex8   s    c         C  s:   |  j  | ƒ } | d  k	 r2 |  j |  j | j ƒ St Sd  S(   N(   R#   R!   R   R   t   NotImplemented(   R   R"   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   __add__>   s    c         C  s    |  j  |  j | ƒ j |  j ƒ S(   N(   R   R   R   (   R   R"   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   __radd__F   s    c         C  s:   |  j  | ƒ } | d  k	 r2 |  j |  j | j ƒ St Sd  S(   N(   R#   R!   R   R   R$   (   R   R"   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   __sub__I   s    c         C  s    |  j  |  j | ƒ j |  j ƒ S(   N(   R   R   R   (   R   R"   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   __rsub__Q   s    c         C  s:   |  j  | ƒ } | d  k	 r2 |  j |  j | j ƒ St Sd  S(   N(   R#   R!   R   R   R$   (   R   R"   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   __mul__T   s    c         C  s    |  j  |  j | ƒ j |  j ƒ S(   N(   R   R   R   (   R   R"   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   __rmul__\   s    c         C  s:   |  j  | ƒ } | d  k	 r2 |  j |  j | j ƒ St Sd  S(   N(   R#   R!   R   R   R$   (   R   t   n(    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   __pow___   s    c         C  s:   |  j  | ƒ } | d  k	 r2 |  j |  j | j ƒ St Sd  S(   N(   R#   R!   R   R   R$   (   R   R"   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   __truediv__g   s    c         C  s    |  j  |  j | ƒ j |  j ƒ S(   N(   R   R   R   (   R   R"   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   __rtruediv__o   s    c         C  s   |  j  |  j | ƒ j  k S(   N(   R   R   (   R   R"   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   __eq__u   s    c         C  s   |  | k S(   N(    (   R   R"   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   __ne__x   s    c         C  s   |  j  d k S(   Ni    (   R   (   R   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   __nonzero__{   s    c         C  s5   d d l  m } |  j | |  j |  j | ƒ j ƒ ƒ S(   Niÿÿÿÿ(   t   gcd(   t   sympy.polysR2   R   R   (   R   R"   R2   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyR2   €   s    c         C  s5   d d l  m } |  j | |  j |  j | ƒ j ƒ ƒ S(   Niÿÿÿÿ(   t   lcm(   R3   R4   R   R   (   R   R"   R4   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyR4   „   s    (    R   t
   __module__t   __doc__t	   __slots__R   R   R   R   R   R   R   R   R   R    R#   R%   R&   R'   R(   R)   R*   R,   R-   R.   t   __div__t   __rdiv__R/   R0   R1   t   __bool__R2   R4   (    (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyR
      s<   																									i    i   t   EXc         C  s   d  S(   N(    (   R   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyR   ’   s    c         C  s
   | j  ƒ  S(   s!   Convert ``a`` to a SymPy object. (   R   (   R   t   a(    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   to_sympy•   s    c         C  s   |  j  | ƒ S(   s)   Convert SymPy's expression to ``dtype``. (   t   dtype(   R   R<   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt
   from_sympy™   s    c         C  s   |  | j  | ƒ ƒ S(   s.   Convert a Python ``int`` object to ``dtype``. (   R=   (   t   K1R<   t   K0(    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   from_ZZ_python   s    c         C  s   |  | j  | ƒ ƒ S(   s3   Convert a Python ``Fraction`` object to ``dtype``. (   R=   (   R@   R<   RA   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   from_QQ_python¡   s    c         C  s   |  | j  | ƒ ƒ S(   s,   Convert a GMPY ``mpz`` object to ``dtype``. (   R=   (   R@   R<   RA   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   from_ZZ_gmpy¥   s    c         C  s   |  | j  | ƒ ƒ S(   s,   Convert a GMPY ``mpq`` object to ``dtype``. (   R=   (   R@   R<   RA   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   from_QQ_gmpy©   s    c         C  s   |  | j  | ƒ ƒ S(   s.   Convert a mpmath ``mpf`` object to ``dtype``. (   R=   (   R@   R<   RA   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   from_RealField­   s    c         C  s   |  | j  | ƒ ƒ S(   s'   Convert a ``DMP`` object to ``dtype``. (   R=   (   R@   R<   RA   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   from_PolynomialRing±   s    c         C  s   |  | j  | ƒ ƒ S(   s'   Convert a ``DMF`` object to ``dtype``. (   R=   (   R@   R<   RA   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   from_FractionFieldµ   s    c         C  s   | S(   s&   Convert a ``EX`` object to ``dtype``. (    (   R@   R<   RA   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   from_ExpressionDomain¹   s    c         C  s   |  S(   s)   Returns a ring associated with ``self``. (    (   R   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   get_ring½   s    c         C  s   |  S(   s*   Returns a field associated with ``self``. (    (   R   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt	   get_fieldÁ   s    c         C  s   | j  j ƒ  d j S(   s#   Returns True if ``a`` is positive. i    (   R   t   as_coeff_mult   is_positive(   R   R<   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyRM   Å   s    c         C  s   | j  j ƒ  d j S(   s#   Returns True if ``a`` is negative. i    (   R   RL   t   is_negative(   R   R<   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyRN   É   s    c         C  s   | j  j ƒ  d j S(   s'   Returns True if ``a`` is non-positive. i    (   R   RL   t   is_nonpositive(   R   R<   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyRO   Í   s    c         C  s   | j  j ƒ  d j S(   s'   Returns True if ``a`` is non-negative. i    (   R   RL   t   is_nonnegative(   R   R<   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyRP   Ñ   s    c         C  s
   | j  ƒ  S(   s   Returns numerator of ``a``. (   R   (   R   R<   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyR   Õ   s    c         C  s
   | j  ƒ  S(   s   Returns denominator of ``a``. (   R   (   R   R<   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyR   Ù   s    c         C  s   | j  | ƒ S(   N(   R2   (   R   R<   t   b(    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyR2   Ý   s    c         C  s   | j  | ƒ S(   N(   R4   (   R   R<   RQ   (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyR4   à   s    ($   R   R5   R6   t   Truet   is_SymbolicDomaint   is_EXR   R
   R>   t   zerot   onet   rept   Falset   has_assoc_Ringt   has_assoc_FieldR   R=   R?   RB   RC   RD   RE   RF   RG   RH   RI   RJ   RK   RM   RN   RO   RP   R   R   R2   R4   (    (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyR	      s<   
v																				N(   R6   t
   __future__R    R   t
   sympy.coreR   R   t&   sympy.polys.domains.characteristiczeroR   t   sympy.polys.domains.fieldR   t    sympy.polys.domains.simpledomainR   t   sympy.polys.polyutilsR   t   sympy.utilitiesR   R	   (    (    (    sC   lib/python2.7/site-packages/sympy/polys/domains/expressiondomain.pyt   <module>   s   