
    g@                         d dl mZ d dlmZ d dlmZ d dlmZmZ 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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( d dl)m*Z* d d	l+m,Z, d d
l-m.Z.m/Z/ d Z0d Z1d Z2dS )    )defaultdict)Tuple)S)DummySymbol)totient)n_orderis_primitive_rootis_quad_residuelegendre_symboljacobi_symbol
primerangesqrt_modprimitive_rootquadratic_residuesis_nthpow_residuenthroot_modsqrt_mod_itermobiusdiscrete_logquadratic_congruencepolynomial_congruencesieve)_primitive_root_prime_iter _primitive_root_prime_power_iter!_primitive_root_prime_power2_iter_nthroot_mod_prime_power_discrete_log_trial_mul_discrete_log_shanks_steps_discrete_log_pollard_rho_discrete_log_index_calculus_discrete_log_pohlig_hellman_binomial_mod_prime_powerbinomial_mod)ZZ)raises)randintchoicec                  0   t          dd          dk    sJ d t          dd          D             g dk    sJ t          dd	          d
k    sJ t          d	d          t          dd          k    sJ t          dd          dk    sJ t          dddz  dz   dz            dk    sJ t          t          d            t	          dd          du sJ t	          dd          du sJ t	          dd          du sJ t	          dd	          t	          dd	          k    sJ t          t          d            t          dd          D ]} t          t          |                     }|d         t          |          k    sJ |D ]}t          ||           | dz
  k    sJ t          |          t          t          |                     k    sJ t          dd          D ]}t          t          | |                    }t          t          | |                    }t          |          t          |          cxk    r#t          t          | |z                      k    sn J t          d          dk    sJ t          t          dd          d          t          d          k    sJ t          d          dk    sJ t          t          dd          d          t          d          k    sJ t          d          dk    sJ t          t          dd          d          t          d          k    sJ t          d           dk    sJ t          t          d d          d           t          d           k    sJ t          d!          dk    sJ t          t          d!d          d!          t          d!          k    sJ ddz  dz   } t          |           dk    sJ t          t          | d          |           t          |           k    sJ t          d| z            dk    sJ t          t          d| z  d          d| z            t          d| z            k    sJ t          | dz            dk    sJ t          t          | dz  d          | dz            t          | dz            k    sJ t          d"          t          d"d          J t          d#          t          d#d          J t          t          d$            t          dd          du sJ t          dd          d%u sJ t          d&d'          t          d(d'          k    sJ t          d)d*          d%u sJ t          dd          d%u sJ t          dd          d%u sJ t          dd          t          dd          cxk    rd%u sn J t          dd          d%u sJ t          dd+          du sJ t          d,d-          d%u sJ d. t          d          D             g d/k    sJ t          t          d0            t          t          d1            t          t           j                  dgk    sJ t          d          dgk    sJ t          d          g d2k    sJ t          d          g d3k    sJ d4 t          dd5          D             g d6k    sJ t          t%          dd                    dgk    sJ t'          dd          dk    sJ t'          dd7          dk    sJ t'          dd8          dk    sJ t'          d9d:          d9k    sJ t'          d;d          d k    sJ t'          d<d=          d k    sJ t          dd          D ]} t)          t                    }t          |           D ],|t+          d|                                                   -t          d|           D ]Mt%          |           }t'          | d%          }|rt/          |          }|         |k    sJ C|         rJ Nt'          d>d+d%          g d?k    sJ t'          d>d@d%          g dAk    sJ t'          d>dBd%          g dCk    sJ t'          d@d@d%          g dDk    sJ t'          d@dBd%          g dEk    sJ t'          d@dFd%          g dGk    sJ t'          d@dHd%          g dIk    sJ dJD ]*\  }	} t+          t'          |	|           d|           |	k    sJ +dK}
