o
    jg@                     @   s  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d Z0dd Z1dd 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               
      sX  t dddks	J d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s7J t ddd d d dksFJ ttdd  tdddu sVJ tdddu s_J tdddu shJ tdd
tdd
kstJ ttdd  tddD ]\} tt| }|d t|ksJ |D ]}t || | d ksJ qt	|t
t
| ksJ tddD ](}tt| |}tt| |}t	|t	|  krt
t
| | ksJ  J qqtdd	ksJ t tdddt
dksJ td d	ksJ 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sCJ t td#dd#t
d#ksRJ dd d } t| dksaJ t t| d| t
| kspJ td|  dks{J t td|  dd|  t
d|  ksJ t| d dksJ t t| d d| d t
| d ksJ td$d u rtd$dd u sJ td%d u rtd%dd u sJ ttd&d  tdddu sJ tddd'u sJ td(d)td*d)ksJ 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r+d'u s.J  J tddd'u s8J tdd-du sBJ td.d/d'u sLJ d0d tdD g d1ks\J ttd2d  ttd3d  ttjdgksuJ tddgksJ tdg d4ksJ tdg d5ksJ d6d tdd7D g d8ksJ ttdddgksJ tdddksJ tdd9dksJ tdd:dksJ td;d<d;ksJ td=dd ksJ td>d?d ksJ tddD ]G} tt}t| D ] |t d|    qtd| D ]' t | }t | d'}|r1t|}|  |ks/J q|  r8J qqtd@d-d'g dAksIJ td@dBd'g dCksVJ td@dDd'g dEkscJ tdBdBd'g dFkspJ tdBdDd'g dGks}J tdBdHd'g dIksJ tdBdJd'g dKksJ dLD ]\}	} tt|	| d| |	ksJ qdM}
dNd|
  d|
  dOd|
d   d|
d   }	} t|	| }tdD ] tt|d| |	ksJ qdNd|
  d|
  dOd|
d   d|
d   }	} t|	| }tdD ] tt|d| |	ksJ qd}
dNd|
  d|
  dOd|
