U
    sVc?                     @   s  d dl m Z mZ d dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZ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 d dlmZ d dlmZ d d	lmZ d
d Z dd Z!ej"#ddde$dggdd Z%ej"#deddedddeedddeddgdd Z&ej"#dd d!gd"d# Z'ej"#deddeddgd$d% Z(ej"#deddedddgd&d' Z)ej"#d(d)d*d+d,d-d.gd/d0 Z*ej"#d1d2d3d4d5gd6d7 Z+ej"#d8d4d9d9d:d:d:gd9d9d9d:d:gd:d9d9d9d:gd:d:d9d9d9gd:d:d:d9d9ggfd3d9d:d:d:d:gd9d9d:d:d:gd:d9d9d:d:gd:d:d9d9d:gd:d:d:d9d9ggfd2d9d9d:d:d:gd:d9d9d:d:gd:d:d9d9d:gd:d:d:d9d9gd:d:d:d:d9ggfd5d9d:d:d:d:gd:d9d:d:d:gd:d:d9d:d:gd:d:d:d9d:gd:d:d:d:d9ggfgd;d< Z,ej"#d=d>d2d?d?d?gfd>d4d?d?d?gfd>d3d?d?d?gfd>d5d?d?d?gfd@d2d?ddgfd@d4d?d?d?gfd@d3dAd?d?gfd@d5dAddgfgdBdC Z-ej"#d=dDd2dEdEdEdEdEdEddgfdDd3dddEdEdEdEdEdEgfdDd4dEdEdFdFdFdFdEdEgfdDd5ddddddddgfgdGdH Z.dIdJ Z/dKdL Z0ej"#d1d5d3gdMdN Z1ej"#dOd-d,gdPdQ Z2ej"#dOd-d,gdRdS Z3ej"#dTdUdVgej"#dWd-d2dXd d ddddEddFdYg
fd-d4dXd d d ddddEddFg
fd-d5ej4d d ddddEddFdYg
fd-d3ej4d d d ddddEddFg
fd,d2dXddddEddFdYdZd[g
fd,d4dXddddEddFdYdZd[g
fd,d5ej4d ddddEddFdYdZg
fd,d3ej4d ddddEddFdYdZg
fgd\d] Z5d^d_ Z6ej"#dWd-d2ej4d d ddddEdej4ej4g
fd-d4ej4d d d ddddEdej4g
fd-d5ej4ej4d ddddEdej4ej4g
fd-d3ej4ej4d d ddddEdej4g
fd,d2ej4ddddEddFdFej4ej4g
fd,d4ej4ddddEddFdFdFej4g
fd,d5ej4ej4ddddEddFej4ej4g
fd,d3ej4ej4ddddEddFdFej4g
fgd`da Z7ej"#dbd2d dcddddEddFdYdZg
fd4d dcddddedfdgdhdidjg
fd5ej4d dcdddedfdgdhdidjg
fd3ej4d dcddddEddFdYg
fgdkdl Z8ej"#dmdndgdodp Z9dqdr Z:dsdt Z;dudv Z<dwdx Z=dydz Z>d{d| Z?d}d~ Z@dd ZAej"#dd9dgdY dgd[  dg dgd  dgd  dgd  dgd  dgd  dgd  dgd  dgd  dgd[  dgd  dgdF  dg dgdF  dgd  dgd  dgd  dgd  dgd  dgd  dgdY  dgdE  dgdE  dgd  dgd  dgd  dgd  dgd  dgd  dgd  dgdY  dg dgd  dgd  dgd  fd:ej4gd dgd  dgd[  dg dgd  dgd  dgd  dgd  dgd  dgd  dgd  dgd  dgd[  dgd  dgdF  dg dgdF  dgd  dgd  dgd  dgd  dgd  dgd  dgdY  dgdE  dgdE  dgd  dgd  dgd  dgd  dgd  dgd  dgd  dgdY  dg dgd  dgd  fgdd ZBdd ZCdd ZDdd ZEej"#dedddgdEddFgddgdEgdd gfddgdEdgdd dgfdddgdEddFgdd ddgfgddfedddgdEddFgddgdEgdd gfddgdEdgdd dgfddgddFgdddgfgddfedddgdEddFgddgdEgdd gfddgdEdgdd dgfddgddFgdddgfgddfedddgdEddFgddgdEgdd gfdgdgddgfdgdFgddgfgddfedddgdEddFgddgdEgdd gfdgdgddgfdgdFgddgfgdd fedgdEgdg ddfedgdEgdg ddfe i g fgddfedej4dgej4ddFgddAgej4gdd gfdej4gej4dgdd dgfdej4dgej4ddFgdd ddgfgddfg	dd ZFej"#ddgdEgdd gfddgdEdgdd dgfddgddFgdddgfgdDfdgdEgdd gfddgdEdgdd dgfdddgdEddFgdd ddgfgdfdgdEgdd gfdgdgddgfdgdFgddgfgdfgdd ZGdd ZHej"#dedddgdgd gfddgd dgfdddgd ddgfgddfedddgdgd gfddgd dgfdddgd ddgfgddfedddgdgd gfddgd dgfddgddgfgddfedddgdgd gfddgd dgfddgddgfgddfedddgdgd gfdgdgfdgdgfgdd fedddgdgd gfdgdgfdgdgfgddfeddgdgd gfddgd dgfgdd feg ddg ddfgdd ZIej"#dd gdgdgdgdEggeddddeddddeddddeddddeddddgdfd gd dgddgddgddEggeddddeddddeddddeddddeddddgdDfd gd dgd ddgdddgdddEggeddddeddddeddddeddddeddddgdfgdd ZJej"#ddd iejKdddddgddgdfddiejKdddddgddgdfgddɄ ZLej"#ddXdgdd̄ ZMdd΄ ZNddЄ ZOdd҄ ZPddԄ ZQej"#ddddddgdd܄ ZRddބ ZSej"#ddededgdd ZTdd ZUej"#dedddddfedddddfgej"#dd-ej4d d ddddEddFg	fd,ej4d ddddEddFdYg	fd+ej4d ddddYd[ddg	fgdd ZVdd ZWej"jXe oZe  ddej"#dd.ddd dcdcdd gfd)ddd dddd gfd.dddcd dcdd gfd)dddd ddd gfgdd ZYdd  ZZej"#d(d.d+d*ddd-d,gdd Z[ej"#d=d@d2dAd?dd?gfd@d3dXdAd?dgfd@d4dAd?ddgfd@d5dXdAdd?gfd>d2dAd?ddgfd>d3dAd?ddgfd>d4dAd?ddgfd>d5dAd?ddgfgdd Z\ej"#d	d
dAdAdAdAgfddd?d?dgfgdd Z]ej"#dd.e^dde^ddddddgfd*e^ddje^ddddddgfd+e^dde^ddddddgfde^dde^dddd d!d"gfde^dd#e^dd$d%d&d'd(gfgd)d* Z_ej"#dd ddddEgdfed+ddd,dDfgd-d. Z`d/d0 Zaej"#d(ddgd1d2 Zbej"#d3ddd4dXd5gfdd6d7d8d9gfgd:d; Zcd<d= Zdej"#ddd>gd?d@ ZedAdB ZfdCdD Zgej"#dEddFdGdGdHdIgfddJdJdKdLgfgdMdN ZhdOdP ZidQdR ZjdSdT ZkdUdV Zlej"#dddddgej"#d(d-d,dWgej"#dXd9d:gej"#dYd9d:gej"#dZd[d\d]gd^d_ Zmd`da Znej"#dbdXdcdddcdgej"#dedfdgdhdidjgej"#dkdAdd?d6dddlgdmdAd?d6ddddlgdXej4dnej4dogej4ej4ej4ej4gej4dcej4dpdodcgdcgej4dqdrggdsdt Zodudv Zpdwdx Zqdydz Zrd{d| Zsd}d~ Ztdd Zuej"#ddddgdddejvddddgddej4ddd dd ddggdddej4ddddgddej4ddd d dddggej4ddFdYdddgddej4gd dddd g gddYdYdYej4ejvdEdddg
ddej4gd dd g ej4gdE  dd g gddYdYdYej4ejvdYdddg
ddej4gd dd g ej4gdE  dd g gddYgdE ddej4gd dgdF  gddYdej4dYddYgddej4ddgdgd  dg ggdd Zwdd Zxdd Zydd Zzej"#dd!d gej"#dd9d:gdd Z{ej"#de|e}gdd Z~ej"#dd!d gej"#dd9d:gej"#de|e}gdd ZdS (      )datetime	timedeltaN)is_platform_armis_platform_mac)UnsupportedFunctionCall)
	DataFrameDatetimeIndex
MultiIndexSeries	Timedelta	Timestamp
date_rangeperiod_rangeto_datetimeto_timedelta)BaseIndexer)VariableOffsetWindowIndexer)Rolling)BusinessDayc                  C   s@   t ddddtjdgi} |  | d  | jddd  d S )NBr            min_periods)r   npnanrollingsumdf r!   D/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/window/test_rolling.pytest_doc_string#   s    r#   c              	   C   sr   | t dj}|d |dd |ddd |dddd |ddd	d d
}tjt|d |d W 5 Q R X d S )N   r   r   windowr   r&   r   Tr&   r   centerFz&window must be an integer 0 or greatermatch)ranger   pytestraises
ValueError)frame_or_seriescmsgr!   r!   r"   test_constructor+   s    
r4   w       @foor   c              	   C   s   | t dj}dddg}tjt|d ||d W 5 Q R X d}tjt|d |d|d	 W 5 Q R X d
}tjt|d |dd|d W 5 Q R X d S )Nr$   |zwindow must be an integerz=passed window foo is not compatible with a datetimelike indexr*   r%   zmin_periods must be an integerr   r'   zcenter must be a booleanr   r(   )r-   r   joinr.   r/   r0   )r1   r5   r2   r3   r!   r!   r"   test_invalid_constructor?   s    r:   r&      )days3Dz
2015-12-25r$   periodsr   )indexoffsetc              	   C   sH   t tdtddddd}tjtdd |jdd	d
 W 5 Q R X d S )N
   
