
    sg"                         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 Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Z d Z!d Z"y)    )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                  8   t        d      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 ]+  } t        d| z        | k(  sJ t        d| z  dz        | k(  r+J  t        d	      D ]  } dd	z  d| z  z   }t        |      | k(  rJ  t        dd
z        d
k(  sJ t        ddz  dz        dk(  sJ t        dd      D ]!  } d| z  }t        |       t        |      k(  r!J  y )Nr            id   iiz  i  iAB i$. l   >qKwl/-:
   )r   range)inbigs      T/var/www/html/venv/lib/python3.12/site-packages/sympy/external/tests/test_ntheory.pytest_bit_scan1r       sV   Q<Q<1R=AQ<1Q<1R=A3Z 0a A%%%!q&E)*a///0 3Z !#X!q&!|q   ! Q'\"g---a6k5()V3331b\ 11f#)C.0001    c                  ~    t        d      J t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ y )Nr   r   r   )r    r!   r   test_bit_scan0r%       sH    R=   Q<1Q<1R=Ar!   c                      t        t        d        t        dd      dk(  sJ t        dd      D ]3  } t        dd      D ]"  }dD ]  }t        || |z  z  |       ||fk(  rJ  $ 5 y )	Nc                      t        dd      S )Nr   )r   r$   r!   r   <lambda>ztest_remove.<locals>.<lambda>(   s    va| r!   r      )r   r   r   r   i  )r      e   i  )r   
ValueErrorr   r   )fyzs      r   test_remover0   '   s{    
:+,!Q<6!!!1b\ 3q$ 	3A' 3a1fa(QF2223	33r!   c                     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      cxk(  rd	k(  sJ  J t        | d
      t        |  d
      cxk(  rdk(  sJ  J t        | |       t        |  |       cxk(  r	| ddfk(  sJ  J t        | |        t        |  |        cxk(  r
| dd
fk(  rJ  J  t        dd      D ]L  } t        d|       t        d|        cxk(  rdk(  sJ  J t        d
|       t        d
|        cxk(  rdk(  rIJ  J  t        g dd      D ].  \  }}t        ||      \  }}}|||z  ||z  z   cxk(  rdk(  r+J  J  y )Nr   )r   r   r   r)   )r)   r   r      )r2   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.   s         r   test_gcdextr;   0   s   !Q<9$$$!Q<9$$$!Q<9$$$1b\ =a|vqb!}9	99999a}r2<*<<<<<a|vqb!}9Aq	99999a!}rA2<1a*<<<<<	= 1b\ =a|va!}9	99999b!}rA2<*<<<<<= 3Q7 #1A,1aAaC!A#I""""""#r!   c                  8   t        t        d        t        t        d        t        dd      rJ t        dd      sJ t        dd      sJ t        dd      sJ t        dd	      sJ g d
} | D ]  }t        |d      rJ  g d} | D ]  }t        |d      rJ  y )Nc                      t        dd      S Nr   r   r   r$   r!   r   r(   z$test_is_fermat_prp.<locals>.<lambda>F       }Q3 r!   c                      t        dd      S Nr4   r   r?   r$   r!   r   r(   z$test_is_fermat_prp.<locals>.<lambda>G       }Q2 r!   r   r)   r   r2   r6   r4   )U  1    Q  k    q    	  i
        i  i  I  )   U   [   rE   i  i  rF   rG     rH   i  i  rI   i-  i  rJ   c  rK   )r   r,   r   pseudorpimer   s     r   test_is_fermat_prprY   D   s    
