U
    L?h"                     @   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stt d| > d | kshtqhtd	D ]$} dd	> d| >  }t || kstqt dd
> d
kstt dd> d dksttddD ]"} d| > }t | t |kstqd S )Nr            id   iiz  i  iAB i$. l   >qKwl/-:
   )r   AssertionErrorrange)inbig r   S/var/www/html/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rdksn tt | | t |  |   kr| ddfksn 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rd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stqddddddddd dd!d"dd#d$dd%dg} | D ]}t|dstqd 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stqdddddddd d!dd"d#dd$d%g} | D ]}t|dstqd 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stqddddddddd d!d"d#d$d%d&g} | D ]}t|dstqd 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   ir  i/  i  i  i  i# i: rQ   rH   rI   rR   rS   rT   rO   rU   rV   rW   iK  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st|||	 | kst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   ir   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stdddddddddddddg} | D ]}t|ddstqd 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
stqd 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   i6  rw   iB  )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  i9  >  )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  iW  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	 