o
    jg$                     @   s   d dl mZ d dlmZ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mZ d dlmZmZ dd Zdd	 Zd
d Zdd Zdd Zedd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&dS )    )gcd)Sievesieve)mr_lucas_extrastrong_paramsis_lucas_prp	is_squareis_strong_lucas_prpis_extra_strong_lucas_prp
proth_testisprimeis_euler_pseudoprimeis_gaussian_primeis_fermat_pseudoprimeis_euler_jacobi_pseudoprimeMERSENNE_PRIME_EXPONENTS_lucas_lehmer_primality_testis_mersenne_prime)slowraises)IFloatc                   C       t ddsJ t ddsJ d S )N      	   )r    r   r   Z/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/ntheory/tests/test_primetest.pytest_is_fermat_pseudoprime      r   c                  C   s  t ddsJ t ddsJ t ddsJ t ddsJ t dd	s#J t d
ds*J ttdd  ttdd  ttdd  g d} | D ]	}t |dsNJ qEg d} | D ]	}t |ds^J qUg d}|D ]}td|D ]}t||dkrvqlt ||s}J qlqed S )N   r            e      i  
   i,  )   c                   S   
   t ddS )Nr      r   r   r   r   r   <lambda>      
 z)test_euler_pseudoprimes.<locals>.<lambda>c                   S   r(   )N   r   r*   r   r   r   r   r+      r,   c                   S   r(   )Nr!   r#   r*   r   r   r   r   r+      r,   )U  i1  iQ    iq    	      I  iU  i     i!!  i(  Y)     )y     r/   c  i    i     "  r6   s0  ia<  =  @  !I  K  [  iU`  iim  r-   )r/   r1   r?   iQ  iA  ia& iaz i1 i i) iu )r   r   
ValueErrorranger   )	euler_prppabsolute_euler_prpar   r   r   test_euler_pseudoprimes   s.   rJ   c                   C   r   )N   r   r!   )r   r   r   r   r    test_is_euler_jacobi_pseudoprime6   r   rL   c                   C   st   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s(J t d
dks0J t ddks8J d S )Nr-   )r   r-   r   r   )   r)   r   r%   r   )r   r   r   rK   )   r   r   ;   )    r#   r   i  )u   rK   r   )r   r   r   r   r   test_lucas_extrastrong_params;      rR   c                   C   sd   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s(J t ddks0J d S )	Nr)   F  T}*  r         r
   r   r   r   r   test_is_extra_strong_lucas_prpE   s   rY   c                  C   s   dd t ddD } t| dksJ dd | D g dksJ dd | D g d	ks,J d
d | D g dks9J tdd | D rDJ dd | D g dksQJ dd | D g dks^J dd | D g dkskJ d S )Nc                 S   s    g | ]}|d  rt |s|qS r7   r   .0nr   r   r   
<listcomp>O   s
    