2015-12-24Dr?   freqr@   z,step is not supported with frequency windowsr*   r=   r;   step)r   r   aranger   r.   r/   NotImplementedErrorr   )r&   r    r!   r!   r"    test_freq_window_not_implementedW   s     rL   aggcovcorrc              	   C   s@   t tdjddd}tjtdd t||   W 5 Q R X d S )Nr   r   rH   zstep not implementedr*   )r   r-   r   r.   r/   rK   getattr)rM   rollr!   r!   r"   &test_step_not_implemented_for_cov_corrn   s    rR   c                 C   s   d}t dt|itd|ddd}tddgtd	d
d}|j| d }t d|itd|ddd}t|| |d }t|| d S )NrB   valuerC   rD   rE   rG                 ?      @      ;@r;   r%   r=   )	r   r   rJ   r   appendr   r   tmassert_frame_equal)r&   nr    expected_dataresultexpectedr!   r!   r"   &test_constructor_with_timedelta_windowv   s    r_   c              
   C   s   d}t dt|itd|ddd}t dttjdgtdd	d
itd|ddd}|j| dd }|j| ddjt|d}t	
|| t	
|| d S )NrB   rS   z
2017-08-08rD   rE   rG   rU   rV   rW   r;   r   r'   )raw)r   r   rJ   r   rX   NaNr   r   applyrY   rZ   )r&   r`   r[   r    r^   Zresult_roll_sumZresult_roll_genericr!   r!   r"   0test_constructor_timedelta_window_and_minperiods   s    rc   methodstdmeanr   maxminvarc              
   C   s   t tdddgdd}d}d|  }tjt|d2 tjt|d t|| ddd	 W 5 Q R X W 5 Q R X d
