ó
Ąź\c           @   s  d  Z  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 e
   \ Z Z Z Z Z Z Z d   Z d   Z d   Z d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z  d   Z! d   Z" d   Z# d   Z$ d S(   sO   Tests for Euclidean algorithms, GCDs, LCMs and polynomial remainder sequences. i˙˙˙˙(   t   ring(   t   ZZt   QQt   RR(   t   range(   t   f_polyst   dmp_fateman_poly_F_1t   dmp_fateman_poly_F_2t   dmp_fateman_poly_F_3c    
      C   se  t  d t  \ }  } | d d | d d | d d | d } | d | d d | d } t d d	  | t d d	  } t d d	  | d t d d	  | d } | d } |  j | |  | | f k sÜ t  |  j | |  | | | f k st  | d d | d | d } | d | d } |  j | |  \ } } } |  j | |  \ } } }	 |  j |  j | |  |  j | |   | k st  |  j |  j | |  |  j | |   |	 k sŐt  d | } | d d
 } t d d  | } t d d
  } d } |  j | |  | | f k s:t  |  j | |  | | | f k sat  d  S(   Nt   xi   i   i   i   i   i   i   i   i   i    (   R    R   t   dup_half_gcdext   AssertionErrort	   dup_gcdext   dup_addt   dup_mul(
   t   RR	   t   ft   gt   st   tt   ht   St   Tt   H(    (    sA   lib/python2.7/site-packages/sympy/polys/tests/test_euclidtools.pyt   test_dup_gcdex   s.    .!,
$'!!
$c          C   sP   t  d t  \ }  } |  j d | | d d  t d d  | k sL t  d  S(   NR	   i   i   i   i    (   R    R   t
   dup_invertR   (   R   R	   (    (    sA   lib/python2.7/site-packages/sympy/polys/tests/test_euclidtools.pyt   test_dup_invert2   s    c       	   C   s<  t  d t  \ }  } | d | d d | d d | d d | d d | d } d | d d | d d | d d | d	 } |  j | |  | | t d d  | d t d
 d  | d t d
 d  t d d  | d d | t d d  t d d  | t d d  t d d  g k s8t  d  S(   NR	   i   i   i   i   i   i   i	   i   i   iu   i   iš  iž i=M  id iż  iuŻĐLiif (   R    R   t   dup_euclidean_prsR   (   R   R	   R   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/tests/test_euclidtools.pyt   test_dup_euclidean_prs7   s    B27*c          C   sí   t  d t  \ }  } | d | d d | d d | d d | d d | d } d | d d | d d | d d | d	 } |  j | |  | | d
 | d | d d d | d d | d d | d d g k sé t  d  S(   NR	   i   i   i   i   i   i   i	   i   iű˙˙˙i   i   i1   i7  i  i   (   R    R   t   dup_primitive_prsR   (   R   R	   R   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/tests/test_euclidtools.pyt   test_dup_primitive_prsF   s    B2c          C   sz  t  d t  \ }  } |  j d d  d k s3 t  |  j d d  d k sQ t  |  j d d  d k so t  | 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 } d } |  j | |  | | | | | | g k s_t  |  j | |  |  j |  k st  | d d | d } | d d } d | d } |  j | |  | | | g k sßt  |  j | |  d k sýt  | d d } | d d } d } |  j | |  | | | g k sFt  |  j | |  d k sdt  | d d } | d | d d } |  j | |  d k sŚt  d | d | } d	 | d d } |  j | |  d k sčt  | d d | d } | d | d	 } |  j | |  d k s.t  | d d | d d | d } | d d | d d | d } |  j | |  d k st  | d d | d d | d } | d d | d d | d } |  j | |  d k sňt  | d d } | d d | d d | d } |  j | |  d k s@t  | d d } | d } |  j | |  d k svt  d  S(    NR	   i    i   i   i   i   i   i   i   i	   i   i   iA   i}   iő   in$  i0  idú iţ˙˙˙i@   i   i	  i   iJ   ix   i@Ţ˙˙i
   i   i   i   i˙˙˙˙(   R    R   t   dup_resultantR   t   dup_subresultantst   dup_LC(   R   R	   R   R   t   at   bt   ct   d(    (    sA   lib/python2.7/site-packages/sympy/polys/tests/test_euclidtools.pyt   test_dup_subresultantsU   sV    B20'''"""""
c          C   să  t  d t  \ }  } } |  j d d  d k s6 t  |  j d d  d d k sX t  |  j d d  d k sv t  |  j d d  d k s t  |  j d d  d k s˛ t  |  j d d  d k sĐ t  |  j d d  d k sî t  |  j d d  d k st  |  j d d  d d k s.t  |  j d d  d k sLt  |  j d d  d k sjt  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 } |  j |  } |  j | |  | | | | g k sSt  |  j | |  | k sqt  |  j | |  d | k st  |  j | |  | k sąt  |  j | |  | k sĎt  | d d } d | d | | d } d | d d | d } d | d d | d d | d } |  j |  } |  j | |  | | | g k snt  |  j | |  | k st  |  j | |  d | k sŽt  |  j | |  | k sĚt  |  j | |  | k sęt  t  d t  \ }  } } } }	 }
 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 | |	 d |
 d | |	 |
 d d |	 d |
 d } |  j | |  | j	 |  k sŹt  t  d t
  \ }  } } } }	 }
 | d t
 d d  | | t
 d d  | | t
 d d  | | } | d | |	 | |
 |	 |
 } t
 d d  | d | d t
 d d  | d | |	 t
 d d  | d | |
 t
 d d  | d |	 |
 t
 d d  | | d |	 t
 d d  | | d |
 t
 d d  | | |	 d t
 d d  | | |	 |
 t
 d d  | | |
 d t
 d d  | |	 d |
 t
 d d  | |	 |
 d t
 d d  | d |	 |
 t
 d d  | |	 d |
 t
 d d  | |	 |
 d |	 d |
 d } |  j | |  | j	 |  k st  t  d t  \ } } t  d |  \ } } | d d | d d | d d } d | | d | d d | | d d | d d
 | | d } | j | |  d  | d d! | d d" | d d# k sßt  d  S($   Ns   x,yi    i   i   i   i   i	   i   iý˙˙˙i
   i   i   i   i6   i   iŮ  iŘ   i   i   i-   i   iŁ  iá   i   s	   x,y,z,u,vi   i$   R   R	   iú˙˙˙i   i š, iŔ! i°b iä˛  (   R    R   t   dmp_resultantR   t   dmp_prs_resultantt   dmp_zz_collins_resultantt   dmp_qq_collins_resultantt   dmp_LCt   dmp_subresultantst   dropR   R   (   R   R	   t   yR   R   R"   R#   t   rt   zt   ut   vt   RtR   t   Rx(    (    sA   lib/python2.7/site-packages/sympy/polys/tests/test_euclidtools.pyt   test_dmp_subresultants   sb    ""&R*"&'"!."˙ +'!I"˙ Š'&Fc          C   s?  t  d t  \ }  } |  j d  d k s0 t  |  j |  d k sK t  |  j | d d | d d | d  d k s t  |  j d	 | d	 | d d  d
 k są t  |  j | d d | d d | d d | d  d k sô t  |  j d | d d | d d | d | d d  d k s;t  d  S(   NR	   i    i   i   i   i	   i   ipŇ˙˙i   iŔŢÜi   i   i   i   i   i   i   I wó^Ż_ńü(   R    R   t   dup_discriminantR   (   R   R	   (    (    sA   lib/python2.7/site-packages/sympy/polys/tests/test_euclidtools.pyt   test_dup_discriminantę   s    7/Cc          C   s6  t  d t  \ }  } |  j d  d k s0 t  t  d t  \ }  } } |  j d  d k sc t  |  j |  d k s~ t  |  j | d d | d d | d  d k sľ t  |  j d	 | d	 | d d  d
 k sä t  |  j | d d | d d | d d | d  d k s't  |  j d | d d | d d | d | d d  d k snt  |  j | d | d |  d | d j |  k sŞt  |  j | | d d |  d k sŐt  t  d t  \ }  } } } |  j | | |  d k st  t  d t  \ }  } } } } |  j | d | | | |  d | | | d j |  k syt  t  d t  \ }  } } } } } |  j | d | | d | | | |  d | d | d d | | | | d | | d d | d | | d | d j |  k s2t  d  S(   NR	   i    s   x,yi   i   i	   i   ipŇ˙˙i   iŔŢÜi   i   i   i   i   i   i   i   I wó^Ż_ńüiř˙˙˙s   x,y,zs   x,y,z,uiü˙˙˙s	   x,y,z,u,viĺ˙˙˙i   (   R    R   t   dmp_discriminantR   R-   (   R   R	   R.   R0   R1   R2   (    (    sA   lib/python2.7/site-packages/sympy/polys/tests/test_euclidtools.pyt   test_dmp_discriminantö   s$    7/CG<+#H!,c          C   sl  t  d t  \ }  } d' \ } } |  j | |  |  j | |  k oP d( k n s[ t  d) \ } } |  j | |  |  j | |  k o d* k n sĄ t  d+ \ } } |  j | |  |  j | |  k oÜ d, k n sç t  d- \ } } |  j | |  |  j | |  k o"d. k n s-t  d d | d } } |  j | |  |  j | |  k od | d d d f k n st  d | d d } } |  j | |  |  j | |  k oâd | d d d f k n sít  d/ \ } } |  j | |  |  j | |  k o(d0 k n s3t  d1 \ } } |  j | |  |  j | |  k ond2 k n syt  d3 \ } } |  j | |  |  j | |  k o´d4 k n sżt  d5 \ } } |  j | |  |  j | |  k oúd6 k n st  | d d | d d } } |  j | |  |  j | |  k ojd | d d | d d f k n sut  | d d | d d } } |  j | |  |  j | |  k oÚd | d d | d d f k n sĺt  d | d d | d d } } |  j | |  |  j | |  k oNd | d d | d d f k n sYt  d d | d d | d } } |  j | |  |  j | |  k oÂd d | d d | d f k n sÍt  d | d d | d | d } } |  j | |  |  j | |  k o6| d d | d d f k n sAt  | d d | d d | d } } |  j | |  |  j | |  k oŞ| d d d | d f k n sľt  | d | } } |  j | |  |  j | |  k oţd | | f k n s	t  | d d	 | d
 d | d d | d	 } | d
 d | d d | d } | d d
 | d } | d d | d } | d
 } |  j | |  | | | f k sśt  |  j | |  | | | f k sÝt  | d d } | d d | d d } | d d } | d d } | d d } |  j | |  | | | f k sVt  |  j | |  | | | f k s}t  | d	 | d d
 | d d
 | d
 d	 | d d | d } d
 | d d | d d | d d | d } d } | } | } |  j | |  | | | f k s*t  |  j | |  | | | f k sQt  t  d t  \ }  } | d	 | d d
 | d d
 | d
 d	 | d d | d } d
 | d d | d d | d d | d } d } | } | } |  j | |  | | | f k s	t  |  j | |  | | | f k s:	t  t  d t  \ }  } d | d d | d d | d d | d d | d d | d d | d d } d | d d  | d d! | d d } |  j | |  j | d   d | k s
t  |  j | |  j | d   d | k s/
t  t  d t  \ }  } t d d  | d | t d d  } t d d  | t d d  } | d } |  j | |  | | t d d  f k sĆ
t  |  j | |  | | t d d  f k sö
t  t  d t  \ }  } d" | d# } d$ | d% } d$ | d% } d& } d } |  j | |  | | | f k sht  d  S(7   NR	   i    i   i   iţ˙˙˙i˙˙˙˙i   i   i   i   i   i   i   i   i   i	   lě˙˙˙     p˘>Zč6-(Čˇ3Ă{ CĂzěVgÚsóR&i1   l       Ŕ	Í`ç ň%ł'(Ő'ť@ó$@Ľ9$` ŃV i*   l      `ľ%łNwgšej^íôr0cu`Z§hD i#   l      ]%ł5u[oŚvČ&Á+Ú/
có>_o],i   l    @ü)-ŔPľ/Í'X=vŘw+U9+; l    _ÖIČ	,ü4~XsRň`Y?t
Uź i   l   y[Ůpń?÷u˙;ĂZŕW`ą( i   l   ńEŮAyˇ\ź^
l     Ŕmc@Ats lÍ\o#MkďE6w# l    @źr/sÜLxFJG jëAl   3sčd%uŇ%g%9 i[T l         qRvl        @Ńű	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   i   (   iţ˙˙˙i   (   i   i˙˙˙˙i   (   i   iţ˙˙˙(   i   i   i˙˙˙˙(   iţ˙˙˙iţ˙˙˙(   i   i˙˙˙˙i˙˙˙˙(	   R    R   t   dup_zz_heu_gcdt   dup_rr_prs_gcdR   R   t   dup_qq_heu_gcdt   dup_ff_prs_gcdt   dup_diff(   R   R	   R   R   R   t   cfft   cfg(    (    sA   lib/python2.7/site-packages/sympy/polys/tests/test_euclidtools.pyt   test_dup_gcd  s¤    ::::KK::::SS!S!S%O%OC."
''''B2''B2''	Z*..( 
00c       
   C   s*  t  d t  \ }  } } d \ } } |  j | |  |  j | |  k oS d k n s^ t  d \ } } |  j | |  |  j | |  k o d k n s¤ t  d \ } } |  j | |  |  j | |  k oß d k n sę t  d \ } } |  j | |  |  j | |  k o%d k n s0t  d d | d } } |  j | |  |  j | |  k od | d d d f k n st  d | d d } } |  j | |  |  j | |  k oĺd | d d d f k n sđt  d \ } } |  j | |  |  j | |  k o+d k n s6t  d \ } } |  j | |  |  j | |  k oqd k n s|t  d \ } } |  j | |  |  j | |  k oˇd  k n sÂt  d! \ } } |  j | |  |  j | |  k oýd" k n st  | d d | d d } } |  j | |  |  j | |  k omd | d d | d d f k n sxt  | d d | d d } } |  j | |  |  j | |  k oÝd | d d | d d f k n sčt  d | d d | d d } } |  j | |  |  j | |  k oQd | d d | d d f k n s\t  d d | d d | d } } |  j | |  |  j | |  k oĹd d | d d | d f k n sĐt  d | d d | d | d } } |  j | |  |  j | |  k o9| d d | d d f k n sDt  | d d | d d | d } } |  j | |  |  j | |  k o­| d d d | d f k n s¸t  t  d t  \ }  } } } } | d d | d d | d } } |  j | |  |  j | |  k o;| d | d d f k n sFt  | d | d d | d | | d | | | | d d | d } } | d | d | | d | | d } } }	 |  j | |  | | |	 f k sęt  |  j | |  | | |	 f k st  |  j | |  | |	 | f k s8t  |  j | |  | |	 | f k s_t  t  d	 t  \ }  } } } t |  j t d t   \ } } } |  j | |  \ }
 } }	 |
 | k rő|  j |
 |  | k rő|  j |
 |	  | k sűt  |  j | |  \ }
 } }	 |
 | k rR|  j |
 |  | k rR|  j |
 |	  | k sXt  t  d
 t  \ }  } } } } } t |  j t d t   \ } } } |  j | |  \ }
 } }	 |
 | k rô|  j |
 |  | k rô|  j |
 |	  | k sút  t  d t  \ }  } } } } } } } t |  j t d t   \ } } } |  j | |  \ }
 } }	 |
 | k r	|  j |
 |  | k r	|  j |
 |	  | k s˘	t  t  d t  \
 }  } } } } } } } } } t |  j t d t   \ } } } |  j | |  \ }
 } }	 |
 | k rJ
