o
    GZh%                     @   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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   Q/var/www/auris/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   )Z	euler_prppZabsolute_euler_prpar   r   r   test_euler_pseudoprimes   s.   rH   c                   C   r   )N   r   r!   )r   r   r   r   r    test_is_euler_jacobi_pseudoprime6   r   rJ   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   rI   )   r   r   ;   )    r#   r   i  )u   rI   r   )r   r   r   r   r   test_lucas_extrastrong_params;      rP   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   rW   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 rX   r   rZ   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   r_   )r-   r`   rZ   r   r   r   r]   V   ra   )r8   r9   r:   r;   r<   r=   r6   r>   r@   rA   rB   rC   i{  i  ]  i  i  ia# i4 iQB iiW iY i} c                 S   r_   )E  r`   rZ   r   r   r   r]   Z   ra   )1r         1   A   Q   rc   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  rb   iy  ie  i  iY  i  i  i  i i i+ iI2 iwO c                 s   s    | ]	}t |d gV  qdS )l   j_| Nr`   rZ   r   r   r   	<genexpr>a   s    ztest_prps.<locals>.<genexpr>c                 S      g | ]}t |r|qS r   )r   rZ   r   r   r   r]   b       )9iC  iy  i  i%  i  S    io#  i#  rS   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   rj   r   )r	   rZ   r   r   r   r]   j   rk   )rl   rm   rS   rn   ro   rp   rq   rr   rt   ru   rx   ry   c                 S   rj   r   rV   rZ   r   r   r   r]   m   rk   )rR   i  rm   rS   iCm  is  ix  i{  rs   rv   rw   rx   )rE   sumany)Z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"   rd   !   r'   rf   9   rg   rh   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   )ZA080075Z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   )rF   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   rQ   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       @rY   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   )sZ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   rj   r   )r   r[   ir   r   r   r]      rk   z"test_is_square.<locals>.<listcomp>rd   )r   r   r)   r   rT   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   c                   C   s   dd dD g dksJ d S )Nc                 S   s   g | ]	}t |g d qS ))r7   r-   r   r%   r`   r   r   r   r   r]      s    z$test_issue_27145.<locals>.<listcomp>)r   r7   r#   )FTFr   r   r   r   r   test_issue_27145   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   rH   rJ   rP   rW   r|   r   r   r   r   r   r   r   r   r   r   r   <module>   s&    D"

%
H