|  }tjt|d2 tjt|d t|| t	j
d W 5 Q R X W 5 Q R X d S )Nr   r      r%   z2numpy operations are not valid with window objectsz#Passing additional args to Rolling.r*   r   r;   z%Passing additional kwargs to Rolling.dtype)r   r
   rY   assert_produces_warningFutureWarningr.   r/   r   rP   r   float64)rd   r	error_msgZwarn_msgr!   r!   r"   test_numpy_compat   s    
&
rr   closedrightleftZbothZneitherc                 C   s   |}t ddddddgi}t ddddddgitddd	d
}t|jd| dd| }t|jd| dd| jdd}t|| d S )NAr   r   r   r;   r   2020r$   r>   rG   rs   r   2DTdrop)r   r   rP   r   reset_indexrY   rZ   )rs   arithmetic_win_operators	func_nameZdf_fixeddf_timer]   r^   r!   r!   r"   test_closed_fixed   s    "r   zclosed, window_selectionsTFc                    s   |t ddddddgitddd	d
 t d fdd|D itddd	d
}dkr`ddi}ni }t jd| dddf |}tj||dd d S )Nrv   rT   rU   r6   rV         @rw   r$   r>   rG   c                    s"   g | ]}t  d  j|  qS )rv   )rP   iloc).0sr   r~   r!   r"   
<listcomp>   s     z9test_datetimelike_centered_selections.<locals>.<listcomp>semddofr   ry   r   T)rs   r   r)   FZcheck_dtype)r   r   rP   r   rY   rZ   )rs   Zwindow_selectionsr}   r^   kwargsr]   r!   r   r"   %test_datetimelike_centered_selections   s&    1 


r   zwindow,closed,expected3srV   Z2srU   c                 C   sX   t dt dt dg}|dddg|d}|j| |dd }|||d}t|| d S )Nz20130101 09:00:01z20130101 09:00:02r   rG   Trs   r)   )r   r   r   rY   assert_equalr&   rs   r^   r1   r@   r    r]   r!   r!   r"   ,test_datetimelike_centered_offset_covers_all  s    r   ry   r   rj   c              	   C   s^   t ddddddddg}|dgd |td}|||td}|j| d|d	 }t|| d S )
N
2020-01-01
2020-01-02
2020-01-03
2020-01-04r      r@   rl   T)r)   rs   )r   floatr   r   rY   r   r   r!   r!   r"   +test_datetimelike_nonunique_index_centering&  s    r   c                  C   sR   t tdtddddd} | jdddd	 }t d
ddg| jd}t|| d S )Nr;   r   rD   startrF   r?   rG   ry   r   Tr(         ?      ?r   )r
   r-   r   r   rf   r@   rY   assert_series_equalr   r]   r^   r!   r!   r"   !test_even_number_window_alignmentG  s    r   c                 C   s   ddddddddg}t d|itddt|dd}| rLdd	d
d	dd	dd	g}ntjdd	dd	d
d	dg}t |dgtddt|ddd d | }|jt|dd| |d}| }t|| d S )Nr   r   Z
binary_colr   rh   r   rG   gUUUUUU?r   皙?g@m?g._x%I?)columnsr@   ru   )r&   rs   r   r)   rI   )	r   r   lenr   r   r   rf   rY   rZ   )r)   rI   datar    r\   r^   r   r]   r!   r!   r"   test_closed_fixed_binary_colU  s0        r   c                 C   s`   |}t tdtddddd}|jd| d}t|| }t tjgd |jd}t	|| d S )	Nr$   2000ry   rE   r   r@   1Drs   rG   )
r
   r   rJ   r   r   rP   r   r@   rY   r   )rs   r}   r~   serrQ   r]   r^   r!   r!   r"   test_closed_emptyo  s    r   funcc                 C   sJ   t dgtdddd}t|jddd|  }t|t tjg|jd	 d S )
Nr   r   r   r>   r   10Dru   r   rG   )	r
   r   rP   r   rY   r   r   r   r@   )r   r   r]   r!   r!   r"   test_closed_one_entry{  s    r   c                 C   s   t dddgdddgdtdddd}t|jdd	d
d jddd|  }tjdddg|jgdd}tt	j
dt	j
g|dd}t|| d S )Nr   r   r;   rv   r   r   r>   r   rv   F)sortr   r   ru   r   )rv   N)Zarraysnames)r   r@   name)r   r   rP   groupbyr   r	   Zfrom_arraysr@   r
   r   r   rY   r   )r   r   r]   Zexp_idxr^   r!   r!   r"   test_closed_one_entry_groupby  s    
 r   input_dtypeintr   zfunc,closed,expectedrT      r   	   c                 C   sT   t td| tdddd}t|jd|d| }t ||jd}t	|| d S )NrB   r   r>   r   r=   r   rG   )
r
   r   rJ   astyper   rP   r   r@   rY   r   )r   r   rs   r^   r   r]   r!   r!   r"   test_closed_min_max_datetime  s    
r   c               	   C   sr   t tdtdddd} | j| jddg d} | jdd	d
 }t tjdddddddg| jd}t	
|| d S )NrB   r   r>   r   r   r$   rG   r=   ru   r   r   r   r;   r   rj   )r
   r   rJ   r   r{   r@   r   rh   r   rY   r   )r   r]   r^   r!   r!   r"   test_closed_uneven  s
     r   c                 C   sd   t tdtdddd}tj||jdd  < t|jdd|d|  }t ||jd	}t	|| d S )
NrB   r   r>   r   r=   r   )r   rs   rG   )
r
   r   rJ   r   r   r@   rP   r   rY   r   )r   rs   r^   r   r]   r!   r!   r"   test_closed_min_max_minp  s
    r   zclosed,expectedr   r   g      @g      @g      @g      @g      @g      @c                 C   sd   t tdtdddd}|jd| d}t ||jd}| }t|| |	d}t|| d S )	NrB   r   r>   r   r=   r   rG   r   )
r
   r   rJ   r   r   r@   medianrY   r   quantile)rs   r^   r   rQ   r]   r!   r!   r"   test_closed_median_quantile  s    