dLd|
z  z  d|
z  z  dMd|
dz   z  z  d|
dz   z  z  } }	t%          |	|           }t          d          D ]&t+          t1          |          d|           |	k    sJ 'dLd|
z  z  d|
z  z  dMd|
dz   z  z  d|
dz   z  z  } }	t%          |	|           }t          d          D ]&t+          t1          |          d|           |	k    sJ 'd}
dLd|
z  z  d|
z  z  dMd|
dz   z  z  d|
dz   z  z  } }	t%          |	|           }t          d          D ]&t+          t1          |          d|           |	k    sJ 't3          t1          t%          d>d+                              t4          u sJ t3          t1          t%          d>d+t6                                        t3          t7          d                    u sJ t3          t1          t%          ddt6                                        t3          t7          d                    u sJ t9          ddd          sJ t9          ddd          du sJ t9          ddd          d%u sJ t9          ddd          d%u sJ t9          ddd          d%u sJ t9          ddd          d%u sJ t9          ddd>          du sJ t9          dddN          d%u sJ t9          dOdd5          d%u sJ t9          ddd5          du sJ t9          ddd5          d%u sJ t9          dddP          du sJ t9          dddQ          d%u sJ t9          dddR          du sJ t9          dddR          d%u sJ t9          dddR          du sJ t9          dddP          du sJ t9          d@ddS          du sJ t9          dBddT          d%u sJ t9          dBddU          du sJ t9          dVddW          d%u sJ t9          dXddY          d%u sJ t9          dZd>d[          d%u sJ d\ t          d]          D             d^ t          d]          D             k    sJ d_ t          d`          D             da t          d`          D             k    sJ db t          dc          D             dd D             sJ de t          dc          D             df D             sJ t9          dgddh          sJ t9          d>ddi          sJ t9          djddk          sJ t9          dddl          sJ t9          dmddk          sJ t9          ddd          rJ t9          dnddo          sJ t9          t;          d%p          dz   dd          d%k    sJ t          dd          D ];} t          d          D ]'}	t          dd          D ]}
t=          |	|
| d          }t?          |t                    sJ t          |          dk    rXt          |           D ]}t+          ||
|           |	| z  k    sJ t          dd          D ]}t=          |	|
| |          g k    sJ t          |           D ]#}t+          ||
|           |	| z  k    }|||v z  rJ $t          dd          D ]7}t=          |	|
| |          }|s n |D ]}t+          ||
| |z            |	k    sJ 8)=tA          t;          d%q          dd          dk    sJ tA          ddmdr          dsk    sJ tA          dtddu          d"k    sJ dvD ].\  }	}} tA          |	||           }t+          |||           |	k    sJ /tA          dddw          J tA          d
ddid%          ddxgk    sJ tA          d>d
did%          g dyk    sJ tA          dddz          J tA          dVddWd%          d{d|gk    sJ tA          ddd}d%          dgk    sJ tA          dddd%          g d~k    sJ tA          ddd+d%          ddxgk    sJ tA          dddd%          ddgk    sJ tA          dddd%          g k    sJ t          dd5          D ]} t          |           D ]}	t          d|           D ]~}
tA          |	|
| d%          }t?          |t                    sJ t          |           D ] }t+          ||
|           |	k    }|||v z  rJ !tA          |	|
| d          }|	|g k    sJ x||v sJ tC          dd%          tC          dd%          tE          ddd          dk    sJ tE          ddd          dk    sJ tE          ddd@z  d          d@k    sJ tE          dddz  d          dk    sJ tG          ddd          dk    sJ tG          ddd          dk    sJ tG          dddz  d          dk    sJ tG          dddz  d          dk    sJ tI          ddldd          dk    sJ tI          dddd          dk    sJ tI          dddd          dQk    sJ tI          dddz  dd          dk    sJ t          t          d            t          t          d            tK          dddd          dk    sJ tK          dddd          dk    sJ tK          dddd          dk    sJ tK          dddd          dk    sJ tK          dddd          dk    sJ tM          ddd          d>k    sJ tM          ddd          dmk    sJ tM          dddz  d          dk    sJ tM          dddz  d          dk    sJ tO          ddd          d>k    sJ tO          ddd          dk    sJ tO          dddz  d          dk    sJ tO          dddz  d          dk    sJ tO          ddd          dk    sJ tO          dddȦ          dk    sJ d}tO          | dk    sJ tO          tQ          |  dk    sJ tS          ddddϦ          g dТk    sJ tS          ddddL          dd5gk    sJ tS          ddddԦ          g k    sJ tS          d#ddd          dgk    sJ tS          dd#dd          ddgk    sJ tS          dddd٦          ddgk    sJ tS          ddddަ          ddgk    sJ tS          dddd          ddgk    sJ tS          dddd          dgk    sJ tS          dd	dd          dgk    sJ tS          ddd5d          ddgk    sJ tU          ddz  z  ddz  z  z   ddz  z  z   dz  z   z   dz   d          g dk    sJ tU          dz  ddz  z  z
  dz  z   d!z
  d          dgk    sJ tU          dz  z   dz   d          ddgk    sJ tU          ddz  z  dz  z   d5z   d          ddgk    sJ tU          dz  dz   d
          dgk    sJ tU          ddz  z  dz  z   dz   d          ddgk    sJ tU          dz  dz
  d+          ddxgk    sJ tU          ddz  z  ddz  z  z
  dz  z
  dz   d          g dk    sJ tU          d
