ó
˜íYc           @   sÐ   d  d l  Z d  d l m Z m Z m Z m Z d  d l Z d d l	 m
 Z m Z d d l m Z m Z d „  Z d „  Z d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z d „  Z d S(   iÿÿÿÿN(   t   assert_equalt   assert_array_equalt   assert_array_almost_equalt   assert_raisesi   (   t
   unit_makert   unit_maker_argparse(   t   arrayst   array_orderc          c   s&   x t  j f D] }  t |  f Vq Wd S(   s   test partitionN(   t   bnt	   partitionR   (   t   func(    (    sC   lib/python2.7/site-packages/bottleneck/tests/nonreduce_axis_test.pyt   test_partition   s    c          c   s&   x t  j f D] }  t |  f Vq Wd S(   s   test argpartitionN(   R   t   argpartitionR   (   R
   (    (    sC   lib/python2.7/site-packages/bottleneck/tests/nonreduce_axis_test.pyt   test_argpartition   s    c      
   C   s÷  d } | d 7} |  j  } t d | ƒ } t j j d d d g ƒ } x¬t t | ƒ ƒ D]˜\ } } | j d k sW | j d k sW | j d k r– qW n  xVt	 t
 d | j ƒ ƒ d g D]5} | d k rØ | j d } n | j | d } | d k  rû q¶ n  | j | ƒ }	 | | |	 | ƒ }
 |  | |	 | ƒ } | d	 k rgt |
 | |	 | ƒ }
 t | | |	 | ƒ } n$ t |
 |	 | ƒ }
 t | |	 | ƒ } | d
 t | ƒ t | j ƒ t | j ƒ |	 t | ƒ t | ƒ | f } | | } t | |
 | ƒ q¶ WqW Wd S(   s   test partition or argpartitions@   
func %s | input %s (%s) | shape %s | n %d | axis %s | order %s
s   
Input array:
%s
s
   bn.slow.%si   i   i   i    iÿÿÿÿR   t   aN(   t   __name__t   evalt   npt   randomt   RandomStatet	   enumerateR   t   ndimt   sizet   listt   ranget   Nonet   shapet   randintt   complete_the_argpartitiont   complete_the_partitiont   strt   dtypeR   R   (   R
   t   msgt   namet   func0t   rst   iR   t   axist   nmaxt   nt   s0t   s1t   tupt   err_msg(    (    sC   lib/python2.7/site-packages/bottleneck/tests/nonreduce_axis_test.pyR      s4    
	-&+
c         C   sž   d „  } |  j  ƒ  }  |  j } | d  k rN | d k rE t d ƒ ‚ n  d } n4 | d k  r‚ | | 7} | d k  r‚ t d ƒ ‚ q‚ n  t j | | |  | ƒ }  |  S(   Nc         S   s:   t  j |  |  ƒ |  | *t  j |  | d ƒ |  | d )|  S(   Ni   (   R   t   sort(   R   R'   (    (    sC   lib/python2.7/site-packages/bottleneck/tests/nonreduce_axis_test.pyt   func1d?   s    i   s    `a` must be 1d when axis is Nonei    s   `axis` out of range(   t   copyR   R   t
   ValueErrorR   t   apply_along_axis(   R   R'   R%   R-   R   (    (    sC   lib/python2.7/site-packages/bottleneck/tests/nonreduce_axis_test.pyR   =   s    			
c      
   C   s0  | j  ƒ  } | j } | d  k r] |  j d k r? t d ƒ ‚ n  d } d } | j d ƒ } n4 | d k  r‘ | | 7} | d k  r‘ t d ƒ ‚ q‘ n  | d k rª | |  } np| d k rg| d k rxŸ t | j d ƒ D]6 } | |  d  d  … | f | f | d  d  … | f <qÖ Wq| d k rXxB t | j d ƒ D] } | | |  | f | | <q3Wqt d ƒ ‚ n³| d k r| d k r÷x‰t | j d ƒ D]] } xT t | j d ƒ D]? } | |  d  d  … | | f | | f | d  d  … | | f <q­Wq“Wq| d k r{xt | j d ƒ D]] } xT t | j d ƒ D]? } | | |  | d  d  … | f | f | | d  d  … | f <q1WqWq| d k rÿx t | j d ƒ D]] } xT t | j d ƒ D]? } | | | |  | | d  d  … f f | | | d  d  … f <qµWq›Wqt d ƒ ‚ n t d ƒ ‚ t | | | ƒ } | S(	   Ni   s$   `index` must be 1d when axis is Nonei    iÿÿÿÿs   `axis` out of rangei   i   s   `a.ndim` must be 1, 2, or 3(   R.   R   R   R/   t   reshapeR   R   R   (   t   indexR   R'   R%   R   R$   t   j(    (    sC   lib/python2.7/site-packages/bottleneck/tests/nonreduce_axis_test.pyR   R   sN    	
7DDDc          C   sh   t  j d ƒ j d d ƒ }  t j |  j d d ƒ j } t j j |  j d d ƒ j } t | | d  ƒ d S(   s   partition transpose testi   i   i   i   iÿÿÿÿN(   R   t   arangeR1   R   R	   t   Tt   slowR    (   R   t   actualt   desired(    (    sC   lib/python2.7/site-packages/bottleneck/tests/nonreduce_axis_test.pyt   test_transpose   s    c          c   s8   t  j t  j t  j g }  x |  D] } t | f Vq Wd S(   s   Test nonreduce axis functionsN(   R   t   rankdatat   nanrankdatat   pusht   reduce_unit_maker(   t   funcsR
   (    (    sC   lib/python2.7/site-packages/bottleneck/tests/nonreduce_axis_test.pyt   test_nonreduce_axisŠ   s    c       
   C   sª   d
 }  t  j t  j d d t  j t  j t  j t  j d t  j g	 ƒ } xa |  D]Y } t j | j ƒ  d | ƒ} t j j | j ƒ  d | ƒ} t | | d t | ƒ ƒ qI Wd	 S(   s	   Test pushi    i   i   i   i   i   R'   s   failed on n=%sN(   i    i   i   i   i   i   (	   R   t   arrayt   nanR   R<   R.   R6   R   R   (   t   nsR   R'   R7   R8   (    (    sC   lib/python2.7/site-packages/bottleneck/tests/nonreduce_axis_test.pyt	   test_push‘   s    <c          c   s–   x t  j d ƒ D]~ }  |  j } | d	 k r9 t |  f VnJ | d k rS t |  f Vn0 | d
 k rm t |  f Vn d } t | | ƒ ‚ t |  f Vq Wd S(   s'   test argument parsing in nonreduce_axist   nonreduce_axisR	   R   R<   R:   R;   s+   ``%s` is an unknown nonreduce_axis functionN(   R	   R   (   R:   R;   (   R   t   get_functionsR   t   unit_maker_parset   unit_maker_parse_rankdataR/   t   unit_maker_raises(   R
   R!   t   fmt(    (    sC   lib/python2.7/site-packages/bottleneck/tests/nonreduce_axis_test.pyt   test_arg_parsingž   s    	i   c         C   s±  |  j  } t d | ƒ } t j d d d g ƒ } d |  } | d 7} | d | 7} |  | d ƒ } | | d ƒ } | d	 } t | | | | ƒ |  | d d
 d ƒ} | | d d
 d ƒ} | d } t | | | | ƒ | d k rŽ|  | d d ƒ } | | d d ƒ } | d } t | | | | ƒ |  | d d
 d ƒ} | | d d
 d ƒ} | d } t | | | | ƒ | d d f }	 i  }
 |  |	 |
 Ž  n | d f }	 i  }
 |  |	 |
 Ž  d S(   s   test argument parsing.s
   bn.slow.%sg      ð?i   i   s   
%ss   %s
s   
Input array:
%s
i   s   (a, 1)R%   i    s   (a, 1, axis=0)R<   s   (a, 2, None)s   (a, 1, axis=None)iÿÿÿÿN(   R   R   R   R@   R   R   (   R
   t   decimalR!   R"   R   RI   R7   R8   R+   t   argst   kwargs(    (    sC   lib/python2.7/site-packages/bottleneck/tests/nonreduce_axis_test.pyRF   ®   s:    	





c      	   C   s»   t  j d d d g ƒ } t t |  ƒ t t |  d | ƒt t |  | d d d d ƒt t |  | d d d | ƒ|  j d k r· t t |  | d d d d d ƒ t t |  | d d
 ƒn  d S(   s.   test argument parsing raises in nonreduce_axisg      ð?i   i   R%   i    t   extraR   R	   R   t   0N(   R	   R   (   R   R@   R   t	   TypeErrorR   (   R
   R   (    (    sC   lib/python2.7/site-packages/bottleneck/tests/nonreduce_axis_test.pyRH   Ý   s    (   t   numpyR   t   numpy.testingR    R   R   R   t
   bottleneckR   t   reduce_testR   R=   R   RG   t   utilR   R   R   R   R   R   R9   R?   RC   RJ   RF   RH   (    (    (    sC   lib/python2.7/site-packages/bottleneck/tests/nonreduce_axis_test.pyt   <module>   s   "			#		-				/