r   roller1sc                 C   sX   t  }t  |  }t|| t tg d}t tg d|  }t|| d S )NrG   )r   r   r   rY   rZ   r   )r   r^   r]   r!   r!   r"   tests_empty_df_rolling  s    r   c                  C   sV   t tjtjtjg} t tdd}| }t||  |d}t||  d S )Nr;   r   皙?)	r
   r   r   rJ   r   r   rY   r   r   )r^   rQ   r]   r!   r!   r"   !test_empty_window_median_quantile  s    
r   c                  C   sb   t tjg} | jddd }t dg}t|| | jddd }t tjg}t|| d S )Nr   r   r   rT   )r
   r   r   r   r   rY   r   xr]   r^   r!   r!   r"   test_missing_minp_zero  s    
r   c                  C   sT   t tjgd tddddgd} | jtddd	 }t d
| jd}t	|| d S )Nr   z
2017-01-01z
2017-01-04z
2017-01-06z
2017-01-07rG   Z2dr   r   rT   )
r
   r   r   r   r   r   r   r@   rY   r   r   r!   r!   r"   test_missing_minp_zero_variable  s    
r   c                  C   sj   t jddgdddggddgd} ttd	| d
}|d }t|j	|j	 |j
jd ddgksftd S )Nrv   r   CrD   E12r   )rB   rj   r   r;   )r	   Zfrom_productr   r   onesr   rN   rY   Zassert_index_equalr   r@   r   AssertionError)colsr    r]   r!   r!   r"   test_multi_index_names  s
     r   c                 C   sz   t td}|| }|dkr8t dd tdD }n t tjgd dgd  gd	 }|jd
| d }t	|| d S )N)rB      r   c                 S   s$   i | ]}|t jgd  dgd  qS )r   rV   r   )r   r   r   ir!   r!   r"   
<dictcomp>(  s      z)test_rolling_axis_sum.<locals>.<dictcomp>r   r   rV      rB   r;   axis)
r   r   r   _get_axis_numberr-   r   r   r   rY   rZ   
axis_framer    r   r^   r]   r!   r!   r"   test_rolling_axis_sum"  s    
 r   c                 C   s   t tdtdd}|| }|dkrDt dddgdddgd}nt dddgdddgd}|jd| dd }t|| d S )	Nr;   )r   yr   r@   rU   r6   r   r   )r   r   )r   r-   r   r   countrY   rZ   r   r!   r!   r"   test_rolling_axis_count1  s    
r   c                  C   s\   t ddt jddg} | jdd t| d }tt jdt jt jdg}t|| d S )Nr   r;   r$   F)writer   r   )	r   arrayr   Zsetflagsr
   r   rf   rY   r   )Zarrr]   r^   r!   r!   r"   test_readonly_array@  s
    r   c              	   C   s   |}t dd tddd|dD }| dkrB|jjd| d	 j}n|jd| d	 }t d
d tddd|dD dd tddd|dD }t|| d S )Nc                 S   s   i | ]}|d gd qS )r   r   r!   r   r!   r!   r"   r   M  s      z)test_rolling_datetime.<locals>.<dictcomp>z	2019-8-01z
2019-08-03rD   )rF   tzr   ry   r   c                 S   s   i | ]}|d gd qS )rU   r   r!   r   r!   r!   r"   r   U  s    r   )r?   rF   r   c                 S   s   i | ]}|d gd qS )r6   r   r!   r   r!   r!   r"   r   Y  s    z	2019-8-02z	2019-8-03)r   r   Tr   r   rY   rZ   )r   Ztz_naive_fixturer   r    r]   r^   r!   r!   r"   test_rolling_datetimeI  s"    r   zcenter, expected_datag      V@g     @X@g     X@g     X@   g     W@   g     @W@g     @V@g      X@g     W@   g     V@   g     V@g     U@g      W@g     T@g     U@rB   g     @U@g      S@g     @T@   g     @S@r   c           
      C   s   t  }t||td dd}tjjdd}|jddt|d}t	||d	}|j
d
dd |jddd| dd d}|d
}|d }t||dd}	t||	 d S )Nim  rD   )rF   i  )seedr   d   )highsize)DateColmetricr   T)ZinplaceZ21Dr   ru   )r&   r   rs   r)   r   rg   )r@   r   )r   nowr   r   r   randomZRandomStaterandintr   r   Z	set_indexr   rM   renameZ
_with_freqr
   rY   r   )
r)   r\   Z
date_todayr<   Znprr   r    r]   r@   r^   r!   r!   r"   test_rolling_window_as_stringb  s    [

r   c                  C   sV   t dddddgdgd} | d jdddd }td	d
d
d
d	gdd}t|| d S )Nr   r   r   ar   r;   T)r)   r   rU   r6   r   )r   r   rg   r
   rY   r   r    r]   r^   r!   r!   r"   test_min_periods1  s    r   c                 C   s@   | t djddd }| tjtjdddg}t|| d S )Nr$   r;   r   rV   )r-   r   r   r   r   rY   r   )r1   r]   r^   r!   r!   r"   #test_rolling_count_with_min_periods  s    r   c              	   C   sf   dddt jdddg}ddd	dddd	g}tt | |d }W 5 Q R X | |}t|| d S )
