U
    ZÊ¹j&  ã                   @   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 jI Jd3d4¡ K¡ ZLdZMdZNeLd5k�rneGeLƒZMeMdk	�rjd6ZLnd4ZLeLd7k�r”eHeLƒZNeNdk	�r�d8ZLnd9ZLeLd:k�rªed;ƒ d9ZLdd<eeƒ d > d ZOee	d=f ePd< eLd8k�r´eNdk	�sêtQ‚dZReNZSd>ZTd8ZUeVeWeS Xd ¡ƒ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	�sÌtQ‚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?eBZAn˜eLd9k�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/   úR/var/www/html/bwave/python/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









