U
    L?h$                     @   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   s    t ddstt ddstd S )N      	   )r   AssertionError r   r   T/var/www/html/venv/lib/python3.8/site-packages/sympy/ntheory/tests/test_primetest.pytest_is_fermat_pseudoprime   s    r   c                  C   s\  t ddstt ddstt dds*tt dds8tt dd	sFtt d
dsTtttdd  ttdd  ttdd  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/d0d1g} | D ]}t |d2stqddd+d3d4d5d6d7d8d9d:g}|D ]<}td |D ]*}t||dkr@q(t ||s(tq(qd S );N   r            e      i  
   i,  )   c                   S   s
   t ddS )Nr      r   r   r   r   r   <lambda>       z)test_euler_pseudoprimes.<locals>.<lambda>c                   S   s
   t ddS )N   r   r(   r   r   r   r   r)      r*   c                   S   s
   t ddS )Nr    r"   r(   r   r   r   r   r)      r*   U  i1  iQ  i  iq    i	      I  iU  i     i!!  i(  Y)     y     c  i    i     "  s0  ia<  =  @  !I  K  [  iU`  iim  r+   iQ  iA  ia& iaz i1 i i) iu )r   r   r   
ValueErrorranger   )Z	euler_prppZabsolute_euler_prpar   r   r   test_euler_pseudoprimes   s\                       rD   c                   C   s    t ddstt ddstd S )N   r   r    )r   r   r   r   r   r    test_is_euler_jacobi_pseudoprime6   s    rF   c                   C   st   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ksptd S )Nr+   )r   r+   r   r   )   r'   r   r$   r   )r   r   r   rE   )   r   r   ;   )    r"   r   i  )u   rE   r   )r   r   r   r   r   r   test_lucas_extrastrong_params;   s    rL   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t ddksPtt ddks`td S )	Nr'   F  T}*  r         )r
   r   r   r   r   r   test_is_extra_strong_lucas_prpE   s    rQ   c               :   C   s  dd t ddD } t| dks$tdd | D ddd	d
ddddddddddddgksZtdd | D ddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.gkstd/d | D d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d	d
d?d@dAdBdddCdDdEdFdGdHdIdJdKdLdMdNdOd&dPdQdRdSdTdUdVdWdXdYdZd[g1ksttd\d] | D r0td^d | D d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddg9kstdd | D dddedhdmdpdrdtduddddgkstdd | D dddedhddddd|dddgkstd S )Nc                 S   s    g | ]}|d  rt |s|qS r3   r   .0nr   r   r   
<listcomp>O   s     ztest_prps.<locals>.<listcomp>r   順 inyc                 S   s   g | ]}t |d gr|qS rR   r   rT   r   r   r   rW   S   s      r-   r.   r/   r0   r1   r;   ir  i/  i  i  i  i# i: iM i%Y ib c                 S   s   g | ]}t |d gr|qS )r+   rY   rT   r   r   r   rW   V   s      r4   r5   r6   r7   r8   r9   r2   r:   r<   r=   r>   r?   i{  i  i]  i  i  ia# i4 iQB iiW iY i} c                 S   s   g | ]}t |d gr|qS )E  rY   rT   r   r   r   rW   Z   s      r         1   A   Q   rZ   r,   iW  i  iu  i  ie  i  i  iM  i  iu  i3  iq2  i:  i>  i1N  iV  iZ  iI`  iaa  ia|  i+  ig  iͨ  i  iy  ie  i  iY  i  i  i  i i i+ iI2 iwO c                 s   s   | ]}t |d gV  qdS )l   j_| NrY   rT   r   r   r   	<genexpr>a   s     ztest_prps.<locals>.<genexpr>c                 S   s   g | ]}t |r|qS r   )r   rT   r   r   r   rW   b   s      iC  iy  i  i%  i  iS  i  io#  i#  rN   i,  i-  i_6  i9  i>  iS?  iG  iJ  icJ  iW  io[  i_  iob  ie  ie  ij  i  i  i  i  i#  i	  iu  iC  i  i  i  i  i  i  i  i  i  i i i  iE% i- i6 i7 i'D iI i/P i` iq iz i| c                 S   s   g | ]}t |r|qS r   )r	   rT   r   r   r   rW   j   s      c                 S   s   g | ]}t |r|qS r   )r
   rT   r   r   r   rW   m   s      rM   i  iCm  is  ix  i{  )rA   sumr   any)Zoddcompositesr   r   r   	test_prpsM   sr                 
                    
                                                                                                                 rc   c                     s   ddddddddd	d
dddddddddg} ddddddddg}t dD ]4  | krht  |kksztqFtt fdd qFd S )Nr+   r   r   r   r!   r[   !   r&   r]   9   r^   r_   a   q                     c                      s   t  S )N)r   r   rV   r   r   r)   ~   r*   z!test_proth_test.<locals>.<lambda>)rA   r   r   r   r@   )ZA080075ZA080076r   rn   r   test_proth_tests   s           ro   c                  C   s*   t ddD ]} t| | tkkstqd S )Nr+   d   )r   
primeranger   r   r   )rB   r   r   r    test_lucas_lehmer_primality_test   s    rr   c                   C   st   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ksptd S )
NFr+   Tr%      i  i i)r   r   r   r   r   r   test_is_mersenne_prime   s    ru   c                  C   s  t  } | d t| dd}tdD ]}||kt|ks(tq(tdsNttdsZttdsfttdsrttds~ttd	sttd
sttdsttdstttdsttdsttdd d sttdd d sttdd d rttdrttdr$ttdr2ttdr@ttdrNttdr\ttdrjttdrxtttdrtttdrttd tdsttdrtt	t
d d!  t	t
d"d!  d S )#NrX   r3   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       @rS   r   r   r   r   r)      r*   ztest_isprime.<locals>.<lambda>c                   S   s   t tdS )Nr3   )r   r   r   r   r   r   r)      r*   )r   extendsetrq   rA   r   r   intr   r   r@   )sZpsrV   r   r   r   test_isprime   sD    

r{   c                   C   sd   dd t dD dddddgks$ttd	r0ttd
r<ttdrHttdrTttdr`td S )Nc                 S   s   g | ]}t |r|qS r   )r   )rU   ir   r   r   rW      s      z"test_is_square.<locals>.<listcomp>r[   r   r   r'   r   rO   iK i <Y.l    @7Zkl   ,3;, i ^ )rA   r   r   r   r   r   r   test_is_square   s    $r}   c                   C   sH   t dt stt dstt ddt  s0tt ddt  rDtd S )Nr$   r3   r+   )r   r   r   r   r   r   r   test_is_gaussianprime   s    r~   N)'mathr   Zsympy.ntheory.generater   r   Zsympy.ntheory.primetestr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   Zsympy.testing.pytestr   r   Zsympy.core.numbersr   r   r   rD   rF   rL   rQ   rc   ro   rr   ru   r{   r}   r~   r   r   r   r   <module>   s"   D"

%
H
