a
    khA                     @   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               
      s  t dddksJ dd tddD g dks2J t d	d
dksDJ t d
dt ddks\J t dddksnJ t ddd d d dksJ ttdd  tdddu sJ tdddu sJ tdddu sJ tdd
tdd
ksJ ttdd  tddD ]} tt| }|d t|ks&J |D ]}t || | d ks*J q*t	|t
t
| ksdJ tddD ]T}tt| |}tt| |}t	|t	|  krt
t
| | ksnn J qnq tdd	ksJ t tdddt
dksJ 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sXJ td"dksjJ t td"dd"t
d"ksJ td#dksJ t td#dd#t
d#ksJ dd d } t| dksJ t t| d| t
| ksJ td|  dks
J t td|  dd|  t
d|  ks4J t| d dksJJ t t| d d| d t
| d kstJ 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sJ td+d,d'u sJ tddd'u s0J tddd'u sDJ tddtdd  krhd'u snn J tddd'u sJ tdd-du sJ td.d/d'u sJ d0d tdD g d1ksJ ttd2d  ttd3d  ttjdgksJ tddgksJ tdg d4ks&J tdg d5ks<J d6d tdd7D g d8ks^J ttdddgksxJ 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 ]} tt}t| D ] |t d|    qtd| D ]L t | }t | d'}|rrt|}|  |ksJ n|  r6J q6qtd@d-d'g dAksJ td@dBd'g dCksJ td@dDd'g dEksJ tdBdBd'g dFksJ tdBdDd'g dGks
J tdBdHd'g dIks$J tdBdJd'g dKks>J dLD ]&\}	} tt|	| d| |	ksBJ qBdM}
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sJ qtttd@d-tu sJ tttd@d-tttdu sJ tttddtttdu 	sJ tddd		sJ tddddu 	s4J tdddd'u 	sJJ tdddd'u 	s`J tdddd'u 	svJ 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 
sRJ tdddTdu 
shJ tdddRdu 
s~J tdBddUdu 
sJ tdDd	dVd'u 
sJ tdDddWdu 
sJ tdXddYd'u 
sJ tdZdd[d'u 
sJ td\d@d]d'u sJ d^d_ td`D dad_ td`D ks0J dbd_ tdcD ddd_ tdcD ks^J 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sJ tddd	rJ tdqddrs(J ttd'dsd ddd'ksHJ tddD ]6} tdD ]$}	tdd	D ]}
t|	|
| d}t|tsJ t	|dkrt| D ] }t||
| |	|  ksJ qtddD ]}t|	|
| |g ksJ qnt| D ],}t||
| |	|  k}|||v A r J q tddD ]F}t|	|
| |}|sV qp|D ] }t||
| | |	ksZJ qZq8qpq`qRt 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sVJ t ddd}d u slJ t dXddYd'd~dgksJ t dddd'dgksJ t dddd'g dksJ t ddd-d'd	d{gksJ t dddd'ddgksJ t dddd'g ksJ tdd7D ]} t| D ]}	td| D ]}
t |	|
| d'}t|tsTJ t| D ](}t||
| |	k}|||v A r\J q\t |	|
| d}|d u r|g ksJ n||v s2J q2q$qt!dd'dt!dd'd t"ddddksJ t"ddddksJ t"dddB ddBks&J t"ddd ddks@J t#ddddksVJ t#ddd	dkslJ t#ddd ddksJ t#ddd ddksJ t$ddoddddksJ t$ddddddksJ t$ddddddSksJ t$ddd ddddksJ ttdd  ttdd  t%dddddks@J t%dddddksXJ t%dddddkspJ 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s J t'ddddksJ ttdd  ttdd  t'dddd@ksHJ t'ddddks^J t'ddd ddksxJ t'ddd ddksJ t'ddddksJ t'ddd̓dksJ d}t'| dksJ t't(|  dksJ t)ddddԃg dբksJ t)ddd	dNdd7gks"J t)ddddكg ks:J t)d%ddddgksTJ t)dd%ddddgkspJ 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sJ t)ddddddgks0J t*dd	  dd   d	d   d   d dg dksxJ t*d dd   d  d# ddgksJ t*d  d dddgksJ t*dd  d  d7 dddgksJ t*d d dd	gksJ t*dd  d  d dddgksDJ t*d d d-d	d{gksdJ 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d d ttfdd t+ddddks:J t+ddddksRJ ttdd  t+ddddksxJ t+dfddHdksJ t+ddddksJ t+dddd	ksJ d S (
  N         c                 S   s   g | ]}t |d qS )   r   .0a r0   N/var/www/auris/lib/python3.9/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   s
   t ddS )Nr6   	   r,   r0   r0   r0   r1   <lambda>   r3   ztest_residue.<locals>.<lambda>Fr5            c                   S   s
   t ddS )Nr5   r6   )r	   r0   r0   r0   r1   rA   #   r3   d   r      a   i$  i'  i)aR   ,      c                   S   s   t dS )N)r   r0   r0   r0   r1   rA   D   r3   TiL0                 l    $O l    $U c                 S   s   g | ]}t |d r|qS )rC   r
   )r.   jr0   r0   r1   r2   P   r3   )r   r4   r(   rF   r+   rB   r@   r:   c                   S   s
   t ddS )Ng?r(   rQ   r0   r0   r0   r1   rA   R   r3   c                   S   s
   t ddS )Nr(   r   rQ   r0   r0   r0   r1   rA   S   r3   )r   r4   rF   r@   )r   r4   r5   rF   r@   r=   r*   c                 S   s   g | ]}t t|qS r0   )lenr   r.   ir0   r0   r1   r2   Y   r3      )r4   r(   r(   r(   r5   rF   rF   r5   rF   r6   r6   rF   r+   rB   r6   rF   r@   rB   r=   i   iY  i  C   i  i r@   )r5   r6   r*   rJ         Q   )r5   rZ      3   9   N      )r5   r_   T            )	r   r@      rP   $   -   6   ?   H   )r@   re   rf   rg   ri   rj   Z   c   u   ~                  rN         i  )r@   rj   rk   rp   rq   ru      i;  M  i  i      i.  i@  i  i      )r@   ru   rv   rx   ry   rz   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\   rY   0   (   rZ   i  i  i i  iVU io  i  i(j ij  c                 S   s   h | ]}t |d dqS 8      powrT   r0   r0   r1   	<setcomp>   r3   ztest_residue.<locals>.<setcomp>r   c                 S   s   h | ]}t |d dr|qS r   r   r-   r0   r0   r1   r      r3   c                 S   s   h | ]}t |d dqS       r   rT   r0   r0   r1   r      r3   r   c                 S   s   h | ]}t |d dr|qS r   r   r-   r0   r0   r1   r      r3   c                 S   s   h | ]}t |d dqS r:   i r   rT   r0   r0   r1   r      r3     c                 S   s   g | ]}t |d dqS r   r   r-   r0   r0   r1   r2      r3   c                 S   s   h | ]}t |d dqS r8   l   pLX r   rT   r0   r0   r1   r      r3   c                 S   s   g | ]}t |d dqS r   r   r-   r0   r0   r1   r2      r3   i  i  rf       )   @      ic!  i'  )Zeven)ZoddJ   rg   	  g
  ))i  r(   i	 )+   r5   m   )r   r:   r   )ii  ic)i  r+   r   )iS  r6   r   )i  r*   r   )i=o  r@   i?  r      )r5   r@   rJ   rY   rP   !   ih1 i  iF  %   )
