§
    OŠtjÝ  ã                   óŠ   — d 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 ddlmZ e G d„ de¦  «        ¦   «         Zd	S )
z2Implementation of :class:`GMPYIntegerRing` class. é    )ÚGMPYIntegerÚSymPyIntegerÚ	factorialÚ
gmpy_gcdexÚgmpy_gcdÚgmpy_lcmÚsqrt)Ú
int_valued)ÚIntegerRing)ÚCoercionFailed)Úpublicc                   óÂ   — e Zd 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d„ Zd„ ZdS )ÚGMPYIntegerRingz³Integer ring based on GMPY's ``mpz`` type.

    This will be the implementation of :ref:`ZZ` if ``gmpy`` or ``gmpy2`` is
    installed. Elements will be of type ``gmpy.mpz``.
    r   é   ÚZZ_gmpyc                 ó   — dS )z$Allow instantiation of this domain. N© )Úselfs    úa/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/polys/domains/gmpyintegerring.pyÚ__init__zGMPYIntegerRing.__init__   s   € € € ó    c                 ó:   — t          t          |¦  «        ¦  «        S )z!Convert ``a`` to a SymPy object. )r   Úint©r   Úas     r   Úto_sympyzGMPYIntegerRing.to_sympy   s   € å�C ™FœFÑ#Ô#Ð#r   c                 ó²   — |j         rt          |j        ¦  «        S t          |¦  «        rt          t	          |¦  «        ¦  «        S t          d|z  ¦  «        ‚)z&Convert SymPy's Integer to ``dtype``. zexpected an integer, got %s)Ú
is_Integerr   Úpr
   r   r   r   s     r   Ú
from_sympyzGMPYIntegerRing.from_sympy#   sT   € àŒ<ð 	DÝ˜qœsÑ#Ô#Ð#Ý˜‰]Œ]ð 	DÝ�s 1™vœvÑ&Ô&Ð&å Ð!>ÀÑ!BÑCÔCÐCr   c                 ó,   — |                      |¦  «        S )z3Convert ``ModularInteger(int)`` to GMPY's ``mpz``. ©Úto_int©ÚK1r   ÚK0s      r   Úfrom_FF_pythonzGMPYIntegerRing.from_FF_python,   ó   € à�yŠy˜‰|Œ|Ðr   c                 ó    — t          |¦  «        S )z,Convert Python's ``int`` to GMPY's ``mpz``. )r   r$   s      r   Úfrom_ZZ_pythonzGMPYIntegerRing.from_ZZ_python0   s   € å˜1‰~Œ~Ðr   c                 óD   — |j         dk    rt          |j        ¦  «        S dS ©z1Convert Python's ``Fraction`` to GMPY's ``mpz``. r   N©Údenominatorr   Ú	numeratorr$   s      r   Úfrom_QQzGMPYIntegerRing.from_QQ4   ó'   € àŒ=˜AÒÐÝ˜qœ{Ñ+Ô+Ð+ð Ðr   c                 óD   — |j         dk    rt          |j        ¦  «        S dS r,   r-   r$   s      r   Úfrom_QQ_pythonzGMPYIntegerRing.from_QQ_python9   r1   r   c                 ó,   — |                      |¦  «        S )z3Convert ``ModularInteger(mpz)`` to GMPY's ``mpz``. r"   r$   s      r   Úfrom_FF_gmpyzGMPYIntegerRing.from_FF_gmpy>   r(   r   c                 ó   — |S )z*Convert GMPY's ``mpz`` to GMPY's ``mpz``. r   r$   s      r   Úfrom_ZZ_gmpyzGMPYIntegerRing.from_ZZ_gmpyB   s   € àˆr   c                 ó*   — |j         dk    r|j        S dS )z(Convert GMPY ``mpq`` to GMPY's ``mpz``. r   N)r.   r/   r$   s      r   Úfrom_QQ_gmpyzGMPYIntegerRing.from_QQ_gmpyF   s   € àŒ=˜AÒÐØ”;Ðð Ðr   c                 ó`   — |                      |¦  «        \  }}|dk    rt          |¦  «        S dS )z,Convert mpmath's ``mpf`` to GMPY's ``mpz``. r   N)Úto_rationalr   )r%   r   r&   r   Úqs        r   Úfrom_RealFieldzGMPYIntegerRing.from_RealFieldK   s3   € à�~Š~˜aÑ Ô ‰ˆˆ1à�Š6ˆ6Ý˜q‘>”>Ð!ð ˆ6r   c                 ó*   — |j         dk    r|j        S d S )Nr   )ÚyÚxr$   s      r   Úfrom_GaussianIntegerRingz(GMPYIntegerRing.from_GaussianIntegerRingR   s   € ØŒ3�!Š8ˆ8Ø”3ˆJð ˆ8r   c                 ó4   — t          ||¦  «        \  }}}|||fS )z)Compute extended GCD of ``a`` and ``b``. )r   )r   r   ÚbÚhÚsÚts         r   ÚgcdexzGMPYIntegerRing.gcdexV   s"   € å˜Q Ñ"Ô"‰ˆˆ1ˆaØ�!�Qˆwˆr   c                 ó"   — t          ||¦  «        S )z Compute GCD of ``a`` and ``b``. )r   ©r   r   rC   s      r   ÚgcdzGMPYIntegerRing.gcd[   ó   € å˜˜1‰~Œ~Ðr   c                 ó"   — t          ||¦  «        S )z Compute LCM of ``a`` and ``b``. )r   rI   s      r   ÚlcmzGMPYIntegerRing.lcm_   rK   r   c                 ó    — t          |¦  «        S )zCompute square root of ``a``. )Ú	gmpy_sqrtr   s     r   r	   zGMPYIntegerRing.sqrtc   s   € å˜‰|Œ|Ðr   c                 ó    — t          |¦  «        S )zCompute factorial of ``a``. )Úgmpy_factorialr   s     r   r   zGMPYIntegerRing.factorialg   s   € å˜aÑ Ô Ð r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚdtypeÚzeroÚoneÚtypeÚtpÚaliasr   r   r    r'   r*   r0   r3   r5   r7   r9   r=   rA   rG   rJ   rM   r	   r   r   r   r   r   r      sS  € € € € € ðð ð €EØˆ5�‰8Œ8€DØ
ˆ%�‰(Œ(€CØ	ˆˆc‰Œ€BØ€Eð3ð 3ð 3ð$ð $ð $ðDð Dð Dðð ð ðð ð ð,ð ,ð ,ð
,ð ,ð ,ð
ð ð ðð ð ðð ð ð
"ð "ð "ðð ð ðð ð ð
ð ð ðð ð ðð ð ð!ð !ð !ð !ð !r   r   N)rU   Úsympy.polys.domains.groundtypesr   r   r   rQ   r   r   r   r	   rO   Úsympy.core.numbersr
   Úsympy.polys.domains.integerringr   Úsympy.polys.polyerrorsr   Úsympy.utilitiesr   r   r   r   r   ú<module>ra      s÷   ðØ 8Ð 8ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð
 *Ð )Ð )Ð )Ð )Ð )Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø "Ð "Ð "Ð "Ð "Ð "àðZ!ð Z!ð Z!ð Z!ð Z!�kñ Z!ô Z!ñ „ðZ!ð Z!ð Z!r   