a
    RG5dq  ã                   @   sd   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„ deƒƒZdS )	z4Implementation of :class:`PythonIntegerRing` class. é    )ÚPythonIntegerÚSymPyIntegerÚsqrtÚ	factorialÚpython_gcdexÚ
python_gcdÚ
python_lcm)ÚIntegerRing)Ú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d„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%S )&ÚPythonIntegerRingzÂInteger 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                 C   s   dS )z$Allow instantiation of this domain. N© )Úselfr   r   úa/var/www/html/django/DPS/env/lib/python3.9/site-packages/sympy/polys/domains/pythonintegerring.pyÚ__init__   s    zPythonIntegerRing.__init__c                 C   s   t |ƒS )z!Convert ``a`` to a SymPy object. )r   ©r   Úar   r   r   Úto_sympy   s    zPythonIntegerRing.to_sympyc                 C   s>   |j rt|jƒS |jr.t|ƒ|kr.tt|ƒƒS td| ƒ‚dS )z&Convert SymPy's Integer to ``dtype``. zexpected an integer, got %sN)Ú
is_Integerr   ÚpÚis_FloatÚintr
   r   r   r   r   Ú
from_sympy    s
    
zPythonIntegerRing.from_sympyc                 C   s   |  ¡ S )z5Convert ``ModularInteger(int)`` to Python's ``int``. )Úto_int©ÚK1r   ÚK0r   r   r   Úfrom_FF_python)   s    z PythonIntegerRing.from_FF_pythonc                 C   s   |S )z.Convert Python's ``int`` to Python's ``int``. r   r   r   r   r   Úfrom_ZZ_python-   s    z PythonIntegerRing.from_ZZ_pythonc                 C   s   |j dkr|jS dS ©z3Convert Python's ``Fraction`` to Python's ``int``. r   N©ÚdenominatorÚ	numeratorr   r   r   r   Úfrom_QQ1   s    
zPythonIntegerRing.from_QQc                 C   s   |j dkr|jS dS r!   r"   r   r   r   r   Úfrom_QQ_python6   s    
z PythonIntegerRing.from_QQ_pythonc                 C   s   t | ¡ ƒS )z5Convert ``ModularInteger(mpz)`` to Python's ``int``. )r   r   r   r   r   r   Úfrom_FF_gmpy;   s    zPythonIntegerRing.from_FF_gmpyc                 C   s   t |ƒS )z,Convert GMPY's ``mpz`` to Python's ``int``. )r   r   r   r   r   Úfrom_ZZ_gmpy?   s    zPythonIntegerRing.from_ZZ_gmpyc                 C   s   |  ¡ dkrt| ¡ ƒS dS )z,Convert GMPY's ``mpq`` to Python's ``int``. r   N)Údenomr   Únumerr   r   r   r   Úfrom_QQ_gmpyC   s    zPythonIntegerRing.from_QQ_gmpyc                 C   s"   |  |¡\}}|dkrt|ƒS dS )z.Convert mpmath's ``mpf`` to Python's ``int``. r   N)Úto_rationalr   )r   r   r   r   Úqr   r   r   Úfrom_RealFieldH   s    z PythonIntegerRing.from_RealFieldc                 C   s
   t ||ƒS )z)Compute extended GCD of ``a`` and ``b``. )r   ©r   r   Úbr   r   r   ÚgcdexO   s    zPythonIntegerRing.gcdexc                 C   s
   t ||ƒS )z Compute GCD of ``a`` and ``b``. )r   r/   r   r   r   ÚgcdS   s    zPythonIntegerRing.gcdc                 C   s
   t ||ƒS )z Compute LCM of ``a`` and ``b``. )r   r/   r   r   r   ÚlcmW   s    zPythonIntegerRing.lcmc                 C   s   t |ƒS )zCompute square root of ``a``. )Úpython_sqrtr   r   r   r   r   [   s    zPythonIntegerRing.sqrtc                 C   s   t |ƒS )zCompute factorial of ``a``. )Úpython_factorialr   r   r   r   r   _   s    zPythonIntegerRing.factorialN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚdtypeÚzeroÚoneÚaliasr   r   r   r   r    r%   r&   r'   r(   r+   r.   r1   r2   r3   r   r   r   r   r   r   r      s*   	r   N)r9   Úsympy.polys.domains.groundtypesr   r   r   r4   r   r5   r   r   r   Zsympy.polys.domains.integerringr	   Úsympy.polys.polyerrorsr
   Úsympy.utilitiesr   r   r   r   r   r   Ú<module>   s   $