U
    f/e-                     @   s   d dl Zd dlZd dlmZmZmZmZmZm	Z	 d dl
mZ ejdddd gdd Zdd Zejd	d
dgdd Zdd Zdd Zdd Zdd Zdd Zdd Zejddddigddggdd ZdS )     N)	DataFrameIndex
MultiIndexSeries	Timestamp
date_rangebad_raw   c              	   C   s:   t jtdd" ttddjt| d W 5 Q R X d S )Nz'raw parameter must be `True` or `False`match   r	   raw)pytestraises
ValueErrorr   rangerollingapplylen)r    r   B/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/window/test_apply.pytest_rolling_apply_invalid_raw   s    r   c                 C   s   | \}}t ddddg}|djtj||d}|  s@t|jdddjtj||d}t ddddgtd	}t	
|| d S )
Nr	      r      
   enginer   min_periods   Zdtype)r   r   r   npsumZisnaallAssertionErrorfloattmZassert_almost_equal)engine_and_rawr   r   valsresultexpectedr   r   r    test_rolling_apply_out_of_bounds   s    r,   windowr   2sc              	      s   t tjdtjjdddddtddddd	  fd
d} | j|dd} jdd  	 }t
|| t
t  | j|dd W 5 Q R X d S )N   r   r   )sizeAB20130101sZperiodsfreq)indexc                    s$   | j d  j d krtjS | jd S )Nr   )r8   r"   nanilocxdfr   r   f-   s    z1test_rolling_apply_with_pandas_objects.<locals>.fFr   r   T)r   r"   randomZrandnrandintr   r   r   r;   Zreindex_liker'   assert_frame_equalZexternal_error_raisedAttributeError)r-   r@   r*   r+   r   r>   r   &test_rolling_apply_with_pandas_objects#   s    rE   c                 C   s   | \}}t g dd}|djdd ||d}t|| t d d d g}|jddd	jd
d ||d}t dddg}t|| |jddd	jt||d}t|| d S )NZfloat64r!   r   c                 S   s   |   S N)Zmeanr<   r   r   r   <lambda>>       z$test_rolling_apply.<locals>.<lambda>r   r   r   r   c                 S   s   t | S rF   )r   r<   r   r   r   rG   C   rH         ?g       @)r   r   r   r'   assert_series_equalr   )r(   r   r   r+   r*   r5   r   r   r   test_rolling_apply:   s    rK   c                 C   s~   | \}}t tddddtdddd }|jdd	}|jd
d	}|jdd ||d}|jdd ||d}t|| d S )Nr4   r/   r5   r6   r1   r2   r   r	   )r-   1sc                 S   s   dS Nr	   r   r<   r   r   r   rG   W   rH   z test_all_apply.<locals>.<lambda>r   c                 S   s   dS rM   r   r<   r   r   r   rG   X   rH   )r   r   r   Z	set_indexr   r   r'   rC   )r(   r   r   r?   Zerrr*   r+   r   r   r   test_all_applyK   s    rO   c                 C   s   | \}}t dtdi}tdtdtdtdtdg|_dd	 }|jd
ddj|||d}| }d|d< t|| |jdddj|||d}| }d|d< t|| |jdddj|||d}| }d|d< t|| d S )Nr3   r/   z20130101 09:00:00z20130101 09:00:02z20130101 09:00:03z20130101 09:00:05z20130101 09:00:06c                 S   s   dS rM   r   r<   r   r   r   rG   h   rH   z#test_ragged_apply.<locals>.<lambda>rL   r	   )r-   r   r   rI   r.   Z5s)	r   r   r   r8   r   r   copyr'   rC   )r(   r   r   r?   r@   r*   r+   r   r   r   test_ragged_apply\   s*    rQ   c                	   C   s>   t jtdd& ttddjdd dd W 5 Q R X d S )Nz)engine must be either 'numba' or 'cython'r
   r	   c                 S   s   | S rF   r   r<   r   r   r   rG   {   rH   z%test_invalid_engine.<locals>.<lambda>foo)r   r   r   r   r   r   r   r   r   r   r   r   test_invalid_enginey   s    rT   c                	   C   sD   t jtdd, ttddjdd dddid	 W 5 Q R X d S )
Nz+cython engine does not accept engine_kwargsr
   r	   c                 S   s   | S rF   r   r<   r   r   r   rG      rH   z3test_invalid_engine_kwargs_cython.<locals>.<lambda>ZcythonZnopythonF)r   Zengine_kwargsrS   r   r   r   r   !test_invalid_engine_kwargs_cython~   s      rU   c                	   C   s@   t jtdd( ttddjdd ddd W 5 Q R X d S )	Nz.raw must be `True` when using the numba enginer
   r	   c                 S   s   | S rF   r   r<   r   r   r   rG      rH   z(test_invalid_raw_numba.<locals>.<lambda>FZnumba)r   r   rS   r   r   r   r   test_invalid_raw_numba   s
     rV   args_kwargsparr   )r   c                 C   s   dd }t ddgddgd}tddg}t ddgdd	gg|d
}|dj|| d | d d}t|| tjddgdd gd}tdd	g|dd}|	dd d}|j|| d | d d}t
|| d S )Nc                 S   s   t | | S rF   )r"   r#   )r=   rX   r   r   r   rR      s    z+test_rolling_apply_args_kwargs.<locals>.foor	   r   )grarY   rZ   g      &@g      (@)columnsr   )argskwargs)r	   r   )r	   r	   )names)r8   name)r   r   r   r   r'   rC   r   from_tuplesr   groupbyrJ   )rW   rR   r?   idxr+   r*   ZmidxZ
gb_rollingr   r   r   test_rolling_apply_args_kwargs   s    rc   )Znumpyr"   r   Zpandasr   r   r   r   r   r   Zpandas._testingZ_testingr'   markZparametrizer   r,   rE   rK   rO   rQ   rT   rU   rV   rc   r   r   r   r   <module>   s     