Nr   r   r;   r   r$   rj   rU   r6   rV   )r   r   rY   rm   rn   r   r   r   )r1   valuesZexpected_countsr]   r^   r!   r!   r"   7test_rolling_count_default_min_periods_with_null_values  s    r   zdf,expected,window,min_periodsr   c                 C   s<   dd |D }t || j||dD ]\}}t|| q"d S )Nc                 S   s   g | ]\}}t ||d qS rG   )r   r   r   r@   r!   r!   r"   r   1  s     z/test_iter_rolling_dataframe.<locals>.<listcomp>r   )zipr   rY   rZ   )r    r^   r&   r   actualr!   r!   r"   test_iter_rolling_dataframe  s    F r  zexpected,windowr   c                    sn   t dddddgdddddgtd	dd
dd  fdd| D } t|  j|ddD ]\} }t||  qTd S )Nr   r   r;   r   r$   rj   r   r   z
2016-01-01rD   r   r?   rF   rv   r   r   c                    s&   g | ]\}}t | j|d f dqS )r   rG   )r   locr   r   r!   r"   r   `  s    z2test_iter_rolling_on_dataframe.<locals>.<listcomp>r   )on)r   r   r  r   rY   rZ   )r^   r&   r  r!   r   r"   test_iter_rolling_on_dataframe9  s    
r  c                     sr   t dddgdddgd t dd}  fdd	dgddgdgfD }t| |D ]\}}t|| qXd S )
Nr   r   r   r   r   r   br   c                    s   g | ]} j |d gf qS )r   )r   )r   idxr   r!   r"   r   k  s     z<test_iter_rolling_on_dataframe_unordered.<locals>.<listcomp>)r   listr   r   r  rY   rZ   )results	expectedsr]   r^   r!   r   r"   (test_iter_rolling_on_dataframe_unorderedg  s
     r  z ser,expected,window, min_periodsint64rk   c                 C   s<   dd |D }t || j||dD ]\}}t|| q"d S )Nc                 S   s   g | ]\}}t ||d qS r   r
   r   r!   r!   r"   r     s     z,test_iter_rolling_series.<locals>.<listcomp>r   )r  r   rY   r   )r   r^   r&   r   r  r!   r!   r"   test_iter_rolling_seriesp  s    # r  zexpected,expected_index,windowr   rD   rE   r   r   r   z
2020-01-05c                 C   sX   t tdtddddd}dd t| |D } t| ||D ]\} }t||  q>d S )Nr$   r   rD   r  rG   c                 S   s   g | ]\}}t ||d qS r   r  )r   r   r  r!   r!   r"   r     s    z.test_iter_rolling_datetime.<locals>.<listcomp>)r
   r-   r   r  r   rY   r   )r^   Zexpected_indexr&   r   r  r!   r!   r"   test_iter_rolling_datetime  s    (r  zgrouping,_indexlevel)r   r   )r   r   r   byX)r   r   )r   r   )r;   r   )r   r   c                 C   s   dd }t dtdidddddgd}t ddd	d
ddgi|d}d| krV|jddd}|jf | dj||dd}t|| d S )Nc                  W   s(   t | dk rtd| \}}| | S )Nr   z The function needs two arguments)r   r0   r   )argsr   Zscaler!   r!   r"   
scaled_sum  s    z4test_rolling_positional_argument.<locals>.scaled_sumr  r$   r   r   r   rT   r   rU   r   r6   r  ignore)r   errors)r   )r`   r  )r   r-   r{   r   r   rb   rY   rZ   )grouping_indexr`   r  r    r^   r]   r!   r!   r"    test_rolling_positional_argument  s    r  addc              	   C   s   t dd|  ddgitdtdtdgd}|d jd	d
dd }tdddd}t dtjtjtjddddgi|d}t	
|| d S )Nrv   gVUUUUU%C       z19700101 09:00:00z19700101 09:00:03z19700101 09:00:06rG   r   r   ru   r;   rx   r   SrE   gUUUUUU%CgqqCgqqCrT   )r   r   ZresampleZffillr   rf   r   r   r   rY   rZ   )r  r    r]   datesr^   r!   r!   r"   *test_rolling_numerical_accuracy_kahan_mean  s0    	r"  c                  C   sX   t ddddddgdgd} | d d }ttjtjddddgdd}t|| d S )	Ngrh|@g'1ZrT   r   r   r;   gsh|??r   )r   r   r   r
   r   r   rY   r   r   r!   r!   r"   )test_rolling_numerical_accuracy_kahan_sum  s    r#  c                  C   s^   t ddddtdg} tjt| }td|i| d}|d	 }t
||dg  d S )Nr   r   Z60sr   endrF   r   r   rG   )r   rX   r   r   r   randr   r   r   rf   rY   rZ   )r@   r   r    r]   r!   r!   r"   $test_rolling_numerical_accuracy_jump  s    r'  c                  C   s8   t ddddgtddd} | d }t||  d S )Ng(@S ?ga2U0*3?r  z
1999-02-03z
1999-02-06r   r   )r
   r   r   rf   rY   r   )r   r]   r!   r!   r"   ,test_rolling_numerical_accuracy_small_values%  s    
r(  c                  C   sp   t dddd} ttd| tjd}d|d< |d }ttjtjtjtjd	d	d	d
ddg
| d}t	|| d S )Nz
2015-01-01rB   rD   rE   )r   r@   rl   gТr   r$   gk/      @      @      @rG   )
r   r
   r-   r   ro   r   rf   r   rY   r   )r!  dsr]   r^   r!   r!   r"   (test_rolling_numerical_too_large_numbers/  s&    r-  )r   rS   )r   r6   )rg   rU   )rh   rU   )rf   rU   )r   rU   c                 C   sl   t dddgdddgd}d|d< t|jdddd|  }t ddg||g||gd	ddgd
}t|| d S )Nr   r   r   r
  r2   )r@   r   rU   r&   r   r   r   r
  r2   rG   )r   rP   r   rY   rZ   )r   rS   r    r]   r^   r!   r!   r"    test_rolling_mixed_dtypes_axis_1G  s    r0  c               
   C   s   t ddddtjtjtjgdddtjtjtjtjgdddtjdtjdgg} | jdddd }t dd	d
ddddgdd	d
d
d
d
d
gdddddddgg}t|| d S )Nr   r   r   r   r   r   r.  rT   rU   rV   r+  r6   r   r*  )r   r   r   r   r   rY   rZ   r   r!   r!   r"   test_rolling_axis_one_with_nanW  s    r1  rS   testz
2019-12-31z1 days 06:05:01.00003c                 C   sL   t dddgi}| |d< |jdddd }t dddgi}t|| d S )Nr   r   r   r
  r.  rU   r6   )r   r   r   rY   rZ   )rS   r    r]   r^   r!   r!   r"   &test_rolling_axis_1_non_numeric_dtypesk  s
    r3  c                  C   s   t dd gddgddgd} t dtjgddgd	d
