a
    t@8b2                     @   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
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  d dl!m"Z" d dl#m$Z$ d	d
 Z%dS )    )defaultdict)Tuple)S)DummySymbol)n_orderis_primitive_rootis_quad_residuelegendre_symboljacobi_symboltotient
primerangesqrt_modprimitive_rootquadratic_residuesis_nthpow_residuenthroot_modsqrt_mod_itermobiusdiscrete_logquadratic_congruencepolynomial_congruence)_primitive_root_prime_iter_discrete_log_trial_mul_discrete_log_shanks_steps_discrete_log_pollard_rho_discrete_log_pohlig_hellman)ZZ)raisesc                     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t|t	t	| ks J q t
dd	ks@J t
dd	ksRJ t
dd	ksdJ t
d dksvJ t
d!dksJ dd d } t
| dksJ t
d|  dksJ t
| d dksJ ttd"d  tdddu sJ tddd#u sJ td$d%td&d%ks"J td'd(d#u s6J td)dd#u sJJ tddd#u s^J td)dtdd  krd#u sn J tdd*d#u sJ tdd+du sJ td,d-d#u sJ d.d tdD g d/ksJ ttd0d  ttd1d  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 d2ksVJ tdg d3kslJ d4d tdd5D g d6ksJ ttddd)gksJ tddd*ksJ tdd7d*ksJ tdd8dksJ td9d:d9ksJ td;dd ksJ td<d=d ks J tddD ]} tt}t| D ] |t d|    q>td| D ]L t | }t | d#}|rt|}|  |ksJ n|  rfJ qfq*td>d+d#g d?ksJ td>d@d#g dAksJ 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sTJ td@dHd#g dIksnJ dJD ]&\}} tt|| d| |ksrJ qrdK}dLd|  d|  dMd|d   d|d    }} t|| }tdD ]  tt|d| |ksJ qdLd|  d|  dMd|d   d|d    }} t|| }tdD ]  tt|d| |ksHJ qHd}dLd|  d|  dMd|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 sJ tttddtttdu s<J tddd	sNJ tdd)ddu sdJ tdd)dd#u szJ 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	dNd#u sJ tdOdd5d#u sJ tddd5du sJ td	dd5d#u s*J tdddPdu s@J tdddQd#u sVJ tdddRdu slJ tdddRd#u sJ tdddRdu sJ tdddPdu sJ td@ddSdu sJ tdBd	dTd#u sJ tdBddUdu sJ tdVddWd#u 	sJ tdXddYd#u 	sJ tdZd>d[d#u 	s2J d\d] td^D d_d] td^D k	s`J d`d] tdaD dbd] tdaD k	sJ dcd] tddD ded D 	sJ dfd] tddD dgd D 	sJ tdhddi	sJ td>ddj	sJ tdkddl
sJ td*ddm
s"J tdnd*dl
s4J tddd	
rFJ tdoddp
sXJ ttd#dqd ddd#k
sxJ ttd#drdddk
sJ tddndsdtgk
sJ tduddvdwk
sJ dxD ].\}}} t||| }t||| |k
sJ 
qtdddyd u sJ tdd	djd#d*dzgks(J td>ddjd#g d{ksDJ td*dd|g ksZJ tdVddWd#d}d~gksvJ td)ddd#d)gksJ td)ddd#g dksJ td*d*d+d#d	dzgksJ td*d*dd#ddgksJ tdddd#g ksJ td	dD ]} td| d*}|D ]}tt}t| D ] |t ||    q.td| d D ]@}t||| d#}	|| r|| |	ksJ n|	g ksZJ qZqqtd	ddksJ tdLdldksJ td;ddksJ td)dd)ksJ td>dd)ksJ ttdd  tdLdldks*J tdddks>J tdd>d)ksRJ tdddksfJ tdd	dkszJ 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ksJ ttdd  tddksJ tddksJ tddks"J tdd)ks4J ttdd  tdd#d#d#d} tdd#dtdd#d t| dks|J tt fdd tt fdd t!ddddksJ t!ddddksJ t!ddd@ dd@ksJ t!ddd ddks J t"ddddksJ t"ddd	dks,J t"ddd ddksFJ t"ddd ddks`J t#ddmdd)ddkszJ t#dddd)ddksJ t#dddd)ddQksJ t#ddd dd)ddksJ ttdd  ttdd  t$dddd>ksJ t$ddddnksJ t$ddd ddks.J t$ddd ddksHJ t%dddd>ks^J t%ddddkstJ t%ddd ddksJ t%ddd ddksJ d}
t%|
 dksJ t%t&|
  dksJ t'ddddÃg dĢksJ t'ddd	dLdd5gksJ t'ddddȃg ks$J t'dddddgks>J t'ddddddgksZJ t'dddd΃ddgksvJ 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d5dd)dgksJ t(dd	  dd*   d	d   d   d d܃g dݢksFJ t(d dd   d  d! dރdgksxJ t(d  d dddgksJ t(dd  d  d5 dd)dgksJ t(d d dd	gksJ t(d׈d  d  d dكddgksJ t(d* d* d+d	dzgks2J t(dd  dd   d  d dg dksjJ t(d d> dj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 d S )N         c                 S   s   g | ]}t |d qS )   r   .0a r'   ?lib/python3.9/site-packages/sympy/ntheory/tests/test_residue.py
<listcomp>       z test_residue.<locals>.<listcomp>   r"   )r+         r,   r-   r               r-   e   w   
   2      l   zX    4dCx ^y2V?WY|gOs&YR5I c                   S   s
   t ddS )Nr-   	   r#   r'   r'   r'   r(   <lambda>   r*   ztest_residue.<locals>.<lambda>Fr,            c                   S   s
   t ddS )Nr,   r-   )r   r'   r'   r'   r(   r8       r*   d   a   i$  i'  i)aR   c                   S   s   t dS N)r   r'   r'   r'   r(   r8   0   r*   TiL0              r         l    $O l    $U c                 S   s   g | ]}t |d r|qS )r:   r	   )r%   jr'   r'   r(   r)   <   r*   )r   r+   r   rE   r"   r9   r7   r1   c                   S   s
   t ddS )Ng?r   rG   r'   r'   r'   r(   r8   >   r*   c                   S   s
   t ddS )Nr   r   rG   r'   r'   r'   r(   r8   ?   r*   )r   r+   rE   r7   )r   r+   r,   rE   r7   r4   r!   c                 S   s   g | ]}t t|qS r'   )lenr   r%   ir'   r'   r(   r)   G   r*      )r+   r   r   r   r,   rE   rE   r,   rE   r-   r-   rE   r"   r9   r-   rE   r7   r9   r4   i   iY  i  C   i  i r7   )r,   r-   r!            Q   )r,   rQ      3   9   N      )r,   rV   T            )	r   r7      rF   $   -   6   ?   H   )r7   r\   r]   r^   r`   ra   Z   c   u   ~                  rC         i  )r7   ra   rb   rg   rh   rl      i;  M  i  i      i.  i@  i  i      )r7   rl   rm   ro   rp   rq   i  i  i  i  i  i  i  i  i  i  i  i  ))  l     @B )rs   l      ! )i   i   )l   )1mQ l   K'R )l    )bm.Ql    ,zhF      i	=  rS   rP   0   (   rQ   i  i  i i  iVU io  i  i(j ij  c                 S   s   h | ]}t |d dqS 8      powrJ   r'   r'   r(   	<setcomp>   r*   ztest_residue.<locals>.<setcomp>rz   c                 S   s   h | ]}t |d dr|qS rx   r   r$   r'   r'   r(   r}      r*   c                 S   s   h | ]}t |d dqS       r{   rJ   r'   r'   r(   r}      r*   r   c                 S   s   h | ]}t |d dr|qS r   r~   r$   r'   r'   r(   r}      r*   c                 S   s   h | ]}t |d dqS r1   i r{   rJ   r'   r'   r(   r}      r*   i  c                 S   s   g | ]}t |d dqS r   r~   r$   r'   r'   r(   r)      r*   c                 S   s   h | ]}t |d dqS r/   l   pLX r{   rJ   r'   r'   r(   r}      r*   c                 S   s   g | ]}t |d dqS r   r~   r$   r'   r'   r(   r)      r*   i  i  r]       )   @      ic!  i'  )Zeven)ZoddJ   r^   	  g
  ,   ))i  r   i	 )+   r,   m   )r   r1   r   )ii  ic)i  r"   r   )iS  r-   r   )i  r!   r   )i=o  r7   i?  r      )r,   r7   rO   rP   rF   !   ih1 i  iF  %   )
