U
    L?hj                     @   s\   d Z ddl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G dd de	ZdS )	z4Implementation of :class:`GMPYRationalField` class.     )GMPYRationalSymPyRational
gmpy_numer
gmpy_denom	factorial)RationalField)CoercionFailed)publicc                   @   s   e Zd ZdZeZedZedZeeZ	dZ
dd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'S )(GMPYRationalFieldzRational field based on GMPY's ``mpq`` type.

    This will be the implementation of :ref:`QQ` if ``gmpy`` or ``gmpy2`` is
    installed. Elements will be of type ``gmpy.mpq``.
    r      ZQQ_gmpyc                 C   s   d S )N )selfr   r   W/var/www/html/venv/lib/python3.8/site-packages/sympy/polys/domains/gmpyrationalfield.py__init__   s    zGMPYRationalField.__init__c                 C   s   ddl m} | S )z'Returns ring associated with ``self``. r   )GMPYIntegerRing)sympy.polys.domainsr   )r   r   r   r   r   get_ring   s    zGMPYRationalField.get_ringc                 C   s   t tt|tt|S )z!Convert ``a`` to a SymPy object. )r   intr   r   r   ar   r   r   to_sympy"   s    
zGMPYRationalField.to_sympyc                 C   sJ   |j rt|j|jS |jr:ddlm} ttt|	| S t
d| dS )z&Convert SymPy's Integer to ``dtype``. r   )RRz$expected ``Rational`` object, got %sN)Zis_Rationalr   pqZis_Floatr   r   mapr   to_rationalr   )r   r   r   r   r   r   
from_sympy'   s    zGMPYRationalField.from_sympyc                 C   s   t |S )z.Convert a Python ``int`` object to ``dtype``. r   ZK1r   ZK0r   r   r   from_ZZ_python1   s    z GMPYRationalField.from_ZZ_pythonc                 C   s   t |j|jS )z3Convert a Python ``Fraction`` object to ``dtype``. )r   	numeratordenominatorr   r   r   r   from_QQ_python5   s    z GMPYRationalField.from_QQ_pythonc                 C   s   t |S )z,Convert a GMPY ``mpz`` object to ``dtype``. r   r   r   r   r   from_ZZ_gmpy9   s    zGMPYRationalField.from_ZZ_gmpyc                 C   s   |S )z,Convert a GMPY ``mpq`` object to ``dtype``. r   r   r   r   r   from_QQ_gmpy=   s    zGMPYRationalField.from_QQ_gmpyc                 C   s   |j dkrt|jS dS )z3Convert a ``GaussianElement`` object to ``dtype``. r   N)yr   xr   r   r   r   from_GaussianRationalFieldA   s    
z,GMPYRationalField.from_GaussianRationalFieldc                 C   s   t tt|| S )z.Convert a mpmath ``mpf`` object to ``dtype``. )r   r   r   r   r   r   r   r   from_RealFieldF   s    z GMPYRationalField.from_RealFieldc                 C   s   t |t | S )z=Exact quotient of ``a`` and ``b``, implies ``__truediv__``.  r   r   r   br   r   r   exquoJ   s    zGMPYRationalField.exquoc                 C   s   t |t | S )z6Quotient of ``a`` and ``b``, implies ``__truediv__``. r   r)   r   r   r   quoN   s    zGMPYRationalField.quoc                 C   s   | j S )z0Remainder of ``a`` and ``b``, implies nothing.  )zeror)   r   r   r   remR   s    zGMPYRationalField.remc                 C   s   t |t | | jfS )z6Division of ``a`` and ``b``, implies ``__truediv__``. )r   r-   r)   r   r   r   divV   s    zGMPYRationalField.divc                 C   s   |j S )zReturns numerator of ``a``. )r    r   r   r   r   numerZ   s    zGMPYRationalField.numerc                 C   s   |j S )zReturns denominator of ``a``. )r!   r   r   r   r   denom^   s    zGMPYRationalField.denomc                 C   s   t tt|S )zReturns factorial of ``a``. )r   gmpy_factorialr   r   r   r   r   r   b   s    zGMPYRationalField.factorialN)__name__
__module____qualname____doc__r   Zdtyper-   onetypetpaliasr   r   r   r   r   r"   r#   r$   r'   r(   r+   r,   r.   r/   r0   r1   r   r   r   r   r   r
      s.   
r
   N)r6   Zsympy.polys.domains.groundtypesr   r   r   r   r   r2   Z!sympy.polys.domains.rationalfieldr   Zsympy.polys.polyerrorsr   Zsympy.utilitiesr	   r
   r   r   r   r   <module>   s   