ó
î&]\c           @` sè  d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 m
 Z
 d  d l Z d  d l m Z d  d l m Z y d  d l Z Wn e k
 r« n Xd e f d „  ƒ  YZ d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z d „  Z y. d  d l Z d  d l Z d e  e ƒ k Z! Wn e k
 r—e" Z! n Xd e# f d „  ƒ  YZ$ d e j% e& d „ Z' d „  Z( d „  Z) d  d d „ Z* d S(   i    (   t   divisiont   print_functiont   absolute_importN(   t   assert_(   t   reraise(   t   assert_func_equalt   Argc           B` s<   e  Z d  Z e j e j e e d „ Z d „  Z d „  Z RS(   s‚   Generate a set of numbers on the real axis, concentrating on
    'interesting' regions and covering all orders of magnitude.

    c         C` s–   | | k r t  d ƒ ‚ n  | t j k rD d t j t ƒ j } n  | t j k rl d t j t ƒ j } n  | | |  _ |  _ | | |  _ |  _	 d  S(   Ns#   a should be less than or equal to bg      à¿g      à?(
   t
   ValueErrort   npt   inft   finfot   floatt   maxt   at   bt   inclusive_at   inclusive_b(   t   selfR   R   R   R   (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   __init__   s    c         C` s{  | d k  r t  d ƒ ‚ n  | d d k r> | d } | } n | d } | d } | d k rˆ t j t j | ƒ t j | ƒ | ƒ } næ| d k r¸ | d k  r¸ t j | | | ƒ } n¶| d k rt j | d | d t ƒ} t j d t j | ƒ | ƒ } t j | | f ƒ } nY| d k r | d k r t j d | | ƒ } | j d k rgt j | d ƒ }	 n d }	 t j d |	 | d t ƒ} t j | | f ƒ } nÎ | d d k rÃ| d }
 |
 } n | d }
 |
 d } t j d d | d t ƒ} | j d k rt j | d ƒ }	 n d }	 t j d |	 |
 d t ƒ} t j d t j | ƒ | ƒ } t j | | | f ƒ } t j | ƒ S(   Ni    s   a should be positivei   i   i
   t   endpointiâÿÿÿ(	   R   R   t   logspacet   log10t   linspacet   Falset   hstackt   sizet   sort(   R   R   R   t   nt   nlogptst   nlinptst   ptst   linptst   logptst   rightt   nlogpts1t   nlogpts2t   logpts1t   logpts2(    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   _positive_values)   sF    
	

*
	

c   	      C` sr  |  j  |  j } } | | k r, t j | ƒ S|  j sB | d 7} n  |  j sX | d 7} n  | d d k r{ | d } | } n | d } | d } | d k r¹ |  j | | | ƒ } g  } ng | d k ræ g  } |  j | | | ƒ } n: |  j d | | ƒ } |  j d | | d ƒ } | d } t j | d d d … | f ƒ } |  j sX| d } n  |  j sn| d  } n  | S(   s%   Return an array containing n numbers.i   i   i    Niÿÿÿÿ(   R   R   R   t   zerosR   R   R&   R   (	   R   R   R   R   t   n1t   n2t   posptst   negptsR   (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   valuesa   s6    		
	

	
"		(	   t   __name__t
   __module__t   __doc__R   R	   t   TrueR   R&   R,   (    (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR      s   	8t   FixedArgc           B` s   e  Z d  „  Z d „  Z RS(   c         C` s   t  j | ƒ |  _ d  S(   N(   R   t   asarrayt   _values(   R   R,   (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR   ˆ   s    c         C` s   |  j  S(   N(   R3   (   R   R   (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR,   ‹   s    (   R-   R.   R   R,   (    (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR1   ‡   s   	t
   ComplexArgc           B` s@   e  Z e e j e j ƒ e e j e j ƒ d  „ Z d „  Z RS(   c         C` s4   t  | j | j ƒ |  _ t  | j | j ƒ |  _ d  S(   N(   R   t   realt   imag(   R   R   R   (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR      s    c         C` sx   t  t j t j | ƒ ƒ ƒ } |  j j | ƒ } |  j j | d ƒ } | d  d  … d  f d | d  d  d  … f j ƒ  S(   Ni   y              ð?(	   t   intR   t   floort   sqrtR5   R,   R6   t   Nonet   ravel(   R   R   t   mt   xt   y(    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR,   ”   s    (   R-   R.   t   complexR   R	   R   R,   (    (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR4      s   /t   IntArgc           B` s    e  Z d  d d „ Z d „  Z RS(   iüÿÿiè  c         C` s   | |  _  | |  _ d  S(   N(   R   R   (   R   R   R   (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR   œ   s    	c         C` sŽ   t  |  j |  j ƒ j t d | d | d ƒ ƒ j t ƒ } t j d d ƒ } t j	 t j
 | | f ƒ } | | |  j k | |  j k  @} | S(   Ni   i   i   iûÿÿÿ(   R   R   R   R,   R   t   astypeR7   R   t   aranget   uniquet   r_(   R   R   t   v1t   v2t   v(    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR,       s
    < (   R-   R.   R   R,   (    (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR@   ›   s   c         C` sõ   t  |  t j ƒ r! |  j ƒ  } nÐ t |  ƒ } t j g  |  D]! } t  | t ƒ rU d n d ^ q: ƒ } | | t | ƒ j t	 ƒ d } g  } x3 t
 |  | ƒ D]" \ } } | j | j | ƒ ƒ q› Wt j t j t j | Œ  Œ  ƒ j | d ƒ j } | S(   Ng      ø?g      ð?i   iÿÿÿÿ(   t
   isinstanceR   t   ndarrayt   copyt   lenR2   R4   t   sumRA   R7   t   zipt   appendR,   t   arrayt   broadcast_arrayst   ix_t   reshapet   T(   t   argspecR   t   argst   nargst   spect   msR<   (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   get_args¨   s    7!0t
   MpmathDatac           B` sA   e  Z d d d d d  d e e e d d „
 Z d „  Z d „  Z RS(   gH¯¼šò×z>gYóøÂn¥c         C` s  | d  k rZ y t t j j d d ƒ ƒ } Wn t k
 rD t } n X| rQ d n d } n  | |  _ | |  _ | |  _	 | |  _
 | |  _ | |  _ | |  _ |	 |  _ |
 |  _ | |  _ t |  j	 t j ƒ rê t j |  j	 j t j ƒ |  _ n. t g  |  j	 D] } t | t ƒ ^ q÷ ƒ |  _ |
 |  _ | |  _ | s=| d k rRt | d d  ƒ } n  | se| d k rzt | d d  ƒ } n  | |  _ | |  _ d  S(   Nt   SCIPY_XSLOWt   0iˆ  iô  s   <lambda>R-   (   R:   R7   t   ost   environt   getR   R   t
   scipy_funct   mpmath_funct   arg_spect   dpst   precR   t   rtolt   atolt   ignore_inf_signt   nan_okRH   R   RI   t
   issubdtypet   dtypet   complexfloatingt
   is_complext   anyR4   t   distinguish_nan_and_inft   getattrt   namet   param_filter(   R   R`   Ra   Rb   Rp   Rc   Rd   R   Re   Rf   Rg   Rn   Rh   Rq   t   is_xslowt   arg(    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR   ¹   s6    
										!.			c         ` s°  t  j j d ƒ t ˆ j ˆ j ƒ } t j j t j j	 } } zQˆ j d  k	 r_ ˆ j g } n	 d g } ˆ j	 d  k	 r‰ ˆ j	 t j _	 n  t  j | j t  j ƒ r³ t ‰ d „  ‰  n d „  ‰  d „  ‰ xÆ t | ƒ D]¸ \ } } | t j _ yc t ˆ j ‡  ‡ ‡ f d †  | d t d ˆ j d	 ˆ j d
 ˆ j d ˆ j d ˆ j d ˆ j ƒPWqÒ t k
 r‰| t | ƒ d k rŠt t j ƒ  Œ  qŠqÒ XqÒ WWd  | | t j _ t j _	 Xd  S(   NiÒ  i   c         S` s   t  j t |  ƒ ƒ S(   N(   t   mpmatht   mpcR?   (   R=   (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   mptypeö   s    c         S` s   t  j t |  ƒ ƒ S(   N(   Rt   t   mpfR   (   R=   (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyRv   ù   s    c         S` s>   t  |  j ƒ d d t  |  j ƒ k r- t j St |  j ƒ Sd  S(   Ng¼‰Ø—²Òœ<i   (   t   absR6   R5   R   t   nant	   mpf2float(   R=   (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   pytypeü   s    &c          ` s   ˆ ˆ j  t ˆ  |  ƒ Œ  ƒ S(   N(   Ra   t   map(   R   (   Rv   R{   R   (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   <lambda>  s    t
   vectorizedRe   Rf   Rg   Rn   Rh   Rq   i   (   R   t   randomt   seedRY   Rb   R   Rt   t   mpRc   Rd   R:   Ri   Rj   Rk   t   mpc2complext	   enumerateR   R`   R   Re   Rf   Rg   Rn   Rh   Rq   t   AssertionErrorRK   R   t   syst   exc_info(   R   t   argarrt   old_dpst   old_prect   dps_listt   jRc   (    (   Rv   R{   R   s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   checkà   s>    							
c         C` s)   |  j  r d |  j f Sd |  j f Sd  S(   Ns   <MpmathData: %s (complex)>s   <MpmathData: %s>(   Rl   Rp   (   R   (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   __repr__  s    	N(   R-   R.   R:   R   R0   R   RŒ   R   (    (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyRZ   ¸   s   $	7c          O` s   t  |  | Ž  } | j ƒ  d  S(   N(   RZ   RŒ   (   R   t   kwt   d(    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   assert_mpmath_equal  s    c         C` s   t  j j d d ƒ |  ƒ S(   Nt   reasons8       Test not yet functional (too slow), needs more work.(   t   pytestt   markt   skip(   t   func(    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   nonfunctional_tooslow#  s    c         C` s"   t  t j |  d d d d d ƒƒ S(   sá   
    Convert an mpf to the nearest floating point number. Just using
    float directly doesn't work because of results like this:

    with mp.workdps(50):
        float(mpf("0.99999999999999999")) = 0.9999999999999999

    i   t	   min_fixedi    t	   max_fixed(   R   Rt   t   nstr(   R=   (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyRz   +  s    	c         C` s   t  t |  j ƒ t |  j ƒ ƒ S(   N(   R?   Rz   R5   R6   (   R=   (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR‚   7  s    c         ` s   d „  ‰ ‡  ‡ f d †  } | S(   Nc         S` s*   t  |  t j ƒ r t |  ƒ St |  ƒ Sd  S(   N(   RH   Rt   Ru   R?   R   (   R=   (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   tofloat<  s    
c          ` s   t  j j d t t ˆ |  ƒ ƒ f ƒ t  j j ƒ  z' ˆ  |  | Ž  } t  j j d | ƒ Wd  t  j j d ƒ t  j j ƒ  X| S(   Ns   %r: s   -> %rs   
(   R…   t   stderrt   writet   tupleR|   t   flush(   R   RŽ   t   r(   R•   Rš   (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   wrapB  s    &(    (   R•   R    (    (   R•   Rš   s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt
   trace_args;  s    	
t	   setitimert   TimeoutErrorc           B` s   e  Z RS(    (   R-   R.   (    (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR£   W  s   g      à?c         ` sC   t  r- | r- d „  ‰ ‡  ‡ ‡ f d †  } n ‡  ‡ f d †  } | S(   s  
    Decorator for setting a timeout for pure-Python functions.

    If the function does not return within `timeout` seconds, the
    value `return_val` is returned instead.

    On POSIX this uses SIGALRM by default. On non-POSIX, settrace is
    used. Do not use this with threads: the SIGALRM implementation
    does probably not work well. The settrace implementation only
    traces the current thread.

    The settrace implementation slows down execution speed. Slowdown
    by a factor around 10 is probably typical.
    c         S` s   t  ƒ  ‚ d  S(   N(   R£   (   t   signumt   frame(    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   sigalrm_handlerk  s    c         ` s   ‡  ‡ ‡ ‡ f d †  } | S(   Nc          ` s€   t  j  t  j ˆ ƒ } t  j t  j ˆ ƒ z* y ˆ  |  | Ž  SWn t k
 rP ˆ SXWd  t  j t  j d ƒ t  j  t  j | ƒ Xd  S(   Ni    (   t   signalt   SIGALRMR¢   t   ITIMER_REALR£   (   R   RŽ   t   old_handler(   R•   t
   return_valR¦   t   timeout(    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR    o  s     	(    (   R•   R    (   R«   R¦   R¬   (   R•   s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   decon  s    
c         ` s   ‡  ‡ ‡ f d †  } | S(   Nc          ` sz   t  j  ƒ  ‰  ‡  ‡ ‡ f d †  ‰ t j ˆ ƒ z7 y ˆ |  | Ž  SWn t k
 rc t j d  ƒ ˆ SXWd  t j d  ƒ Xd  S(   Nc         ` s&   t  j  ƒ  ˆ  ˆ k r" t ƒ  ‚ n  ˆ S(   N(   t   timeR£   (   R¥   t   eventRs   (   t
   start_timeR¬   t   trace(    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR±     s    (   R®   R…   t   settraceR£   R:   (   R   RŽ   (   R•   R«   R¬   (   R°   R±   s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR    |  s     	(    (   R•   R    (   R«   R¬   (   R•   s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR­   {  s    (   t   POSIX(   R¬   R«   t   use_sigalrmR­   (    (   R«   R¦   R¬   s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   time_limited[  s
    	c         ` s   ‡  f d †  } | S(   s9   Decorate function to return nan if it raises an exceptionc          ` s-   y ˆ  |  | Ž  SWn t  k
 r( t j SXd  S(   N(   t	   ExceptionR   Ry   (   R   RŽ   (   R•   (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR    ‘  s    (    (   R•   R    (    (   R•   s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   exception_to_nan  s    c         ` s   ‡  f d †  } | S(   s1   Decorate function to return nan if it returns infc          ` s)   ˆ  |  | Ž  } t  j | ƒ s% t  j S| S(   N(   R   t   isfiniteRy   (   R   RŽ   RG   (   R•   (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyR    ›  s    (    (   R•   R    (    (   R•   s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt
   inf_to_nan™  s    g—ÔFFõg<c         C` sÿ  y t  |  ƒ Wn t k
 r- t |  ƒ }  n Xt  | ƒ } t  |  ƒ | k r[ t d ƒ ‚ n  g  } xs t | ƒ D]e } y> t t j |  | | | ƒ | | t j | | ƒ k ƒ Wqn t k
 rÒ | j | ƒ qn Xqn Wt	 t
 t j | ƒ ƒ ƒ } d g } | j d j t  | ƒ | ƒ ƒ x¿ | D]· } t j |  | | d d d d ƒ}	 t j | | | d d d d ƒ}
 | | d k r„d } n5 t j |  | | | | | ƒ } t j | d ƒ } | j d	 j | |	 |
 | ƒ ƒ q!W| rût t d
 j | ƒ ƒ n  d S(   s}   
    Compare lists of mpmath.mpf's or mpmath.mpc's directly so that it
    can be done to higher precision than double.

    s   Lengths of inputs not equal.t    s4   Bad results ({} out of {}) for the following points:R—   i    R˜   R	   i   s   {}: {} != {} (rdiff {})s   
N(   RK   t	   TypeErrort   listR„   t   rangeR   Rt   t   fabsRN   R7   Rx   R   R   t   formatR™   R   t   join(   t   rest   stdRf   Re   R   t   failurest   kt   ndigitst   msgt   resrept   stdrept   rdiff(    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   mp_assert_allclose£  s6    >	""	##(+   t
   __future__R    R   R   R]   R…   R®   t   numpyR   t   numpy.testingR   R’   t   scipy._lib.sixR   t   scipy.special._testutilsR   Rt   t   ImportErrort   objectR   R1   R4   R@   RY   RZ   R   R–   Rz   R‚   R¡   t   posixR§   t   dirR³   R   R¶   R£   Ry   R0   Rµ   R·   R¹   RÊ   (    (    (    s9   lib/python2.7/site-packages/scipy/special/_mptestutils.pyt   <module>   sD   o	f					
4	
	
