o
    Eh&                     @   s`  d dl Zd dlZd dlmZmZmZmZmZm	Z	m
Z
mZmZ d dlmZ d dlmZ ejdZdd Zejdg d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$d% Z!d&d' Z"d(d) Z#d*d+ Z$d,d- Z%d.d/ Z&ejd0g d1d2d3 Z'd4d5 Z(d6d7 Z)d8d9 Z*dS ):    N)		DataFrameIndex
MultiIndexSeries	Timestampconcat
date_rangeisnanotna)offsetsz3ignore:.*(empty slice|0 for slice).*:RuntimeWarningc                 C   s   | t |   S N)npZisfinitemeanx r   >lib/python3.10/site-packages/pandas/tests/window/test_apply.pyf   s   r   bad_raw)N   r   c                 C   sP   t jtdd ttddjt| d W d    d S 1 s!w   Y  d S )Nz'raw parameter must be `True` or `False`match   r   raw)pytestraises
ValueErrorr   rangerollingapplylen)r   r   r   r   test_rolling_apply_invalid_raw   s   "r"   c                 C   sx   | \}}t g d}|djtj||d}|  sJ |jdddjtj||d}t g dtd}t	|| d S )N)r      r      
   enginer   r   min_periods)r   r      r%   Zdtype)
r   r   r    r   sumr	   allfloattmassert_almost_equal)engine_and_rawr'   r   Zvalsresultexpectedr   r   r    test_rolling_apply_out_of_bounds$   s   r4   windowr#   2sc                    s   t tjddtjd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 d    d S 1 sZw   Y  d S )Nr#      r   r%   )sizeAB20130101speriodsfreqindexc                    s$   | j d  j d krtjS | jd S )Nr   )rB   r   nanilocr   dfr   r   r   ?   s   
z1test_rolling_apply_with_pandas_objects.<locals>.fFr   T)r   r   randomdefault_rngstandard_normalZintegersr   r   r    rE   Zreindex_liker/   assert_frame_equalZexternal_error_raisedAttributeError)r5   r   r2   r3   r   rF   r   &test_rolling_apply_with_pandas_objects2   s   
"rM   c                 C   s   | \}}t g dd}|jd|djdd ||d}t|| t g d}|jd	d
|djdd ||d}t g dd d | }t|| |jd	d
|djt||d}t|| d S )NZfloat64r+   r%   )stepc                 S   s   |   S r   )r   r   r   r   r   <lambda>Q       z$test_rolling_apply.<locals>.<lambda>r&   )NNNr#   r   r)   rN   c                 S   s   t | S r   )r!   r   r   r   r   rO   X   rP   )      ?       @rS   )r   r   r    r/   assert_series_equalr!   )r1   rN   r'   r   r3   r2   r=   r   r   r   test_rolling_applyL   s   

rU   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 )Nr<   r7   r=   r>   r9   r:   r#   r   )r5   1sc                 S      dS Nr   r   r   r   r   r   rO   m       z test_all_apply.<locals>.<lambda>r&   c                 S   rW   rX   r   r   r   r   r   rO   n   rY   )r   r   r   Z	set_indexr   r    r/   rK   )r1   r'   r   rG   Zerrr2   r3   r   r   r   test_all_applya   s   r[   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 )Nr;   r7   z20130101 09:00:00z20130101 09:00:02z20130101 09:00:03z20130101 09:00:05z20130101 09:00:06c                 S   rW   rX   r   r   r   r   r   rO   ~   rY   z#test_ragged_apply.<locals>.<lambda>rV   r   r5   r)   r&   rR   r6   Z5s)	r   r   r   rB   r   r    copyr/   rK   )r1   r'   r   rG   r   r2   r3   r   r   r   test_ragged_applyr   s*   r^   c                   C   sT   t jtdd ttddjdd dd W d    d S 1 s#w   Y  d S )Nz)engine must be either 'numba' or 'cython'r   r   c                 S      | S r   r   r   r   r   r   rO      rY   z%test_invalid_engine.<locals>.<lambda>Zfoo)r'   r   r   r   r   r   r   r    r   r   r   r   test_invalid_engine   s   ""ra   c                   C   sZ   t jtdd ttddjdd dddid	 W d    d S 1 s&w   Y  d S )
Nz+cython engine does not accept engine_kwargsr   r   c                 S   r_   r   r   r   r   r   r   rO      rY   z3test_invalid_engine_kwargs_cython.<locals>.<lambda>ZcythonZnopythonF)r'   Zengine_kwargsr`   r   r   r   r   !test_invalid_engine_kwargs_cython   s
   "rb   c                   C   sV   t jtdd ttddjdd ddd W d    d S 1 s$w   Y  d S )	Nz.raw must be `True` when using the numba enginer   r   c                 S   r_   r   r   r   r   r   r   rO      rY   z(test_invalid_raw_numba.<locals>.<lambda>FZnumba)r   r'   r`   r   r   r   r   test_invalid_raw_numba   s
   $"rc   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 r   )r   r,   )r   re   r   r   r   numpysum   s   z0test_rolling_apply_args_kwargs.<locals>.numpysumr   r#   )grarg   rh   g      &@g      (@)columnsr   )argskwargs)r   r   )r   r   )names)rB   name)r   r   r   r    r/   rK   r   Zfrom_tuplesr   groupbyrT   )rd   rf   rG   idxr3   r2   ZmidxZ
