
    g$                         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 Zd Zd Zd	 Zd
 Zed             Z d Z!d Z"d Z#d Z$d Z%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                  N    t          dd          sJ t          dd          sJ d S )N      	   )r        ^/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/ntheory/tests/test_primetest.pytest_is_fermat_pseudoprimer       s4     A&&&&& A&&&&&&&r   c                  T   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            t          t          d            t          t          d            g d} | D ]}t          |d          sJ g d} | D ]}t          |d          sJ g d}|D ]<}t          d|          D ])}t	          ||          dk    rt          ||          sJ *=d S )N   r            e      i  
   i,  )   c                  "    t          dd          S )Nr      r   r   r   r   <lambda>z)test_euler_pseudoprimes.<locals>.<lambda>       3Aq99 r   c                  "    t          dd          S )N   r   r,   r   r   r   r-   z)test_euler_pseudoprimes.<locals>.<lambda>   r.   r   c                  "    t          dd          S )Nr#   r%   r,   r   r   r   r-   z)test_euler_pseudoprimes.<locals>.<lambda>   s    3B:: r   )U  i1  iQ    iq    	      I  iU  i     i!!  i(  Y)     )y     r3   c  i    i     "  r:   s0  ia<  =  @  !I  K  [  iU`  iim  r0   )r3   r5   rC   iQ  iA  ia& iaz i1 i i) iu )r   r   
ValueErrorranger   )	euler_prppabsolute_euler_prpas       r   test_euler_pseudoprimesrN      s   A&&&&&A&&&&&A&&&&&Q'''''b)))))r*****
:99:::
:99:::
:::;;;C C CI * *#Aq))))))P P PI * *#Aq))))))B B B . .q! 	. 	.A1ayyA~~'1------	.. .r   c                  N    t          dd          sJ t          dd          sJ d S )N   r   r#   )r   r   r   r    test_is_euler_jacobi_pseudoprimerQ   6   s4    &r1-----&r1-------r   c                  ,   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    sJ t          d          dk    sJ d S )Nr0   )r   r0   r   r   )   r+   r   r'   r   )r   r   r   rP   )   r   r   ;   )    r%   r   i  )u   rP   r   )r   r   r   r   test_lucas_extrastrong_paramsrX   ;   s    $Q''94444$Q'':5555$Q''94444$Q''94444$R((J6666$R((J6666$S))\999999r   c                     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    sJ d S )	Nr+   F  T}*  r         r   r   r   r   test_is_extra_strong_lucas_prpr_   E   s    $Q''50000$S))T1111$U++t3333$Q''50000$R((E1111$S))U222222r   c                     d t          dd          D             } t          |           dk    sJ d | D             g dk    sJ d | D             g dk    sJ d	 | D             g d
k    sJ t          d | D                       rJ d | D             g dk    sJ d | D             g dk    sJ d | D             g dk    sJ d S )Nc                 :    g | ]}|d z  t          |          |S r;   r   .0ns     r   
<listcomp>ztest_prps.<locals>.<listcomp>O   s>     " " "1	A"ajj"Q " " "r   r   順 inyc                 4    g | ]}t          |d g          |S rb   r   rd   s     r   rg   ztest_prps.<locals>.<listcomp>S   '    333!1qc

3A333r   )r4   r6   r7   r8   r9   rC   ir  i/  i  i  i  i# i: iM i%Y ib c                 4    g | ]}t          |d g          |S )r0   rj   rd   s     r   rg   ztest_prps.<locals>.<listcomp>V   rk   r   )r<   r=   r>   r?   r@   rA   r:   rB   rD   rE   rF   rG   i{  i  ]  i  i  ia# i4 iQB iiW iY i} c                 4    g | ]}t          |d g          |S )E  rj   rd   s     r   rg   ztest_prps.<locals>.<listcomp>Z   s'    555!1se5A555r   )1r         1   A   Q   ro   r2   iW  i  iu  i  ie  i  i  r7   r8   iM  i  iu  i3  rA   rB   iq2  i:  i>  i1N  iV  iZ  iI`  iaa  ia|  i+  ig  iͨ  i  rm   iy  ie  i  iY  i  i  i  i i i+ iI2 iwO c              3   8   K   | ]}t          |d g          V  dS )l   j_| Nrj   rd   s     r   	<genexpr>ztest_prps.<locals>.<genexpr>a   s0      GGA2a-.//GGGGGGr   c                 0    g | ]}t          |          |S r   )r   rd   s     r   rg   ztest_prps.<locals>.<listcomp>b   s#    888!Q8A888r   )9iC  iy  i  i%  i  S    io#  i#  r[   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                 0    g | ]}t          |          |S r   )r
   rd   s     r   rg   ztest_prps.<locals>.<listcomp>j   s&    ???!(;A(>(>?A???r   )rx   ry   r[   rz   r{   r|   r}   r~   r   r   r   r   c                 0    g | ]}t          |          |S r   r^   rd   s     r   rg   ztest_prps.<locals>.<listcomp>m   s4       !(A!(D(D A   r   )rZ   i  ry   r[   iCm  is  ix  i{  r   r   r   r   )rI   sumany)oddcompositess    r   	test_prpsr   M   s   " "a " " "M }++++33}333 89 89 89 9 9 9 9 43}333 82 82 82 2 2 2 2 65}555 : : :     GGGGGGGGGG88}888 =9 =9 =9 9 9 9 9 @?}??? D D D     }          r   c                      g d} g d}t          d          D ]6| v rt                    |v k    sJ t          t          fd           7d S )N)r0   r   r   r"   r$   rp   !   r)   rr   9   rs   rt   a   q                  )r0   r   r"   r$   r)   r   r   r      c                  "    t                     S )N)r   )rf   s   r   r-   z!test_proth_test.<locals>.<lambda>~   s    z!}} r   )rI   r   r   rH   )A080075A080076rf   s     @r   test_proth_testr   s   s    5 5 5G /..G3ZZ 6 6<<a==Q'\22222:44445555	6 6r   c                  n    t          j        dd          D ]} t          |           | t          v k    sJ d S )Nr0   d   )r   
