U
    -eT2                     @   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tdd tddD ddd	dd	dgks:tt d
ddksLtt ddt d	dksdtt ddd	ksvtt ddd d d dkstttdd  tdddksttdddksttdddksttddtddkstttdd  tddD ],} t| }tt	|t
t
| kstqtdd
ksHttdd
ksZttdd
kslttddks~ttd dkstdd d } t| dksttd|  dkstt| d dkstttd!d  tdddksttddd"ksttd#d$td%d$ks*ttd&d'd"ks>ttd(dd"ksRttddd"ksfttd(dtdd  krd"ksn ttdd)d"ksttdd*dksttd+d,d"kstd-d tdD d(ddd)ddd.dgkstttd/d  ttd0d  ttjd(gks*ttdd(gks>ttdd(dd)d.gksXttdd(ddd)d.ddgksxtd1d tdd2D dddddd)d)dd)d	d	d)ddd	d)d.ddgkstt	td	dd(gksttddd)ksttdd3d)ksttd	d4dksttd5d6d5ks&ttd7dd ks:ttd8d9d ksNttddD ]} tt	}t| D ] |t d|    qltd| D ]L t | }t | d"}|rt|}|  |kstn|  rtqqXtd.d*d"dd	dd:d;d<gksttd.d=d"dd<d>d?d@dAgks*ttd.dBd"ddAdCdDdEdFgksLttd=d=d"d(d.dGd*dHdIdJdKdLg	kstttd=dBd"d.dGdHdIdKdLdMdNdOdPdQdRdSdTdUd&dVdWgksttd=dXd"d.dLdMdRdSdWdYdZd[d\d]d^d_d`dadbdcddgksttd=ded"d.dWdYd^d_dddfdgdhdidjdkdldmdndodpdqgks"tdrD ]&\}} tt|| d| |ks&tq&ds}dtd|  d|  dud|d   d|d    }} t|| }tdD ]  tt|d| |kstqdtd|  d|  dud|d   d|d    }} t|| }tdD ]  tt|d| |kstqd}dtd|  d|  dud|d   d|d    }} t|| }tdD ]  tt|d| |ksftqftttd.d*tksttttd.d*tttdksttttddtttdksttddd
sttdd(ddksttdd(dd"ks.ttdd(dd"ksDttd(ddd"ksZttdddd"kspttddd.dksttdd
d>d"ksttd;dd2d"ksttddd2dksttd
dd2d"ksttdddvdksttdddwd"k	s
ttddd<dk	s ttddd<d"k	s6ttddd<dk	sLttdddvdk	sbttd=ddxdk	sxttdBd
dyd"k	sttdBddzdk	sttd{dd|d"k	sttd}d	d~d"k	sttdd.dd"k	stdd tdD dd tdD k
stdd tdD dd tdD k
sBtdd tdD dd D 
shtdd tdD dd D 
sttddd
sttd.ddH
sttddd
sttd)dd
sttdd)d
sttddd

rttdddstttd"dd ddd"ks,tttd"ddddksHttddddIgks`ttddddksvtdD ].\}}} t||| }t||| |ksztqztdddd ksttdd
dHd"d)dgksttd.ddHd"dd.d:d;d*dgks ttd)ddg ksttd{dd|d"ddgks2ttd(ddd"d(gksLttd(ddd"d(dd2d>dwdddsddMg
ksxttd)d)d*d"d
dgksttd)d)dd"ddgksttdddd"g ksttd
dD ]} td| d)}|D ]}tt	}t| D ] |t ||    qtd| d D ]@}t||| d"}	|| rV|| |	ksdtn|	g ks&tq&qqtd
ddksttdtddksttd7ddksttd(dd(ksttd.dd(kstttdd  tdtddksttdddks
ttdd.d(ksttdddks2ttdd
dksFttdd.dksZttd(dd(ksnttd(ddksttdddksttdddkstttdd  tddksttddksttddksttdd(ks tttdd  t dd"d"d"d} t dd"dt dd"d t| dksHttt!fdd tt fdd t"ddddkstt"ddddGkstt"ddd= dd=kstt"ddd ddkstt#ddddkstt#ddd
dkstt#ddd ddkstt#ddd ddks,tt$dddd(dʍd	ksFtt$dddd(dʍdks`tt$dddd(dʍdwksztt$ddd[ dd(dʍd[kstttdd  ttdd  t%dddd.kstt%ddddkstt%ddd ddkstt%ddd ddkstt&dddd.ks*tt&dddd?ks@tt&ddd ddksZtt&ddd ddksttd}
t&|
 dkstt&t'|
  dkstt(dddddddddgkstt(dd	d
dtdd2gkstt(ddddg kstt(d:ddddgkstt(dd:ddddgks,tt(dddddQdgksHtt(ddddddgksdtt(dddLdddYgkstt(d
dddd(gkstt(dddddgkstt(ddd2dd(dgkstt)d	d
  dd)   d
d   d   d ddddd ddddgks.tt)d dd   d  d  ddgksdtt)d  d dd	d
gkstt)dd  d  d2 dd(dgkstt)d d dd
gkstt)dd  d  dL dddYgkstt)d) d) d*d
dgks&tt)dd  d	d   d  d dddddgksrtt)d d. dHdd.d:d;d*dgkstt)d	 dd
   d ddgkstttfdd tt fdd ttfdd d S (  N         c                 S   s   g | ]}t |d qS )   r   .0a r'   a/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/sympy/ntheory/tests/test_residue.py
<listcomp>   s     z test_residue.<locals>.<listcomp>   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>       ztest_residue.<locals>.<lambda>F         c                   S   s
   t ddS )Nr+   r,   )r   r'   r'   r'   r(   r7       r8   d   a   i$  i'  i)aR   c                   S   s   t dS N)r   r'   r'   r'   r(   r7   0   r8   TiL0              r         l    $O l    $U c                 S   s   g | ]}t |d r|qS )r:   r	   )r%   jr'   r'   r(   r)   <   s     
 r6   c                   S   s
   t ddS )Ng?r   rG   r'   r'   r'   r(   r7   >   r8   c                   S   s
   t ddS )Nr   r   rG   r'   r'   r'   r(   r7   ?   r8   c                 S   s   g | ]}t t|qS r'   )lenr   r%   ir'   r'   r(   r)   E   s        i   iY  i  C   i  i          Q      3   9   N      T               $   -   6   ?   H   Z   c   u   ~                        i     i;  iM  i  i  i  i  i.  i@  i  i  i    i  i  i  i  i  i  i  i  i  i  i  i  ))  l     @B )ro   l      ! )i   i   )l   )1mQ l   K'R )l    )bm.Ql    ,zhF      i	=  0   (   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>   s     ztest_residue.<locals>.<setcomp>rv   c                 S   s   h | ]}t |d dr|qS rt   r   r$   r'   r'   r(   ry      s      c                 S   s   h | ]}t |d dqS       rw   rJ   r'   r'   r(   ry      s     r}   c                 S   s   h | ]}t |d dr|qS r{   rz   r$   r'   r'   r(   ry      s      c                 S   s   h | ]}t |d dqS r0   i rw   rJ   r'   r'   r(   ry      s     i  c                 S   s   g | ]}t |d dqS r~   rz   r$   r'   r'   r(   r)      s     c                 S   s   h | ]}t |d dqS r.   l   pLX rw   rJ   r'   r'   r(   ry      s     c                 S   s   g | ]}t |d dqS r   rz   r$   r'   r'   r(   r)      s     i  i      )   @      ic!  i'  )Zeven)ZoddJ   	  g
  ,   ))i  r   i	 )+   r+   m   )r   r0   r   )ii  ic)i  r"   r   )iS  r,   r   )i  r!   r   )i=o  r6   i?  r      !   ih1 i  iF  %   <   P   y      f   c                   S   s
   t ddS )Nr   rE   )r
   r'   r'   r'   r(   r7      r8   iS   *   c                   S   s
   t ddS )Nr+   r9   )r   r'   r'   r'   r(   r7      r8   [   i     c                   S   s   t dS r?   r   r'   r'   r'   r(   r7      r8   p)integerpositiveprimex)r   rK   )r   c                      s   t  S Nr   r'   r   r'   r(   r7      r8   c                      s   t  S r   r   r'   )rK   r'   r(   r7      r8   iK     i  l   ,"$. i     {   i 1   iSW l   =HcEih G   i|% iA  i[ Zrseedi_] i   iU0l        i[vc                   S   s   t dddddS )Nr0   r"   r   r   r   r   r'   r'   r'   r(   r7      r8   c                   S   s   t dddddS )N   rn   r-   r   r   r   r'   r'   r'   r(   r7      r8   il   +m i8l   #LWY
1PT] ib   i i  i   l   [+c=F^ 9    l   I\iD  )i  i  iG  i  i  U   }   i@  i'  ig  i  i  i'  x      i           i,  i  i  i i@ i%q l   Xk;H]) l   K+\1 l   'ff A   i     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(   r7     r8   c                      s   t   dS r   r   r'   rK   r   r'   r(   r7     r8   c                      s   t d d  d dS )Ng?r   r,   r<   r   r'   r   r'   r(   r7     r8   )*r   AssertionErrorranger   
ValueErrorr   r   r   rI   listr   r   r	   r   r   ZOner   r   r   rx   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
6,,, 4  (0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