B
    ˜‘[º  ã               @   sd   d Z ddlmZmZ ddlmZ ddlmZmZm	Z	 ddl
mZ ddlmZ eG dd„ deƒƒZd	S )
z6Implementation of :class:`PythonRationalField` class. é    )Úprint_functionÚdivision)ÚRationalField)ÚPythonIntegerÚPythonRationalÚSymPyRational)ÚCoercionFailed)Úpublicc               @   s€   e Zd ZdZeZedƒZedƒ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S )ÚPythonRationalFieldz5Rational field based on Python rational number type. r   é   Z	QQ_pythonc             C   s   d S )N© )Úselfr   r   úFlib/python3.7/site-packages/sympy/polys/domains/pythonrationalfield.pyÚ__init__   s    zPythonRationalField.__init__c             C   s   ddl m} |ƒ S )z'Returns ring associated with ``self``. r   )ÚPythonIntegerRing)Úsympy.polys.domainsr   )r   r   r   r   r   Úget_ring   s    zPythonRationalField.get_ringc             C   s   t |j|jƒS )zConvert `a` to a SymPy object. )r   Ú	numeratorÚdenominator)r   Úar   r   r   Úto_sympy   s    zPythonRationalField.to_sympyc             C   sV   |j rt|j|jƒS |jrFddlm} | |¡\}}tt|ƒt|ƒƒS t	d| ƒ‚dS )z%Convert SymPy's Rational to `dtype`. r   )ÚRRz"expected `Rational` object, got %sN)
Zis_Rationalr   ÚpÚqZis_Floatr   r   Úto_rationalÚintr   )r   r   r   r   r   r   r   r   Ú
from_sympy    s    zPythonRationalField.from_sympyc             C   s   t |ƒS )z*Convert a Python `int` object to `dtype`. )r   )ÚK1r   ÚK0r   r   r   Úfrom_ZZ_python+   s    z"PythonRationalField.from_ZZ_pythonc             C   s   |S )z/Convert a Python `Fraction` object to `dtype`. r   )r   r   r   r   r   r   Úfrom_QQ_python/   s    z"PythonRationalField.from_QQ_pythonc             C   s   t t|ƒƒS )z(Convert a GMPY `mpz` object to `dtype`. )r   r   )r   r   r   r   r   r   Úfrom_ZZ_gmpy3   s    z PythonRationalField.from_ZZ_gmpyc             C   s   t t| ¡ ƒt| ¡ ƒƒS )z(Convert a GMPY `mpq` object to `dtype`. )r   r   ÚnumerÚdenom)r   r   r   r   r   r   Úfrom_QQ_gmpy7   s    z PythonRationalField.from_QQ_gmpyc             C   s    |  |¡\}}tt|ƒt|ƒƒS )z*Convert a mpmath `mpf` object to `dtype`. )r   r   r   )r   r   r   r   r   r   r   r   Úfrom_RealField<   s    z"PythonRationalField.from_RealFieldc             C   s   |j S )zReturns numerator of `a`. )r   )r   r   r   r   r   r"   A   s    zPythonRationalField.numerc             C   s   |j S )zReturns denominator of `a`. )r   )r   r   r   r   r   r#   E   s    zPythonRationalField.denomN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ZdtypeZzeroZoneÚaliasr   r   r   r   r   r    r!   r$   r%   r"   r#   r   r   r   r   r
      s    r
   N)r)   Z
__future__r   r   Z!sympy.polys.domains.rationalfieldr   Zsympy.polys.domains.groundtypesr   r   r   Zsympy.polys.polyerrorsr   Zsympy.utilitiesr	   r
   r   r   r   r   Ú<module>   s   