gd}| jdddd }t|| | jjddd j}t|| d S )Nr   r   r$   r   r   r  rU   r)  g      &@      *@r   )r   r&   r   )r   r&   )r   r   r   r   r   rY   rZ   r   )r    r^   r]   r!   r!   r"   test_rolling_on_df_transposedx  s    r5  )r@   r&   z2020-01-01 08:00z2020-01-01 08:08r   r$  Z2Tz2020-01-01 12:00Z30TZ1h)r   r      c              
   C   sP   t ddddddddd	g	| d
}t|j|dd| }t || d
}t|| d S )Nr   r   r   r;   r   r$   rj   r   r   rG   ru   r   )r
   rP   r   rY   r   )r@   r&   r   r   r,  r]   r^   r!   r!   r"   test_rolling_period_index  s    r7  c                 C   s^   | dddg}|j ddd }t|tr8t|d j}ttjgdgd  }t	|| d S )Nr   r   r   r   g;f?)
r   r   
isinstancer   r
   r   r   r   rY   r   )r1   objr]   r^   r!   r!   r"   test_rolling_sem  s    
r:  zGH 38921)reason)r   third_valuer   g|Fg >gfoCgPp?g۞?c                 C   s\   t dd|ddddg}t|d|  }t tjg| }t|| t|dk|dk d S )Nl   ;r   r   r;   r   r
   rP   r   r   r   rY   r   )r   r<  r   r,  r]   r^   r!   r!   r"   !test_rolling_var_numerical_issues  s
    r>  c                  C   s  t tjtjddddddddg
tjtjddddddddg
dttdd	ftdd
ftdd	ftdd
ftdd	ftdd
ftdd	ftdd
ftdd	ftdd
fg
d} t dddddgdddddgdtdtdtdtdtdgd}|jdd }t	| | d S )Ng?g      rU   g6<AԿg     ?g?)r   rv   z20130101 09:00:00r   rv   z20130102 09:00:02z20130103 09:00:03z20130105 09:00:05z20130106 09:00:06rG   r   r   r   r   r;   r   rj   r   Z3dr%   )
r   r   r   r	   from_tuplesr   r   rO   rY   rZ   )expr    resr!   r!   r"   ,test_timeoffset_as_window_parameter_for_corr  sb    









+rB  skewkurtc                 C   s   t dtddd i}t d|d ddd i|jddd d}t|jdd	|  }t|jdd	|  }t|jddd dd
 |jdd   dk st	dS )zf
    Make sure that decreasing indices give the same results as increasing indices.

    GH 36933
    r   irB   r   Nr,   rG   r$   r%   r   g-q=)
r   r   rJ   r@   rP   r   absr   rg   r   )rd   r    Z
df_reverseZ
increasingZ
decreasingr!   r!   r"   test_rolling_decreasing_indices  s
    *rG  r)  r*  c                 C   s   t dddd}|td|d}|td|ddd d}|||d}|||ddd d}|j| |dd	 }	|j| |dd	 }
t|	| t|
| dS )
zV
    Ensure that a symmetrical inverted index return same result as non-inverted.
    rw   r   r   rE   rG   Nr,   Tr   )r   r-   r   r   rY   r   )r&   rs   r^   r1   r@   Zdf_incZdf_decZexpected_incZexpected_decZ
result_incZ
result_decr!   r!   r"   (test_rolling_decreasing_indices_centered  s    rH  zwindow,expected1nsZ3nsc                 C   sV   t dddd}|ddddg|td}|||td}|j| |dd }t|| d S )	Nrw   r   rI  rE   r   r   Tr   )r   r   r   r   rY   r   r   r!   r!   r"   )test_rolling_center_nanosecond_resolution-  s
    
