
\c           @   s   d  d l  m Z d  d l m Z 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 d  d l m Z m Z m Z m Z m Z d  d l m Z d  d l  m! Z! d   Z" d	 S(
   i(   t   defaultdict(   t   St   Symbolt   Tuple(   t   range(   t   n_ordert   is_primitive_roott   is_quad_residuet   legendre_symbolt   jacobi_symbolt   totientt
   primeranget   sqrt_modt   primitive_roott   quadratic_residuest   is_nthpow_residuet   nthroot_modt   sqrt_mod_itert   mobiust   discrete_log(   t   _primitive_root_prime_itert   _discrete_log_trial_mult   _discrete_log_shanks_stepst   _discrete_log_pollard_rhot   _discrete_log_pohlig_hellman(   t   ZZ(   t   raisesc             st  t  d d  d k s t  g  t d d  D] }  t  |  d  ^ q+ d d d d d d g k sd t  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 s t  t t d    t d d  t k st  t d d  t k st  t d d  t k s:t  t d d	  t d d	  k s^t  t t d    g  t d d  D]   t    ^ q~d d d d d d d  d d d d  d d d  d  d d d d  d  d d d  d d d d  d d  g k st  xM t	 d d  D]< } t
 |  } t t |   t t |   k s	t  q	Wt d  d k sat  t d  d k syt  t d  d k st  t d  d k st  t d  d k st  d } t |  d k st  t d |  d k st  t | d  d k st  t t d    t d d  t k sBt  t d d  t k s]t  t d d  t d d  k st  t d d   t k st  t d! d  t k st  t d d  t k st  t d! d  t d d  k ot k n st  t d d"  t k s!t  t d d#  t k s<t  t d$ d%  t k sWt  g  t d  D] } t | d  rd| ^ qdd! d d d" d d d& d g k st  t t d'    t t d(    t t j  d! g k st  t d  d! g k st  t d  d! d d" d& g k s&t  t d  d! d d" d& g k sJt  t d  d! d d d" d& d d g k swt  g  t d d)  D]   t t     ^ qd d d d d d" d" d d" d d d" d d d d" d& d d g k st  t t d d   d! g k st  t d d  d" k s)t  t d d*  d" k sDt  t d d+  d k s_t  t d, d-  d, k szt  x t d d  D] } t t  } x1 t |  D]#   | t   d |  j    qWxt t d |  D]c   t   |  } t   | t  } | r2t |  } |   | k sCt  q|   st  qWqWt d& d# t  d d d d. d/ d0 g k s{t  t d& d1 t  d d0 d2 d3 d4 d5 g k st  t d& d t  d d5 d6 d7 d8 d9 g k st  t d1 d t  d! d& d: d# d; d< d= d> d? g	 k st  t d1 d t  d& d: d; d< d> d? d@ dA dB dC dD dE dF dG dH d dI dJ g k sht  t d1 d t  d& d? d@ dE dF dJ dK dL dM dN dO dP dQ dR dS dT dU dV g k st  t d1 d t  d& dJ dK dP dQ dV dW dX dY dZ d[ d\ d] d^ d_ d` da db g k s	t  xJ d d d d d g D]3 \ }  } t t |  |  d |  |  k s&	t  q&	Wdl } d d | d | d d | d d | d }  } t |  |  } x8 t d  D]*   t t |  d |  |  k s	t  q	Wd d | d | d d | d d | d }  } t |  |  } x8 t d  D]*   t t |  d |  |  k s3
