o
    jg"                     @   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sJ t ddks J t ddks(J t ddks0J tdD ]} t d| > | ks@J t d| > d | ksLJ q4td	D ]} dd	> d| >  }t || kscJ qQt dd
> d
ksnJ t dd> d dkszJ tddD ]} d| > }t | t |ksJ qd S )Nr            id   iiz  i  iAB i$. l   >qKwl/-:
   )r   range)inbig r   Y/var/www/html/zoom/venv/lib/python3.10/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sJ 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s1J q qq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sJ tddD ]^} t | dt |  d  kr4d	ks7J  J t | d
t |  d
  krIdksLJ  J t | | t |  |   kra| ddfksdJ  J t | |  t |  |    kr{| dd
fks~J  J q tddD ],} t d| t d|    krdksJ  J t d
| t d
|    krdksJ  J qtg ddD ] \}}t ||\}}}||| ||    krdksJ  J qd 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   **06*,*r5   c                  C   s   t tdd  t tdd  tddrJ tddsJ tdds#J tdds*J td	d
s1J g d} | D ]	}t|ds@J q7g d} | D ]	}t|dsPJ qGd S )Nc                   S   
   t ddS Nr   r   r   r   r   r   r   r"   F   r#   z$test_is_fermat_prp.<locals>.<lambda>c                   S   r6   Nr.   r   r8   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  rA   )r   r'   r   pseudorpimer   r   r   r   test_is_fermat_prpD      rO   c                  C      t tdd  t tdd  tddrJ tddsJ tdds#J tdds*J td	d
s1J g d} | D ]	}t|ds@J q7g d} | D ]	}t|dsPJ qGd S )Nc                   S   r6   r7   r   r   r   r   r   r"   a   r#   z#test_is_euler_prp.<locals>.<lambda>c                   S   r6   r9   rR   r   r   r   r   r"   b   r#   r   r$   r   r,   r0   r:   r.   )r<   r>   r@   rA   rB   rC   rE   rF   rG        i!!  Y)  i2  =  )y   rK   r@   rL   rD     i     "  rU   s0  ia<  rV   @  !I  )r   r'   r   rM   r   r   r   test_is_euler_prp_   rP   r^   c                  C   rQ   )Nc                   S   r6   r7   r   r   r   r   r   r"   |   r#   z$test_is_strong_prp.<locals>.<lambda>c                   S   r6   r9   r_   r   r   r   r   r"   }   r#   r   r$   r   r,   r0   r:   r.   )rB   rE   rF   rG   rT   rV   ir  i/  i  i  i  i# i: )rW   rK   rL   rX   rY   rZ   rU   r[   r\   r]   iK  i[  i{  i  i]  )r   r'   r   rM   r   r   r   test_is_strong_prpz   rP   r`   c               	   C   s   dd } dd }d}t ddD ][}t ddD ]S}|d d	|  }|d
kr%q| |||}||||}t dddD ]1}t |D ]*}	t||||	\}
}}|
||	 | ksSJ |||	 | ks]J t||	||ksgJ q=q7q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   ra   rb   r   r   r   lucas_v   s   
&z$test_lucas_sequence.<locals>.lucas_v   ir   r   r,   r   r$   r   )r   r
   pow)rh   ri   re   rc   rd   Dusvsr   rg   UVQkr   r   r   test_lucas_sequence   s(   rr   c                  C   s   t tdd  t tdd  t tdd  t tdd  tdddr$J tdd	ds,J tdd
ds4J tddds<J tdddsDJ g d} | D ]
}t|ddsTJ qJd S )Nc                   S      t dddS Nr$   r   r   r   r   r   r   r   r"          z'test_is_fibonacci_prp.<locals>.<lambda>c                   S   rs   )Nr$   r   ru   r   r   r   r   r"      rv   c                   S   rs   )Nr$   r.   r   ru   r   r   r   r   r"      rv   c                   S   rs   Nr   r.   r   ru   r   r   r   r   r"      rv   r   r$   r   r.      r   r0   r   r:      )i  rC   i
  i  U    A  }*  3  ;  i_  iar  i  )r   r'   r   rM   r   r   r   test_is_fibonacci_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s%J tdd	d
s-J tddds5J tddds=J g d} | D ]
}t|dd
sMJ qCd S )Nc                   S   rs   rt   r   r   r   r   r   r"      rv   z#test_is_lucas_prp.<locals>.<lambda>c                   S   rs   rx   r   r   r   r   r   r"      rv   c                   S   rs   NrH   r$   r   r   r   r   r   r   r"      rv   r   r$   r   r.   ry   r   r0   r   r:   rz   )C  y  rL     r{   r|   rS   r}   i  r~   -  r   i6  r   iB  )r   r'   r   rM   r   r   r   test_is_lucas_prp   s   r   c                  C   l   t tdd  tdrJ tdsJ tdsJ tdsJ tds%J g d} | D ]}t|s3J q+d S )	Nc                   S      t dS Nr   )r   r   r   r   r   r"          z'test_is_selfridge_prp.<locals>.<lambda>r   r   r$   r0   r:   )r   r   i  i%  r   S  r|   io#  i#  r~   i,  r   i_6  i9  >  )r   r'   r   rM   r   r   r   test_is_selfridge_prp      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s%J tdd	d
s-J tddds5J tddds=J d S )Nc                   S   rs   rt   r   r   r   r   r   r"      rv   z*test_is_strong_lucas_prp.<locals>.<lambda>c                   S   rs   rx   r   r   r   r   r   r"      rv   c                   S   rs   r   r   r   r   r   r   r"      rv   r   r$   r   r.   ry   r   r0   r   r:   rz   r   )r   r'   r   r   r   r   r   test_is_strong_lucas_prp   s   r   c                  C   r   )	Nc                   S   r   r   )r   r   r   r   r   r"     r   z.test_is_strong_selfridge_prp.<locals>.<lambda>r   r   r$   r0   r:   )r   r|   r~   r   iJ  iW  i_  iob  iu  i  iE% i| i i )r   r'   r   rM   r   r   r   test_is_strong_selfridge_prp  r   r   c                   C   N   t tdd  tdrJ tdsJ tdsJ tdsJ tds%J d S )Nc                   S   r   r   )r   r   r   r   r   r"     r   z"test_is_bpsw_prp.<locals>.<lambda>r   r   r$   r0   r:   )r   r'   r   r   r   r   r   test_is_bpsw_prp     r   c                   C   r   )Nc                   S   r   r   )r   r   r   r   r   r"   *  r   z)test_is_strong_bpsw_prp.<locals>.<lambda>r   r   r$   r0   r:   )r   r'   r   r   r   r   r   test_is_strong_bpsw_prp(  r   r   N)#	itertoolsr   sympy.external.ntheoryr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   sympy.testing.pytestr   r   r!   r+   r5   rO   r^   r`   rr   r   r   r   r   r   r   r   r   r   r   r   <module>   s$    D	 