rJ  zmethod,expectedr   g     E@g
a@g     E@gCݽW@g     f@g     s@g     5@g`UU"@r4  g     1@g      >@g     K@g     a@g/e?g8j{?gLM?g4`i?g
+TT?g?g %bgOq&g zCen@gk=Cпg~~׿gf`8gݿc                 C   sx   ddddddddg}t dtt|d i}G dd dt}|d|d}t|||  }t d|i}t|| d	S )
z
    Make sure the (rare) branch of non-monotonic indices is covered by a test.

    output from 1.1.3 is assumed to be the expected output. Output of sum/mean has
    manually been verified.

    GH 36933.
    TFr   r   c                   @   s   e Zd Zdd ZdS )z1test_rolling_non_monotonic.<locals>.CustomIndexerc           	      S   sl   t j|t jd}t j|t jd}t|D ]:}| j| rLd||< |d ||< q(|||< || j ||< q(||fS )Nrk   r   r   )r   emptyr  r-   use_expandingwindow_size)	selfZ
num_valuesr   r)   rs   rI   r   r%  r   r!   r!   r"   get_window_bounds  s    
zCtest_rolling_non_monotonic.<locals>.CustomIndexer.get_window_boundsN)__name__
__module____qualname__rO  r!   r!   r!   r"   CustomIndexer  s   rS  r   )rM  rL  N)	r   r   rJ   r   r   rP   r   rY   rZ   )rd   r^   rL  r    rS  Zindexerr]   r!   r!   r"   test_rolling_non_monotonic>  s    >rT  z
2001-01-01)rF   r?   c                 C   sf   t dddddg| d}| }d|jdd< |||}t tjtjdddg| d}t|| d S )	Nr   r   r;   r   r$   rG   rT   r   )	r
   copyr   r   rO   r   r   rY   assert_almost_equal)r@   r&   r   r   r]   r^   r!   r!   r"   !test_rolling_corr_timedelta_index  s    	rW  c               
   C   s   dt jddt jgdddddgd} t| }|jd	d
djddd }tddddddgitddt jgdddddggdddddgdddddggd	d gdd}t|| d S )NZg1Zg2r   r   r   r;   r   )groupr   rX  F)Zdropnar   r   rT   r6   rV   rU   r   r   rG   )	r   r   r   r   r   rf   r	   rY   rZ   )r   r    r]   r^   r!   r!   r"   !test_groupby_rolling_nan_included  s    "rY  c                 C   s`   t tjd}| }t|d|  }t|| |d }t|d|  }t|| d S )NrB   r;   iP  )	r
   r   r   r&  rU  rP   r   rY   r   )rd   r   Zser_copyr^   r]   r!   r!   r"   *test_rolling_skew_kurt_numerical_stability  s    rZ  )rd   r   g+X?gJ_9?r   gBʠg333333g >@c                 C   sL   t dddddddg}t|d|  }t tjgd | }t|| d S )Ni- r   r   r;   r   i  r=  )rd   r   r   r]   r^   r!   r!   r"   (test_rolling_skew_kurt_large_value_range  s    	r[  c                	   C   s4   t jtdd ttdjddd W 5 Q R X d S )Nz!method must be 'table' or 'singler*   r   r7   )rd   )r.   r/   r0   r
   r-   r   r!   r!   r!   r"   test_invalid_method  s    r\  1dc                 C   s   t dddd}|tdd|d}|jddd	 }|tjdd
g|d}t|| |jd d d jddd	 }t dddd}|tjdd
g|d}t|| d S )Nr   r   r]  r$  r   r   rG   ru   r   r   r,   z-1dr;   )	r   r-   r   r   r   r   rY   r   r   )r&   r1   r  r9  r]   r^   r!   r!   r"   .test_rolling_descending_date_order_with_offset  s    r^  c                  C   s\   t ddddg} | d }t tjtjddg}tj||ddd t|dk|dk d S )Nr   r$   r;   UUUUUU?r   V瞯<ZatolZrtol)r
   r   ri   r   r   rY   r   r   r!   r!   r"   ,test_rolling_var_floating_artifact_precision  s
    rb  c                  C   sB   t dddg} | d }t tjddg}tj||ddd d S )NgQ؎>g 4PSȡ>r   g[^>>r`  ra  )r
   r   re   r   r   rY   r   r   r!   r!   r"   test_rolling_std_small_values  s    rc  zstart, exp_valuesQ?gX9v?gI+?gˡE?MbP?g~jtX?<#	n?c                 C   s   t dddtjddtjtjtjtjtjtjddg}|ddddtjtjddg }t |tt| t||  d	}|j| d  jd
dd }t	
|| d S )Nrd  re  Mb`?Mb?{Gzt?皙?rf  g=
ףp=?rG   r$   r   r   )r   r   ra   r  r-   r   r   r   rf   rY   rZ   )r   Z
exp_valuesr    r   r^   r]   r!   r!   r"   3test_rolling_mean_all_nan_window_floating_artifacts  sB    	
rk  c                  C   sP   t dddtjtjtjg} | jddd }t dddd	dd
g}t|| d S )Nrg  rh  ri  r;   r   r   g{Gz?gQ?g9v?rT   )r   r   ra   r   r   rY   rZ   r   r!   r!   r"   2test_rolling_sum_all_nan_window_floating_artifacts0  s    rl  c                  C   s6   t td} | d }t tjg}t|| d S )Nr   r   )r
   r-   r   rh   r   r   rY   r   r   r!   r!   r"   test_rolling_zero_window8  s    rm  c                 C   sd   t tdtddd| d}t tjgd tdddd| d}|jddd	 }tj||d
d d S )Nr$   rB      r   rk   r   r   r   r   Fr   )r   r-   r   r   r   r   rY   rZ   )Zfloat_numpy_dtyper    r^   r]   r!   r!   r"   test_rolling_float_dtype@  s    ro  c                  C   s   t tdddtdddddd	d
dddddd
} | jdddd }t tdddtdddtdddtdddtdddtdddtdddtdddtdddtdddd
dd}t	
|| d S )N(   r   rB   Z
abcdefghijr   Zfloat16Zfloat32ro   Zint8Zint16Zint32Zuint8Zuint16Zuint32Zuint64)
r   r
  r2   defghr   jr   r   r.  r   r;   r$   rj   r   r   rk   )r   r   rJ   reshaper  r   r   rh   r-   rY   rZ   r   r!   r!   r"   test_rolling_numeric_dtypesK  s:    









rx  Zaveragepct	ascending	test_datadefault
duplicatesnansc           	   	      s   d}|dkr t tj|d}nN|dkr>t tjd|d}n0|dkrnt tjddd	tjtjtj g|d}||  fd
d}|| j	 d}t
|| d S )Nr   r|  )r   r}  r;   r~  rU         ?      ?c                    s   | j  djd S )Nrd   ry  rz  r,   )rankr   )r   rz  rd   ry  r!   r"   <lambda>      ztest_rank.<locals>.<lambda>r  )r
   r   r   r&  choicer   infr   rb   r  rY   r   )	r&   rd   ry  rz  r{  lengthr   r^   r]   r!   r  r"   	test_rankn  s     
r  c                  C   sz   d} d}t d| dd}ttj| | | df|d}|jdd	d
gdd}tj|dddgdd}t	|j
t| d S )NrB   r$   Z20100101r   rE   r,   rG   r  r   r  r   r      2   K   )r   r   r   r   r&  rw  r   Z
percentilerY   rV  r   r   )rowcolr  r    Zdf_quantileZnp_percentiler!   r!   r"   #test_rolling_quantile_np_percentile  s    "r  r   r   g?interpolationZlinearlowerZhigherZnearestZmidpointr   r+  g       @rj  r   g333333?gffffff?g333333?c                 C   sX   t |}|| |}|jdd| |jd }t|rHt|sTtn||ksTtd S )Nr   r   r,   )r
   r   Z	expandingr   r   isnanr   )r   r  r   r   Zq1Zq2r!   r!   r"   +test_rolling_quantile_interpolation_options  s    