d   d|
d   }	} t|	| }tdD ] tt|d| |	ksHJ q9tttd@d-tu sXJ tttd@d-tttdu skJ tttddtttdu s~J tddd	sJ tddddu sJ tdddd'u sJ tdddd'u sJ tdddd'u sJ tdddd'u sJ tddd@du sJ tdd	dPd'u sJ tdQdd7d'u sJ tddd7du sJ td	dd7d'u sJ tdddRdu s J tdddSd'u sJ tdddTdu sJ tdddTd'u s!J tdddTdu s,J tdddRdu s7J tdBddUdu sBJ tdDd	dVd'u sMJ tdDddWdu sXJ tdXddYd'u scJ tdZdd[d'u snJ td\d@d]d'u syJ d^d_ td`D dad_ td`D ksJ dbd_ tdcD ddd_ tdcD ksJ ded_ tdfD dgd D sJ dhd_ tdfD did D sJ tdjddksJ td@ddlsJ tdmddnsJ tdddosJ tdpddnsJ tddd	rJ tdqddrsJ ttd'dsd 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rrt| D ]}t||
| |	|  ksYJ qJtddD ]}t|	|
| |g ksnJ q`q.t| D ]}t||
| |	|  k}|||v A rJ qvtddD ]"}t|	|
| |}|s n|D ]}t||
| | |	ksJ qqq.q'q!t td'dtdddksJ t ddpdudvksJ t dwddxd$ksJ dyD ]\}	}} t |	|| }t||| |	ksJ qt dddzd u sJ t dd	dld'dd{gksJ t d@ddld'g d|ks J t ddd}d u s+J t dXddYd'd~dgks9J t dddd'dgksFJ t dddd'g dksTJ t ddd-d'd	d{gksbJ t dddd'ddgkspJ t dddd'g ks|J tdd7D ]X} t| D ]P}	td| D ]G}
t |	|
| d'}t|tsJ t| D ]}t||
| |	k}|||v A rJ qt |	|
| d}|d u r|g ksJ q||v sJ qqqt!dd'dt!dd'd t"ddddksJ t"ddddksJ t"dddB ddBks	J t"ddd ddksJ t#ddddks!J t#ddd	dks,J t#ddd ddks9J t#ddd ddksFJ t$ddoddddksSJ t$ddddddks`J t$ddddddSksmJ t$ddd ddddks|J ttdd  ttdd  t%dddddksJ t%dddddksJ t%dddddksJ t%dddddksJ t%dddddksJ t&dddd@ksJ t&ddddpksJ t&ddd ddksJ t&ddd ddksJ t'dddd@k	sJ t'ddddk	sJ t'ddd ddk	sJ t'ddd ddk	s&J t'ddddk	s1J t'ddd˃dk	s<J d}t'| dk	sGJ t't(|  dk	sRJ t)dddd҃g dӢk	s`J t)ddd	dNdd7gk	snJ t)dddd׃g k	szJ t)d%ddddgk	sJ t)dd%ddddgk	sJ t)dddd܃ddgk	sJ t)ddddddgk	sJ t)ddddddgk	sJ t)d	ddddgk	sJ t)dd
dddgk	sJ t)ddd7dddgk	sJ t*dd	  dd   d	d   d   d dg dk
sJ t*d dd   d  d# ddgk
s$J t*d  d dddgk
s6J t*dd  d  d7 dddgk
sLJ t*d d dd	gk
s[J t*dd  d  d dddgk
sqJ t*d d d-d	d{gk
sJ t*dd  dd   d  d dg dk
sJ t*d d@ dlg d|k
sJ t*d dd	   d ddgk
sJ ttfdd tt fdd ttfdd t+ddddk
sJ t+ddddk
sJ ttdd  t+ddddksJ t+dfddHdksJ t+ddddksJ t+dd ddks*J d S (  N         c                 S   s   g | ]}t |d qS )   r   .0a r0   X/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/ntheory/tests/test_residue.py
<listcomp>       z test_residue.<locals>.<listcomp>   r+   )r4         r5   r6   r(               r6   e   w   
   2      l   zX    4dCx ^y2V?WY|gOs&YR5I c                   S   
   t ddS )Nr6   	   r,   r0   r0   r0   r1   <lambda>      
 ztest_residue.<locals>.<lambda>Fr5            c                   S   r@   )Nr5   r6   )r	   r0   r0   r0   r1   rB   #   rC   d   r      a   i$  i'  i)aR   ,      c                   S   s   t dS )N)r   r0   r0   r0   r1   rB   D   s    TiL0                 l    $O l    $U c                 S   s   g | ]	}t |d r|qS )rE   r
   )r.   jr0   r0   r1   r2   P   s    )r   r4   r(   rH   r+   rD   rA   r:   c                   S   r@   )Ng?r(   rS   r0   r0   r0   r1   rB   R   rC   c                   S   r@   )Nr(   r   rS   r0   r0   r0   r1   rB   S   rC   )r   r4   rH   rA   )r   r4   r5   rH   rA   r=   r*   c                 S   s   g | ]}t t|qS r0   )lenr   r.   ir0   r0   r1   r2   Y          )r4   r(   r(   r(   r5   rH   rH   r5   rH   r6   r6   rH   r+   rD   r6   rH   rA   rD   r=   i   iY  i  C   i  i rA   )r5   r6   r*   rL         Q   )r5   r]      3   9   N      )r5   rb   T            )	r   rA      rR   $   -   6   ?   H   )rA   rh   ri   rj   rl   rm   Z   c   u   ~                  rP         i  )rA   rm   rn   rs   rt   rx      i;  M  i  i      i.  i@  i  i      )rA   rx   ry   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	=  r_   r\   0   (   r]   i  i  i i  iVU io  i  i(j ij  c                 S      h | ]}t |d dqS 8      powrV   r0   r0   r1   	<setcomp>   rX   ztest_residue.<locals>.<setcomp>r   c                 S      h | ]
}t |d dr|qS r   r   r-   r0   r0   r1   r          c                 S   r         r   rV   r0   r0   r1   r      rX   r   c                 S   r   r   r   r-   r0   r0   r1   r      r   c                 S   r   r:   i r   rV   r0   r0   r1   r      rX     c                 S      g | ]}t |d dqS r   r   r-   r0   r0   r1   r2      rX   c                 S   r   r8   l   pLX r   rV   r0   r0   r1   r      rX   c                 S   r   r   r   r-   r0   r0   r1   r2      rX   i  i  ri       )   @      ic!  i'  )even)oddJ   rj   	  g
  ))i  r(   i	 )+   r5   m   )r   r:   r   )ii  ic)i  r+   r   )iS  r6   r   )i  r*   r   )i=o  rA   i?  r      )r5   rA   rL   r\   rR   !   ih1 i  iF  %   )
r   r=   rY   r_   r   r>   <   r   P   rn   y      f   x)positiverW   )integeriK     i  l   ,"$. rh   i     {   i 1   iSW l   =HcEih G   i|% iA  i[ rseedi_] i   iU0l        i[vrz   c                   S      t dddddS )Nr:   r+   r   r   r   r   r0   r0   r0   r1   rB         c                   S   r   )N   r~   r7   r   r   r   r0   r0   r0   r1   rB     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  rr   i  i i%q l   Xk;H]) l   K+\1 l   'ff A   rm   i     ry   i )iG_ i7 i ioj i
 i i~ i i3  iOv  /   ia	  i  iO  #   i7  i	  iC )iS i5 i i+=   i  c                      s   t    dS Nr   r   r0   r   r0   r1   rB   /      c                      s   t   dS r   r   r0   rW   r   r0   r1   rB   0  r   c                      s   t d d  d dS )Ng?r(   r6   rG   r   r0   r   r0   r1   rB   1  r3   c                   S   s   t dddS )Nr(   r4   r   )r#   r0   r0   r0   r1   rB   5  s    l   NZoi[l     NZol    J)l   *(	 l   ,[> ),r   ranger%   
ValueErrorr	   r   listr   minrU   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vr/   nansbkpredqrans2argsr0   r   r1   test_residue   s.  2**"",


	 2
2
2
&& 

4
2$,, 8 * r   c                  C   s   ddgd} }}t d| d D ]}|| | d 9 }|| }|| qd}t |D ]}td| tdd}}t| |d||| d|  ksHJ q*ttd|  }d}	t |	D ]#}td| t|tdd}}
}t| ||
||| |
|  ks{J qXd S )Nr   r4   rG   r   rY   r(   r=   )r   r   r&   r"   r   r   r   r'   )r   	binomialsbinomialrW   trials_2_mpowerprimestrialsprimer0   r0   r1   test_binomial_p_pow<  s   $ $r   c                  C   s   ddl m}  |   tddksJ W d    n1 sw   Y  |   tdddks.J W d    n1 s8w   Y  |   tdddksJJ W d    d S 1 sUw   Y  d S )Nr   warns_deprecated_sympyr5   r   r(   )sympy.testing.pytestr   r   r   r   r   r0   r0   r1   *test_deprecated_ntheory_symbolic_functionsQ  s   "r   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   r0   r0   r0   r1   <module>   s    L4  )