ó
Ê½÷Xc        
   @` s  d  d l  m Z m Z m Z d  d l Z d  d l m Z d  d l Z d  d l	 m
 Z
 m Z d  d l m Z d  d l j Z d d d d	 g Z d
 e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ d „  Z d d  d e d „ Z d d d d e d e e e d „	 Z d	 e f d „  ƒ  YZ d S(   i    (   t   divisiont   print_functiont   absolute_importN(   t   LooseVersion(   t   dect   assert_(   t   KnownFailureTestt   with_special_errorst   assert_tol_equalt   assert_func_equalt   FuncDatat   MissingModulec           B` s   e  Z d  „  Z RS(   c         C` s   | |  _  d  S(   N(   t   name(   t   selfR   (    (    s7   /tmp/pip-build-7oUkmx/scipy/scipy/special/_testutils.pyt   __init__   s    (   t   __name__t
   __module__R   (    (    (    s7   /tmp/pip-build-7oUkmx/scipy/scipy/special/_testutils.pyR      s   c         C` sb   t  |  ƒ t k r. t j t d j |  j ƒ ƒ St j t |  j ƒ t | ƒ k  d j |  j	 | ƒ ƒ S(   Ns   {} is not installeds   {} version >= {} required(
   t   typeR   R   t   skipift   Truet   formatR   R   t   __version__R   (   t   modulet   min_ver(    (    s7   /tmp/pip-build-7oUkmx/scipy/scipy/special/_testutils.pyt   check_version   s    t   DecoratorMetac           B` s   e  Z d  Z d „  Z RS(   s:   Metaclass which decorates test_* methods given decorators.c   	      C` s«   | j  d g  ƒ } x€ t | j ƒ  ƒ D]l \ } } | j d ƒ r% xA | D]9 \ } } | d  k	 rt | | Œ  | ƒ } qG | | ƒ } qG W| | | <q% q% Wt j |  | | | ƒ S(   Nt
   decoratorst   test_(   t   popt   listt   itemst
   startswitht   NoneR   t   __new__(	   t   clst   cls_namet   basest   dctR   R   t   itemt   decot   decoargs(    (    s7   /tmp/pip-build-7oUkmx/scipy/scipy/special/_testutils.pyR!   '   s    (   R   R   t   __doc__R!   (    (    (    s7   /tmp/pip-build-7oUkmx/scipy/scipy/special/_testutils.pyR   %   s   c         ` s+   ‡  f d †  } ˆ  j  | _  ˆ  j | _ | S(   sc   
    Enable special function errors (such as underflow, overflow,
    loss of precision, etc.)
    c          ` s,   t  j d d ƒ  ˆ  |  | Ž  } Wd  QX| S(   Nt   allt   raise(   t   sct   errstate(   t   at   kwt   res(   t   func(    s7   /tmp/pip-build-7oUkmx/scipy/scipy/special/_testutils.pyt   wrapper=   s    (   R   R)   (   R1   R2   (    (   R1   s7   /tmp/pip-build-7oUkmx/scipy/scipy/special/_testutils.pyR   8   s    gH¯¼šò×z>t    c      
   ` sv   ‡  ‡ f d †  } t  j |  ƒ t  j | ƒ }  } d ˆ ˆ  f } t  j j j | |  | d t | ƒ d | d | ƒd S(   sE   Assert that `a` and `b` are equal to tolerance ``atol + rtol*abs(b)``c         ` s   t  j |  | d ˆ d ˆ  ƒS(   Nt   rtolt   atol(   t   npt   allclose(   t   xt   y(   R5   R4   (    s7   /tmp/pip-build-7oUkmx/scipy/scipy/special/_testutils.pyt   compareL   s    s'   Not equal to tolerance rtol=%g, atol=%gt   err_msgt   verboset   headerN(   R6   t
   asanyarrayt   testingt   utilst   assert_array_comparet   str(   R.   t   bR4   R5   R;   R<   R:   R=   (    (   R5   R4   s7   /tmp/pip-build-7oUkmx/scipy/scipy/special/_testutils.pyR   J   s
    $c         C` s#  t  | d ƒ r t | ƒ } n  t j | ƒ } | j d k rU | d  d  … d  f } n  | j d } t  | d ƒ r† | } d  } | } n5 t j | | f } t t | | j d ƒ ƒ } d  } t	 |  | t t | ƒ ƒ d | d | d | d | d | d	 | d
 |	 d | d |
 d | ƒ
} | j
 ƒ  d  S(   Nt   nexti   R   t   result_columnst   result_funcR4   R5   t   param_filtert   knownfailuret   nan_okt
   vectorizedt   ignore_inf_signt   distinguish_nan_and_inf(   t   hasattrR   R6   t   asarrayt   ndimR    t   shapet   c_t   rangeR
   t   check(   R1   t   resultst   pointsR4   R5   RG   RH   RJ   t   dtypeRI   RK   RL   t   nparamst   dataRE   RF   t   fdata(    (    s7   /tmp/pip-build-7oUkmx/scipy/scipy/special/_testutils.pyR	   Y   s(    		c           B` sY   e  Z d  Z d d d d d d d e e e e d „ Z d „  Z d d d „ Z d „  Z	 RS(   sÛ  
    Data set for checking a special function.

    Parameters
    ----------
    func : function
        Function to test
    filename : str
        Input file name
    param_columns : int or tuple of ints
        Columns indices in which the parameters to `func` lie.
        Can be imaginary integers to indicate that the parameter
        should be cast to complex.
    result_columns : int or tuple of ints, optional
        Column indices for expected results from `func`.
    result_func : callable, optional
        Function to call to obtain results.
    rtol : float, optional
        Required relative tolerance. Default is 5*eps.
    atol : float, optional
        Required absolute tolerance. Default is 5*tiny.
    param_filter : function, or tuple of functions/Nones, optional
        Filter functions to exclude some parameter ranges.
        If omitted, no filtering is done.
    knownfailure : str, optional
        Known failure error message to raise when the test is run.
        If omitted, no exception is raised.
    nan_ok : bool, optional
        If nan is always an accepted result.
    vectorized : bool, optional
        Whether all functions passed in are vectorized.
    ignore_inf_sign : bool, optional
        Whether to ignore signs of infinities.
        (Doesn't matter for complex-valued functions.)
    distinguish_nan_and_inf : bool, optional
        If True, treat numbers which contain nans or infs as as
        equal. Sets ignore_inf_sign to be True.

    c         C` sB  | |  _  | |  _ |
 |  _ t | d ƒ s6 | f } n  t | ƒ |  _ | d  k	 r™ t | d ƒ sl | f } n  t | ƒ |  _ | d  k	 r½ t d ƒ ‚ q½ n$ | d  k	 r± d  |  _ n t d ƒ ‚ | |  _	 | |  _
 | |  _ t | d ƒ só | f } n  | |  _ |	 |  _ | |  _ | |  _ | |  _ | |  _ |  j s>t |  _ n  d  S(   Nt   __len__s5   Only result_func or result_columns should be provideds7   Either result_func or result_columns should be provided(   R1   RX   t   datanameRM   t   tuplet   param_columnsR    RE   t
   ValueErrorRF   R4   R5   RG   RH   RI   RJ   RK   RL   R   (   R   R1   RX   R]   RE   RF   R4   R5   RG   RH   R[   RI   RJ   RK   RL   (    (    s7   /tmp/pip-build-7oUkmx/scipy/scipy/special/_testutils.pyR   £   s8    													c         C` s‹   t  j | t  j ƒ s' t  j t ƒ } n  t  j | ƒ } |  j |  j } } | d  k re d | j	 } n  | d  k r d | j
 } n  | | f S(   Ni   (   R6   t
   issubdtypet   inexactRV   t   floatt   finfoR4   R5   R    t   epst   tiny(   R   RV   t   infoR4   R5   (    (    s7   /tmp/pip-build-7oUkmx/scipy/scipy/special/_testutils.pyt   get_tolerancesÅ   s    c   (      ` sá  ˆ j  r t ˆ j  ƒ ‚ n  | d k r3 ˆ j } n  | d k rK | j } n | j | ƒ } ˆ j | ƒ \ } } ˆ j rù t j	 | j
 d f t j ƒ } xR t ˆ j ˆ j ƒ D]; \ ‰  } | r­ | t | | d d … ˆ  f ƒ ƒ M} q­ q­ W| | } n  g  ‰ xu ˆ j D]j ‰  t j ˆ  ƒ rVt ˆ  j ƒ ‰  ˆ j | d d … ˆ  f j t ƒ ƒ q	ˆ j | d d … ˆ  f ƒ q	Wd ‡ ‡ f d † } | ˆ j ƒ } ˆ j d k	 rßt g  ˆ j D] }	 | d d … |	 f ^ q·ƒ }
 nL d } ˆ j rt | ƒ d k rt j | d ƒ } n  | ˆ j d | ƒ}
 t t | ƒ t |
 ƒ k ƒ x“t t | |
 ƒ ƒ D]|\ } \ } } t j | j t j ƒ sˆ j rÏt j  | ƒ } t j  | ƒ } t j  | ƒ } t j  | ƒ } n< t j! | ƒ } t j! | ƒ } t j" | ƒ } t j" | ƒ } t j | ƒ } t j | ƒ } t j# d d ƒ } zu t j$ | ƒ } d | t j% | ƒ <t j$ | | ƒ } d | t j% | ƒ <| t j$ | ƒ } d | t j% | ƒ <Wd t j# |   X| | | | k } | | k } | | k } | | k } | | @| @| @} | j& } ˆ j rK| | M} | | M} | | | Bj' ƒ  8} n  ˆ j( r­ˆ j r­t j  | ƒ } t j  | ƒ }  | | @| |  @B}! | |! M} | |! j' ƒ  8} n  t j) | ƒ r]d g }" |" j d	 | j* ƒ  ƒ |" j d
 | j* ƒ  ƒ |" j d t j' | ƒ | | f ƒ x§ t j+ | ƒ d D]’ ‰  t ˆ  ƒ ‰  ‡  f d †  }# d j, t- |# ˆ ƒ ƒ }$ d j, t- |# | ƒ ƒ }% d j, t- |# |
 ƒ ƒ }& |# | ƒ }' |" j d |$ |% |& |' f ƒ q*Wt t. d j, |" ƒ ƒ q]q]Wd S(   s,   Check the special function against the data.i    Nc      	   ` sÙ   ˆ j  r |  ˆ  Œ  } n¢ g  } xŠ t t ˆ  d ƒ ƒ D]r } | d  k	 rg | | rg | j t j ƒ q5 n  | j |  t g  t t ˆ  ƒ ƒ D] } ˆ  | | ^ q† ƒ Œ  ƒ q5 Wt j | ƒ } t	 | t ƒ sÕ | f } n  | S(   Ni    (
   RJ   RR   t   lenR    t   appendR6   t   nanR\   RN   t
   isinstance(   R1   t	   skip_maskt   gott   jt   i(   t   paramsR   (    s7   /tmp/pip-build-7oUkmx/scipy/scipy/special/_testutils.pyt   eval_func_at_paramsò   s    	Di   Rk   R*   t   ignoreR3   s   Max |adiff|: %gs   Max |rdiff|: %gsC   Bad results (%d out of %d) for the following points (in output %d):c         ` s   d t  j |  ˆ  d d ƒS(   Ns   %30st	   precisioni   (   R6   t   array2string(   R8   (   Rm   (    s7   /tmp/pip-build-7oUkmx/scipy/scipy/special/_testutils.pyt   <lambda>L  s    s     s   %s => %s != %s  (rdiff %s)s   
(/   RH   R   R    RX   RV   t   astypeRf   RG   R6   t   onesRP   t   bool_t   zipR]   R   t   iscomplexobjt   intt   imagRh   t   complexR1   RE   R\   RI   Rg   t   isnanRF   R   t	   enumerateR_   t   complexfloatingRK   t   isinft   isposinft   isneginft   seterrt   absolutet   isfinitet   sizet   sumRL   t   anyt   maxt   wheret   joint   mapt   False((   R   RX   RV   R4   R5   t
   param_maskt   filterRp   Rl   t   icolt   wantedRk   t
   output_numR8   R9   t   pinf_xt   pinf_yt   minf_xt   minf_yt   nan_xt   nan_yt   olderrt   abs_yt   difft   rdifft   tol_maskt	   pinf_maskt	   minf_maskt   nan_maskt   bad_jt   point_countt   inf_xt   inf_yt   both_nonfinitet   msgt   fmtR.   RC   t   ct   d(    (   Rm   Ro   R   s7   /tmp/pip-build-7oUkmx/scipy/scipy/special/_testutils.pyRS   Ð   s¢    		"-)!5(!				!c         C` sz   t  j t t t  j |  j ƒ ƒ ƒ r- d } n d } |  j rb d |  j j | t	 j
 j |  j ƒ f Sd |  j j | f Sd S(   s%   Pretty-printing, esp. for Nose outputs
    (complex)R3   s   <Data for %s%s: %s>s   <Data for %s%s>N(   R6   Rˆ   R   RŒ   Ry   R]   R[   R1   R   t   ost   patht   basename(   R   t
   is_complex(    (    s7   /tmp/pip-build-7oUkmx/scipy/scipy/special/_testutils.pyt   __repr__T  s    $		N(
   R   R   R)   R    R   R   R   Rf   RS   R®   (    (    (    s7   /tmp/pip-build-7oUkmx/scipy/scipy/special/_testutils.pyR
   z   s   '	„(   t
   __future__R    R   R   Rª   t   distutils.versionR   t   numpyR6   t   numpy.testingR   R   t   numpy.testing.noseclassesR   t   scipy.specialt   specialR,   t   __all__t   objectR   R   R   R   R   R   R   R    R   R	   R
   (    (    (    s7   /tmp/pip-build-7oUkmx/scipy/scipy/special/_testutils.pyt   <module>   s$   					