z  d>z
  di          g dyk    sJ tU          dz  ddz  z  z
  dz
  d          dgk    sJ t          t          fd           t          t          fd           t          t          fd           tW          ddd          dk    sJ tW          ddd          dk    sJ t          t          d            tW          ddd          dk    sJ tW          dcddF          dk    sJ tW          ddd          dk    sJ tW          ddd          dk    sJ d S (   N         c                 .    g | ]}t          |d           S )   r	   .0as     \/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/ntheory/tests/test_residue.py
<listcomp>z test_residue.<locals>.<listcomp>   s     ///aGAqMM///       r.   )r6         r7   r8   r*               r8   e   w   
   2      l   zX    4dCx ^y2V?WY|gOs&YR5I c                  "    t          dd          S )Nr8   	   r/    r5   r3   <lambda>ztest_residue.<locals>.<lambda>   s    wq!}} r5   Fr7            c                  "    t          dd          S )Nr7   r8   )r
   rD   r5   r3   rE   ztest_residue.<locals>.<lambda>#   s    0A66 r5   d   r      a   i$  i'  i)aR   ,      c                       t          d          S )N)r   rD   r5   r3   rE   ztest_residue.<locals>.<lambda>D   s    ~b11 r5   TiL0                 l    $O l    $U c                 2    g | ]}t          |d           |S )rG   r   )r1   js     r3   r4   z test_residue.<locals>.<listcomp>P   s'    ;;;!OAr$:$:;A;;;r5   )r   r6   r*   rK   r.   rF   rC   r<   c                  "    t          dd          S )Ng?r*   rX   rD   r5   r3   rE   ztest_residue.<locals>.<lambda>R   s    sA66 r5   c                  "    t          dd          S )Nr*   r   rX   rD   r5   r3   rE   ztest_residue.<locals>.<lambda>S   s    q!44 r5   )r   r6   rK   rC   )r   r6   r7   rK   rC   r?   r,   c                 F    g | ]}t          t          |                    S rD   )lenr   r1   is     r3   r4   z test_residue.<locals>.<listcomp>Y   s)    ===1C"1%%&&===r5      )r6   r*   r*   r*   r7   rK   rK   r7   rK   r8   r8   rK   r.   rF   r8   rK   rC   rF   r?   i   iY  i  C   i  i rC   )r7   r8   r,   rO         Q   )r7   rd      3   9   N      )r7   ri   T            )	r   rC      rV   $   -   6   ?   H   )rC   ro   rp   rq   rs   rt   Z   c   u   ~                  rT         i  )rC   rt   ru   rz   r{   r      i;  M  i  i      i.  i@  i  i      )rC   r   r   r   r   r   i  i  i  i  i  i  i  i  i  i  i  i  ))  l     @B )r   l      ! )i   i   )l   )1mQ l   K'R )l    )bm.Ql    ,zhF      i	=  rf   rc   0   (   rd   i  i  i i  iVU io  i  i(j ij  c                 0    h | ]}t          |d d          S 8      powr^   s     r3   	<setcomp>ztest_residue.<locals>.<setcomp>   s$    ///aQD		///r5   r   c                 4    h | ]}t          |d d          |S r   r   r0   s     r3   r   ztest_residue.<locals>.<setcomp>   s*    EEE!&72t&D&DEAEEEr5   c                 0    h | ]}t          |d d          S       r   r^   s     r3   r   ztest_residue.<locals>.<setcomp>   s$    111#ad

