U
    ZÊ¹j±"  ã                   @   sØ   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 d dlm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 )#é    )Úpermutations)Ú	bit_scan1ÚremoveÚ	bit_scan0Úis_fermat_prpÚis_euler_prpÚis_strong_prpÚgcdextÚ_lucas_sequenceÚis_fibonacci_prpÚis_lucas_prpÚis_selfridge_prpÚis_strong_lucas_prpÚis_strong_selfridge_prpÚis_bpsw_prpÚis_strong_bpsw_prp)Úraisesc                  C   s&  t dƒd kst‚t dƒdks t‚t dƒdks0t‚t dƒdks@t‚t dƒdksPt‚t dƒdks`t‚tdƒD ]0} t d| > ƒ| ks€t‚t d| > d ƒ| ksht‚qhtd	ƒD ]$} dd	> d| >  }t |ƒ| ks¢t‚q¢t dd
> ƒd
ksÜt‚t dd> d ƒdksôt‚tddƒD ]"} d| > }t | ƒt |ƒksþt‚qþd S )Nr   é   éÿÿÿÿé   é   iùÿÿÿéd   iiz  iô  iAB i$. l   §>qKwl/Í-’:é
   )r   ÚAssertionErrorÚrange)ÚiÚnÚbig© r   ú`/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/external/tests/test_ntheory.pyÚtest_bit_scan1   s"    r    c                   C   sD   t dƒd kst‚t dƒdks t‚t dƒdks0t‚t dƒdks@t‚d S )Nr   r   r   éþÿÿÿ)r   r   r   r   r   r   Útest_bit_scan0    s    r"   c                  C   sl   t tdd„ ƒ tddƒdks t‚tddƒD ]<} tddƒD ],}d	D ]"}t|| |  | ƒ||fks@t‚q@q8q*d S )
Nc                   S   s
   t ddƒS )Nr   )r   r   r   r   r   Ú<lambda>(   ó    ztest_remove.<locals>.<lambda>r   é   )r   r   r   r   iè  )r   é   ée   iñ  )r   Ú
ValueErrorr   r   r   )ÚfÚyÚzr   r   r   Útest_remove'   s    r,   c                  C   s¾  t ddƒdkst‚t ddƒdks$t‚t ddƒdks6t‚tddƒD ]´} t | dƒt |  dƒ  krfd	ksln t‚t | d
ƒt |  d
ƒ  krŽdks”n t‚t | | ƒt |  | ƒ  kr¼| ddfksÂn t‚t | |  ƒt |  |  ƒ  krî| dd
fks@n t‚q@tddƒD ]^} t d| ƒt d|  ƒ  k�r*dk�s0n t‚t d
| ƒt d
|  ƒ  k�rVdk�s n t‚�q tdddddgdƒD ]D\}}t ||ƒ\}}}||| ||    k�r°dk�stn t‚�qtd S )Nr   )r   r   r   r%   )r%   r   r   é   )r-   r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   )r   r   r   é    é   é1   é   )r	   r   r   r   )r   ÚaÚbÚgÚxr*   r   r   r   Útest_gcdext0   s    ((.4,0r6   c                  C   sâ   t tdd„ ƒ t tdd„ ƒ tddƒr*t‚tddƒs8t‚tddƒsFt‚tddƒsTt‚td	d
ƒsbt‚ddddddddddddddddg} | D ]}t|dƒsŠt‚qŠddddddddd dd!d"dd#d$dd%dg} | D ]}t|dƒsÊt‚qÊd S )&Nc                   S   s
   t ddƒS ©Nr   r   ©r   r   r   r   r   r#   F   r$   z$test_is_fermat_prp.<locals>.<lambda>c                   S   s
   t ddƒS ©Nr/   r   r8   r   r   r   r   r#   G   r$   r   r%   r   r-   r1   éÿÿÿr/   iU  é1  i…  éQ  ik  éÁ  éq  éÿ  é¡	  i�
  é  éÍ  éÁ  i  i  éI  é   éU   é[   i³  iÃ  é¿  iß  i÷  i-  iŸ  éc  )r   r(   r   r   ©Zpseudorpimer   r   r   r   Útest_is_fermat_prpD   s>           ÿ       ÿrK   c                  C   sÚ   t tdd„ ƒ t tdd„ ƒ tddƒr*t‚tddƒs8t‚tddƒsFt‚tddƒsTt‚td	d
ƒsbt‚dddddddddddddddg} | D ]}t|dƒsˆt‚qˆdddddddd d!dd"d#dd$d%g} | D ]}t|dƒsÂt‚qÂd S )&Nc                   S   s
   t ddƒS r7   ©r   r   r   r   r   r#   a   r$   z#test_is_euler_prp.<locals>.<lambda>c                   S   s
   t ddƒS r9   rL   r   r   r   r   r#   b   r$   r   r%   r   r-   r1   r:   r/   r;   r<   r=   r>   r?   r@   rB   rC   rD   éÉ  é�   i!!  éY)  i2  éá=  éy   rH   rI   rA   éÑ  iÕ  éÑ   éÏ"  és0  ia<  é“@  é!I  )r   r(   r   r   rJ   r   r   r   Útest_is_euler_prp_   s:          ÿ      ÿrX   c                  C   sÖ   t tdd„ ƒ t tdd„ ƒ tddƒr*t‚tddƒs8t‚tddƒsFt‚tddƒsTt‚td	d
ƒsbt‚dddddddddddddg} | D ]}t|dƒs„t‚q„ddddddddd d!d"d#d$d%d&g} | D ]}t|dƒs¾t‚q¾d S )'Nc                   S   s
   t ddƒS r7   ©r   r   r   r   r   r#   |   r$   z$test_is_strong_prp.<locals>.<lambda>c                   S   s
   t ddƒS r9   rY   r   r   r   r   r#   }   r$   r   r%   r   r-   r1   r:   r/   r?   rB   rC   rD   rN   rP   i�r  i/§  iõ¿  i™Í  iÿ  i©# iÅ: rQ   rH   rI   rR   rS   rT   rO   rU   rV   rW   i‘K  iá[  i…{  iÿ¬  i]¸  )r   r(   r   r   rJ   r   r   r   Útest_is_strong_prpz   s8         ÿ      ÿrZ   c               	   C   sÚ   dd„ } dd„ }d}t ddƒD ]¶}t ddƒD ]¦}|d d	|  }|d
krJq,| |||ƒ}||||ƒ}t dddƒD ]b}t |ƒD ]T}	t||||	ƒ\}
}}|
||	 | ks¦t‚|||	 | ksºt‚t||	|ƒ|kszt‚qzqnq,qd S )Nc                 S   sJ   dg| }d|d< t d|ƒD ](}| ||d   |||d    ||< q|S )Nr   r   r   ©r   ©ÚPÚQÚlengthÚarrayÚkr   r   r   Úlucas_u–   s
    
&z$test_lucas_sequence.<locals>.lucas_uc                 S   sR   dg| }d|d< | |d< t d|ƒD ](}| ||d   |||d    ||< q$|S )Nr   r   r   r[   r\   r   r   r   Úlucas_v�   s    
&z$test_lucas_sequence.<locals>.lucas_vé   iöÿÿÿr   r   r-   r   r%   r   )r   r
   r   Úpow)rb   rc   r_   r]   r^   ÚDÚusÚvsr   ra   ÚUÚVZQkr   r   r   Útest_lucas_sequence•   s     rk   c                  C   sÄ   t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ tdddƒrHt‚tdd	dƒsXt‚tdd
dƒsht‚tdddƒsxt‚tdddƒsˆt‚dddddddddddddg} | D ]}t|ddƒsªt‚qªd S )Nc                   S   s   t dddƒS ©Nr%   r   r   ©r   r   r   r   r   r#   ·   r$   z'test_is_fibonacci_prp.<locals>.<lambda>c                   S   s   t dddƒS )Nr%   éûÿÿÿr   rm   r   r   r   r   r#   ¸   r$   c                   S   s   t dddƒS )Nr%   r/   r   rm   r   r   r   r   r#   ¹   r$   c                   S   s   t dddƒS ©Nr   r/   r   rm   r   r   r   r   r#   º   r$   r   r%   r   r/   é   r   r1   r   r:   é   iÁ  r@   i±
  i¡  éU  é‘  éA  é}*  é‘3  é“;  i‘_  iar  i‡  )r   r(   r   r   rJ   r   r   r   Útest_is_fibonacci_prpµ   s&         ÿrx   c                  C   sº   t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ tdddƒr:t‚tdddƒsJt‚tdd	d
ƒsZt‚tdddƒsjt‚tdddƒszt‚dddddddddddddddg} | D ]}t|dd
ƒs t‚q d S )Nc                   S   s   t dddƒS rl   ©r   r   r   r   r   r#   Î   r$   z#test_is_lucas_prp.<locals>.<lambda>c                   S   s   t dddƒS ro   ry   r   r   r   r   r#   Ï   r$   c                   S   s   t dddƒS ©NrE   r%   r   ry   r   r   r   r   r#   Ð   r$   r   r%   r   r/   rp   r   r1   r   r:   rq   éýÿÿÿéC  éy  rI   éó  rr   rs   rM   rt   iÕ  ru   é�-  rv   i�6  rw   ißB  )r   r(   r   r   rJ   r   r   r   Útest_is_lucas_prpÌ   s&          ÿr€   c                  C   s†   t tdd„ ƒ tdƒrt‚tdƒs&t‚tdƒs2t‚tdƒs>t‚tdƒsJt‚dd	d
ddddddddddddg} | D ]}t|ƒspt‚qpd S )Nc                   S   s   t dƒS ©Nr   )r   r   r   r   r   r#   ä   r$   z'test_is_selfridge_prp.<locals>.<lambda>r   r   r%   r1   r:   r|   r}   i‡  i%  r~   éS  rs   io#  iÛ#  ru   i›,  r   i_6  i÷9  éí>  )r   r(   r   r   rJ   r   r   r   Útest_is_selfridge_prpâ   s"          ÿr„   c                   C   s~   t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ tdddƒr:t‚tdddƒsJt‚tdd	d
ƒsZt‚tdddƒsjt‚tdddƒszt‚d S )Nc                   S   s   t dddƒS rl   ©r   r   r   r   r   r#   ø   r$   z*test_is_strong_lucas_prp.<locals>.<lambda>c                   S   s   t dddƒS ro   r…   r   r   r   r   r#   ù   r$   c                   S   s   t dddƒS rz   r…   r   r   r   r   r#   ú   r$   r   r%   r   r/   rp   r   r1   r   r:   rq   r{   )r   r(   r   r   r   r   r   r   Útest_is_strong_lucas_prpö   s    r†   c                  C   s„   t tdd„ ƒ tdƒrt‚tdƒs&t‚tdƒs2t‚tdƒs>t‚tdƒsJt‚dd	d
dddddddddddg} | D ]}t|ƒsnt‚qnd S )Nc                   S   s   t dƒS r�   )r   r   r   r   r   r#     r$   z.test_is_strong_selfridge_prp.<locals>.<lambda>r   r   r%   r1   r:   r‚   rs   ru   rƒ   iJ  iãW  iù_  iob  iu�  i—ä  iE% iŸ| i‡ i¥» )r   r(   r   r   rJ   r   r   r   Útest_is_strong_selfridge_prp  s"          ÿr‡   c                   C   sN   t tdd„ ƒ tdƒrt‚tdƒs&t‚tdƒs2t‚tdƒs>t‚tdƒsJt‚d S )Nc                   S   s   t dƒS r�   )r   r   r   r   r   r#     r$   z"test_is_bpsw_prp.<locals>.<lambda>r   r   r%   r1   r:   )r   r(   r   r   r   r   r   r   Útest_is_bpsw_prp  s    rˆ   c                   C   sN   t tdd„ ƒ tdƒrt‚tdƒs&t‚tdƒs2t‚tdƒs>t‚tdƒsJt‚d S )Nc                   S   s   t dƒS r�   )r   r   r   r   r   r#   *  r$   z)test_is_strong_bpsw_prp.<locals>.<lambda>r   r   r%   r1   r:   )r   r(   r   r   r   r   r   r   Útest_is_strong_bpsw_prp(  s    r‰   N)#Ú	itertoolsr   Zsympy.external.ntheoryr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   Zsympy.testing.pytestr   r    r"   r,   r6   rK   rX   rZ   rk   rx   r€   r„   r†   r‡   rˆ   r‰   r   r   r   r   Ú<module>   s"   D	 