r   r=   rV   r\   r   r>   <   r}   P   rk   y      f   x)ZpositiverU   )integeriK     i  l   ,"$. re   i     {   i 1   iSW l   =HcEih G   i|% iA  i[ Zrseedi_] i   iU0l        i[vrw   c                   S   s   t dddddS )Nr:   r+   r   r   r   r   r0   r0   r0   r1   rA     r3   c                   S   s   t dddddS )N   r{   r7   r   r   r   r0   r0   r0   r1   rA     r3   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   t dddS )Nr4   r5   r   r0   r0   r0   r1   rA     r3   c                   S   s   t dddS )Nr=   r5   r(   r   r0   r0   r0   r1   rA     r3   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  ro   i  i i%q l   Xk;H]) l   K+\1 l   'ff A   rj   i     rv   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                      s   t    dS Nr   r   r0   r   r0   r1   rA   3  r3   c                      s   t   dS r   r   r0   rU   r   r0   r1   rA   4  r3   c                      s   t d d  d dS )Ng?r(   r6   rE   r   r0   r   r0   r1   rA   5  r3   c                   S   s   t dddS )Nr(   r4   r   )r#   r0   r0   r0   r1   rA   9  r3   l   NZoi[l     NZol    J)l   *(	 l   ,[> ),r   ranger%   
ValueErrorr	   r   listr   minrS   r   r   r   r   r
   r   r   Z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eZli_powerZ	li_power2ditvr/   nZansbkpredqrZans2argsr0   r   r1   test_residue   s$   :**""*


 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sTJ qTttd|  }d}	t |	D ]F}td| t|tdd  }}
}t| ||
||| |
|  ksJ qd S )Nr   r4   rE   r   rV   r(   r=   )r   r   r&   r"   r   r   r   r'   )r   Z	binomialsZbinomialrU   Ztrials_2_mpowerZprimesZ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 s80    Y  |  " tdddks\J W d    n1 sp0    Y  |  " tdddksJ W d    n1 s0    Y  d S )Nr   warns_deprecated_sympyr5   r   r(   )sympy.testing.pytestr   r   r   r   r   r0   r0   r1   *test_deprecated_ntheory_symbolic_functionsU  s    .0r   N)3collectionsr   Zsympy.core.containersr   Zsympy.core.singletonr   Zsympy.core.symbolr   r   Z%sympy.functions.combinatorial.numbersr   Zsympy.ntheoryr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zsympy.ntheory.residue_ntheoryr   r   r   r   r   r   r   r    r!   r"   r#   Zsympy.polys.domainsr$   r   r%   Zsympy.core.randomr&   r'   r   r   r   r0   r0   r0   r1   <module>   s   L4  -