ó
¡¼™\c           @  s\  d  Z  d d l m Z m Z d d l m Z m Z m Z m Z m	 Z	 m
 Z
 d d l m Z m Z d d l m Z d d l m Z d d l m Z d d l m Z m Z m Z m Z d d	 l 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% d d l& m' Z' m( Z( d d l) m* Z* d d l+ m, Z, m- Z- e- d) e/ d „ ƒ Z0 e- d) e/ d „ ƒ Z1 e- d „  ƒ Z2 e- e! e/ d „ ƒ Z3 e- d d d „ ƒ Z4 d „  Z5 d „  Z6 d „  Z7 d „  Z8 d „  Z9 d „  Z: d d l; m< Z< d „  Z= d „  Z> d  „  Z? d! „  Z@ d" „  ZA d# „  ZB d$ „  ZC d% „  ZD d& „  ZE d' „  ZF d( „  ZG d) S(*   sI   Functions for generating interesting polynomials, e.g. for benchmarking. iÿÿÿÿ(   t   print_functiont   division(   t   Addt   Mult   Symbolt   sympifyt   Dummyt   symbols(   t   ranget   string_types(   t   S(   t   sqrt(   t	   nextprime(   t   dmp_add_termt   dmp_negt   dmp_mult   dmp_sqr(   t   dmp_zerot   dmp_onet
   dmp_groundt   dup_from_raw_dictt	   dmp_raiset
   dup_random(   t   ZZ(   t   dup_zz_cyclotomic_poly(   t   DMP(   t   Polyt   PurePoly(   t   _analyze_gens(   t   subsetst   publicc         C  si  d d l  m } |  d k r/ t d |  ƒ ‚ n  | d k	 rH t | ƒ n t d ƒ } |  d k rË d } t d ƒ g } x: t d |  d ƒ D]% } t | ƒ } | j	 t | ƒ ƒ q‰ W| t
 | Œ  | d | ƒS|  d k rè | d d } nj |  d k r| d	 d
 | d d } nA |  d k rR| d d | d d | d	 d | d d } n  | ret | | ƒ S| S(   s  Generates n-th Swinnerton-Dyer polynomial in `x`.

    Parameters
    ----------
    n : int
        `n` decides the order of polynomial
    x : optional
    polys : bool, optional
        ``polys=True`` returns an expression, otherwise
        (default) returns an expression.
    i   (   t   minimal_polynomiali    s5   can't generate Swinnerton-Dyer polynomial of order %st   xi   i   t   polysi   i
   i   i(   i   i`  iÀ  i@  N(   t   numberfieldsR   t
   ValueErrort   NoneR   R   R   R   R   t   appendR   R   (   t   nR    R!   R   t   pt   at   it   ex(    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   swinnerton_dyer_poly   s*    5c         C  sŠ   |  d k r t  d |  ƒ ‚ n  t t t |  ƒ t ƒ t ƒ } | d k	 r^ t j | | ƒ } n t j | t	 d ƒ ƒ } | r€ | S| j
 ƒ  S(   s  Generates cyclotomic polynomial of order `n` in `x`.

    Parameters
    ----------
    n : int
        `n` decides the order of polynomial
    x : optional
    polys : bool, optional
        ``polys=True`` returns an expression, otherwise
        (default) returns an expression.
    i    s0   can't generate cyclotomic polynomial of order %sR    N(   R#   R   R   t   intR   R$   R   t   newR   R   t   as_expr(   R&   R    R!   t   poly(    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   cyclotomic_polyB   s    c         O  s·   t  | ƒ } |  d k  s1 |  t | ƒ k s1 | rJ t d |  | f ƒ ‚ nF |  s\ t j } n4 t g  t | t |  ƒ ƒ D] } t | Œ  ^ qu Œ  } | j	 d t
 ƒ s¦ | St | | Œ Sd S(   s   Generates symmetric polynomial of order `n`.

    Returns a Poly object when ``polys=True``, otherwise
    (default) returns an expression.
    i    s6   can't generate symmetric polynomial of order %s for %sR!   N(   R   t   lenR#   R
   t   OneR   R   R,   R   t   gett   FalseR   (   R&   t   genst   argsR/   t   s(    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   symmetric_poly]   s    %4c         C  s8   t  t | | | | ƒ |  d | ƒ} | r. | S| j ƒ  S(   s\  Generates a polynomial of degree ``n`` with coefficients in
    ``[inf, sup]``.

    Parameters
    ----------
    x
        `x` is the independent term of polynomial
    n : int
        `n` decides the order of polynomial
    inf
        Lower limit of range in which coefficients lie
    sup
        Upper limit of range in which coefficients lie
    domain : optional
         Decides what ring the coefficients are supposed
         to belong. Default is set to Integers.
    polys : bool, optional
        ``polys=True`` returns an expression, otherwise
        (default) returns an expression.
    t   domain(   R   R   R.   (   R    R&   t   inft   supR9   R!   R/   (    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   random_polyt   s    $R    t   yc         C  s   t  | t ƒ r( t d | |  f ƒ } n  t  | t ƒ rP t d | |  f ƒ } n  g  } t g  | D] } | | ^ q` Œ  } xt t |  ƒ D]f } | | | | } t g  t |  ƒ D]$ }	 | |	 k r® | | | |	 ^ q® Œ  }
 | j | |
 ƒ q† Wt g  t | | ƒ D] \ } } | | ^ qŒ  S(   sC   Construct Lagrange interpolating polynomial for ``n`` data points. s   %s:%s(   t
   isinstanceR	   R   R   R   R%   R   t   zip(   R&   R    t   Xt   Yt   coeffst   ut   numertR)   t   numert   jt   denomt   coeffR=   (    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   interpolating_poly   s    #=c         C  s  g  t  |  d ƒ D] } t d t | ƒ ƒ ^ q } | d | d } } | t g  | d D] } | ^ qY Œ  } | d t g  | d D] } | d ^ q„ Œ  } | d | d j | Œ  } | d d | | d | d d j | Œ  }	 t d | Œ }
 | |	 |
 f S(   s%   Fateman's GCD benchmark: trivial GCD i   t   y_i    i   iýÿÿÿ(   R   R   t   strR   t   as_polyR   (   R&   R)   RA   t   y_0t   y_1R=   RC   t   vt   Ft   Gt   H(    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   fateman_poly_F_1£   s    3'//c         C  sµ  | d ƒ | d ƒ g } x) t  |  ƒ D] } t | | ƒ | g } q% W| d ƒ | d ƒ | d ƒ g } x5 t  d |  ƒ D]$ } t | | ƒ t | ƒ | g } qu W|  d } t | t | d ƒ | ƒ d |  | ƒ } t | t | d ƒ | ƒ d |  | ƒ } | d ƒ | d ƒ g g  | d ƒ | d ƒ | d ƒ g g } t | t | d ƒ | ƒ d |  | ƒ }	 t | | d | ƒ }
 t | | |  | ƒ } t |	 |
 |  | ƒ } t |  | ƒ } | | | f S(   s%   Fateman's GCD benchmark: trivial GCD i   i    i   i   (   R   R   R   R   R   R   R   (   R&   t   KRC   R)   RO   t   mt   Ut   Vt   ft   WRA   RP   RQ   RR   (    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   dmp_fateman_poly_F_1´   s     !"
''>'c   	      C  sÆ   g  t  |  d ƒ D] } t d t | ƒ ƒ ^ q } | d } t g  | d D] } | ^ qK Œ  } t | | d d | Œ } t | | d d | Œ } t | | d d | Œ } | | | | | f S(   s7   Fateman's GCD benchmark: linearly dense quartic inputs i   RJ   i    i   (   R   R   RK   R   R   (	   R&   R)   RA   RM   R=   RC   RR   RP   RQ   (    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   fateman_poly_F_2Ò   s    3
#c   	      C  s<  | d ƒ | d ƒ g } x- t  |  d ƒ D] } t | | ƒ | g } q) W|  d } t | t | d ƒ | d ƒ d |  | ƒ } t t | | ƒ t | | | ƒ g |  | ƒ } t t | | ƒ | g |  | ƒ } t | t | d | ƒ d |  | ƒ } t t | | ƒ | g |  | ƒ } t | | |  | ƒ t | | |  | ƒ | f S(   s7   Fateman's GCD benchmark: linearly dense quartic inputs i   i    i   (   R   R   R   R   R   R   R   (	   R&   RT   RC   R)   RU   RO   RX   t   gt   h(    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   dmp_fateman_poly_F_2â   s    
+-!%!c   	      C  sæ   g  t  |  d ƒ D] } t d t | ƒ ƒ ^ q } | d } t g  | d D] } | |  d ^ qK Œ  } t | |  d | d d | Œ } t | |  d | d d | Œ } t | |  d | d d | Œ } | | | | | f S(   s8   Fateman's GCD benchmark: sparse inputs (deg f ~ vars f) i   RJ   i    i   (   R   R   RK   R   R   (	   R&   R)   RA   RM   R=   RC   RR   RP   RQ   (    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   fateman_poly_F_3÷   s    3
+###c         C  sž  t  i | j |  d 6| ƒ } xG t d |  d ƒ D]2 } t | g t | | ƒ |  d | d | ƒ } q1 Wt | t | d ƒ |  d ƒ d |  | ƒ } t t t | |  d | ƒ g t |  d | ƒ |  d |  | ƒ |  | ƒ } t t | g t |  d | ƒ |  d |  | ƒ |  | ƒ } t | t |  d | ƒ d |  d | ƒ } t t | g t |  d | ƒ |  d |  | ƒ |  | ƒ } t | | |  | ƒ t | | |  | ƒ | f S(   s8   Fateman's GCD benchmark: sparse inputs (deg f ~ vars f) i   i    i   (	   R   t   oneR   R   R   R   R   R   R   (   R&   RT   RC   R)   RO   RX   R\   R]   (    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   dmp_fateman_poly_F_3  s    0+E8)8(   t   ringc          C  s·   t  d t ƒ \ }  } } } | d | | d d | d | | d | d | d | d d | d | d | d d | d | d | d | | d d | | | d S(   Ns   x,y,zi   i   i   i   i   i   (   Rb   R   (   t   RR    R=   t   z(    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   _f_0  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 | | d | | | d d | | | d | | | d | | d | | d d | | d	 | | d | d d | d | d | | d d
 | | d | d | d S(   Ns   x,y,zi   i   i   i   i
   ib  iæ   i,  i@  iÈ   iX  ip  (   Rb   R   (   Rc   R    R=   Rd   (    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   _f_1"  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 | d | d | d | d d | d | d | | d | d | d S(   Ns   x,y,zi   i   i   iZ   i   iÞ  (   Rb   R   (   Rc   R    R=   Rd   (    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   _f_2&  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 | | d | | | d | | | d | | | d | d | | | d S(   Ns   x,y,zi   i   i   i   i   (   Rb   R   (   Rc   R    R=   Rd   (    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   _f_3*  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 | 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 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 | d | d | | d | d	 d | | d | d
 d | | d | d
 d | | d | d | d
 | d d | d
 | d	 d | d	 d | d
 S(   Ns   x,y,zi	   i   i   i   i   i   i   i   i   i   i   (   Rb   R   (   Rc   R    R=   Rd   (    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   _f_4.  s    c          C  s¤   t  d t ƒ \ }  } } } | d d | d | d | d | d | | d d | | | d | | d | d d | d | d | | d | d S(   Ns   x,y,zi   i   i   (   Rb   R   (   Rc   R    R=   Rd   (    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   _f_52  s    c          C  sJ  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 | d | d d | | d S(   Ns   x,y,z,tiC  i   i-   i   i   i§  i/   i   i^   i	   i   (   Rb   R   (   Rc   R    R=   Rd   t   t(    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   _f_66  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 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 | 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 | 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 | | d S(
   Ns   x,y,zi   i   i   i   i   i   i   i	   (   Rb   R   (   Rc   R    R=   Rd   (    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   _w_1:  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 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 S(   Ns   x,yi   i   i   i0   i   i   i   iH   i   i   i   i   i$  (   Rb   R   (   Rc   R    R=   (    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   _w_2>  s    c           C  s.   t  ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  f S(   N(   Re   Rf   Rg   Rh   Ri   Rj   Rl   (    (    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   f_polysB  s    c           C  s   t  ƒ  t ƒ  f S(   N(   Rm   Rn   (    (    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   w_polysE  s    N(H   t   __doc__t
   __future__R    R   t
   sympy.coreR   R   R   R   R   R   t   sympy.core.compatibilityR   R	   t   sympy.core.singletonR
   t(   sympy.functions.elementary.miscellaneousR   t   sympy.ntheoryR   t   sympy.polys.densearithR   R   R   R   t   sympy.polys.densebasicR   R   R   R   R   R   t   sympy.polys.domainsR   t   sympy.polys.factortoolsR   t   sympy.polys.polyclassesR   t   sympy.polys.polytoolsR   R   t   sympy.polys.polyutilsR   t   sympy.utilitiesR   R   R$   R4   R+   R0   R8   R<   RI   RS   RZ   R[   R^   R_   Ra   t   sympy.polys.ringsRb   Re   Rf   Rg   Rh   Ri   Rj   Rl   Rm   Rn   Ro   Rp   (    (    (    s7   lib/python2.7/site-packages/sympy/polys/specialpolys.pyt   <module>   sR   .".(																