|  j |
 |  | k rJ
|  j |
 |	  | k sP
t  t  d	 t  \ }  } } } t |  j t	 d t   \ } } } |  j | |  \ }
 } }	 |
 | k rć
|  j |
 |  | k rć
|  j |
 |	  | k sě
t  |  j | |  \ }
 } }	 |
 | k rC|  j |
 |  | k rC|  j |
 |	  | k sIt  t |  j t
 d t   \ } } } |  j | |  \ }
 } }	 |
 | k rÄ|  j |
 |  | k rÄ|  j |
 |	  | k sĘt  |  j | |  \ }
 } }	 |
 | k r!|  j |
 |  | k r!|  j |
 |	  | k s't  t  d
 t  \ }  } } } } } t |  j t
 d t   \ } } } |  j | |  \ }
 } }	 |
 | k rĂ|  j |
 |  | k rĂ|  j |
 |	  | k sÉt  t  d t  \ }  } } t d d  | d | t d d  } t d d  | t d d  } | d } |  j | |  | | t d d  f k sct  |  j | |  | | t d d  f k st  t  d t  \ }  } } d | | d d | | d | } d | d } |  j | |  d | d | d d | d d | d f k s&t  d  S(#   Ns   x,yi    i   i   iţ˙˙˙i˙˙˙˙i   s   x,y,z,us   x,y,zs	   x,y,z,u,vs   x,y,z,u,v,a,bi   s   x,y,z,u,v,a,b,c,di   gÍĚĚĚĚĚ @g@g      đ?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ţ˙˙˙i   (   i   i˙˙˙˙i   (   i   iţ˙˙˙(   i   i   i˙˙˙˙(   iţ˙˙˙iţ˙˙˙(   i   i˙˙˙˙i˙˙˙˙(   R    R   t   dmp_zz_heu_gcdt   dmp_rr_prs_gcdR   t   mapt
   from_denseR   t   dmp_mulR   R   t   dmp_inner_gcdR   t   dmp_qq_heu_gcdt   dmp_ff_prs_gcdR   (   R   R	   R.   R   R   R0   R1   R   R?   R@   R   R2   R"   R#   R$   R%   (    (    sA   lib/python2.7/site-packages/sympy/polys/tests/test_euclidtools.pyt   test_dmp_gcd   sŔ    ::::KK::::SS!S!S%O%O%KM0''''$$$!$$'$$-$$$$$$$$!$$( 
00&c          C   s­  t  d t  \ }  } |  j d d  d k s3 t  |  j d | d d |  d | d k se t  |  j d | d d |  d | d k s t  |  j | d | |  | d | k sĹ t  |  j | d | d |  d | d d | k s˙ t  |  j | d d | |  | d d | k s5t  |  j d | d | |  d | d | k skt  |  j d | d | d |  d | d d | k sŠt  d  S(   NR	   i   i   i   i   (   R    R   t   dup_lcmR   (   R   R	   (    (    sA   lib/python2.7/site-packages/sympy/polys/tests/test_euclidtools.pyt   test_dup_lcm9  s    22.:66c          C   sî  t  d t  \ }  } } |  j d d  d k s6 t  |  j | |  | | k sX t  |  j d | d d | | d  d | d | d k s t  |  j d | d d | | d  d | d | d k sÜ t  |  j | d | | | d  | d | d k st  d | | d d | | d d | | d d | | d } | d d | d | } d | | d d | | d d | | d d | | d d | | d d | | d } |  j | |  | k sňt  | 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 } |  j | |  | k sęt  d  S(   Ns   x,yi   i   i   i   i   i   i	   i   i
   i   i2   i/   i   (   R    R   t   dmp_lcmR   (   R   R	   R.   R   R   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/tests/test_euclidtools.pyt   test_dmp_lcmH  s    "BB:Bb6JZc    	      C   sC  t  d t  \ }  } } |  j d  d k s3 t  d | d d | d d d } } } x3 t d d  D]" } | | 9} | | | | 7} qk W|  j |  | j |  k sľ t  t  d t  \ }  } } } |  j t  d k së t  |  j t  d k st  t  d	 t  \ }  } } } } |  j t  d k s?t  d  S(
   Ns   x,yiţ˙˙˙i   i   i   i    i   s   x,y,zs   x,y,z,t(	   R    R   t   dmp_contentR   R   R-   t   f_4t   f_5t   f_6(	   R   R	   R.   R   R   t   Ft   iR0   R   (    (    sA   lib/python2.7/site-packages/sympy/polys/tests/test_euclidtools.pyt   test_dmp_content`  s    (
$c    
      C   s°  t  d t  \ }  } } |  j d  d	 k s3 t  |  j d  d
 k sN t  d | d d | d d d } } } x3 t d d  D]" } | | 9} | | | | 7} q W|  j |  | j |  | | f k sÚ t  t  d t  \ }  } } } |  j t  \ } } | d k r"| t k s(t  |  j t  \ } } | d k rU| t k s[t  t  d t  \ }  } } } }	 |  j t  \ } } | d k rŚ| t k sŹt  d  S(   Ns   x,yi    i   i   i   i   s   x,y,zs   x,y,z,t(   i    i    (   i   i   (	   R    R   t   dmp_primitiveR   R   R-   RP   RQ   RR   (
   R   R	   R.   R   R   RS   RT   R0   t   contR   (    (    sA   lib/python2.7/site-packages/sympy/polys/tests/test_euclidtools.pyt   test_dmp_primitivev  s     (
.c    	      C   s(  t  d t  \ }  } d | d d } | d d | d } d | d } | d } |  j | |  | | f k sy t  |  j | | d t d d | | f k sŠ t  | d } d | d } | d } d | d } |  j | |  | | f k sţ t  |  j | |  | | f k s"t  |  j d d  d	 k s@t  |  j d d d t d
 k sdt  |  j | d  d k st  |  j | d d t d k sŚt  |  j d |  d k sÄt  |  j d | d t d k sčt  d } | } d } |  j | | d t | | f k s$t  d  S(   NR	   i   i   t   includei   i   iý˙˙˙i    (   i    i    (   i   i   i    i    (   i   i    (   i   i   i   i    (   i    i   (   i   i   i    i   (   R    R   t
   dup_cancelR   t   Falset   True(	   R   R	   R   R   t   pt   qRS   t   Gt   one(    (    sA   lib/python2.7/site-packages/sympy/polys/tests/test_euclidtools.pyt   test_dup_cancel  s.    
$0
$$$$$c          C   sv  t  d t  \ }  } } d | d d } | d d | d } d | d } | d } |  j | |  | | f k s| t  |  j | | d t d d | | f k sŹ t  |  j d d  d k sĘ t  |  j d d d t d k sî t  |  j | d  d k st  |  j | d d t d	 k s0t  |  j d |  d
 k sNt  |  j d | d t d k srt  d  S(   Ns   x,yi   i   RY   i    (   i    i    (   i   i   i    i    (   i   i    (   i   i   i   i    (   i    i   (   i   i   i    i   (   R    R   t
   dmp_cancelR   R[   (   R   R	   R.   R   R   R]   R^   (    (    sA   lib/python2.7/site-packages/sympy/polys/tests/test_euclidtools.pyt   test_dmp_cancelś  s    
$0$$N(%   t   __doc__t   sympy.polys.ringsR    t   sympy.polys.domainsR   R   R   t   sympy.core.compatibilityR   t   sympy.polys.specialpolysR   R   R   R   t   f_0t   f_1t   f_2t   f_3RP   RQ   RR   R   R   R   R   R&   R5   R7   R9   RA   RJ   RL   RN   RU   RX   Ra   Rc   (    (    (    sA   lib/python2.7/site-packages/sympy/polys/tests/test_euclidtools.pyt   <module>   s*   "	#				G	N									%