primeranger   r   )rK   s    r    test_lucas_lehmer_primality_testr      sN    a%% R R+A..18P3PQQQQQR Rr   c                     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 sJ t          d	          du sJ d S )
NFr0   Tr(      i  i i)r   r   r   r   test_is_mersenne_primer      s    R  E))))Q4''''R  E))))S!!T))))S!!U****V$$,,,,Z((D000000r   c                  J   t                      } |                     d           t          |                     dd                    }t	          d          D ]}||v t          |          k    sJ t          d          sJ t          d          sJ t          d          sJ t          d          sJ t          d          sJ t          d	          sJ t          d
          sJ t          d          sJ t          d          sJ t          t          d                    sJ t          d          sJ t          ddz  dz
            sJ t          ddz  dz
            sJ t          ddz  dz
            rJ t          d          rJ t          d          rJ t          d          rJ t          d          rJ t          d          rJ t          d          rJ t          d          rJ t          d          rJ t          t          d                    rJ t          t          d                    rJ t          j        d           t          d          sJ t          d          rJ t          t          d             t          t          d!            d S )"Nrh   r;   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                       t          d          S )Ng       @rc   r   r   r   r-   ztest_isprime.<locals>.<lambda>   s    ws|| r   c                  :    t          t          d                    S )Nr;   )r   r   r   r   r   r-   ztest_isprime.<locals>.<lambda>   s    wuQxx00 r   )
r   extendsetr   rI   r   intr   r   rH   )spsrf   s      r   test_isprimer      s,   AHHV	Q\\!V$$	%	%B6]] ' 'RGAJJ&&&&&9;=!!!!!=!!!!!'(((((,-----011111566666:;;;;;3 1 2 2 3 3 3 3 3 91b5191c6A:q#vz"""""
 }%%%%%}%%%%%'''''*+++++'(((((/00000/00000566666
 s A B B C C C C C s 8 9 9 : : : : : 
L4==t}}
:++,,,
:0011111r   c                      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                 0    g | ]}t          |          |S r   )r	   )re   is     r   rg   z"test_is_square.<locals>.<listcomp>   s#    111!IaLL1A111r   rp   )r   r   r+   r   r\   iK i <Y.l    @7Zkl   ,3;, i ^ )rI   r	   r   r   r   test_is_squarer      s    11uRyy1115E5E5EEEEE !!!!!!!!!!!!!!!""""""""""""r   c                      t          dt          z            sJ t          d          sJ t          ddt          z  z             sJ t          ddt          z  z             rJ d S )Nr'   r;   r0   )r   r   r   r   r   test_is_gaussianprimer      sl    QqS!!!!!QQ1W%%%%% QqS)))))))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    rN   rQ   rX   r_   r   r   r   r   r   r   r   r   r   r   <module>r      s         / / / / / / / /8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 . - - - - - - - ' ' ' ' ' ' ' '' ' '
. . .D. . .
: : :3 3 3 " " "J6 6 6R R R
1 1 1E2 E2 E2P# # #* * * * *r   