
    Edq                     ~    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 e G d de                      ZdS )	z4Implementation of :class:`PythonIntegerRing` class.     )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dS )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                     dS )z$Allow instantiation of this domain. N )selfs    Elib/python3.11/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 |j        r/t	          |          |k    rt          t	          |                    S t          d|z            )z&Convert SymPy's Integer to ``dtype``. zexpected an integer, got %s)
is_Integerr   pis_Floatintr   r   s     r   
from_sympyzPythonIntegerRing.from_sympy    sb    < 	D %%%Z 	DCFFaK 	D Q((( !>!BCCCr   c                 *    |                                 S )z5Convert ``ModularInteger(int)`` to Python's ``int``. )to_intK1r   K0s      r   from_FF_pythonz PythonIntegerRing.from_FF_python)   s    xxzz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 dS z3Convert Python's ``Fraction`` to Python's ``int``. r   Ndenominator	numeratorr#   s      r   from_QQzPythonIntegerRing.from_QQ1   #    =A 	;	 	r   c                 *    |j         dk    r|j        S dS r*   r+   r#   s      r   from_QQ_pythonz PythonIntegerRing.from_QQ_python6   r/   r   c                 D    t          |                                          S )z5Convert ``ModularInteger(mpz)`` to Python's ``int``. )r   r"   r#   s      r   from_FF_gmpyzPythonIntegerRing.from_FF_gmpy;   s    QXXZZ(((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                 x    |                                 dk    r!t          |                                          S dS )z,Convert GMPY's ``mpq`` to Python's ``int``. r   N)denomr   numerr#   s      r   from_QQ_gmpyzPythonIntegerRing.from_QQ_gmpyC   s6    7799> 	, +++	, 	,r   c                 `    |                     |          \  }}|dk    rt          |          S dS )z.Convert mpmath's ``mpf`` to Python's ``int``. r   N)to_rationalr   )r$   r   r%   r   qs        r   from_RealFieldz PythonIntegerRing.from_RealFieldH   s;    ~~a  16 	$ ###	$ 	$r   c                 "    t          ||          S )z)Compute extended GCD of ``a`` and ``b``. )r   r   r   bs      r   gcdexzPythonIntegerRing.gcdexO   s    Aq!!!r   c                 "    t          ||          S )z Compute GCD of ``a`` and ``b``. )r   r?   s      r   gcdzPythonIntegerRing.gcdS       !Qr   c                 "    t          ||          S )z Compute LCM of ``a`` and ``b``. )r	   r?   s      r   lcmzPythonIntegerRing.lcmW   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      s7         E588D
%((CE3 3 3  D D D      
  
) ) )     , , ,
$ $ $" " "            # # # # #r   r   N)rN   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>rW      s    : :                  8 7 7 7 7 7 1 1 1 1 1 1 " " " " " "T# T# T# T# T# T# T# T# T# T#r   