B
    Y                 @   s   d Z ddlZddl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mZ dd Zdd
dZdd ZdddZdd Zdd ZefddZefddZdd Zdd ZdS )zTest reduce functions.    N)ok_)assert_equalassert_raisesassert_array_almost_equal   )arraysarray_orderDTYPESc              c   s"   xt dD ]} t| fV  qW dS )ztest reduce functionsreduceN)bnget_functions
unit_maker)func r   ;lib/python3.7/site-packages/bottleneck/tests/reduce_test.pytest_reduce   s    r      c             C   s  d}|d7 }| j }td| }xtt|D ]|\}}|jdkrJdg}nttd|jdg }xH|D ]>}d}	d}
d}y| ||d	}	W n   d
}Y nX d}y.t  t	d |||d	}
W dQ R X W n   d
}Y nX |r|rqh|dt
| t
|jt
|jt
|t||f}|| }||kr^|r6d}nd}|||t f }||7 }td| t|	|
|| |d7 }t|	drht|
drh|	j}|
j}t|||||f  qhW q.W dS )z6Test that bn.xxx gives the same output as bn.slow.xxx.z9
func %s | input %s (%s) | shape %s | axis %s | order %s
z
Input array:
%s
z
bn.slow.%sr   NZCrashedF)axisTignoreaz 
bn.%s raised
bn.slow.%s ran

%sz 
bn.%s ran
bn.slow.%s raised

%sz
 dtype mismatch %s %sdtype)__name__eval	enumerater   ndimlistrangewarningscatch_warningssimplefilterstrr   shaper   	traceback
format_excr   r   hasattrr   )r   decimalfmtnamefunc0ir   Zaxesr   actualdesiredZactualraisedZdesiredraisedtuperr_msgZfmt2msgZdaZddr   r   r   r      sR    






r   c              c   s"   xt dD ]} t| fV  qW dS )ztest argument parsingr
   N)r   r   unit_maker_argparse)r   r   r   r   test_arg_parsingJ   s    r1   c             C   sX  | j }td| }tdddg}d|  }|d7 }|d| 7 }| |}||}|d }t|||| | |d	}||d	}|d
 }t|||| | |d}||d}|d }t|||| | |d	d}||d	d}|d }t|||| | |dd}||dd}|d }t|||| | |d}||d}|d }t|||| |d	f}	i }
| |	|
 dS )ztest argument parsing.z
bn.slow.%sg      ?      z
%sz%s
z
Input array:
%s
z(a)r   z(a, 0)Nz	(a, None))r   z(a, axis=0)z(a, axis=None))r   )r   r   nparrayr   )r   r&   r(   r)   r   r'   r+   r,   r.   argskwargsr   r   r   r0   P   sB    





r0   c              c   s"   xt dD ]} t| fV  qW dS )z&test argument parsing raises in reducer
   N)r   r   unit_maker_argparse_raises)r   r   r   r   test_arg_parse_raises   s    r9   c          	   C   s   t dddg}tt|  tt| |d tt| |ddd tt| |d|d tt| |ddddd tt| |dd | jd	krtt| |dd
 tt| || dS )z&test argument parsing raises in reduceg      ?r2   r3   )r   r   )r   Zextra)r   r   0)nanstdnanvar)ddofN)r4   r5   r   	TypeErrorr   )r   r   r   r   r   r8      s    

r8   c             C   sV   dddg}xF|D ]>}x8| D ]0}t j||d}tttj| tttjj| qW qW dS )z'Test nanmax for size zero input arrays.)r   )r2   r   )r   r2   r   )r   N)r4   zerosr   
ValueErrorr   Znanmaxslow)dtypesshapesr"   r   r   r   r   r   test_nanmax_size_zero   s    


rD   c             C   sV   dddg}xF|D ]>}x8| D ]0}t j||d}tttj| tttjj| qW qW dS )z'Test nanmin for size zero input arrays.)r   )r2   r   )r   r2   r   )r   N)r4   r?   r   r@   r   ZnanminrA   )rB   rC   r"   r   r   r   r   r   test_nanmin_size_zero   s    


rE   c           	   C   sL  t jdgdd} tjdd t jjdgdd}W dQ R X t| |dd t jdgdd} tjdd t jjdgdd}W dQ R X t| |d	d t jdtjgdd} tjdd t jjdtjgdd}W dQ R X t| |d
d t jdtjgtjdggddd} tjdd( t jjdtjgtjdggddd}W dQ R X t| |dd dS )z"nanstd regression test (issue #60)g      ?r   )r=   r   )invalidNzbn.nanstd([1.0], ddof=1) wrong)r.   zbn.nanstd([1], ddof=1) wrongz!bn.nanstd([1, nan], ddof=1) wrongr   )r   r=   zissue #60 regression)r   r;   r4   errstaterA   r   nan)fsr   r   r   test_nanstd_issue60   s       ,rK   c           	   C   sL  t jdgdd} tjdd t jjdgdd}W dQ R X t| |dd t jdgdd} tjdd t jjdgdd}W dQ R X t| |d	d t jdtjgdd} tjdd t jjdtjgdd}W dQ R X t| |d
d t jdtjgtjdggddd} tjdd( t jjdtjgtjdggddd}W dQ R X t| |dd dS )z"nanvar regression test (issue #60)g      ?r   )r=   r   )rF   Nzbn.nanvar([1.0], ddof=1) wrong)r.   zbn.nanvar([1], ddof=1) wrongz!bn.nanvar([1, nan], ddof=1) wrongr   )r   r=   zissue #60 regression)r   r<   r4   rG   rA   r   rH   )rI   rJ   r   r   r   test_nanvar_issue60   s       ,rL   )r   )r   )__doc__r   r#   Z
nose.toolsr   Znumpyr4   Znumpy.testingr   r   r   Z
bottleneckr   utilr   r   r	   r   r   r1   r0   r9   r8   rD   rE   rK   rL   r   r   r   r   <module>   s"   
4
0