t  q3
Wd } d d | d | d d | d d | d }  } t |  |  } x8 t d  D]*   t t |  d |  |  k s
t  q
Wt t t d& d#    t k st  t t t d& d# t    t t d   k sCt  t t t d d t    t t d   k syt  t d d d  st  t d d! d  t k st  t d d! d  t k st  t d d! d  t k st  t d! d d  t k s	t  t d d d  t k s't  t d d d&  t k sEt  t d d d2  t k sct  t d/ d d)  t k st  t d d d)  t k st  t d d d)  t k st  t d d dm  t k st  t d d dn  t k st  t d d d0  t k st  t d d d0  t k s5t  t d d d0  t k sSt  t d d dm  t k sqt  t d1 d do  t k st  t dp d dq  t k st  t dp d dr  t k st  t g  t ds  D]   t   dt ds  ^ q  t g  t ds  D] }  t |  dt ds  r|  ^ q  k s?t  t g  t du  D]   t   dv du  ^ qO  t g  t du  D] }  t |  dv du  r|  ^ q  k st  t g  t dw  D]   t   d dx  ^ q  g   D] }  t |  d dx  ^ qst  t g  t dw  D]   t   d	 dy  ^ q  g   D] }  t |  d	 dy  ^ qGskt  t dz d d{  st  t d& d d;  st  t d| d d}  st  t d" d d~  st  t d d" d}  st  t d d d  st  t d d d  st  t d d d  d k s2t  t t  d d d    d k sVt  t d d d  d k stt  x_ d d d d d d d d g D]? \ }  } } t |  | |  } t | | |  |  k st  qWt d d d  d  k st  t t! d    t t! d    x t	 d d  D] } t d | d"  }	 x |	 D] } t t  } x1 t |  D]#   | t   | |  j    qbWxe t d | d  D]P }  t |  | | t  }
 | |  r| |  |
 k st  q|
 d  k st  qWqCWq$Wt" d d  d k st  t" d d}  d k s/t  t" d d  d k sJt  t" d! d  d! k set  t" d& d  d! k st  t t d    t# d d}  d k st  t# d d  d k st  t# d d&  d! k st  t# d d  d k st  t# d d  d k st  t# d d&  d k s2t  t# d! d  d! k sMt  t# d! d  d k sht  t# d d  d k st  t# d d  d k st  t t d    t$ d  d k st  t$ d  d k st  t$ d  d k st  t$ d  d! k st  t t d    t% d d t d t d t } t% d d t  t% d d t   t$ |  d k sxt  t t&  f d    t t   f d    t' d d d  d k st  t' d d d  d: k st  t' d d d  d1 k st  t' d d d  d k st  t( d d d  d k s:t  t( d d d  d k sXt  t( d d d  d k svt  t( d d d  d k st  t) d d d d d! d k st  t) d d d d d! d k st  t) d d d d d! dn k s t  t) d d d d d! dM k s$t  t t d    t t d    t* d d d  d& k sbt  t* d d d  d k st  t* d d d  d k st  t* d d d  d k st  t+ d d d  d& k st  t+ d d d  d3 k st  t+ d d d  d k st  t+ d d d  d k s4t  d } t+ |   d k sRt  t+ t  |     d k spt  d  S(   Ni   i   i   i   i   i   i   i   i   i   i   ie   iw   i
   i2   i   l   zX    4dCx ^y2V?WY|gOs&YR5I c           S   s   t  d d  S(   Ni   i	   (   R   (    (    (    s?   lib/python2.7/site-packages/sympy/ntheory/tests/test_residue.pyt   <lambda>   t    i   i   i   c           S   s   t  d d  S(   Ni   i   (   R   (    (    (    s?   lib/python2.7/site-packages/sympy/ntheory/tests/test_residue.pyR      R   i   id   ia   i'  iR   c           S   s
   t  d  S(   Ni(   R   (    (    (    s?   lib/python2.7/site-packages/sympy/ntheory/tests/test_residue.pyR   2   R   iL0  i   i   i   i    i   i   I '   I $*   i	   c           S   s   t  d d  S(   Ng?i   (   R   (    (    (    s?   lib/python2.7/site-packages/sympy/ntheory/tests/test_residue.pyR   @   R   c           S   s   t  d d  S(   Ni   i    (   R   (    (    (    s?   lib/python2.7/site-packages/sympy/ntheory/tests/test_residue.pyR   A   R   i   ii   iY  i  i   i   i   iQ   i   i3   i9   iN   iT   i   i   i   i   i$   i-   i6   i?   iH   iZ   ic   iu   i~   i   i   i   i   i   i   i   i   i;  iM  i  i  i  i  i.  i@  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  I      I     i   i   I)K   IK  I )K  I ,=N,RiF   i0   i(   i  i   i  i i   i8   i   i   i  i IpLE,   i  i  i    i)   i@   ic!  i'  iJ   i	  ig
  i,   i  i	 i+   im   ii  ici  iS  i  i=o  i?  c           S   s   t  d d d  S(   Ni   i   i$   (   R   (    (    (    s?   lib/python2.7/site-packages/sympy/ntheory/tests/test_residue.pyR      R   c           S   s   t  d d d  S(   Ni	   i   i$   (   R   (    (    (    s?   lib/python2.7/site-packages/sympy/ntheory/tests/test_residue.pyR      R   i   iC   ic           S   s   t  d d  S(   Ni   i   (   R   (    (    (    s?   lib/python2.7/site-packages/sympy/ntheory/tests/test_residue.pyR      R   iiS   i*   c           S   s   t  d d  S(   Ni   i   (   R	   (    (    (    s?   lib/python2.7/site-packages/sympy/ntheory/tests/test_residue.pyR      R   c           S   s
   t  d  S(   Ni(   R   (    (    (    s?   lib/python2.7/site-packages/sympy/ntheory/tests/test_residue.pyR      R   t   pt   integert   positivet   primet   xt   ic              s
   t     S(   N(   R   (    (   R!   (    s?   lib/python2.7/site-packages/sympy/ntheory/tests/test_residue.pyR      R   c              s
   t     S(   N(   R   (    (   R"   (    s?   lib/python2.7/site-packages/sympy/ntheory/tests/test_residue.pyR      R   iK  i  i  i   i   i{   i iSW ih iG   i|% iA  i[ t   rseedi_] iU0i[vc           S   s   t  d d d d d S(   Ni   i   i   R#   i    (   R   (    (    (    s?   lib/python2.7/site-packages/sympy/ntheory/tests/test_residue.pyR      R   c           S   s   t  d d d d d S(   Ni   i   i   i   R#   i    i  (   R   (    (    (    s?   lib/python2.7/site-packages/sympy/ntheory/tests/test_residue.pyR      R   ii8iib   i i  i   IId   iD  i  i  iG  i  l          +O tC3y+v l         +O tC3y+v l   Y    _4Dld]s^LaQYY|gOs&YR5I i$  i)al          +O tC3y+v l         +O tC3y+v i   i   iQ   i   i  i  (   i  I      (   i  I     (   i   i   (   I)K   IK  (   I )K  I ,=N,Ri   i	=  i   i	=  i   i	=  (   i  i   i	 (   i+   i   im   (   i	  i   ig
  (   ii  ic(   i  i   ig
  (   iS  i   ig
  (   i  i   ig
  (   i=o  i	   i?  i[   i[   i  i   i   I l	   |*15K=)sjLMl#   kJ~cuq+kh(B*^FN3\ZTIC{	&j(^_p61V~4`vx[ui1   I=`X  l   j^gE%m 8Ox${  l"   lUhbIj}88N:.?=ymlaVWBa"3E$NAfb\^\W'oOJc/$6i@   i   I       l$   69#;|K)}sD{L*+Q?O[MJ+b_SZn|#/>1jS8ly;Z:T<Gp|(v I+m    l   #LWY
1PT] l   LO{}Fi
)R=Os$9HD>W}[t
X#Ylg   C`j2VgLPN o @?m5_myW1rGlgoA!Vl|RW6P;<@Uoz)r}P]E$ugjImHS[X	;Ylr*0GnLun8 Wge'jxE ojfH/,1ihqJA?2pS
kOa~jQ7:-Z	F;XGfU
`3 I%foGZ'Z//vt:? i   l   [+c=F^ 9 l   h6Azl#zdIG*&'?e0Q+$9WU%e:	T$48|igY. l=   a[lT&"#&Y}74}5AVb"$7pUQ,BGZ(uoskOnT+/&*9>j@v-<sQ 8TNOy Tb6wl&an*lRz(   i  i  iG  (,   R   t   AssertionErrorR   R   t
   ValueErrorR   t   FalseR   t   NoneR   R   t   lent   listR
   R   t   TrueR   R   t   OneR   R   R    t   powt   appendt   sortedt   nextt   typet   intR   R   t   setR   R   t   NotImplementedErrorR   R	   R   R   t	   TypeErrorR   R   R   R   R   (   t   aR   t   itt   jt   dt   vt   nt   qt   rt   qvt   rest   args(    (   R"   R!   s?   lib/python2.7/site-packages/sympy/ntheory/tests/test_residue.pyt   test_residue   s   (!$$70$.$4+'$$-+H$!0009**'-'-	+5(5(5('661C1C1+1+$	"!
$$$$N(#   t   collectionsR    t   sympyR   R   R   t   sympy.core.compatibilityR   t   sympy.ntheoryR   R   R   R   R	   R
   R   R   R   R   R   R   R   R   R   t   sympy.ntheory.residue_ntheoryR   R   R   R   R   t   sympy.polys.domainsR   t   sympy.utilities.pytestR   R@   (    (    (    s?   lib/python2.7/site-packages/sympy/ntheory/tests/test_residue.pyt   <module>   s   d(