
    sg                     |    d Z ddlm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 e G d de             Zy	)
z4Implementation of :class:`PythonIntegerRing` class.     )
int_valued)PythonIntegerSymPyIntegersqrt	factorialpython_gcdex
python_gcd
python_lcm)IntegerRing)CoercionFailed)publicc                       e Zd ZdZeZ ed      Z e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y)PythonIntegerRingzInteger ring based on Python's ``int`` type.

    This will be used as :ref:`ZZ` if ``gmpy`` and ``gmpy2`` are not
    installed. Elements are instances of the standard Python ``int`` type.
    r      	ZZ_pythonc                      y)z$Allow instantiation of this domain. N )selfs    X/var/www/html/venv/lib/python3.12/site-packages/sympy/polys/domains/pythonintegerring.py__init__zPythonIntegerRing.__init__   s        c                     t        |      S )z!Convert ``a`` to a SymPy object. )r   r   as     r   to_sympyzPythonIntegerRing.to_sympy   s    A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   intr   r   s     r   
from_sympyzPythonIntegerRing.from_sympy!   s?    << %%] Q(( !>!BCCr   c                 $    |j                  |      S )z5Convert ``ModularInteger(int)`` to Python's ``int``. )to_intK1r   K0s      r   from_FF_pythonz PythonIntegerRing.from_FF_python*   s    yy|r   c                     |S )z.Convert Python's ``int`` to Python's ``int``. r   r#   s      r   from_ZZ_pythonz PythonIntegerRing.from_ZZ_python.   s    r   c                 :    |j                   dk(  r|j                  S yz3Convert Python's ``Fraction`` to Python's ``int``. r   Ndenominator	numeratorr#   s      r   from_QQzPythonIntegerRing.from_QQ2       ==A;; r   c                 :    |j                   dk(  r|j                  S yr*   r+   r#   s      r   from_QQ_pythonz PythonIntegerRing.from_QQ_python7   r/   r   c                 6    t        |j                  |            S )z5Convert ``ModularInteger(mpz)`` to Python's ``int``. )r   r"   r#   s      r   from_FF_gmpyzPythonIntegerRing.from_FF_gmpy<   s    RYYq\**r   c                     t        |      S )z,Convert GMPY's ``mpz`` to Python's ``int``. )r   r#   s      r   from_ZZ_gmpyzPythonIntegerRing.from_ZZ_gmpy@   s    Qr   c                 \    |j                         dk(  rt        |j                               S y)z,Convert GMPY's ``mpq`` to Python's ``int``. r   N)denomr   numerr#   s      r   from_QQ_gmpyzPythonIntegerRing.from_QQ_gmpyD   s%    779> ++ r   c                 L    |j                  |      \  }}|dk(  rt        |      S y)z.Convert mpmath's ``mpf`` to Python's ``int``. r   N)to_rationalr   )r$   r   r%   r   qs        r   from_RealFieldz PythonIntegerRing.from_RealFieldI   s+    ~~a 16 ## r   c                     t        ||      S )z)Compute extended GCD of ``a`` and ``b``. )r   r   r   bs      r   gcdexzPythonIntegerRing.gcdexP   s    Aq!!r   c                     t        ||      S )z Compute GCD of ``a`` and ``b``. )r	   r?   s      r   gcdzPythonIntegerRing.gcdT       !Qr   c                     t        ||      S )z Compute LCM of ``a`` and ``b``. )r
   r?   s      r   lcmzPythonIntegerRing.lcmX   rD   r   c                     t        |      S )zCompute square root of ``a``. )python_sqrtr   s     r   r   zPythonIntegerRing.sqrt\   s    1~r   c                     t        |      S )zCompute factorial of ``a``. )python_factorialr   s     r   r   zPythonIntegerRing.factorial`   s    ""r   N)__name__
__module____qualname____doc__r   dtypezeroonealiasr   r   r    r&   r(   r.   r1   r3   r5   r9   r=   rA   rC   rF   r   r   r   r   r   r   r      sv     E8D
(CE3D

+ ,
$"  #r   r   N)rN   sympy.core.numbersr   sympy.polys.domains.groundtypesr   r   r   rH   r   rJ   r   r	   r
   sympy.polys.domains.integerringr   sympy.polys.polyerrorsr   sympy.utilitiesr   r   r   r   r   <module>rX      sC    : *   8 1 "T# T# T#r   