ó
<Zc           @   so   d  d l  m Z d  d l  m Z e j j Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 S(   iÿÿÿÿ(   t   mp(   t   libmpc    	   	   C   sp  d t  _ t  j t  j ƒ }  t  j d t  j ƒ ¤ t  j d d d d ƒ } g  d d } } } xp | t  j | | 7} | d 7} | j | ƒ | j	 | ƒ \ } } | |  k  r² Pn  | d	 k ra t
 d
 ƒ ‚ qa qa WWd  QXt  j d t  j |  ƒ ƒ }  t | t  j d d ƒ } | |  k  s t ‚ t  j d „  d t  j g d d d d ƒ} t | | ƒ } | |  k  slt ‚ d  S(   Ni   i   t   methodt   levint   variantt   ui    i   iè  s   iteration limit exceededgÍÌÌÌÌÌì?i   c         S   s   d |  |  S(   Ni   (    (   t   n(    (    s6   lib/python2.7/site-packages/mpmath/tests/test_levin.pyt   <lambda>   s    t   levin_variant(   R    t   dpst   mpft   epst	   extraprect   precR   t   onet   appendt   update_psumt   RuntimeErrort   expt   logt   abst   pit   AssertionErrort   nsumt   inf(	   R   t   Lt   St   sR   t   vt   et   errt   w(    (    s6   lib/python2.7/site-packages/mpmath/tests/test_levin.pyt   test_levin_0   s(    	
 *c    	   	   C   se  d t  _ t  j t  j ƒ }  t  j d t  j ƒ › t  j d d d d ƒ } g  d } } xn t  j | ƒ d } | d 7} | j | ƒ | j | ƒ \ } } | |  k  r© Pn  | d	 k rZ t	 d
 ƒ ‚ qZ qZ WWd  QXt  j
 d t  j |  ƒ ƒ }  t | t  j d ƒ ƒ } | |  k  st ‚ t  j d „  d t  j g d d d d ƒ} t | | ƒ } | |  k  sat ‚ d  S(   Ni   i   R   R   R   R   i   y              @iè  s   iteration limit exceededgÍÌÌÌÌÌì?iþÿÿÿc         S   s   |  d S(   Ni   y              @y       @      @(    (   R   (    (    s6   lib/python2.7/site-packages/mpmath/tests/test_levin.pyR   3   s    R   y       @      @y       À      À(   R    R	   R
   R   R   R   R   R   t   updateR   R   R   R   t   zetaR   R   R   (	   R   R   t   AR   R   R   R   R   R   (    (    s6   lib/python2.7/site-packages/mpmath/tests/test_levin.pyt   test_levin_1"   s(    	
 *c    	   	      s~  d t  _ t  j d ƒ ‰  t  j t  j ƒ }  t  j d t  j ƒ ” t  j d d d d ƒ } d } xn d	 | t  j | ƒ ˆ  | } | j | ƒ \ } } | d
 7} | |  k  r± Pn  | d k rb t	 d ƒ ‚ qb qb WWd  QXt  j
 d t  j |  ƒ ƒ }  t  j ‡  f d †  d t  j g ƒ } t | | ƒ } | |  k  s8t ‚ t  j ‡  f d †  d t  j g d d d d ƒ} | |  k  szt ‚ d  S(   Ni   i
   i   R   t   sidiR   t   ti    iÿÿÿÿi   iè  s   iteration limit exceededgÍÌÌÌÌÌì?c            s   t  j |  ƒ d |  ˆ  S(   Ni   (   R    R   (   t   x(   t   z(    s6   lib/python2.7/site-packages/mpmath/tests/test_levin.pyR   G   s    c            s   d |  t  j |  ƒ ˆ  |  S(   Niÿÿÿÿ(   R    t   fac(   R   (   R(   (    s6   lib/python2.7/site-packages/mpmath/tests/test_levin.pyR   L   s    R   (   R    R	   R
   R   R   R   R   R)   t   stepR   R   R   t   quadR   R   R   R   (	   R   R   R   R   R   R   t   exactR   R   (    (   R(   s6   lib/python2.7/site-packages/mpmath/tests/test_levin.pyt   test_levin_27   s(    	 
 $0c    
         s  d t  _ t  j d ƒ ‰  t  j t  j ƒ }  t  j d t  j ƒ À t  j d d d d ƒ } d \ } } x” | ˆ  | t  j d	 | ƒ t  j | ƒ t  j d | ƒ d	 | 7} | d
 7} | j | ƒ \ } } | |  k  rÝ Pn  | d k rh t	 d ƒ ‚ qh qh WWd  QXt  j
 d t  j |  ƒ ƒ }  t  j ‡  f d †  d t  j g ƒ d t  j d t  j ƒ } t | | ƒ } | |  k  s|t ‚ t  j ‡  f d †  d t  j g d d d d d d t  j d d g g  t d ƒ D] } d
 ^ qÉƒ}	 t | |	 ƒ } | |  k  st ‚ d  S(   Ni   i   i   R   R   R   R&   i    i   i   iè  s   iteration limit exceededgš™™™™™é?c            s"   t  j |  |  d ˆ  |  d ƒ S(   Ni   i   (   R    R   (   R'   (   R(   (    s6   lib/python2.7/site-packages/mpmath/tests/test_levin.pyR   ^   s    c            s@   ˆ  |  t  j d |  ƒ t  j |  ƒ t  j d |  ƒ d |  S(   Ni   i   (   R    R)   (   R   (   R(   (    s6   lib/python2.7/site-packages/mpmath/tests/test_levin.pyR   c   s    R   t   workpreci   t   steps(   i    i    (   R    R	   R
   R   R   R   R   R)   t	   step_psumR   R   R   R+   R   t   sqrtR   R   R   R   t   xrange(
   R   R   R   R   R   R   R,   R   R'   R   (    (   R(   s6   lib/python2.7/site-packages/mpmath/tests/test_levin.pyt   test_levin_3O   s*    	F
 <cc       
      s¢  d t  _ t  j t  j ƒ i t  j d ƒ d ‰  t  j ‡  f d †  d t  j g d d ƒd ˆ  }  t |  t  j ƒ d k  s€ t	 ‚ Wd  QXt  j
 d	 t  j t  j ƒ ƒ } t  j d
 „  d t  j g d d ƒ}  t |  t  j d ƒ ƒ | k  sî t	 ‚ d ‰  ‡  f d †  } t  j | d t  j g d d d g  t d ƒ D] } d ^ q.ƒ} t  j d t  j d ƒ d t  j d ƒ d t  j d ƒ ˆ  ƒ } t | | ƒ | k  sžt	 ‚ d  S(   Ni   i
   iöÿÿÿc            s   |  d ˆ  S(   Ni   (    (   R   (   R(   (    s6   lib/python2.7/site-packages/mpmath/tests/test_levin.pyR   l   s    i   R   t   lg»½×Ùß|Û=gš™™™™™é?c         S   s   d |  d |  S(   Niÿÿÿÿi   (    (   R   (    (    s6   lib/python2.7/site-packages/mpmath/tests/test_levin.pyR   q   s    R%   i   y              ð?c            sl   t  j d t  j d ƒ |  ƒ t  j d t  j d ƒ |  ƒ ˆ  |  t  j d t  j d ƒ |  ƒ t  j |  ƒ S(   Ni   i   i   i   (   R    t   rfR
   R)   (   R   (   R(   (    s6   lib/python2.7/site-packages/mpmath/tests/test_levin.pyR   u   s    i    R   R/   iè  i   i   y       @      ð?(   R    R	   R   R   R
   R   R   R   t   eulerR   R   R   R   R2   t   hyp2f1(   t   aR   t   fR'   R   R,   (    (   R(   s6   lib/python2.7/site-packages/mpmath/tests/test_levin.pyt   test_levin_nsumg   s    	2%$%@?c          C   sø   d t  _ t  j ƒ  }  g  d d } } } x| | d | t  j | | 7} | d 7} | j | ƒ |  j | ƒ \ } } | t  j k  r‰ Pn  | d k r, t d ƒ ‚ q, q, Wt  j d t  j	 t  j ƒ ƒ } t
 | t  j d d	 ƒ } | | k  sô t ‚ d  S(
   Ni   i    i   iÿÿÿÿiè  s   iteration limit exceededgÍÌÌÌÌÌì?i   i   (   R    R	   t	   cohen_altR   R   R   R   R   R   R   R   R   R   (   t   ACR   R   R   R   R   R   R   (    (    s6   lib/python2.7/site-packages/mpmath/tests/test_levin.pyt   test_cohen_alt_0z   s    	
 c          C   sù   d t  _ g  }  t  j ƒ  } d } x  |  j t  j d t  j d | d ƒ ƒ |  j t  j d t  j d | ƒ ƒ | d 7} | j |  ƒ \ } } | t  j k  r¥ Pn  | d k r$ t d ƒ ‚ q$ q$ Wt  j	 | ƒ } t
 | d ƒ } | d k  sõ t ‚ d  S(   Ni   i   i   iè  s   iteration limit exceededgƒ­ò‘þð?gê-™—q=(   R    R	   R;   R   t   loggammaR   R!   R   R   R   R   R   (   R#   R<   R   R   R   R   (    (    s6   lib/python2.7/site-packages/mpmath/tests/test_levin.pyt   test_cohen_alt_1Š   s     	)&
 N(   t   mpmathR    R   t   backendR2   R    R$   R-   R3   R:   R=   R?   (    (    (    s6   lib/python2.7/site-packages/mpmath/tests/test_levin.pyt   <module>   s   						