r   r4   rL   rS   rw   r5   <   rt   P   rb   y      f   c                   S   s
   t ddS )Nr   rE   )r
   r'   r'   r'   r(   r8      r*   iS   *   c                   S   s
   t ddS )Nr,   r9   )r   r'   r'   r'   r(   r8      r*   [   i     c                   S   s   t dS r?   r   r'   r'   r'   r(   r8      r*   p)integerpositiveZprimex)r   rK   )r   c                      s   t  S Nr   r'   r   r'   r(   r8      r*   c                      s   t  S r   r   r'   )rK   r'   r(   r8      r*   iK     i  l   ,"$. r\   i     {   i 1   iSW l   =HcEih G   i|% iA  i[ Zrseedi_] i   iU0l        i[vrn   c                   S   s   t dddddS )Nr1   r"   r   r   r   r   r'   r'   r'   r(   r8      r*   c                   S   s   t dddddS )N   rr   r.   r   r   r   r'   r'   r'   r(   r8      r*   il   +m i8l   #LWY
1PT] ib   i i  i   l   [+c=F^ 9 rT      l   I\iD  )i  i  iG  i  i  U   }   i@  )i'  ig  i  i  i'  x   r      i  rO            i,  i  rf   i  i i@ i%q l   Xk;H]) l   K+\1 l   'ff A   ra   i     rm   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   r'   r   r'   r(   r8     r*   c                      s   t   dS r   r   r'   rK   r   r'   r(   r8     r*   c                      s   t d d  d dS )Ng?r   r-   r<   r   r'   r   r'   r(   r8      r*   ))r   ranger   
ValueErrorr   r   r   rI   listr   r   r	   r   r   ZOner   r   r   r|   appendsortednexttypeintr   r   r   r   r
   r   r   r   	TypeErrorr   r   r   r   r   r   r   r   )r   itdvr&   nqrZqvresargsr'   r   r(   test_residue   s   "*


 2
2
2
&& 
4
2$,, 8 *r   N)&collectionsr   Zsympy.core.containersr   Zsympy.core.singletonr   Zsympy.core.symbolr   r   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   Zsympy.polys.domainsr   Zsympy.testing.pytestr   r   r'   r'   r'   r(   <module>   s   L