111r5   r   c                 4    h | ]}t          |d d          |S r   r   r0   s     r3   r   ztest_residue.<locals>.<setcomp>   s*    FFF!&73&E&EFAFFFr5   c                 0    h | ]}t          |d d          S r<   i r   r^   s     r3   r   ztest_residue.<locals>.<setcomp>   s$    222#aV

222r5     c                 0    g | ]}t          |d d          S r   r   r0   s     r3   r4   z test_residue.<locals>.<listcomp>   s%    999!q"f--999r5   c                 0    h | ]}t          |d d          S r:   l   pLX r   r^   s     r3   r   ztest_residue.<locals>.<setcomp>   s$    777a#a[
!
!777r5   c                 0    g | ]}t          |d d          S r   r   r0   s     r3   r4   z test_residue.<locals>.<listcomp>   s%    >>>qq"k22>>>r5   i  i  rp       )   @      ic!  i'  )even)oddJ   rq   	  g
  ))i  r*   i	 )+   r7   m   )r   r<   r   )ii  ic)i  r.   r   )iS  r8   r   )i  r,   r   )i=o  rC   i?  r      )r7   rC   rO   rc   rV   !   ih1 i  iF  %   )
r   r?   r`   rf   r   r@   <   r   P   ru   y      f   x)positiver_   )integeriK     i  l   ,"$. ro   i     {   i 1   iSW l   =HcEih G   i|% iA  i[ rseedi_] i   iU0l        i[vr   c                  (    t          dddd          S )Nr<   r.   r   r   r   r    rD   r5   r3   rE   ztest_residue.<locals>.<lambda>  s    8Q!LLL r5   c                  (    t          dddd          S )N   r   r9   r   r   r   rD   r5   r3   rE   ztest_residue.<locals>.<lambda>  s    8dAQOOO r5   i  i  i     i'	 i"U  i i	 iO("8i6&i'i%l   4Ml   \^;l   C&l   +q  l   ;, l   fI	 l   8( i3u&ib2#il   +m i8l   #LWY
1PT] ib   i i  i   l   [+c=F^ 9 rg      l   I\iD  l   @{t{E l   v
5 l   L,@l   n-{anZ
.*/`y_{3KC\Z/cSIk7l<l   I]M* u2,-
rMFy:T C;@[	p;,U i@ l   ,Ti:< )VEaRgiQ|/wC~V6ePj6]Um )i  i  iG  i  i  U   }   i@  )i'  ig  i  i  i'  x   r      i           i,  i  ry   i  i i%q l   Xk;H]) l   K+\1 l   'ff A   rt   i     r   i )iG_ i7 i ioj i
 i i~ i i3  iOv  /   ia	  i  iO  #   i7  i	  iC )iS i5 i i+=   i  c                  *    t            z  d          S Nr   r   r   s   r3   rE   ztest_residue.<locals>.<lambda>/      4QT4@@ r5   c                  *    t           z  d          S r   r   )r_   r   s   r3   rE   ztest_residue.<locals>.<lambda>0  r   r5   c                  6    t          d dz  z  dz   d          S )Ng?r*   r8   rJ   r   r   s   r3   rE   ztest_residue.<locals>.<lambda>1  s    4SAX\3GG r5   c                  $    t          ddd          S )Nr*   r6   r   )r$   rD   r5   r3   rE   ztest_residue.<locals>.<lambda>5  s    |Aq"55 r5   l   NZoi[l     NZol    J)l   *(	 l   ,[> ),r	   ranger&   
