U
    L?h&                     @   s  U d dl Z d dlmZmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZ ddlmZ dd	lmZmZmZmZmZmZmZmZ m!Z"m#Z$m%Z&m'Z(m)Z*m+Z,m-Z.m/Z0m1Z2m3Z4m5Z6m7Z8m9Z:m;Z<m=Z>m?Z@mAZB d
dddddddddddddddddddddd d!d"d#d$d%d&d'gZCd(d)d*d+gZDd,d- ZEd.ZFd/d0 ZGd1d2 ZHe jIJd3d4K ZLdZMdZNeLd5krneGeLZMeMdk	rjd6ZLnd4ZLeLd7kreHeLZNeNdk	rd8ZLnd9ZLeLd:kred; d9ZLdd<ee d > d ZOee	d=f ePd< eLd8kreNdk	stQdZReNZSd>ZTd8ZUeVeWeSXd fZYeSjXZZeSj[Z\eSjZeSjZeSjZeSj]ZeSj^ZeSj#Z#eSj_ZeSjZeSjZeSj!Z!eSj%Z%eSj'Z'eSj)Z)eSj+Z+d?d Z-eSj/Z/eSj1Z1eSj3Z3eSj5Z5eSj7Z7eSj9Z9eSj;Z;eSj=Z=eSj?Z?eSjAZAnXeLd6krteMdk	stQeMZRdZSd ZTd6ZUeVeRj`fZYeRj`ZZeRjaZ\eZeZeZeZd@d ZdAd Z#dBd ZdCd ZdDd Ze"Z!e&Z%e(Z'dEd Z)e,Z+dFd Z-e0Z/e2Z1e4Z3e6Z5e8Z7e:Z9e<Z;e>Z=e@Z?eBZAneLd9krdZRdZSd ZTd9ZUeVfZYeVZZeZ\eZeZeZeZeZe$Z#eZeZe Ze"Z!e&Z%e(Z'e*Z)e,Z+e.Z-e0Z/e2Z1e4Z3e6Z5e8Z7e:Z9e<Z;e>Z=e@Z?eBZAn
dGstQdS )H    N)c_longsizeof)reduce)TupleType)warn)import_module   )	PythonMPQ)	bit_scan1	bit_scan0remove	factorialsqrtsqrtremgcdlcmgcdext	is_squareinvertlegendrejacobi	kroneckerirootis_fermat_prpis_euler_prpis_strong_prpis_fibonacci_prpis_lucas_prpis_selfridge_prpis_strong_lucas_prpis_strong_selfridge_prpis_bpsw_prpis_strong_bpsw_prpGROUND_TYPESHAS_GMPY
SYMPY_INTSMPQMPZr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   z0.6z0.7z0.8z0.9c                 C   s,   |  dd d \}}| d| }|tkS )N.   )split_PYTHON_FLINT_VERSION_NEEDED)Zflint_versionmajorminorZ	flint_ver r/   E/var/www/html/venv/lib/python3.8/site-packages/sympy/external/gmpy.py_flint_version_okayb   s    r1   z2.0.0c                 C   s   | dkrd S zdd l }ddl m} W n& tk
rJ   | dkrDtd Y d S X t|rX|S | dkrdd S td| dt d	 |S d S )
Nautoflintr   )__version__r4   zjSYMPY_GROUND_TYPES was set to flint but python-flint is not installed. Falling back to other ground types.r3   zUsing python-flint zp because SYMPY_GROUND_TYPES is set to flint but this version of SymPy is only tested with python-flint versions r)   )r4   r5   ImportErrorr   r1   r,   )sympy_ground_typesr4   Z_flint_versionr/   r/   r0   
_get_flintm   s    r8   c                 C   s8   | dkrd S t dtddd}| dkr4|d kr4td |S )Nr3   gmpygmpy2r;   versionr/   )Zmin_module_versionZmodule_version_attrZmodule_version_attr_call_argsr3   zBgmpy2 library is not installed, switching to 'python' ground types)r   _GMPY2_MIN_VERSIONr   )r7   r:   r/   r/   r0   
_get_gmpy2   s     r>   ZSYMPY_GROUND_TYPESr3   r2   r4   r9   r:   python)r4   r:   r?   zmSYMPY_GROUND_TYPES environment variable unrecognised. Should be 'auto', 'flint', 'gmpy', 'gmpy2' or 'python'.   .r*   c                 C   s   |t krt| |S t| |S N)LONG_MAXr:   r   python_iroot)xnr/   r/   r0   r      s    c                 C   s   t |  S rA   )r4   fmpzisqrtrD   r/   r/   r0   r     s    c                 C   s"   | dk rdS t |  d dkS )Nr   Fr	   r4   rF   r   rH   r/   r/   r0   r     s    c                 C   s   t |  S rA   rI   rH   r/   r/   r0   r   
  s    c                  G   s   t tjj| tdS )Nr   )r   r4   rF   r   argsr/   r/   r0   r     s    c                  G   s   t tjj| tdS )Nr	   )r   r4   rF   r   rJ   r/   r/   r0   r     s    c                 C   s(   |dks|d st dt| |S )Nr   r*   z#y should be an odd positive integer)
ValueErrorr4   rF   r   )rD   yr/   r/   r0   r     s    c                 C   s2   |t kr(t| |}||| | kfS t| |S rA   )rB   r4   rF   rootrC   )rD   rE   rM   r/   r/   r0   r     s    F)bosctypesr   r   	functoolsr   typingr   ZtTupler   warningsr   Zsympy.externalr   Z	pythonmpqr
   Zntheoryr   Zpython_bit_scan1r   Zpython_bit_scan0r   Zpython_remover   Zpython_factorialr   Zpython_sqrtr   Zpython_sqrtremr   Z
python_gcdr   Z
python_lcmr   Zpython_gcdextr   Zpython_is_squarer   Zpython_invertr   Zpython_legendrer   Zpython_jacobir   Zpython_kroneckerr   rC   r   Zpython_is_fermat_prpr   Zpython_is_euler_prpr   Zpython_is_strong_prpr   Zpython_is_fibonacci_prpr   Zpython_is_lucas_prpr   Zpython_is_selfridge_prpr    Zpython_is_strong_lucas_prpr!   Zpython_is_strong_selfridge_prpr"   Zpython_is_bpsw_prpr#   Zpython_is_strong_bpsw_prp__all__r,   r1   r=   r8   r>   environgetlowerZ_SYMPY_GROUND_TYPESZ_flintZ_gmpyrB   __annotations__AssertionErrorr4   r:   r%   r$   inttypeZmpzr&   r(   Zmpqr'   ZfacrG   Z	isqrt_remrF   Zfmpqr/   r/   r/   r0   <module>   sH   l"7









