a
    kh"                     @   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 u sJ t ddks J t ddks0J t ddks@J t ddksPJ t ddks`J tdD ]0} t d| > | ksJ t d| > d | kshJ qhtd	D ]$} dd	> d| >  }t || ksJ qt dd
> d
ksJ t dd> d dksJ tddD ]"} d| > }t | t |ksJ qd S )Nr            id   iiz  i  iAB i$. l   >qKwl/-:
   )r   range)inbig r   O/var/www/auris/lib/python3.9/site-packages/sympy/external/tests/test_ntheory.pytest_bit_scan1   s"    r   c                   C   sD   t dd u sJ t ddks J t ddks0J t ddks@J d S )Nr   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 J tddD ]<} tddD ],}d	D ]"}t|| |  | ||fks@J 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   )fyzr   r   r   test_remove'   s    r+   c                  C   s  t dddksJ t dddks$J t dddks6J tddD ]} t | dt |  d  krfd	ksln J t | d
t |  d
  krdksn J t | | t |  |   kr| ddfksn J t | |  t |  |    kr| dd
fks@n J q@tddD ]^} t d| t d|    kr*dks0n J t d
| t d
|    krVdks n J q tg ddD ]D\}}t ||\}}}||| ||    krdksnn J qnd 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   )    r$      1      )r	   r   r   )r   abgxr)   r   r   r   test_gcdext0   s    ((.4,0r5   c                  C   s   t tdd  t tdd  tddr*J tdds8J tddsFJ tddsTJ td	d
sbJ g d} | D ]}t|dsnJ qng d} | D ]}t|dsJ 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   r7   r   r   r   r   r"   G   r#   r   r$   r   r,   r0   r.   )U  1    Q  k    q    	  i
        i  i  I  )   U   [   r:   i  i  r;   r<     r=   i  i  r>   i-  i  r?   c  r@   )r   r'   r   Zpseudorpimer   r   r   r   test_is_fermat_prpD   s    rM   c                  C   s   t tdd  t tdd  tddr*J tdds8J tddsFJ tddsTJ td	d
sbJ g d} | D ]}t|dsnJ qng d} | D ]}t|dsJ qd S )Nc                   S   s
   t ddS r6   r   r   r   r   r   r"   a   r#   z#test_is_euler_prp.<locals>.<lambda>c                   S   s
   t ddS r8   rN   r   r   r   r   r"   b   r#   r   r$   r   r,   r0   r9   r.   )r;   r=   r?   r@   rA   rB   rD   rE   rF        i!!  Y)  i2  =  )y   rJ   r?   rK   rC     i     "  rQ   s0  ia<  rR   @  !I  )r   r'   r   rL   r   r   r   test_is_euler_prp_   s    rZ   c                  C   s   t tdd  t tdd  tddr*J tdds8J tddsFJ tddsTJ td	d
sbJ g d} | D ]}t|dsnJ qng d} | D ]}t|dsJ qd S )Nc                   S   s
   t ddS r6   r   r   r   r   r   r"   |   r#   z$test_is_strong_prp.<locals>.<lambda>c                   S   s
   t ddS r8   r[   r   r   r   r   r"   }   r#   r   r$   r   r,   r0   r9   r.   )rA   rD   rE   rF   rP   rR   ir  i/  i  i  i  i# i: )rS   rJ   rK   rT   rU   rV   rQ   rW   rX   rY   iK  i[  i{  i  i]  )r   r'   r   rL   r   r   r   test_is_strong_prpz   s    r\   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sJ |||	 | ksJ t||	||kszJ 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
   pow)rd   re   ra   r_   r`   Dusvsr   rc   UVZQkr   r   r   test_lucas_sequence   s     rm   c                  C   s   t tdd  t tdd  t tdd  t tdd  tdddrHJ tdd	dsXJ tdd
dshJ tdddsxJ tdddsJ g d} | D ]}t|ddsJ 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   ro   r   r   r   r   r"      r#   c                   S   s   t dddS )Nr$   r.   r   ro   r   r   r   r   r"      r#   c                   S   s   t dddS Nr   r.   r   ro   r   r   r   r   r"      r#   r   r$   r   r.      r   r0   r   r9      )i  rB   i
  i  U    A  }*  3  ;  i_  iar  i  )r   r'   r   rL   r   r   r   test_is_fibonacci_prp   s    rz   c                  C   s   t tdd  t tdd  t tdd  tdddr:J tdddsJJ tdd	d
sZJ tdddsjJ tdddszJ g d} | D ]}t|dd
sJ qd S )Nc                   S   s   t dddS rn   r   r   r   r   r   r"      r#   z#test_is_lucas_prp.<locals>.<lambda>c                   S   s   t dddS rq   r{   r   r   r   r   r"      r#   c                   S   s   t dddS NrG   r$   r   r{   r   r   r   r   r"      r#   r   r$   r   r.   rr   r   r0   r   r9   rs   )C  y  rK     rt   ru   rO   rv   i  rw   -  rx   i6  ry   iB  )r   r'   r   rL   r   r   r   test_is_lucas_prp   s    r   c                  C   sl   t tdd  tdrJ tds&J tds2J tds>J tdsJJ g d} | D ]}t|sVJ qVd 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$   r0   r9   )r~   r   i  i%  r   S  ru   io#  i#  rw   i,  r   i_6  i9  >  )r   r'   r   rL   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:J tdddsJJ tdd	d
sZJ tdddsjJ tdddszJ d S )Nc                   S   s   t dddS rn   r   r   r   r   r   r"      r#   z*test_is_strong_lucas_prp.<locals>.<lambda>c                   S   s   t dddS rq   r   r   r   r   r   r"      r#   c                   S   s   t dddS r|   r   r   r   r   r   r"      r#   r   r$   r   r.   rr   r   r0   r   r9   rs   r}   )r   r'   r   r   r   r   r   test_is_strong_lucas_prp   s    r   c                  C   sl   t tdd  tdrJ tds&J tds2J tds>J tdsJJ g d} | D ]}t|sVJ qVd 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$   r0   r9   )r   ru   rw   r   iJ  iW  i_  iob  iu  i  iE% i| i i )r   r'   r   rL   r   r   r   test_is_strong_selfridge_prp  s    r   c                   C   sN   t tdd  tdrJ tds&J tds2J tds>J tdsJJ 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$   r0   r9   )r   r'   r   r   r   r   r   test_is_bpsw_prp  s    r   c                   C   sN   t tdd  tdrJ tds&J tds2J tds>J tdsJJ 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$   r0   r9   )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+   r5   rM   rZ   r\   rm   rz   r   r   r   r   r   r   r   r   r   r   <module>   s"   D	 