ValueErrorr
   r   listr   minr]   r   r   r   r   r   r   r   Oner   r   r   r   appendsortednexttypeintr%   r   r   r   
isinstancer   r   r   r   r    r!   r"   r   r   r   r   r$   )pligeli_power	li_power2ditvr2   nansbkpredqrans2argsr_   r   s                      @@r3   test_residuer      sd   1b>>R//5A;;///   1b>>R2r??gann,,,,3!!!!2Bq())  .S  S  S  S  S
:,,---Q""e++++Q""e++++R$$----R$$(9"b(A(AAAAA
:667773 	M 	M,Q//00!uB 	* 	*A1a==AE)))))2ww''!**------q! 	M 	MA<QBBCCH>q!DDEEIx==C	NNLLLLggadmm6L6LLLLLLLL	M """"">"e,,b11WR[[@@@@%  A%%%%>%//7775>>IIII%  A%%%%>%//7775>>IIII (##r))))>(E22H==ARARRRRR""""">"e,,b11WR[[@@@@
BA!"""">!U++Q//71::====!A#"$$$$>!A#u--qs33wqs||CCCC!Q$2%%%%>!Q$..155AFFFF&!!)nVU.K.K.S.S.S"%.U*C*C*K*K*K
:112221a  E))))2r""d****5#&&/+s*K*KKKKK3$$,,,,1a  D((((1a  D((((1a  OAq$9$9AAAATAAAAAA1a  D((((1b!!U****;44<<<<;;uRyy;;;$$$% % % %
:66777
:44555ae$$++++a  QC''''b!!\\\1111b!!%<%<%<<<<<==a===@@@A A A A a##$$++++Ar??aAsq    Ar??b    C$$$$B$$$$D&!!T))))1c]]    q 	& 	&Ac!QllO""1%%%%q! 	  	 Aq!$$BAt$$A  1IItqyyyyyQ4	  Ar4  $:$:$:::::Ar4  $;$;$;;;;;AtT""&@&@&@@@@@Bd##'I'I'IIIIIBd## (9 (9 (9 9 9 9 9Bd## (> (> (> > > > >Bd## (G (G (G G G G G. . .1 8Aq>>1a((A-----
A19QT>4AaC=QqS1qA	q!		B2YY ( (488Q""a'''''19QT>4AaC=QqS1qA	q!		B1XX ( (488Q""a'''''A19QT>4AaC=QqS1qA	q!		B1XX ( (488Q""a''''']1b))**++s2222]1b"--..//41;;>>>>]1a,,--..$r!uu++====Q1%%%%% Q1%%....Q1%%----Q1%%----Q1%%----Q1%%----Q1%%....Q2&&$....RR((D0000QB''50000QB''4////QB''50000QB''4////QB''50000QB''4////QB''50000QB''50000RC((E1111S!T**d2222S!W--6666UAu--5555UAt,,4444UAu--5555//5;;///AEEuT{{EEEJJJJ11U4[[111AFFuT{{FFF!KKKK22eDkk222A99q999999775;;777A>>A>>>>>>S!T*****QB'''''RR(((((Q2&&&&&RB''''' Aq)))))T2u-----U---11a88D@@@@2 9 9q 	9 	9A1a[[ 9 9.q!Q::!#t,,,,,s88q=="1XX 5 5"1a||q1u44444"1b\\ J J71aCCrIIIIIJ #1XX 6 6"1a||q1u4#'18#45555"1b\\ 9 96q!QBB" "!E!$ 9 9A#&q!ad#3#3q#8#8#8#8#89!9	9( u1--2222r2r""b((((tR&&",,,,/ ! !1a 1a  1a||q     r1c""***r1b$''Ar72222q"b$''+A+A+AAAAAq!W%%---ua--%????q"b$''A3....q!S$''+R+R+RRRRRq!R&&1b'1111q!S$''B94444q!Q%%++++1b\\ ' 'q 	' 	'A1a[[ 
' 
'!!Q400!#t,,,,,q 2 2Aq!Q<<1,D#qCx01111"1aE22<"999993;;;;;
'	' 	sT"""AsD!!!A"3a00A5555"3q11R7777"32q11R7777"3C44;;;;%fdA66!;;;;%feQ772====%gq"ua88B>>>>%gq#vq99S@@@@$WdAQ???1DDDD$WeQa@@@BFFFF$XuaqAAARGGGG$Xq#vqBBBcIIII
:LLMMM
:OOPPP'S!S99S@@@@'q&AAUJJJJ'	8Q	JJiWWWW'lA|TTXddddd'[+yYY]fffff'%<<AAAA'&"==CCCC'"b&"==CCCC'"c'2>>#EEEET1%%******b0000"c'2..#5555afa00C7777;;~MMMM  D D    $NN N N N D#%%%%&#----Rd337R7R7RRRRR1a,,B7777Rc22b8888B1--!44442q"--"b9999S#s33SzAAAA9MNNSgi}R~~~~~CS11c3Z????2r1--!4444BA..1#5555BA..1a&8888 1a4"QT'!1AadF!:QT!AA!E!I SSST T T T !A1a4"Q$!6!;UCCwNNNN AB55#tDDDD AqD2a4"!4a88QFBBBB A2..1#5555 AqD3q52!5s;;SzIIII A2..1b'9999 AqD1QT6!1CE!9D!@&II N  N  N          BB//3I3I3IIIII A!Q$!3T::tfDDDD
:@@@@AAA
:@@@@@AAA
:GGGGHHHAr""a''''2r""a''''
:55666B##q((((sD))S0000
Iq11Q666677:EEEEEEr5   c                  P   ddgd}}} t          d| dz             D ]'}|| |z
  dz   z  }||z  }|                    |           (d}t          |          D ]F}t          d|           t          dd          }}t          | |d|          ||         d|z  z  k    sJ Gt	          t          j        d| z                      }d}	t          |	          D ]U}t          d|           t          |          t          dd          }}
}t          | ||
|          ||         |
|z  z  k    sJ Vd S )Nr   r6   rJ   r   r`   r*   r?   )r   r   r'   r#   r   r   r   r(   )r   	binomialsbinomialr_   trials_2_mpowerprimestrialsprimes              r3   test_binomial_p_powr  <  s]   !A3(yA1a!e__ # #AEAIQ"""" H8__ T T1a=='!R..5(Aq%88IaL1e8<SSSSSS %"1Q3''((FF6]] \ \!!Q--B%5(Aue<<	!uV[|@[[[[[[\ \r5   c                  h   ddl m}   |             5  t          d          dk    sJ 	 d d d            n# 1 swxY w Y    |             5  t          dd          dk    sJ 	 d d d            n# 1 swxY w Y    |             5  t	          dd          dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   warns_deprecated_sympyr7   r   r*   )sympy.testing.pytestr  r   r   r   r  s    r3   *test_deprecated_ntheory_symbolic_functionsr  Q  s   ;;;;;;			!	!  ayyB              			!	! + +q!$$*****+ + + + + + + + + + + + + + +			!	! ) )Q""b((((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s0   488	A--A14A1B''B+.B+N)3collectionsr   sympy.core.containersr   sympy.core.singletonr   sympy.core.symbolr   r   %sympy.functions.combinatorial.numbersr   sympy.ntheoryr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   sympy.ntheory.residue_ntheoryr   r   r   r   r   r   r    r!   r"   r#   r$   sympy.polys.domainsr%   r  r&   sympy.core.randomr'   r(   r   r  r  rD   r5   r3   <module>r     s$   # # # # # # ' ' ' ' ' ' " " " " " " - - - - - - - - 9 9 9 9 9 9! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
, , , , , , , , , , , , , , , , , , , , , , , , , ,
 # " " " " " ' ' ' ' ' ' - - - - - - - -dF dF dFN	\ \ \*) ) ) ) )r5   