
    g"                         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"dS )    )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                     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 ]5} t          d| z            | k    sJ t          d| z  dz            | k    sJ 6t          d	          D ]"} dd	z  d| z  z   }t          |          | k    s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    sJ +d S )Nr            id   iiz  i  iAB i$. l   >qKwl/-:
   )r   range)inbigs      ]/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/external/tests/test_ntheory.pytest_bit_scan1r       s   Q<<Q<<1R==AQ<<1Q<<1R==A3ZZ 0 0a  A%%%%!q&E)**a/////3ZZ ! !#X!q&!||q     Q'\""g----a6k5())V33331b\\ 1 11f#)C..000001 1    c                      t          d          J t          d          dk    sJ t          d          dk    sJ t          d          dk    sJ d S )Nr   r   r   )r    r!   r   test_bit_scan0r%       s_    R==   Q<<1Q<<1R==Ar!   c                      t          t          d            t          dd          dk    sJ t          dd          D ]8} t          dd          D ]%}dD ] }t          || |z  z  |           ||fk    sJ !&9d S )	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 3q$ 	3 	3A' 3 3a1fa((QF222223	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n J t          | d
          t          |  d
          cxk    rdk    sn J t          | |           t          |  |           cxk    r	| ddfk    sn J t          | |            t          |  |            cxk    r	| dd
fk    sn J t          dd          D ]^} t          d|           t          d|            cxk    rdk    sn J t          d
|           t          d
|            cxk    rdk    sn J _t          g dd          D ]3\  }}t          ||          \  }}}|||z  ||z  z   cxk    rdk    sn J 4d S )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   sP   !Q<<9$$$$!Q<<9$$$$!Q<<9$$$$1b\\ = =a||vqb!}}9999	999999a}}r2<<<<*<<<<<<a||vqb!}}9999Aq	999999a!}}rA2<<<<1a*<<<<<<<1b\\ = =a||va!}}9999	999999b!}}rA2<<<<*<<<<<<<333Q77 # #1A,,1aAaC!A#I"""""""""""# #r!   c                  ~   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          sJ g d} | D ]}t          |d          sJ d S )Nc                  "    t          dd          S Nr   r   r   r$   r!   r   r(   z$test_is_fermat_prp.<locals>.<lambda>F       }Q33 r!   c                  "    t          dd          S Nr4   r   r?   r$   r!   r   r(   z$test_is_fermat_prp.<locals>.<lambda>G       }Q2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3444
:22333 Q""""" AAQ!$$$$$C C CK # #Q""""""C C CK # #Q""""""# #r!   c                  ~   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          sJ g d} | D ]}t          |d          sJ d S )Nc                  "    t          dd          S r>   r   r$   r!   r   r(   z#test_is_euler_prp.<locals>.<lambda>a   s    |Ar22 r!   c                  "    t          dd          S rB   r\   r$   r!   r   r(   z#test_is_euler_prp.<locals>.<lambda>b   s    |Aq1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2333
:11222 Aq!!!!! 11A#####@ @ @K " "Aq!!!!!!C C CK " "Aq!!!!!!" "r!   c                  ~   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          sJ g d} | D ]}t          |d          sJ d S )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3444
:22333 Q""""" AAQ!$$$$$= = =K # #Q""""""D D DK # #Q""""""# #r!   c            
         d } d }d}t          dd          D ]}t          dd          D ]}|dz  d|z  z
  }|dk    r | |||          } ||||          }t          d	d
d          D ]c}t          |          D ]Q}	t          ||||	          \  }
}}|
||	         |z  k    sJ |||	         |z  k    sJ t          ||	|          |k    sJ Rdd S )Nc                     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   s^    faq&!! 	; 	;A5Q<'!eAEl*::E!HH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   sg    faaq&!! 	; 	;A5Q<'!eAEl*::E!HH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      sB        F3^^ . .sB 	. 	.A1qs
AAvvAv&&BAv&&B1c1%% . .v . .A.q!Q::HAq"1	>>>>1	>>>>q!Q<<2-----	..	.. .r!   c                     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
          sJ d S )Nc                  $    t          ddd          S Nr)   r   r   r   r$   r!   r   r(   z'test_is_fibonacci_prp.<locals>.<lambda>       /1a8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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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8999
:99:::
:88999
:99:::  1a((((( Aq!$$$$$Aq"%%%%%B1%%%%%GQ+++++= = =K * *1b))))))* *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 g d} | D ]}t          |dd	          sJ d S )Nc                  $    t          ddd          S r   r   r$   r!   r   r(   z#test_is_lucas_prp.<locals>.<lambda>   s    |Aq!44 r!   c                  $    t          ddd          S r   r   r$   r!   r   r(   z#test_is_lucas_prp.<locals>.<lambda>   s    |Aq"5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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4555
:55666
:55666 Aq!$$$$$ 1a     1b!!!!!Aq!!!!!B'''''C C 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          |          sJ d S )Nc                       t          d          S Nr   )r   r$   r!   r   r(   z'test_is_selfridge_prp.<locals>.<lambda>   s    /2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2333  """"" AABG$$$$$C C CK # #""""""# #r!   c                  H   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 d S )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          |          sJ d S )Nc                       t          d          S r   )r   r$   r!   r   r(   z.test_is_strong_selfridge_prp.<locals>.<lambda>  s    6q9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9::: 'q))))) #1%%%%%"1%%%%%"2&&&&&"7+++++F F 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 d S )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     s|    
:--... 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 d S )Nc                       t          d          S r   )r   r$   r!   r   r(   z)test_is_strong_bpsw_prp.<locals>.<lambda>*  s    1!44 r!   r   r   r)   r6   rD   )r   r,   r   r$   r!   r   test_is_strong_bpsw_prpr   (  s    
:4455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      s   " " " " " "E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E
 ( ' ' ' ' '1 1 1*  3 3 3# # #(# # #6" " "6# # #6. . .@* * *.& & &,# # #(/ / / * * *(     ' ' ' ' 'r!   