gb_rollingr   r   r   test_rolling_apply_args_kwargs   s   rp   c                 C   s\  t tjdd}tj|d d< tj|dd < |jdddjt| d}t	
|jd t|dd  |jd	d
djt| d}t|jd sJJ t|jd rSJ t|jd r\J t|jd seJ t tjdd	}|jdddjt| d}t|jd sJ t|jd sJ |jd	ddjt| d}|jd	ddjt| d}t	
|| d S )Nr#   2   r%      r(   r   rC               ir7   r   r$   r   r   )r   r   rH   rI   rJ   rD   r   r    r   r/   r0   rE   r   r	   r
   )r   objr2   Zobj2Zresult0Zresult1r   r   r   	test_nans   s"    rz   c                 C   s   t tjdd}tj|d d< tj|dd < |jddddjt| d	}t	|t tjgd
 gjdddjt| d	j
d
d  jdd}t|| d S )Nr#   rq   r%   rr   rt   ru   T)r)   centerr   	   r(   )Zdrop)r   r   rH   rI   rJ   rD   r   r    r   r   rE   Zreset_indexr/   rT   )r   ry   r2   r3   r   r   r   test_center   s   r}   c                 C   sF   | djt| d}t|tsJ t|jd t	|dd   d S )Nrq   r   rC   )
r   r    r   
isinstancer   r/   r0   rE   r   r   )r   seriesr2   r   r   r   test_series   s   $r   c                 C   sd   | djt| d}t|tsJ tj|jdd d f |jdd d d f jtj	d| ddd d S )	Nrq   r   rC   r~   r   )axisr   FZcheck_names)
r   r    r   r   r   r/   rT   rE   r   r   )r   framer2   r   r   r   
test_frame   s   "
r   c           	      C   s   d}d}|d d d  d }|j||djt| d}|jd }|dt   }|d d d ||}t	
|jd t| d S )	N   r%   r#   r;   r\   r   rC   rw   )resampler   r   r    r   rB   r   BDaytruncater/   r0   rE   r   )	r   r   winminpZserZseries_result	last_date	prev_dateZtrunc_seriesr   r   r   test_time_rule_series   s   
r   c           	      C   s   d}d}|d d d  d }|j||djt| d}|jd }|dt   }|d d d ||}t	j
|||jtj| dd	d
 d S )Nr   r%   r#   r;   r\   r   rC   rw   Fr   )r   r   r   r    r   rB   r   r   r   r/   rT   Zxsr   )	r   r   r   r   ZfrmZframe_resultr   r   Ztrunc_framer   r   r   test_time_rule_frame   s   

r   r   )r   c   d   c                 C   sv   |j t|d ||djt| d}|j t|||djt| d}t|}t|t| | }t|| ||  d S )Nr   rQ   r   )r   r!   r    r   r	   r/   rT   r0   )r   r   r   rN   r2   r3   Znan_maskr   r   r   test_min_periods  s   r   c                 C   sv   dd t dD }d}|t|j| jd|djt| dd|j}|jd|d	d
jt| d}t	|| d S )Nc                 S      g | ]}d |dqS r   dr   .0r   r   r   r   
<listcomp>       z.test_center_reindex_series.<locals>.<listcomp>   r%   r   r\   r   Tr5   r)   r{   )
r   reindexlistrB   r   r    r   shiftr/   rT   )r   r   r=   r   Z	series_xpZ	series_rsr   r   r   test_center_reindex_series  s   r   c                 C   s   t tdtddddd}dd tdD }d	}|t|j| jd
|djt| d	d|j}|jd
|ddjt| d}t
|| d S )Nr   z
2020-01-01D)r@   r?   rA   c                 S   r   r   r   r   r   r   r   r   3  r   z-test_center_reindex_frame.<locals>.<listcomp>r   r%   r   r\   r   r   Tr   )r   r   r   r   r   rB   r   r    r   r   r/   rK   )r   r   r=   r   Zframe_xpZframe_rsr   r   r   test_center_reindex_frame0  s   r   c                 C   st   t ddg}d}tjt|d |jdddjtj| d}W d    n1 s'w   Y  t ddg}t|| d S )	Nr   r#   z5Support for axis=1 in DataFrame.rolling is deprecatedr   )r5   r   r   rR   rS   )	r   r/   Zassert_produces_warningFutureWarningr   r    r   r,   rK   )r   rG   msgr2   r3   r   r   r   
test_axis1A  s   r   )+Znumpyr   r   Zpandasr   r   r   r   r   r   r   r	   r
   Zpandas._testingZ_testingr/   Zpandas.tseriesr   ZmarkfilterwarningsZ
pytestmarkr   Zparametrizer"   r4   rM   rU   r[   r^   ra   rb   rc   rp   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sB    ,




