ó
¡Œ\c           @  s    d  Z  d d l m Z m Z d d l m Z m Z m Z m Z m	 Z	 m
 Z
 m Z d d l m Z d d l m Z d d l m Z e d e f d     Y Z d	 S(
   s1   Implementaton of :class:`GMPYIntegerRing` class. iÿÿÿÿ(   t   print_functiont   division(   t   GMPYIntegert   SymPyIntegert   gmpy_factorialt
   gmpy_gcdext   gmpy_gcdt   gmpy_lcmt	   gmpy_sqrt(   t   IntegerRing(   t   CoercionFailed(   t   publict   GMPYIntegerRingc           B  sÅ   e  Z d  Z e Z e d  Z e d  Z e 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 RS(   s+   Integer ring based on GMPY's ``mpz`` type. i    i   t   ZZ_gmpyc         C  s   d S(   s$   Allow instantiation of this domain. N(    (   t   self(    (    sB   lib/python2.7/site-packages/sympy/polys/domains/gmpyintegerring.pyt   __init__   t    c         C  s   t  t |   S(   s!   Convert ``a`` to a SymPy object. (   R   t   int(   R   t   a(    (    sB   lib/python2.7/site-packages/sympy/polys/domains/gmpyintegerring.pyt   to_sympy   s    c         C  sU   | j  r t | j  S| j rA t |  | k rA t t |   St d |   d S(   s&   Convert SymPy's Integer to ``dtype``. s   expected an integer, got %sN(   t
   is_IntegerR   t   pt   is_FloatR   R
   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/polys/domains/gmpyintegerring.pyt
   from_sympy   s
    	c         C  s   t  | j    S(   s3   Convert ``ModularInteger(int)`` to GMPY's ``mpz``. (   R   t   to_int(   t   K1R   t   K0(    (    sB   lib/python2.7/site-packages/sympy/polys/domains/gmpyintegerring.pyt   from_FF_python(   s    c         C  s
   t  |  S(   s,   Convert Python's ``int`` to GMPY's ``mpz``. (   R   (   R   R   R   (    (    sB   lib/python2.7/site-packages/sympy/polys/domains/gmpyintegerring.pyt   from_ZZ_python,   s    c         C  s    | j  d k r t | j  Sd S(   s1   Convert Python's ``Fraction`` to GMPY's ``mpz``. i   N(   t   denominatorR   t	   numerator(   R   R   R   (    (    sB   lib/python2.7/site-packages/sympy/polys/domains/gmpyintegerring.pyt   from_QQ_python0   s    c         C  s
   | j    S(   s3   Convert ``ModularInteger(mpz)`` to GMPY's ``mpz``. (   R   (   R   R   R   (    (    sB   lib/python2.7/site-packages/sympy/polys/domains/gmpyintegerring.pyt   from_FF_gmpy5   s    c         C  s   | S(   s*   Convert GMPY's ``mpz`` to GMPY's ``mpz``. (    (   R   R   R   (    (    sB   lib/python2.7/site-packages/sympy/polys/domains/gmpyintegerring.pyt   from_ZZ_gmpy9   s    c         C  s   | j  d k r | j Sd S(   s(   Convert GMPY ``mpq`` to GMPY's ``mpz``. i   N(   R   R   (   R   R   R   (    (    sB   lib/python2.7/site-packages/sympy/polys/domains/gmpyintegerring.pyt   from_QQ_gmpy=   s    c         C  s/   | j  |  \ } } | d k r+ t |  Sd S(   s,   Convert mpmath's ``mpf`` to GMPY's ``mpz``. i   N(   t   to_rationalR   (   R   R   R   R   t   q(    (    sB   lib/python2.7/site-packages/sympy/polys/domains/gmpyintegerring.pyt   from_RealFieldB   s    c         C  s%   t  | |  \ } } } | | | f S(   s)   Compute extended GCD of ``a`` and ``b``. (   R   (   R   R   t   bt   ht   st   t(    (    sB   lib/python2.7/site-packages/sympy/polys/domains/gmpyintegerring.pyt   gcdexI   s    c         C  s   t  | |  S(   s    Compute GCD of ``a`` and ``b``. (   R   (   R   R   R&   (    (    sB   lib/python2.7/site-packages/sympy/polys/domains/gmpyintegerring.pyt   gcdN   s    c         C  s   t  | |  S(   s    Compute LCM of ``a`` and ``b``. (   R   (   R   R   R&   (    (    sB   lib/python2.7/site-packages/sympy/polys/domains/gmpyintegerring.pyt   lcmR   s    c         C  s
   t  |  S(   s   Compute square root of ``a``. (   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/polys/domains/gmpyintegerring.pyt   sqrtV   s    c         C  s
   t  |  S(   s   Compute factorial of ``a``. (   R   (   R   R   (    (    sB   lib/python2.7/site-packages/sympy/polys/domains/gmpyintegerring.pyt	   factorialZ   s    (   t   __name__t
   __module__t   __doc__R   t   dtypet   zerot   onet   typet   tpt   aliasR   R   R   R   R   R   R    R!   R"   R%   R*   R+   R,   R-   R.   (    (    (    sB   lib/python2.7/site-packages/sympy/polys/domains/gmpyintegerring.pyR      s*   															N(   R1   t
   __future__R    R   t   sympy.polys.domains.groundtypesR   R   R   R   R   R   R   t   sympy.polys.domains.integerringR	   t   sympy.polys.polyerrorsR
   t   sympy.utilitiesR   R   (    (    (    sB   lib/python2.7/site-packages/sympy/polys/domains/gmpyintegerring.pyt   <module>   s   4