
    \hA                         S SK Jr  S SKJr  S SKJr  S SKJrJr  S SK	J
r
  S SKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  S SKJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(  S SK)J*r*  S S	K+J,r,  S S
K-J.r.J/r/  S r0S r1S r2g)    )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                  2,  ^^ [        SS5      S:X  d   e[        SS5       V s/ s H  n [        U S5      PM     sn / SQ:X  d   e[        SS5      S	:X  d   e[        SS
5      [        SS
5      :X  d   e[        SS5      S:X  d   e[        S
SS-  S-   S-  5      S:X  d   e[        [        S 5        [	        SS5      SL d   e[	        SS5      SL d   e[	        S
S5      SL d   e[	        SS5      [	        SS5      :X  d   e[        [        S 5        [        SS5       H  n[        [        U5      5      nUS   [        U5      :X  d   eU H  n[        X15      US-
  :X  a  M   e   [        U5      [        [        U5      5      :X  d   e[        SS5       Hc  n[        [        X5      5      n[        [        X5      5      n[        U5      [        U5      s=:X  a  [        [        X-  5      5      :X  a  M`   e   e   M     [        S5      S:X  d   e[        [        SS5      S5      [        S5      :X  d   e[        S5      S:X  d   e[        [        SS5      S5      [        S5      :X  d   e[        S5      S:X  d   e[        [        SS5      S5      [        S5      :X  d   e[        S5      S:X  d   e[        [        SS5      S5      [        S5      :X  d   e[        S 5      S:X  d   e[        [        S S5      S 5      [        S 5      :X  d   eSS-  S-   n[        U5      S
:X  d   e[        [        US5      U5      [        U5      :X  d   e[        SU-  5      S
:X  d   e[        [        SU-  S5      SU-  5      [        SU-  5      :X  d   e[        US-  5      S
:X  d   e[        [        US-  S5      US-  5      [        US-  5      :X  d   e[        S!5      c  [        S!S5      b   e[        S"5      c  [        S"S5      b   e[        [        S# 5        [        SS5      SL d   e[        SS5      S$L d   e[        S%S&5      [        S'S&5      :X  d   e[        S(S)5      S$L d   e[        SS5      S$L d   e[        SS5      S$L d   e[        SS5      [        SS5      s=:X  a  S$L d   e   e[        SS5      S$L d   e[        SS*5      SL d   e[        S+S,5      S$L d   e[        S5       Vs/ s H  n[        US5      (       d  M  UPM     sn/ S-Q:X  d   e[        [        S. 5        [        [        S/ 5        [        [         R"                  5      S/:X  d   e[        S5      S/:X  d   e[        S5      / S0Q:X  d   e[        S5      / S1Q:X  d   e[        SS25       Vs/ s H  n[        [        U5      5      PM     sn/ S3Q:X  d   e[        [%        SS5      5      S/:X  d   e['        SS5      S:X  d   e['        SS45      S:X  d   e['        SS55      S
:X  d   e['        S6S75      S6:X  d   e['        S8S5      S :X  d   e['        S9S:5      S :X  d   e[        SS5       H  n[)        [        5      n	[        U5       H"  mU	[+        TSU5         R-                  T5        M$     [        SU5       HG  m[%        TU5      n
['        TUS$5      nU(       a  [/        U5      nU	T   U:X  d   eM;  U	T   (       d  MG   e   M     ['        S;S*S$5      / S<Q:X  d   e['        S;S=S$5      / S>Q:X  d   e['        S;S?S$5      / S@Q:X  d   e['        S=S=S$5      / SAQ:X  d   e['        S=S?S$5      / SBQ:X  d   e['        S=SCS$5      / SDQ:X  d   e['        S=SES$5      / SFQ:X  d   eSG H!  u  p[+        ['        X5      SU5      U :X  a  M!   e   SHnSISU-  -  SU-  -  SJSUS-   -  -  SUS-   -  -  p[%        X5      n
[        S5       H  m[+        [1        U
5      SU5      U :X  a  M   e   SISU-  -  SU-  -  SJSUS-   -  -  SUS-   -  -  p[%        X5      n
[        S5       H  m[+        [1        U
5      SU5      U :X  a  M   e   SnSISU-  -  SU-  -  SJSUS-   -  -  SUS-   -  -  p[%        X5      n
[        S5       H  m[+        [1        U
5      SU5      U :X  a  M   e   [3        [1        [%        S;S*5      5      5      [4        L d   e[3        [1        [%        S;S*[6        5      5      5      [3        [7        S5      5      L d   e[3        [1        [%        SS[6        5      5      5      [3        [7        S5      5      L d   e[9        SSS5      (       d   e[9        SSS5      SL d   e[9        SSS5      S$L d   e[9        SSS5      S$L d   e[9        SSS5      S$L d   e[9        SSS5      S$L d   e[9        SSS;5      SL d   e[9        SSSK5      S$L d   e[9        SLS
S25      S$L d   e[9        SSS25      SL d   e[9        SSS25      S$L d   e[9        SSSM5      SL d   e[9        SSSN5      S$L d   e[9        SSSO5      SL d   e[9        SSSO5      S$L d   e[9        SSSO5      SL d   e[9        SSSM5      SL d   e[9        S=SSP5      SL d   e[9        S?SSQ5      S$L d   e[9        S?SSR5      SL d   e[9        SSSST5      S$L d   e[9        SUSSV5      S$L d   e[9        SWS;SX5      S$L d   e[        SY5       Vs1 s H  n[+        USZSY5      iM     snm[        SY5       V s1 s H  n [9        U SZSY5      (       d  M  U iM     sn T:X  d   e[        S[5       Vs1 s H  n[+        US\S[5      iM     snm[        S[5       V s1 s H  n [9        U S\S[5      (       d  M  U iM     sn T:X  d   e[        S]5       Vs1 s H  n[+        US
S^5      iM     snmT V s/ s H  n [9        U S
S^5      PM     sn (       d   e[        S]5       Vs1 s H  n[+        USS_5      iM     snmT V s/ s H  n [9        U SS_5      PM     sn (       d   e[9        S`SSa5      (       d   e[9        S;SSb5      (       d   e[9        ScSSd5      (       d   e[9        SSSe5      (       d   e[9        SfSSd5      (       d   e[9        SSS5      (       a   e[9        SgSSh5      (       d   e[9        [;        S$Si9S-   SS5      S$:X  d   e[        SS5       GH"  n[        S5       GH  n [        SS5       H  n[=        XUS5      n[?        U[        5      (       d   e[        U5      S:X  aM  [        U5       H  n[+        XU5      X-  :w  a  M   e   [        SS5       H  n[=        XX5      / :X  a  M   e   M  [        U5       H"  n[+        XU5      X-  :H  nUX;   -  (       d  M"   e   [        SS5       H6  n[=        XX5      nU(       d    M  U H  n[+        XX-  5      U :X  a  M   e   M8     M     GM     GM%     [A        [;        S$Sj9SS5      S:X  d   e[A        SSfSk5      Sl:X  d   e[A        SmS
Sn5      S!:X  d   eSo H'  u  n nn[A        U UU5      n[+        UUU5      U :X  a  M'   e   [A        S
SSp5      b   e[A        S	SSbS$5      SSq/:X  d   e[A        S;S	SbS$5      / SrQ:X  d   e[A        SSSs5      b   e[A        SSSSTS$5      StSu/:X  d   e[A        SSSvS$5      S/:X  d   e[A        SSSS$5      / SwQ:X  d   e[A        SSS*S$5      SSq/:X  d   e[A        SSSxS$5      SySz/:X  d   e[A        SSSS$5      / :X  d   e[        SS25       H  n[        U5       H  n [        SU5       Hx  n[A        XUS$5      n[?        U[        5      (       d   e[        U5       H   n[+        XU5      U :H  nUX;   -  (       d  M    e   [A        XUS5      nUc
  U/ :X  d   eMp  UU;   a  Mx   e   M     M     [C        S{S$S|9m[C        S}S$S~9m[E        SSS5      S:X  d   e[E        SSS5      S:X  d   e[E        SSS=-  S5      S=:X  d   e[E        SSyS-  Sy5      S:X  d   e[G        SSS5      S:X  d   e[G        SSS5      Sy:X  d   e[G        SSS-  S5      S:X  d   e[G        SSS-  S5      S:X  d   e[I        SSeSSS9S:X  d   e[I        SSSSS9Sy:X  d   e[I        SSSSS9SN:X  d   e[I        SSS-  SSS9S:X  d   e[        [        S 5        [        [        S 5        [K        SSSS5      S:X  d   e[K        SSSS5      S:X  d   e[K        SSSS5      S:X  d   e[K        SSSS5      S:X  d   e[K        SSSS5      S:X  d   e[M        SSS
5      S;:X  d   e[M        SSS
5      Sf:X  d   e[M        SS
S-  S
5      S:X  d   e[M        SS
S-  S
5      S:X  d   e[O        SSS5      S:X  d   e[        [        S 5        [        [        S 5        [O        SSS5      S;:X  d   e[O        SSS5      S:X  d   e[O        SS
S-  S
5      S:X  d   e[O        SSS-  S5      S:X  d   e[O        SSS5      S:X  d   e[O        SSS5      S:X  d   eSn[O        U6 S:X  d   e[O        [Q        U6 6 S:X  d   e[S        SSSS5      / SQ:X  d   e[S        SSSSI5      SS2/:X  d   e[S        SSSS5      / :X  d   e[S        S"SSS5      S/:X  d   e[S        SS"SS5      SS/:X  d   e[S        SSSS5      SS/:X  d   e[S        SSSS5      SS/:X  d   e[S        SSxSS5      SS/:X  d   e[S        SSSS5      S/:X  d   e[S        SSSyS5      S/:X  d   e[S        SSS2S5      SS/:X  d   e[S        SSSS5      SS/:X  d   e[U        STS-  -  STS-  -  -   STS-  -  -   TS-  -   T-   S-   S5      / SQ:X  d   e[U        TS-  STS-  -  -
  ST-  -   S -
  S5      S/:X  d   e[U        TS-  T-   S-   S5      SS/:X  d   e[U        STS-  -  ST-  -   S2-   S5      SS/:X  d   e[U        TS-  S-   S	5      S/:X  d   e[U        STS-  -  SxT-  -   S-   S5      SS/:X  d   e[U        TS-  S-
  S*5      SSq/:X  d   e[U        STS-  -  STS-  -  -
  ST-  -
  S-   S5      / SQ:X  d   e[U        TS	-  S;-
  Sb5      / SrQ:X  d   e[U        TS-  STS-  -  -
  S-
  S5      S/:X  d   e[        [        U4S j5        [        [        UU4S j5        [        [        U4S j5        [W        SSS5      S:X  d   e[W        SSS5      S:X  d   e[        [        S 5        [W        SSS5      S:X  d   e[W        S]SSC5      S:X  d   e[W        SSS5      S:X  d   e[W        SSS5      S:X  d   eg s  sn f s  snf s  snf s  snf s  sn f s  snf s  sn f s  snf s  sn f s  snf s  sn f (   N               )r-         r/   r0   r*               r0   e   w   
   2      l   zX    4dCx ^y2V?WY|gOs&YR5I c                      [        SS5      $ )Nr0   	   )r	        X/var/www/auris/envauris/lib/python3.13/site-packages/sympy/ntheory/tests/test_residue.py<lambda>test_residue.<locals>.<lambda>   s
    wq!}r=   Fr/            c                      [        SS5      $ )Nr/   r0   )r
   r<   r=   r>   r?   r@   #   s    0A6r=   d   r      a   i$  i'  i)aR   ,      c                      [        S5      $ )N)r   r<   r=   r>   r?   r@   D   s	    ~b1r=   TiL0                 l    $O l    $U )r   r-   r*   rF   r.   rA   r;   r4   c                      [        SS5      $ )Ng?r*   r   r<   r=   r>   r?   r@   R   s    sA6r=   c                      [        SS5      $ )Nr*   r   rS   r<   r=   r>   r?   r@   S   s    q!4r=   )r   r-   rF   r;   )r   r-   r/   rF   r;   r7   r,      )r-   r*   r*   r*   r/   rF   rF   r/   rF   r0   r0   rF   r.   rA   r0   rF   r;   rA   r7   i   iY  i  C   i  i r;   )r/   r0   r,   rJ         Q   )r/   rY      3   9   N      )r/   r^   T            )	r   r;      rQ   $   -   6   ?   H   )r;   rd   re   rf   rh   ri   Z   c   u   ~                  rO         i  )r;   ri   rj   ro   rp   rt      i;  M  i  i      i.  i@  i  i      )r;   rt   ru   rw   rx   ry   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	=  r[   rX   0   (   rY   i  i  i i  iVU io  i  i(j ij  i   8   i        i l   pLX i  i  re       )   @      ic!  i'  )even)oddJ   rf   	  g
  ))i  r*   i	 )+   r/   m   )r   r4   r   )ii  ic)i  r.   r   )iS  r0   r   )i  r,   r   )i=o  r;   i?  r      )r/   r;   rJ   rX   rQ   !   ih1 i  iF  %   )
r   r7   rU   r[   r   r8   <   r|   P   rj   y      f   x)positivei)integeriK     i  l   ,"$. rd   i     {   i 1   iSW l   =HcEih G   i|% iA  i[ rseedi_] i   iU0l        i[vrv   c                      [        SSSSS9$ )Nr4   r.   r   r   r   r    r<   r=   r>   r?   r@     s    8Q!Lr=   c                      [        SSSSS9$ )N   rz   r1   r   r   r   r<   r=   r>   r?   r@     s    8dAQOr=   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  c                      [        SSS5      $ )Nr-   r/   r   r<   r=   r>   r?   r@         |B15r=   c                      [        SSS5      $ )Nr7   r/   r*   r   r<   r=   r>   r?   r@     r   r=   i   l   [+c=F^ 9 r\      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  rn   i  i i%q l   Xk;H]) l   K+\1 l   'ff A   ri   i     ru   l    l    l          l   5Ul   =\Eti )iG_ i7 i ioj i
 i i~ i i3  iOv  /   ia	  i  iO  #   i7  i	  iC )iS i5 i i+=   i  c                  "   > [        T T -  S5      $ Nr   r   r   s   r>   r?   r@   3      4QT4@r=   c                  "   > [        TT -  S5      $ r   r   )r   r   s   r>   r?   r@   4  r   r=   c                  .   > [        ST S-  -  S-   S5      $ )Ng?r*   r0   rE   r   r   s   r>   r?   r@   5  s    4SAX\3Gr=   c                      [        SSS5      $ )Nr*   r-   r   )r$   r<   r=   r>   r?   r@   9  s    |Aq"5r=   l   NZoi[l     NZol    J)l   *(	 l   ,[> ),r	   ranger&   
ValueErrorr
   r   listr   minlenr   r   r   r   r   r   r   Oner   r   r   powappendsortednexttypeintr%   r   r   r   
isinstancer   r   r   r   r    r!   r"   r   r   r   r   r$   )apligeli_power	li_power2jr   ditvnansbkpredqrans2argsr   s           `            @r>   test_residuer      s(   1b>R#(A;/;aGAqM;/  1b>R2r?gan,,,3!!!2Bq()  .S  S  S  S
:,-Q"e+++Q"e+++R$---R$(9"b(AAAA
:673,Q/0!uBA1=AE))) 2w''!*----q!A<QBCH>qDEIx=C	NLggadm6LLLLLL    """">"e,b1WR[@@@% A%%%>%/775>III% A%%%>%/775>III (#r)))>(E2H=ARRRR"""">"e,b1WR[@@@
BA!""">!U+Q/71:===!A#"$$$>!A#u-qs3wqs|CCC!Q$2%%%>!Q$.15AFFF&!)nVU.K.SSS"%.U*C*KKK
:121a E)))2r"d***5#&/+s*KKKK3$,,,1a D(((1a D(((1a OAq$9ATAAAAA1a D(((1b!U***;4<<<Ry;y!OAr$:Ay;$% % %
:67
:45aee$+++a QC'''b!\111b!%<<<<05a=1C"1%&=@A A A a#$+++Ar?aAsq   Ar?b   C$$$B$$$D&!T)))1c]qAc!QlO""1% q!Aq!$BAt$A1Itqy yQ44x 	  Ar4 $::::Ar4 $;;;;AtT"&@@@@Bd#'IIIIBd# (9 9 9 9Bd# (> > > >Bd# (G G G G. 8A>1a(A---.
 	A19QT>4AaC=QqS1q	q	B2Y48Q"a''' 19QT>4AaC=QqS1q	q	B1X48Q"a''' A19QT>4AaC=QqS1q	q	B1X48Q"a'''  ]1b)*+s222]1b"-./41;>>>]1a,-.$r!u+===Q1%%%% Q1%...Q1%---Q1%---Q1%---Q1%---Q1%...Q2&$...RR(D000QB'5000QB'4///QB'5000QB'4///QB'5000QB'4///QB'5000QB'5000RC(E111S!T*d222S!W-666UAu-555UAt,444UAu-555#(;/;aQD	;/AT{E{!&72t&DA{EJJJ%*4[1[#ad
[1AT{F{!&73&EA{F!KKK&+Dk2k#aV
k2A789q!q"f-q999+0;7;a#a[
!;7A<=>Aqq"k2A>>>S!T****QB''''RR((((Q2&&&&RB'''' Aq))))T2u----U-11a8D@@@2qA1a[.qQ:!#t,,,,s8q="1X"1|qu444 &"1b\7aCrIII * #1X"1|qu4#'18#4#455 & #1b\6qQB"!!$A#&qad#3q#88#8 "%	 * !  * u1-222r2r"b(((tR&",,,/1a 1a 1a|q   	/
 r1c"***r1b$'Ar7222q"b$'+AAAAq!W%---ua-%???q"b$'A3...q!S$'+RRRRq!R&1b'111q!S$'B9444q!Q%+++1b\qA1a[!!40!#t,,,,qAqQ<1,D#qx0011 " #1E2<"9$93;&; !   	sT"AsD!A"3a0A555"3q1R777"32q1R777"3C4;;;%fdA6!;;;%feQ72===%gq"ua8B>>>%gq#vq9S@@@$WdAQ?1DDD$WeQa@BFFF$XuaqARGGG$Xq#vqBcIII
:LM
:OP'S!S9S@@@'q&AUJJJ'	8Q	JiWWW'lA|TXdddd'[+yY]ffff'%<AAA'&"=CCC'"b&"=CCC'"c'2>#EEE1a A%%%
:56
:56T1%****b000"c'2.#555afa0C777;~MMM  D D  $NN N N D#%%%&#---Rd37RRRR1a,B777Rc2b888B1-!4442q"-"b999S#s3SzAAA9MNSgi}R~~~~CS1c3Z???2r1-!444BA.1#555BA.1a&888!U;~?^^^^ 1a4"QT'!1AadF!:QT!AA!E!IST T T !A1a4"Q$!6!;UCwNNN AB5#tDDD AqD2a4"!4a8QFBBB A2.1#555 AqD3q52!5s;SzIII A2.1b'999 AqD1QT6!1CE!9D!@&I N        BB/3IIII A!Q$!3T:tfDDD
:@A
:@A
:GHAr"a'''2r"a'''
:56B#q(((sD)S000
Iq1Q6667:EEEM	 0r < >h 	0E1F297>sa   AW"+AW'AW'AW,AW13AW6AW6)AW;AX *AX AX$AX
AX0AXc                     SS/Sp!n [        SU S-   5       H"  nX U-
  S-   -  nX#-  nUR                  U5        M$     Sn[        U5       H5  n[        SU 5      [        SS5      pv[        XSU5      X   SU-  -  :X  a  M5   e   [	        [
        R                  " SU -  5      5      nSn	[        U	5       H>  n[        SU 5      [        U5      [        SS5      pzn[        XX5      X   X-  -  :X  a  M>   e   g )Nr   r-   rE   r   rU   r*   r7   )r   r   r'   r#   r   r   r   r(   )r   	binomialsbinomialr   trials_2_mpowerprimestrialsprimes              r>   test_binomial_p_powr   @  s    !A3(A1a!e_EAI"  H8_1a='!R.5(q%8IL1e8<SSSS 
 %""1Q3'(FF6]!!Q-B%(u<	u|@[[[[ r=   c                  F   SSK Jn   U " 5          [        S5      S:X  d   e S S S 5        U " 5          [        SS5      S:X  d   e S S S 5        U " 5          [	        SS5      S:X  d   e S S S 5        g ! , (       d  f       NU= f! , (       d  f       NC= f! , (       d  f       g = f)Nr   warns_deprecated_sympyr/   r   r*   )sympy.testing.pytestr   r   r   r   r   s    r>   *test_deprecated_ntheory_symbolic_functionsr   U  sz    ;		!ayB 
"		!q!$*** 
"		!Q"b((( 
"	!	 
"	!	!	!	!	!s"   A0BB0
A>
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   r<   r=   r>   <module>r      s_    # ' " - 9! ! ! ! !
, , , ,
 # ' -hFV	\*)r=   