ztest_prps.<locals>.<listcomp>r   順 inyc                 S      g | ]
}t |d gr|qS rZ   r   r\   r   r   r   r_   S       )r0   r2   r3   r4   r5   r?   ir  i/  i  i  i  i# i: iM i%Y ib c                 S   ra   )r-   rb   r\   r   r   r   r_   V   rc   )r8   r9   r:   r;   r<   r=   r6   r>   r@   rA   rB   rC   i{  i  ]  i  i  ia# i4 iQB iiW iY i} c                 S   ra   )E  rb   r\   r   r   r   r_   Z   rc   )1r         1   A   Q   re   r.   iW  i  iu  i  ie  i  i  r3   r4   iM  i  iu  i3  r=   r>   iq2  i:  i>  i1N  iV  iZ  iI`  iaa  ia|  i+  ig  iͨ  i  rd   iy  ie  i  iY  i  i  i  i i i+ iI2 iwO c                 s   s    | ]	}t |d gV  qdS )l   j_| Nrb   r\   r   r   r   	<genexpr>a   s    ztest_prps.<locals>.<genexpr>c                 S      g | ]}t |r|qS r   )r   r\   r   r   r   r_   b       )9iC  iy  i  i%  i  S    io#  i#  rU   i,  i-  i_6  i9  >  iS?  iG  J  icJ  W  io[  _  ob  ie  ie  ij  i  i  i  铘  i#  i	  u  iC  i  i  i  i  i  i    i  i  i    E% i- i6 i7 i'D iI i/P i` iq iz | c                 S   rl   r   )r	   r\   r   r   r   r_   j   rm   )rn   ro   rU   rp   rq   rr   rs   rt   rv   rw   rz   r{   c                 S   rl   r   rX   r\   r   r   r   r_   m   rm   )rT   i  ro   rU   iCm  is  ix  i{  ru   rx   ry   rz   )rE   sumany)oddcompositesr   r   r   	test_prpsM   s   r   c                     sR   g d} g d}t dD ]  | v rt  |v ksJ qtt fdd qd S )N)r-   r   r   r    r"   rf   !   r'   rh   9   ri   rj   a   q                  )r-   r   r    r"   r'   r   r   r      c                      s   t  S )N)r   r   r^   r   r   r+   ~       z!test_proth_test.<locals>.<lambda>)rE   r   r   rD   )A080075A080076r   r   r   test_proth_tests   s   r   c                  C   s*   t ddD ]} t| | tv ksJ qd S )Nr-   d   )r   
primeranger   r   )rG   r   r   r    test_lucas_lehmer_primality_test   s   r   c                   C   st   t ddu sJ t ddu sJ t ddu sJ t ddu s J t ddu s(J t ddu s0J t d	du s8J d S )
NFr-   Tr&      i  i i)r   r   r   r   r   test_is_mersenne_prime   rS   r   c                  C   s  t  } | d t| dd}tdD ]}||v t|ks J qtds'J tds-J tds3J tds9J tds?J td	sEJ td
sKJ tdsQJ tdsWJ ttds_J tdseJ tdd d soJ tdd d syJ tdd d rJ tdrJ tdrJ tdrJ tdrJ tdrJ tdrJ tdrJ tdrJ ttdrJ ttdrJ td tdsJ tdrJ tt	d d!  tt	d"d!  d S )#Nr`   r7   i iͱ
l   {! l   \)l   yW-	l   GPFQw8 l   XFqb l   Ii|	3mV&> l   :_sh1S3b l	   #:gWj#0[ z
531137992816767098689588206552468627329593117727031923199444138200403559860852242739162502265229285668889329486246501015346579337652707239409519978766587351943831270835393219031728127l    Y   r   i_  iY  l   ;n>l   pl   He%Z	 l   y5D( l   --	l   q.;m l   7y_@I7 l   k$9H"YaR  
8038374574536394912570796143419421081388376882875581458374889175222974273765333652186502336163960045457915042023603208766569966760987284043965408232928738791850869166857328267761771029389697739470167082304286871099974399765441448453411558724506334092790222752962294149842306881685404326457534018329786111298960644845216191652872597534901a  
2887148238050771212671429597130393991977609459279722700926516024197432303799152733116328983144639225941977803110929349655578418949441740933805615113979999421542416933972905423711002751042080134966731755152859226962916775325475044445856101949404200039904432116776619949629539250452698719329070373564032273701278453899126120309244841494728976885406024976768122077071687938121709811322297802059565867i  i  is  c                   S   s   t dS )Ng       @r[   r   r   r   r   r+      r   ztest_isprime.<locals>.<lambda>c                   S   s   t tdS )Nr7   )r   r   r   r   r   r   r+      s    )
r   extendsetr   rE   r   intr   r   rD   )spsr^   r   r   r   test_isprime   sD   

r   c                   C   s^   dd t dD g dksJ tdrJ tdrJ tdr!J tdr'J td	r-J d S )
Nc                 S   rl   r   )r   )r]   ir   r   r   r_      rm   z"test_is_square.<locals>.<listcomp>rf   )r   r   r)   r   rV   iK i <Y.l    @7Zkl   ,3;, i ^ )rE   r   r   r   r   r   test_is_square   s   r   c                   C   sH   t dt sJ t dsJ t ddt  sJ t ddt  r"J d S )Nr%   r7   r-   )r   r   r   r   r   r   test_is_gaussianprime   s   r   N)'mathr   sympy.ntheory.generater   r   sympy.ntheory.primetestr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   sympy.testing.pytestr   r   sympy.core.numbersr   r   r   rJ   rL   rR   rY   r   r   r   r   r   r   r   r   r   r   r   <module>   s$    D"

%
H
