o
    jg÷  ã                   @   sT   d Z ddl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 )	z6Implementation of :class:`PythonRationalField` class. é    )ÚPythonIntegerÚPythonRationalÚSymPyRational)ÚRationalField)Ú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 )ÚPythonRationalFieldz£Rational field based on :ref:`MPQ`.

    This will be used as :ref:`QQ` if ``gmpy`` and ``gmpy2`` are not
    installed. Elements are instances of :ref:`MPQ`.
    r   é   Ú	QQ_pythonc                 C   s   d S )N© )Úselfr   r   ú_/var/www/html/zoom/venv/lib/python3.10/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   sR   |j r
t|j|jƒS |jr#ddlm} | |¡\}}tt|ƒt|ƒƒS t	d| ƒ‚)z%Convert SymPy's Rational to `dtype`. r   )ÚRRz"expected `Rational` object, got %s)
Úis_Rationalr   ÚpÚqÚ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   Úfrom_QQ_python1   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   Úfrom_ZZ_gmpy5   s   z PythonRationalField.from_ZZ_gmpyc                 C   s   t t| ¡ ƒt| ¡ ƒƒS )z(Convert a GMPY `mpq` object to `dtype`. )r   r   ÚnumerÚdenomr   r   r   r   Úfrom_QQ_gmpy9   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   ó   |j S )zReturns numerator of `a`. )r   r   r   r   r   r%   C   ó   zPythonRationalField.numerc                 C   r)   )zReturns denominator of `a`. )r   r   r   r   r   r&   G   r*   zPythonRationalField.denomN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚdtypeÚzeroÚoneÚaliasr   r   r   r   r"   r#   r$   r'   r(   r%   r&   r   r   r   r   r   	   s"    r   N)r.   Úsympy.polys.domains.groundtypesr   r   r   Ú!sympy.polys.domains.rationalfieldr   Úsympy.polys.polyerrorsr   Úsympy.utilitiesr   r   r   r   r   r   Ú<module>   s    