r  c               	   C   sP   t d} t| }d}tjt|d" |jt| ddjddd W 5 Q R X d S )	Nr$   z(Interpolation 'invalid' is not supportedr*   r   r   r   invalid)r  )	r   rJ   r
   r.   r/   r0   r   r   r   )r   r   r3   r!   r!   r"   test_invalid_quantile_value  s
    
r  c               	   C   s   t dddddg} d}tjt|d | dd	 W 5 Q R X d
}tjt|d | dd W 5 Q R X d}tjt|d | dd W 5 Q R X d S )NrT   r   r   g?rU   z#quantile value -0.1 not in \[0, 1\]r*   r;   gz#quantile value 10.0 not in \[0, 1\]g      $@zmust be real number, not strr7   )r
   r.   r/   r0   r   r   	TypeError)r   r3   r!   r!   r"   test_rolling_quantile_param  s    r  c                  C   s   t dddddg} | jddd }t tjgd }t|| | jdddjd	d
}t dgd }t|| t tjtjdddgjddd }t|d std S )NrU   r6   rV   r   r)  r   r   r$   r   )r   rT   r;   r   r   )	r
   r   re   r   r   rY   r   r  r   )valsr]   r^   r!   r!   r"   test_rolling_std_1obs  s    $r  c                  C   sj   t dddddg} | jdd }t|dd   s<t| jdd }t|dd   sftd S )Nge>R?gRz12?r;   r%   r   )span)r
   r   re   r   isfiniteallr   Zewmr	  r!   r!   r"   test_rolling_std_neg_sqrt  s    	r  c                	   C   s4   t jtdd ttdjddd W 5 Q R X d S )Nzstep must be an integerr*   r   r   r7   rH   r.   r/   r0   r   r-   r   r!   r!   r!   r"   test_step_not_integer_raises  s    r  c                	   C   s4   t jtdd ttdjddd W 5 Q R X d S )Nzstep must be >= 0r*   r   r   r,   rH   r  r!   r!   r!   r"   test_step_not_positive_raises  s    r  r   r   r^   r  g@@g     @D@UUUUUU?gUUUUUU8@r_  gUUUUUU@c                 C   s~   t |}t | }|j||d }t|| t|dk|dk |j||d }t|t| t|dk|dk d S )Nr   r   )r
   r   ri   rY   r   re   r   sqrt)r   r&   r   r^   srZ
result_varZ
result_stdr!   r!   r"   'test_rolling_var_same_value_count_logic  s    2	r  c                  C   sd   t dddddddg} | d}| }|dd  dk s@t| }|dd  dk s`td S )Nr  r   r   r;   r   )r
   r   rf   r  r   r   r  rp   r]   r!   r!   r"   (test_rolling_mean_sum_floating_artifactsB  s    
r  c                  C   sd   t dddddddg} | d}| }|dd  dk s@t| }|dd  dk s`td S )Nr  r   r   r   )r
   r   rC  r  r   rD  r  r!   r!   r"   )test_rolling_skew_kurt_floating_artifactsM  s    
r  c           	      C   s   | }t dgddd}|d t|d< |jddd}t||}||d}|rVdd	gndd	dg}|| |gjd
dt}t|j	|kst
t|| d S )Nr   r   r;   r/  r2   r   numeric_onlyr   r
  Trz   )r   r   objectr   rP   rM   r|   r   r  r   r   rY   rZ   )	r}   r  kernelr    r   opr]   r   r^   r!   r!   r"   test_numeric_only_frameX  s    

r  r  use_argc                 C   s   t dddgddd}|d t|d< |r2|fnd}|jddd}t|| }||d|i}|rhd	d
gnd	d
dg}|| t}	|r|	fnd}
|	jddd}t|| }||
d|i}t|| d S )Nr   r   r;   r/  r2   r!   r   r  r   r
  )r   r   r  r   rP   r   rY   rZ   )r  r  r  r    argr   r  r]   r   Zdf2arg2rolling2op2r^   r!   r!   r"    test_numeric_only_corr_cov_frameh  s    

r  rl   c           
   	   C   s   | }t dg|d}|jddd}t||}|rh|tkrhd| d}tjt|d ||d W 5 Q R X n0||d}||gjd	d
	t
}	t||	 d S )Nr   rk   r   r   Rolling.  does not implement numeric_onlyr*   r  Trz   )r
   r   rP   r  r.   r/   rK   rM   r|   r   r   rY   r   )
r}   r  rl   r  r   r   r  r3   r]   r^   r!   r!   r"   test_numeric_only_series~  s    

r  c              	   C   s   t dddg|d}|r|fnd}|jddd}t|| }|rz|tkrzd|  d}tjt|d	 ||d
|i W 5 Q R X nX||d
|i}	|t}
|r|
fnd}|
jddd}t|| }||d
|i}t	
|	| d S )Nr   r   r;   rk   r!   r   r  r  r*   r  )r
   r   rP   r  r.   r/   rK   r   r   rY   r   )r  r  r  rl   r   r  r   r  r3   r]   Zser2r  r  r  r^   r!   r!   r"   !test_numeric_only_corr_cov_series  s    


r  )r   r   Znumpyr   r.   Zpandas.compatr   r   Zpandas.errorsr   Zpandasr   r   r	   r
   r   r   r   r   r   r   Zpandas._testingZ_testingrY   Zpandas.api.indexersr   Zpandas.core.indexers.objectsr   Zpandas.core.windowr   Zpandas.tseries.offsetsr   r#   r4   markZparametrizer   r:   rL   rR   r_   rc   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r?  r  r"  r#  r'  r(  r-  r0  r1  r3  r5  r7  r:  Zxfailr>  rB  rG  rH  rJ  r   rT  rW  rY  rZ  r[  r\  r^  rb  rc  rk  rl  rm  ro  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r!   r!   r!   r"   <module>   sn  0

 





-

	



" $"" $"
		

		
 !"#$+
	
 !"#$Y

"D




	,,((22*!

$&
  




	
	
=
(&4!
'# 	**
/