ó
˜íYc           @   s¸   d  Z  d d l m Z d d l Z d d l m Z m Z m Z d d l	 Z
 d d l m Z m Z d „  Z d „  Z d	 „  Z d
 d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d S(   s   Test moving window functions.iÿÿÿÿ(   t   assert_trueN(   t   assert_equalt   assert_array_almost_equalt   assert_raisesi   (   t   arrayst   array_orderc          c   s)   x" t  j d ƒ D] }  t |  f Vq Wd S(   s   test move functionst   moveN(   t   bnt   get_functionst
   unit_maker(   t   func(    (    s9   lib/python2.7/site-packages/bottleneck/tests/move_test.pyt	   test_move   s    c         C   s¾  d } | d 7} t  } |  j } t d | ƒ } | d k rD d } n d } xmt t | ƒ ƒ D]Y\ } } t d | j ƒ } x8| D]0}	 t d | j |	 ƒ }
 x|
 D]	} t t d | d ƒ ƒ d g } xà | D]Ø } |  | | | d	 |	 ƒ} | | | | d	 |	 ƒ} | | t
 | ƒ d
 t
 | ƒ t
 | j ƒ t
 | j ƒ t
 |	 ƒ t | ƒ | f	 } | | } | | | | | ƒ | d 7} | j } | j } t | | | | | f ƒ qÒ Wq¥ Wq‚ Wq] Wd S(   s?   Test that bn.xxx gives the same output as a reference function.sT   
func %s | window %d | min_count %s | input %s (%s) | shape %s | axis %s | order %s
s   
Input array:
%s
s
   bn.slow.%st   move_vari   i   iÿÿÿÿi   t   axist   as   
 dtype mismatch %s %sN(   R   t   __name__t   evalt	   enumerateR   t   ranget   ndimt   shapet   listt   Nonet   strt   dtypeR   R   (   R
   t   fmtt   aaaet	   func_namet   func0t   decimalt   iR   t   axesR   t   windowst   windowt
   min_countst	   min_countt   actualt   desiredt   tupt   err_msgt   dat   dd(    (    s9   lib/python2.7/site-packages/bottleneck/tests/move_test.pyR	      s4    
		 !

		c          c   s)   x" t  j d ƒ D] }  t |  f Vq Wd S(   s   test argument parsingR   N(   R   R   t   unit_maker_argparse(   R
   (    (    s9   lib/python2.7/site-packages/bottleneck/tests/move_test.pyt   test_arg_parsing4   s    i   c      	   C   sR  |  j  } t d | ƒ } t j d d d g ƒ } d |  } | d 7} | d | 7} |  | d ƒ } | | d ƒ } | d } t | | | | ƒ |  | d d	 ƒ } | | d d	 ƒ } | d
 } t | | | | ƒ |  | d d ƒ} | | d d ƒ} | d } t | | | | ƒ |  | d d d d	 ƒ} | | d d d d	 ƒ} | d } t | | | | ƒ |  | d d d d	 d d ƒ} | | d d d d	 d d ƒ} | d } t | | | | ƒ |  | d d	 d d d d ƒ} | | d d	 d d d d ƒ} | d } t | | | | ƒ |  | d d d d d d ƒ} | | d d d d d d ƒ} | d } t | | | | ƒ |  d | d d d d d d ƒ } | d | d d d d d d ƒ } | d } t | | | | ƒ | d k r)|  | d d	 d d d	 ƒ} | | d d	 d d d	 ƒ} | d } t | | | | ƒ n  | d	 d	 d f }	 i  }
 |  |	 |
 Ž  d S(   s   test argument parsing.s
   bn.slow.%sg      ð?i   i   s   
%ss   %s
s   
Input array:
%s
s   (a, 2)i   s	   (a, 2, 1)R!   s   (a, window=2)R#   s   (a, window=2, min_count=1)R   i    s"   (a, window=2, min_count=1, axis=0)s"   (a, min_count=1, window=2, axis=0)iÿÿÿÿs&   (a, axis=-1, min_count=None, window=2)R   s(   (a=a, axis=-1, min_count=None, window=2)t   move_stdR   t   ddofs   (a, 2, 1, -1, ddof=1)N(   R,   R   (   R   R   t   npt   arrayR   R   (   R
   R   t   nameR   R   R   R$   R%   R'   t   argst   kwargs(    (    s9   lib/python2.7/site-packages/bottleneck/tests/move_test.pyR*   :   s\    	








!!

c          c   s)   x" t  j d ƒ D] }  t |  f Vq Wd S(   s$   test argument parsing raises in moveR   N(   R   R   t   unit_maker_argparse_raises(   R
   (    (    s9   lib/python2.7/site-packages/bottleneck/tests/move_test.pyt   test_arg_parse_raisesz   s    c      	   C   sö   t  j d d d g ƒ } t t |  ƒ t t |  d | ƒt t |  | d d d d d ƒt t |  | d d d d | ƒt t |  | d d d d d ƒ t t |  | d d d ƒt t |  | d	 d
 d ƒ|  j d k rò t t |  | d d d ƒn  d S(   s$   test argument parsing raises in moveg      ð?i   i   R   i    t   extraR   t   0i   R#   t   1R,   R   R-   N(   R,   R   (   R.   R/   R   t	   TypeErrorR   (   R
   R   (    (    s9   lib/python2.7/site-packages/bottleneck/tests/move_test.pyR3   €   s    c       	   C   sR  d }  t  } d } d } t j } t j j } t j j d d d g ƒ } xt d ƒ D]õ } t j | d t j	 ƒ} | j
 | j Œ  d k  }	 t j | |	 <| j
 | j Œ  d	 k  }	 t j | |	 <| j | ƒ x} t d | d ƒ D]h }
 | | d
 |
 d | ƒ} | | d
 |
 d | ƒ} |  | j |
 | | f } | | | d d d | ƒqÞ WqU Wd S(   s   test move_median.c with nanss5   
func %s | window %d | min_count %s

Input array:
%s
i   i
   i   i   id   R   gš™™™™™¹?gš™™™™™É?R!   R#   R   i   R'   N(   R   R   t   move_mediant   slowR.   t   randomt   RandomStateR   t   aranget   float64t   randR   t   inft   nant   shuffleR   (   R   R   R#   t   sizeR
   R   t   rsR   R   t   idxR!   R$   R%   R'   (    (    s9   lib/python2.7/site-packages/bottleneck/tests/move_test.pyt   test_move_median_with_nans–   s&    	c       	   C   s  d }  t  } d } d } t j } t j j } t j j d d d g ƒ } x¹ t d ƒ D]« } t j | d t j	 ƒ} | j
 | ƒ x} t d | d ƒ D]h }	 | | d |	 d	 | ƒ}
 | | d |	 d	 | ƒ} |  | j |	 | | f } | |
 | d
 d d | ƒq” WqU Wd S(   s   test move_median.c without nanss5   
func %s | window %d | min_count %s

Input array:
%s
i   i
   i   i   id   R   R!   R#   R   i   R'   N(   R   R   R9   R:   R.   R;   R<   R   R=   t   int64RB   R   (   R   R   R#   RC   R
   R   RD   R   R   R!   R$   R%   R'   (    (    s9   lib/python2.7/site-packages/bottleneck/tests/move_test.pyt   test_move_median_without_nans­   s    	c          C   s9  d d d d d g }  d } t  j |  d d ƒ} t t j | d ƒ j ƒ  | d ƒ t j |  |  g ƒ } t  j | d d d d ƒ} t t j | d	 d	 … d d	 … f ƒ j ƒ  | d ƒ t j |  |  g |  |  g g ƒ } t  j | d d d d ƒ} t t j | d	 d	 … d	 d	 … d d	 … f ƒ j ƒ  | d ƒ d	 S(
   s   Test move_std for neg sqrt.ge>¸¸ÁR?g¨R¨z1Ò2?s)   Square root of negative number. ndim = %dR!   i   i   i   R   N(   R   R,   R    R.   t   isfinitet   allR/   (   R   R'   t   bt   a2t   a3(    (    s9   lib/python2.7/site-packages/bottleneck/tests/move_test.pyt   test_move_std_sqrtÃ   s    	$6!(   t   __doc__t
   nose.toolsR    t   numpyR.   t   numpy.testingR   R   R   t
   bottleneckR   t   utilR   R   R   R	   R+   R*   R4   R3   RF   RH   RN   (    (    (    s9   lib/python2.7/site-packages/bottleneck/tests/move_test.pyt   <module>   s   		#	@				