o
    ij                     @   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   t/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/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   sF   |j r
t|j|jS |jrddlm} ttt|	| S t
d| )z&Convert SymPy's Integer to ``dtype``. r   )RRz$expected ``Rational`` object, got %s)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      t |S )z.Convert a Python ``int`` object to ``dtype``. r   ZK1r   ZK0r   r   r   from_ZZ_python1      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   r   )z,Convert a GMPY ``mpz`` object to ``dtype``. r   r   r   r   r   from_ZZ_gmpy9   r!   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      t |t | S )z=Exact quotient of ``a`` and ``b``, implies ``__truediv__``.  r   r   r   br   r   r   exquoJ      zGMPYRationalField.exquoc                 C   r+   )z6Quotient of ``a`` and ``b``, implies ``__truediv__``. r   r,   r   r   r   quoN   r/   zGMPYRationalField.quoc                 C   s   | j S )z0Remainder of ``a`` and ``b``, implies nothing.  )zeror,   r   r   r   remR      zGMPYRationalField.remc                 C   s   t |t | | jfS )z6Division of ``a`` and ``b``, implies ``__truediv__``. )r   r1   r,   r   r   r   divV   s   zGMPYRationalField.divc                 C      |j S )zReturns numerator of ``a``. )r"   r   r   r   r   numerZ   r3   zGMPYRationalField.numerc                 C   r5   )zReturns denominator of ``a``. )r#   r   r   r   r   denom^   r3   zGMPYRationalField.denomc                 C   s   t tt|S )zReturns factorial of ``a``. )r   gmpy_factorialr   r   r   r   r   r   b   r/   zGMPYRationalField.factorialN)__name__
__module____qualname____doc__r   Zdtyper1   onetypetpaliasr   r   r   r   r    r$   r%   r&   r)   r*   r.   r0   r2   r4   r6   r7   r   r   r   r   r   r
      s0    
r
   N)r<   Zsympy.polys.domains.groundtypesr   r   r   r   r   r8   Z!sympy.polys.domains.rationalfieldr   Zsympy.polys.polyerrorsr   Zsympy.utilitiesr	   r
   r   r   r   r   <module>   s    