B
    Y                 @   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d Zd	d
 Zdd ZdddZdd Zdd Zdd Zdd Zdd ZdS )zTest moving window functions.    )assert_trueN)assert_equalassert_array_almost_equalassert_raises   )arraysarray_orderc              c   s"   xt dD ]} t| fV  qW dS )ztest move functionsmoveN)bnget_functions
unit_maker)func r   9lib/python3.7/site-packages/bottleneck/tests/move_test.py	test_move   s    r   c             C   sF  d}|d7 }t }| j}td| }|dkr0d}nd}x
tt|D ]\}}td|j}x|D ]}	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  qW qxW q^W qDW d	S )z?Test that bn.xxx gives the same output as a reference function.zT
func %s | window %d | min_count %s | input %s (%s) | shape %s | axis %s | order %s
z
Input array:
%s
z
bn.slow.%smove_var      r   N)axisaz
 dtype mismatch %s %s)r   __name__eval	enumerater   rangendimshapeliststrdtyper   r   )r   fmtaaaeZ	func_namefunc0decimalir   Zaxesr   ZwindowswindowZ
min_counts	min_countactualdesiredtuperr_msgZdaZddr   r   r   r      s4    


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_parsing4   s    r,   r   c             C   s0  | j }td| }t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 }t|||| | |dd	dd}||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 }t|||| | |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|||| |d	d	df}	i }
| |	|
 dS )ztest argument parsing.z
bn.slow.%sg      ?   r   z
%sz%s
z
Input array:
%s
z(a, 2)r   z	(a, 2, 1))r%   z(a, window=2))r%   r&   z(a, window=2, min_count=1)r   )r%   r&   r   z"(a, window=2, min_count=1, axis=0))r&   r%   r   z"(a, min_count=1, window=2, axis=0)r   N)r   r&   r%   z&(a, axis=-1, min_count=None, window=2))r   r   r&   r%   z((a=a, axis=-1, min_count=None, window=2))move_stdr   )ddofz(a, 2, 1, -1, ddof=1))r   r   nparrayr   )r   r#   namer"   r   r    r'   r(   r*   argskwargsr   r   r   r+   :   s\    


r+   c              c   s"   xt dD ]} t| fV  qW dS )z$test argument parsing raises in mover	   N)r
   r   unit_maker_argparse_raises)r   r   r   r   test_arg_parse_raisesz   s    r6   c          	   C   s   t dddg}tt|  tt| |d tt| |dddd tt| |dd|d tt| |ddddd tt| |ddd tt| |d	d
d | jdkrtt| |ddd dS )z$test argument parsing raises in moveg      ?r-   r   )r   r   )r   Zextra)r   r   0r   1)r&   )r.   r   )r/   N)r0   r1   r   	TypeErrorr   )r   r   r   r   r   r5      s    

r5   c              C   s   d} t }d}d}tj}tjj}tjdddg}xtdD ]}tj|tj	d}|j
|j dk }	tj||	< |j
|j d	k }	tj||	< || xTtd|d D ]B}
|||
|d
}|||
|d
}| |j|
||f }|||d|d qW q:W dS )ztest move_median.c with nansz5
func %s | window %d | min_count %s

Input array:
%s
r   
   r-   r   d   )r   g?g?)r%   r&   r   )r#   r*   N)r   r
   move_medianslowr0   randomRandomStater   arangeZfloat64Zrandr   infnanshuffler   )r    r!   r&   sizer   r"   rsr$   r   idxr%   r'   r(   r*   r   r   r   test_move_median_with_nans   s&    


rG   c              C   s   d} t }d}d}tj}tjj}tjdddg}xtdD ]t}tj|tj	d}|
| xTtd|d D ]B}	|||	|d}
|||	|d}| |j|	||f }||
|d	|d
 qhW q:W dS )ztest move_median.c without nansz5
func %s | window %d | min_count %s

Input array:
%s
r   r:   r-   r   r;   )r   )r%   r&   r   )r#   r*   N)r   r
   r<   r=   r0   r>   r?   r   r@   Zint64rC   r   )r    r!   r&   rD   r   r"   rE   r$   r   r%   r'   r(   r*   r   r   r   test_move_median_without_nans   s    
rH   c              C   s   dddddg} d}t j| dd}tt|dd  |d  t| | g}t j|ddd	}tt|ddddf  |d  t| | g| | gg}t j|ddd	}tt|ddddddf  |d  dS )
zTest move_std for neg sqrt.ge>R?gRz12?z)Square root of negative number. ndim = %dr   )r%   r-   Nr   )r%   r   )r
   r.   r   r0   Zisfiniteallr1   )r   r*   bZa2Za3r   r   r   test_move_std_sqrt   s     (rK   )r   )__doc__Z
nose.toolsr   Znumpyr0   Znumpy.testingr   r   r   Z
bottleneckr
   utilr   r   r   r   r,   r+   r6   r5   rG   rH   rK   r   r   r   r   <module>   s   #
@