:34
:23 Q""" AAQ!$$$CK #Q"""#CK #Q"""#r!   c                  8   t        t        d        t        t        d        t        dd      rJ t        dd      sJ t        dd      sJ t        dd      sJ t        dd	      sJ g d
} | D ]  }t        |d      rJ  g d} | D ]  }t        |d      rJ  y )Nc                      t        dd      S r>   r   r$   r!   r   r(   z#test_is_euler_prp.<locals>.<lambda>a   s    |Ar2 r!   c                      t        dd      S rB   r\   r$   r!   r   r(   z#test_is_euler_prp.<locals>.<lambda>b   s    |Aq1 r!   r   r)   r   r2   r6   rD   r4   )rF   rH   rJ   rK   rL   rM   rO   rP   rQ        i!!  Y)  i2  =  )y   rU   rJ   rV   rN     i     "  r`   s0  ia<  ra   @  !I  )r   r,   r   rW   s     r   test_is_euler_prpri   _   s    
:23
:12 Aq!!! 11A###@K "Aq!!!"CK "Aq!!!"r!   c                  8   t        t        d        t        t        d        t        dd      rJ t        dd      sJ t        dd      sJ t        dd      sJ t        dd	      sJ g d
} | D ]  }t        |d      rJ  g d} | D ]  }t        |d      rJ  y )Nc                      t        dd      S r>   r	   r$   r!   r   r(   z$test_is_strong_prp.<locals>.<lambda>|   r@   r!   c                      t        dd      S rB   rl   r$   r!   r   r(   z$test_is_strong_prp.<locals>.<lambda>}   rC   r!   r   r)   r   r2   r6   rD   r4   )rL   rO   rP   rQ   r_   ra   ir  i/  i  i  i  i# i: )rb   rU   rV   rc   rd   re   r`   rf   rg   rh   iK  i[  i{  i  i]  )r   r,   r	   rW   s     r   test_is_strong_prprn   z   s    
:34
:23 Q""" AAQ!$$$=K #Q"""#DK #Q"""#r!   c            
      b   d } d }d}t        dd      D ]  }t        dd      D ]  }|dz  d|z  z
  }|dk(  r | |||      } ||||      }t        d	d
d      D ]P  }t        |      D ]@  }	t        ||||	      \  }
}}|
||	   |z  k(  sJ |||	   |z  k(  sJ t        ||	|      |k(  r@J  R   y )Nc                 r    dg|z  }d|d<   t        d|      D ]  }| ||dz
     z  |||dz
     z  z
  ||<    |S )Nr   r   r   r   PQlengtharrayks        r   lucas_uz$test_lucas_sequence.<locals>.lucas_u   sY    faq&! 	;A5Q<'!eAEl*::E!H	;r!   c                 |    dg|z  }d|d<   | |d<   t        d|      D ]  }| ||dz
     z  |||dz
     z  z
  ||<    |S )Nr   r   r   rq   rr   s        r   lucas_vz$test_lucas_sequence.<locals>.lucas_v   sb    faaq&! 	;A5Q<'!eAEl*::E!H	;r!      ir   r   r2   r   r)   r   )r   r   pow)rx   rz   ru   rs   rt   Dusvsr   rw   UVQks                r   test_lucas_sequencer      s     F3^ .sB 	.A1qs
AAvAv&BAv&B1c1% .v .A.q!Q:HAq"1	>)>1	>)>q!Q<2---	..	..r!   c                  V   t        t        d        t        t        d        t        t        d        t        t        d        t        ddd      rJ t        ddd      sJ t        dd	d
      sJ t        ddd      sJ t        ddd
      sJ g d} | D ]  }t        |dd
      rJ  y )Nc                      t        ddd      S Nr)   r   r   r   r$   r!   r   r(   z'test_is_fibonacci_prp.<locals>.<lambda>       /1a8 r!   c                      t        ddd      S )Nr)   r   r   r$   r!   r   r(   z'test_is_fibonacci_prp.<locals>.<lambda>   s    /2q9 r!   c                      t        ddd      S )Nr)   r4   r   r   r$   r!   r   r(   z'test_is_fibonacci_prp.<locals>.<lambda>   r   r!   c                      t        ddd      S Nr   r4   r   r   r$   r!   r   r(   z'test_is_fibonacci_prp.<locals>.<lambda>   s    /1b9 r!   r   r)   r   r4      r   r6   r   rD      )i  rM   i
  i  U    A  }*  3  ;  i_  iar  i  )r   r,   r   rW   s     r   test_is_fibonacci_prpr      s    
