
    sg@                         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 Z2y)    )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                   )   t        dd      dk(  sJ t        dd      D  cg c]  } t        | d       c} 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(  rJ  t        |      t        t        |            k(  sJ t        dd      D ]c  }t        t        ||            }t        t        ||            }t        |      t        |      cxk(  rt        t        ||z              k(  r`J  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J  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 cg c]  }t        |d      s| c}g d-k(  sJ t        t        d.        t        t        d/        t        t         j"                        dgk(  sJ t        d      dgk(  sJ t        d      g d0k(  sJ t        d      g d1k(  sJ t        dd2      D cg c]  }t        t        |             c}g d3k(  sJ t        t%        dd            dgk(  sJ t'        dd      dk(  sJ t'        dd4      dk(  sJ t'        dd5      d
k(  sJ t'        d6d7      d6k(  sJ t'        d8d      d k(  sJ t'        d9d:      d k(  sJ t        dd      D ]  }t)        t              }	t        |      D ]!  |	t+        d|         j-                         # t        d|      D ]:  t%        |      }
t'        |d$      }|rt/        |      }|	   |k(  r2J |	   s:J   t'        d;d*d$      g d<k(  sJ t'        d;d=d$      g d>k(  sJ t'        d;d?d$      g d@k(  sJ t'        d=d=d$      g dAk(  sJ t'        d=d?d$      g dBk(  sJ t'        d=dCd$      g dDk(  sJ t'        d=dEd$      g dFk(  sJ dGD ]!  \  } }t+        t'        | |      d|      | k(  r!J  dH}dId|z  z  d|z  z  dJd|dz   z  z  d|dz   z  z  }} t%        | |      }
t        d      D ]  t+        t1        |
      d|      | k(  rJ  dId|z  z  d|z  z  dJd|dz   z  z  d|dz   z  z  }} t%        | |      }
t        d      D ]  t+        t1        |
      d|      | k(  rJ  d}dId|z  z  d|z  z  dJd|dz   z  z  d|dz   z  z  }} t%        | |      }
t        d      D ]  t+        t1        |
      d|      | k(  r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dK      d$u sJ t9        dLd
d2      d$u sJ t9        ddd2      du sJ t9        ddd2      d$u sJ t9        dddM      du sJ t9        dddN      d$u sJ t9        dddO      du sJ t9        dddO      d$u sJ t9        dddO      du sJ t9        dddM      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        dSddT      d$u sJ t9        dUddV      d$u sJ t9        dWd;dX      d$u sJ t        dY      D ch c]  }t+        |dZdY       c}t        dY      D  ch c]  } t9        | dZdY      s|  c} k(  sJ t        d[      D ch c]  }t+        |d\d[       c}t        d[      D  ch c]  } t9        | d\d[      s|  c} k(  sJ t        d]      D ch c]  }t+        |d
d^       c}D  cg c]  } t9        | d
d^       c} sJ t        d]      D ch c]  }t+        |dd_       c}D  cg c]  } t9        | dd_       c} sJ t9        d`dda      sJ t9        d;ddb      sJ t9        dcddd      sJ t9        ddde      sJ t9        dfddd      sJ t9        ddd      rJ t9        dgddh      sJ t9        t;        d$i      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(  rJt        |      D ]  }t+        |||      | |z  k7  rJ  t        dd      D ]  }t=        | |||      g k(  rJ  {t        |      D ]  }t+        |||      | |z  k(  }|||v z  sJ  t        dd      D ]0  }t=        | |||      }|s |D ]  }t+        ||||z        | k(  rJ  2   
 tA        t;        d$j      dd      dk(  sJ tA        ddfdk      dlk(  sJ tA        dmd
dn      d!k(  sJ doD ]%  \  } }}tA        | ||      }t+        |||      | k(  r%J  tA        d
ddp      J tA        d	ddbd$      ddqgk(  sJ tA        d;d	dbd$      g drk(  sJ tA        ddds      J tA        dSddTd$      dtdugk(  sJ tA        dddvd$      dgk(  sJ tA        dddd$      g dwk(  sJ tA        ddd*d$      ddqgk(  sJ tA        dddxd$      dydzgk(  sJ tA        dddd$      g k(  sJ t        dd2      D ]  }t        |      D ]z  } t        d|      D ]i  }tA        | ||d$      }t?        |t              sJ t        |      D ]  }t+        |||      | k(  }|||v z  sJ  tA        | ||d      }||g k(  rbJ ||v riJ  |  tC        d{d$|      tC        d}d$~      tE        ddd      dk(  sJ tE        ddd      dk(  sJ tE        ddd=z  d      d=k(  sJ tE        ddydz  dy      dk(  sJ tG        ddd      dk(  sJ tG        ddd      dyk(  sJ tG        dddz  d      dk(  sJ tG        dddz  d      dk(  sJ tI        ddedd      dk(  sJ tI        dddd      dyk(  sJ tI        dddd      dNk(  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
      dfk(  sJ tM        dd
dz  d
      dk(  sJ tM        dd
dz  d
      dk(  sJ tO        ddd      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dI      dd2g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        ddxddܫ      ddgk(  sJ tS        dddd      dgk(  sJ tS        dddyd      dgk(  sJ tS        ddd2d      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   d2z   d      ddgk(  sJ tU        dz  dz   d	      dgk(  sJ tU        dډdz  z  dxz  z   dz   dܫ      ddgk(  sJ tU        dz  dz
  d*      ddqg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
  db      g dr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        d]ddC      dk(  sJ tW        ddd      dk(  sJ tW        ddd      dk(  sJ y c c} w c c}w c c}w c c}w c c} w c c}w c c} w c c}w c c} w c c}w c c} w )N               )r-         r/   r0   r*               r0   e   w   
   2      l   zX    4dCx ^y2V?WY|gOs&YR5I c                      t        dd      S )Nr0   	   )r	        S/var/www/html/venv/lib/python3.12/site-packages/sympy/ntheory/tests/test_residue.py<lambda>ztest_residue.<locals>.<lambda>   s    wq!} r=   Fr/            c                      t        dd      S )Nr/   r0   )r
   r<   r=   r>   r?   ztest_residue.<locals>.<lambda>#   s    0A6 r=   d   r      a   i$  i'  i)aR   ,      c                      t        d      S )N)r   r<   r=   r>   r?   ztest_residue.<locals>.<lambda>D   s    ~b1 r=   TiL0                 l    $O l    $U )r   r-   r*   rE   r.   r@   r;   r4   c                      t        dd      S )Ng?r*   r   r<   r=   r>   r?   ztest_residue.<locals>.<lambda>R   s    sA6 r=   c                      t        dd      S )Nr*   r   rR   r<   r=   r>   r?   ztest_residue.<locals>.<lambda>S   s    q!4 r=   )r   r-   rE   r;   )r   r-   r/   rE   r;   r7   r,      )r-   r*   r*   r*   r/   rE   rE   r/   rE   r0   r0   rE   r.   r@   r0   rE   r;   r@   r7   i   iY  i  C   i  i r;   )r/   r0   r,   rI         Q   )r/   rX      3   9   N      )r/   r]   T            )	r   r;      rP   $   -   6   ?   H   )r;   rc   rd   re   rg   rh   Z   c   u   ~                  rN         i  )r;   rh   ri   rn   ro   rs      i;  M  i  i      i.  i@  i  i      )r;   rs   rt   rv   rw   rx   i  i  i  i  i  i  i  i  i  i  i  i  ))  l     @B )rz   l      ! )i   i   )l   )1mQ l   K'R )l    )bm.Ql    ,zhF      i	=  rZ   rW   0   (   rX   i  i  i i  iVU io  i  i(j ij  i   8   i        i l   pLX i  i  rd       )   @      ic!  i'  )even)oddJ   re   	  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;   rI   rW   rP   !   ih1 i  iF  %   )
r   r7   rT   rZ   r~   r8   <   r{   P   ri   y      f   x)positivei)integeriK     i  l   ,"$. rc   i     {   i 1   iSW l   =HcEih G   i|% iA  i[ rseedi_] i   iU0l        i[vru   c                       t        dddd      S )Nr4   r.   r   r   r   r    r<   r=   r>   r?   ztest_residue.<locals>.<lambda>  s    8Q!L r=   c                       t        dddd      S )N   ry   r1   r   r   r   r<   r=   r>   r?   ztest_residue.<locals>.<lambda>  s    8dAQO r=   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 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  rm   i  i i%q l   Xk;H]) l   K+\1 l   'ff A   rh   i     rt   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   r>   r?   ztest_residue.<locals>.<lambda>/      4QT4@ r=   c                  "    t         z  d      S r   r   )r   r   s   r>   r?   ztest_residue.<locals>.<lambda>0  r   r=   c                  .    t        d dz  z  dz   d      S )Ng?r*   r0   rD   r   r   s   r>   r?   ztest_residue.<locals>.<lambda>1  s    4SAX\3G r=   c                      t        ddd      S )Nr*   r-   r   )r$   r<   r=   r>   r?   ztest_residue.<locals>.<lambda>5  s    |Aq"5 r=   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 	M,Q/0!uB 	*A1a=AE)))	*2w''!*----q! 	MA<QBCH>q!DEIx=C	NLggadm6LLLLLL	M	M """">"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;!OAr$:A;$% % %
: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Q4x	 	  Ar4 $::::Ar4 $;;;;AtT"&@@@@Bd#'IIIIBd# (9 9 9 9Bd# (> > > >Bd# (G G G G. .1 8Aq>1a(A---.
 	A19QT>4AaC=QqS1qA	q!	B2Y (48Q"a'''(19QT>4AaC=QqS1qA	q!	B1X (48Q"a'''(A19QT>4AaC=QqS1qA	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2#aV
2A789!q"f-999+0;7a#a[
!7A<=>qq"k2>>>S!T***QB'''RR(((Q2&&&RB''' Aq)))T2u---U-11a8D@@@2 9q 	9A1a[ 9.q!Q:!#t,,,s8q="1X 5"1a|q1u4445"1b\ J71aCrIIIJ #1X 6"1a|q1u4#'18#4556 #1b\ 96q!QB"!!$ 9A#&q!ad#3q#88#89	99	99* 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[ 
'!!Q40!#t,,,q 2Aq!Q<1,D#qCx0112 #1a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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 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EE	 0r < >h 	0E1F297>sa   AQ8AQ
AQAQ#AQ()AQ-<AQ-AQ29AQ7AQ7%AQ< AR&ARARc                     ddgd}}} t        d| dz         D ]#  }|| |z
  dz   z  }||z  }|j                  |       % d}t        |      D ]6  }t        d|       t        dd      }}t        | |d|      ||   d|z  z  k(  r6J  t	        t        j                  d| z              }d}	t        |	      D ]A  }t        d|       t        |      t        dd      }}
}t        | ||
|      ||   |
|z  z  k(  rAJ  y )Nr   r-   rD   r   rT   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(yA1a!e_ #AEAIQ"# H8_ T1a='!R.5(Aq%8IaL1e8<SSSST
 %""1Q3'(FF6] \!!Q-B%5(Aue<	!uV[|@[[[[\r=   c                  "   ddl m}   |        5  t        d      dk(  sJ 	 d d d         |        5  t        dd      dk(  sJ 	 d d d         |        5  t	        dd      dk(  sJ 	 d d d        y # 1 sw Y   NxY w# 1 sw Y   8xY w# 1 sw Y   y xY w)Nr   warns_deprecated_sympyr/   r   r*   )sympy.testing.pytestr   r   r   r   r   s    r>   *test_deprecated_ntheory_symbolic_functionsr   Q  s    ;		! ayB		! +q!$***+		! )Q"b((() )	 + +) )s"   A-A9B-A69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! ! ! ! !
, , , ,
 # ' -dFN	\*)r=   