:89
:9:
:89
:9:  1a((( Aq!$$$Aq"%%%B1%%%GQ+++=K *1b)))*r!   c                  4   t        t        d        t        t        d        t        t        d        t        ddd      rJ t        ddd      sJ t        ddd	      sJ t        d
dd      sJ t        ddd      sJ g d} | D ]  }t        |dd	      rJ  y )Nc                      t        ddd      S r   r   r$   r!   r   r(   z#test_is_lucas_prp.<locals>.<lambda>   s    |Aq!4 r!   c                      t        ddd      S r   r   r$   r!   r   r(   z#test_is_lucas_prp.<locals>.<lambda>   s    |Aq"5 r!   c                      t        ddd      S NrR   r)   r   r   r$   r!   r   r(   z#test_is_lucas_prp.<locals>.<lambda>   s    |B15 r!   r   r)   r   r4   r   r   r6   r   rD   r   )C  y  rV     r   r   r^   r   i  r   -  r   i6  r   iB  )r   r,   r   rW   s     r   test_is_lucas_prpr      s    
:45
:56
:56 Aq!$$$ 1a   1b!!!Aq!!!B'''CK &Aq"%%%&r!   c                      t        t        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        |      rJ  y )Nc                      t        d      S Nr   )r   r$   r!   r   r(   z'test_is_selfridge_prp.<locals>.<lambda>   s    /2 r!   r   r   r)   r6   rD   )r   r   i  i%  r   S  r   io#  i#  r   i,  r   i_6  i9  >  )r   r,   r   rW   s     r   test_is_selfridge_prpr      s|    
:23  """ AABG$$$CK #"""#r!   c                      t        t        d        t        t        d        t        t        d        t        ddd      rJ t        ddd      sJ t        ddd	      sJ t        d
dd      sJ t        ddd      sJ y )Nc                      t        ddd      S r   r   r$   r!   r   r(   z*test_is_strong_lucas_prp.<locals>.<lambda>   s    21a; r!   c                      t        ddd      S r   r   r$   r!   r   r(   z*test_is_strong_lucas_prp.<locals>.<lambda>   s    21a< r!   c                      t        ddd      S r   r   r$   r!   r   r(   z*test_is_strong_lucas_prp.<locals>.<lambda>   s    22q!< r!   r   r)   r   r4   r   r   r6   r   rD   r   r   )r   r,   r   r$   r!   r   test_is_strong_lucas_prpr      s    
:;<
:<=
:<= #1a+++ q!Q'''q!R(((r1a(((w2...r!   c                      t        t        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        |      rJ  y )Nc                      t        d      S r   )r   r$   r!   r   r(   z.test_is_strong_selfridge_prp.<locals>.<lambda>  s    6q9 r!   r   r   r)   r6   rD   )r   r   r   r   iJ  iW  i_  iob  iu  i  iE% i| i i )r   r,   r   rW   s     r   test_is_strong_selfridge_prpr     s|    
:9: 'q))) #1%%%"1%%%"2&&&"7+++FK *&q)))*r!   c                      t        t        d        t        d      rJ t        d      sJ t        d      sJ t        d      sJ t        d      sJ y )Nc                      t        d      S r   )r   r$   r!   r   r(   z"test_is_bpsw_prp.<locals>.<lambda>  s
    {1~ r!   r   r   r)   r6   rD   )r   r,   r   r$   r!   r   test_is_bpsw_prpr     sP    
:-. 1~ q>>q>>r??wr!   c                      t        t        d        t        d      rJ t        d      sJ t        d      sJ t        d      sJ t        d      sJ y )Nc                      t        d      S r   )r   r$   r!   r   r(   z)test_is_strong_bpsw_prp.<locals>.<lambda>*  s    1!4 r!   r   r   r)   r6   rD   )r   r,   r   r$   r!   r   test_is_strong_bpsw_prpr   (  sW    
:45 "!$$$ a   a   b!!!g&&&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%   r0   r;   rY   ri   rn   r   r   r   r   r   r   r   r   r$   r!   r   <module>r      sw    "E E E E E
 (1*3#(#6"6#6.@*.&,#(/ *( 'r!   