U
    f/eu                     @   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	 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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!d" Z$d#d$ Z%ejd%d&d'd'd(d(d(gd'd'd'd(d(gd(d'd'd'd(gd(d(d'd'd'gd(d(d(d'd'ggfd)d'd(d(d(d(gd'd'd(d(d(gd(d'd'd(d(gd(d(d'd'd(gd(d(d(d'd'ggfd*d'd'd(d(d(gd(d'd'd(d(gd(d(d'd'd(gd(d(d(d'd'gd(d(d(d(d'ggfd+d'd(d(d(d(gd(d'd(d(d(gd(d(d'd(d(gd(d(d(d'd(gd(d(d(d(d'ggfgd,d- Z&d.d/ Z'd0d1 Z(ejd2d+d)gd3d4 Z)ejd5ddgd6d7 Z*ejd5ddgd8d9 Z+ejd:d;d<gejd=dd*d>d d d?ddd@dAdBdCg
fdd&d>d d d d?ddd@dAdBg
fdd+ej,d d d?ddd@dAdBdCg
fdd)ej,d d d d?ddd@dAdBg
fdd*d>d?ddd@dAdBdCdDdEg
fdd&d>d?ddd@dAdBdCdDdEg
fdd+ej,d d?ddd@dAdBdCdDg
fdd)ej,d d?ddd@dAdBdCdDg
fgdFdG Z-dHdI Z.ejd=dd*ej,d d d?ddd@dAej,ej,g
fdd&ej,d d d d?ddd@dAej,g
fdd+ej,ej,d d?ddd@dAej,ej,g
fdd)ej,ej,d d d?ddd@dAej,g
fdd*ej,d?ddd@dAdBdBej,ej,g
fdd&ej,d?ddd@dAdBdBdBej,g
fdd+ej,ej,d?ddd@dAdBej,ej,g
fdd)ej,ej,d?ddd@dAdBdBej,g
fgdJdK Z/ejdLd*d dMd?ddd@dAdBdCdDg
fd&d dMd?dNdOdPdQdRdSdTg
fd+ej,d dMdNdOdPdQdRdSdTg
fd)ej,d dMd?ddd@dAdBdCg
fgdUdV Z0ejdWdXd?gdYdZ Z1d[d\ Z2d]d^ Z3d_d` Z4dadb Z5dcdd Z6dedf Z7dgdh Z8didj Z9ejdkd'dlgdC dmgdE  dng dogdp  dqgdr  dsgdA  dtgdA  dugdp  dvgdw  dxgdy  dlgd  dxgdE  dugdp  dqgdB  dzg d{gdB  d|gdp  d}gd  d~gd  d{gdA  dngdp  dmgdw  dsgdC  d{gd@  d~gd@  dqgdp  dgdw  d}gd  dgdA  dgd  dngdp  dqgdw  dzgdC  d~g dsgd  dqgd  dgd  fd(ej,gd dlgdr  dmgdE  dng dogdp  dqgdr  dsgdA  dtgdA  dugdp  dvgdw  dxgdy  dlgd  dxgdE  dugdp  dqgdB  dzg d{gdB  d|gdp  d}gd  d~gd  d{gdA  dngdp  dmgdw  dsgdC  d{gd@  d~gd@  dqgdp  dgdw  d}gd  dgdA  dgd  dngdp  dqgdw  dzgdC  d~g dsgd  dqgd  fgdd Z:dd Z;dd Z<dd Z=ejded?ddgd@dAdBgdd?gd@gdd gfd?dgd@dAgdd d?gfd?ddgd@dAdBgdd d?dgfgddfed?ddgd@dAdBgdd?gd@gdd gfd?dgd@dAgdd d?gfddgdAdBgdd?dgfgdd?fed?ddgd@dAdBgdd?gd@gdd gfd?dgd@dAgdd d?gfddgdAdBgdd?dgfgddfed?ddgd@dAdBgdd?gd@gdd gfdgdAgdd?gfdgdBgddgfgd?d?fed?ddgd@dAdBgdd?gd@gdd gfdgdAgdd?gfdgdBgddgfgd?d fed?gd@gdg ddfed?gd@gdg dd?fe i g fgddfed?ej,dgej,dAdBgddgej,gdd gfd?ej,gej,dAgdd d?gfd?ej,dgej,dAdBgdd d?dgfgddfg	dd Z>ejdd?gd@gdd gfd?dgd@dAgdd d?gfddgdAdBgdd?dgfgdfd?gd@gdd gfd?dgd@dAgdd d?gfd?ddgd@dAdBgdd d?dgfgdfd?gd@gdd gfdgdAgdd?gfdgdBgddgfgdfgdd Z?e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 Z@ejdd gd?gdgdgd@g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d@g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?dgd?ddgddd@ggedd?ddeddddeddddeddddeddddgdfgdd ZAejddd iejBdddddgddgdfddiejBdddddgddgdfgdd ZCejdd>dgdd ZDdd ZEdd ZFdd ZGdd ZHejddddddgddƄ ZIddȄ ZJejdded˃ed̃gdd΄ ZKddЄ ZLejdeddddՍdfeddddՍdfgejddej,d d d?ddd@dAdBg	fdej,d d?ddd@dAdBdCg	fdej,d d?ddAdCdEddyg	fgdd݄ ZMdd߄ ZNejjOe oe  ddejdd d?dd dMdMdd gfdd?dd dddd gfd dddMd dMdd gfddddd ddd gfgdd ZPdd ZQejdd ddddddgdd ZRejdd eSddeSddddddgfdeSddTeSddddddgfdeSddeSdd~dddzdgfdeSddeSdd ddddgfdeSddeSddddd	d
gfgdd ZTejdd d?ddd@gdfedddAddfgdd ZUdd ZVejdddgdd ZWejddddd>dgfdddddgfgdd ZXdd ZYejdd?d gd!d" ZZd#d$ Z[d%d& Z\ejd'd?d(d)d)d*d+gfdd,d,d-d.gfgd/d0 Z]d1d2 Z^d3d4 Z_dS (5      )datetime	timedeltaN)is_platform_armis_platform_mac)UnsupportedFunctionCall)
	DataFrameDatetimeIndex
MultiIndexSeries	Timedelta	Timestamp
date_rangeperiod_rangeto_datetimeto_timedelta)BaseIndexer)Rollingc                  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-tiezk1ph/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    
r3   w       @foor   c              	   C   s   | t dj}d}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"   zWwindow must be an integer|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+   )r0   r4   r1   r2   r   r   r    test_invalid_constructor<   s    r7   r$      )daysc                 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 )N
   valuez
2015-12-24Dperiodsfreqindex              ?      @      ;@r8   r#   3D)	r   r   aranger   appendr   r   tmassert_frame_equal)r$   nr   expected_dataresultexpectedr   r   r    &test_constructor_with_timedelta_windowR   s    rO   rF   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 )Nr:   r;   z
2017-08-08r<   r=   r@   rC   rD   rE   r8   r   r%   )raw)r   r   rG   r   rH   NaNr   r   applyrI   rJ   )r$   rP   rK   r   rN   Zresult_roll_sumZresult_roll_genericr   r   r    0test_constructor_timedelta_window_and_minperiodsf   s    rS   methodstdmeanr   maxminvarc              	   C   sv   t tdddgdd}d}tjt|d t|| ddd W 5 Q R X tjt|d t|| tjd	 W 5 Q R X d S )
Nr   r      r#   z2numpy operations are not valid with window objectsr(   r   r8   dtype)r   r
   r-   r.   r   getattrr   float64)rT   rr2   r   r   r    test_numpy_compatx   s    r`   c                 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   r8   r   2020r"   r>   r@   closedr   2DT)drop)r   r   r]   r   Zreset_indexrI   rJ   )re   arithmetic_win_operators	func_nameZdf_fixeddf_timerM   rN   r   r   r    test_closed_fixed   s    "rk   zclosed, window_selectionsZbothTFleftrightZneitherc                    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 )Nra   rB   rC   r5   rD         @rb   r"   rc   r@   c                    s"   g | ]}t  d  j|  qS )ra   )r]   iloc).0srj   ri   r   r    
<listcomp>   s     z9test_datetimelike_centered_selections.<locals>.<listcomp>semZddofr   rf   r   T)re   r   r'   F)Zcheck_dtype)r   r   r]   r   rI   rJ   )re   Zwindow_selectionsrh   rN   kwargsrM   r   rr   r    %test_datetimelike_centered_selections   s&    1 


rv   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 )Nr8   
2020-01-01r<   startr?   r>   r@   rf   r   Tr&         ?      ?r   )r
   r,   r   r   rV   rA   rI   assert_series_equalrq   rM   rN   r   r   r    !test_even_number_window_alignment   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}|jt|dd| d}| }t|| d S )Nr   r   Z
binary_colrw   rX   rx   r@   gUUUUUU?rz   g?g@m?g._x%I?)columnsrA   rl   )r$   re   r   r'   )	r   r   lenr   r   r   rV   rI   rJ   )r'   datar   rL   rN   r   rM   r   r   r    test_closed_fixed_binary_col   s     r   re   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"   2000rf   r=   r   rA   1Dre   r@   )
r
   r   rG   r   r   r]   r   rA   rI   r|   )re   rh   ri   serrollrM   rN   r   r   r    test_closed_empty  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   rc   r   10Drl   r   r@   )	r
   r   r]   r   rI   r|   r   r   rA   )r   r   rM   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   r8   ra   r   r   rc   r   ra   F)sortr   r   rl   r   )ra   N)Zarraysnames)r   rA   name)r   r   r]   groupbyr   r	   Zfrom_arraysrA   r
   r   r   rI   r|   )r   r   rM   Zexp_idxrN   r   r   r    test_closed_one_entry_groupby  s    
 r   input_dtypeintfloatzfunc,closed,expectedrB   r   r   r"   rZ         	   c                 C   sT   t td| tdddd}t|jd|d| }t ||jd}t	|| d S )Nr:   r   rc   r   rF   r   r@   )
r
   r   rG   Zastyper   r]   r   rA   rI   r|   )r   r   re   rN   r   rM   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 )Nr:   r   rc   r   r   r"   r@   rF   rl   r   r   r   r8   r   rZ   )r
   r   rG   r   rg   rA   r   rX   r   rI   r|   )r   rM   rN   r   r   r    test_closed_unevenB  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 )
Nr:   r   rc   r   rF   r   )r   re   r@   )
r
   r   rG   r   r   rA   r]   r   rI   r|   )r   re   rN   r   rM   r   r   r    test_closed_min_max_minpM  s
    r   zclosed,expectedrz   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 )	Nr:   r   rc   r   rF   r   r@   rz   )
r
   r   rG   r   r   rA   medianrI   r|   quantile)re   rN   r   r   rM   r   r   r    test_closed_median_quantilec  s    
r   roller1sc                 C   sX   t  }t  |  }t|| t tg d}t tg d|  }t|| d S )Nr@   )r   r   r   rI   rJ   r   )r   rN   rM   r   r   r    tests_empty_df_rollingy  s    r   c                  C   sV   t tjtjtjg} t tdd}| }t||  |d}t||  d S )Nr8   r   g?)	r
   r   r   rG   r   r   rI   r|   r   )rN   r   rM   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   rB   )r
   r   r   r   r   rI   r|   xrM   rN   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-07r@   Z2dr   r   rB   )
r
   r   r   r   r   r   r   rA   rI   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 )Nra   r   Cr<   E12r   )r:   rZ   r   r8   )r	   Zfrom_productr   r   onesr   ZcovrI   Zassert_index_equalr   rA   r   AssertionError)colsr   rM   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)r:      r   c                 S   s$   i | ]}|t jgd  dgd  qS )r   rD   r   )r   r   rp   ir   r   r    
<dictcomp>  s      z)test_rolling_axis_sum.<locals>.<dictcomp>r   r   rD      r:   r8   axis)
r   r   r   _get_axis_numberr,   r   r   r   rI   rJ   
axis_framer   r   rN   rM   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 )	Nr8   )r   yr   rA   rC   r5   r   r   )r   r   )r   r,   r   r   countrI   rJ   r   r   r   r    test_rolling_axis_count  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   r8   r"   F)writer   r   )	r   arrayr   Zsetflagsr
   r   rV   rI   r|   )ZarrrM   rN   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     s      z)test_rolling_datetime.<locals>.<dictcomp>z	2019-8-01z
2019-08-03r<   )r?   tzr   rf   r   c                 S   s   i | ]}|d gd qS )rC   r   r   r   r   r   r    r     s    r   )r>   r?   r   c                 S   s   i | ]}|d gd qS )r5   r   r   r   r   r   r    r     s    z	2019-8-02z	2019-8-03)r   r   Tr   r   rI   rJ   )r   Ztz_naive_fixturer   r   rM   rN   r   r   r    test_rolling_datetime  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@r:   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  r<   )r?   i  )seedr   d   )highsize)DateColmetricr   T)ZinplaceZ21Dr   rl   )r$   r   re   r'   r   rW   )rA   r   )r   nowr   r   r   randomZRandomStaterandintr   r   Z	set_indexr   ZaggrenameZ
_with_freqr
   rI   r|   )
r'   rL   Z
date_todayr9   Znprr   r   rM   rA   rN   r   r   r    test_rolling_window_as_string  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   r8   T)r'   r   rC   r5   r   )r   r   rW   r
   rI   r|   r   rM   rN   r   r   r    test_min_periods1f  s    r   c                 C   s@   | t djddd }| tjtjdddg}t|| d S )Nr"   r8   r   rD   )r,   r   r   r   r   rI   assert_equal)r0   rM   rN   r   r   r    #test_rolling_count_with_min_periodsn  s    r   c              	   C   sj   dddt jdddg}ddd	dddd	g}tjtd
d | |d }W 5 Q R X | |}t|| d S )Nr   r   r8   r   r"   rZ   rC   r5   rD   F)Zcheck_stacklevel)r   r   rI   Zassert_produces_warningFutureWarningr   r   r   )r0   valuesZexpected_countsrM   rN   r   r   r    7test_rolling_count_default_min_periods_with_null_valuesu  s    r   zdf,expected,window,min_periodsr   rC   c                 C   s<   dd |D }t || j||dD ]\}}t|| q"d S )Nc                 S   s   g | ]\}}t ||d qS r@   )r   rp   r   rA   r   r   r    rs     s     z/test_iter_rolling_dataframe.<locals>.<listcomp>r   )zipr   rI   rJ   )r   rN   r$   r   actualr   r   r    test_iter_rolling_dataframe  s    F r   zexpected,windowrf   r   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   r8   r   r"   rZ   r   r   z
2016-01-01r<   ry   r>   r?   ra   r   r   c                    s&   g | ]\}}t | j|d f dqS )r   r@   )r   locr   r   r   r    rs     s    z2test_iter_rolling_on_dataframe.<locals>.<listcomp>r   )on)r   r   r   r   rI   rJ   )rN   r$   r   r   r   r    test_iter_rolling_on_dataframe  s    
r   z ser,expected,window, min_periodsint64r[   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    rs      s     z,test_iter_rolling_series.<locals>.<listcomp>r   )r   r   rI   r|   )r   rN   r$   r   r   r   r   r    test_iter_rolling_series  s    # r   zexpected,expected_index,windowrw   r<   r=   
2020-01-02
2020-01-03z
2020-01-04z
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"   rw   r<   r   r@   c                 S   s   g | ]\}}t ||d qS r   r   )rp   r   idxr   r   r    rs   R  s    z.test_iter_rolling_datetime.<locals>.<listcomp>)r
   r,   r   r   r   rI   r|   )rN   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   )r8   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   r/   r   )argsr   Zscaler   r   r    
scaled_sumn  s    z4test_rolling_positional_argument.<locals>.scaled_sumr   r"   r   r   r   rB   rz   rC   r{   r5   r   ignore)r   errors)r   )rP   r   )r   r,   rg   r   r   rR   rI   rJ   )grouping_indexrP   r   r   rN   rM   r   r   r     test_rolling_positional_argumentZ  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 )Nra   gVUUUUU%C       z19700101 09:00:00z19700101 09:00:03z19700101 09:00:06r@   r   Z3srl   r8   rd   r   Sr=   gUUUUUU%CgqqCgqqCrB   )r   r   ZresampleZffillr   rV   r   r   r   rI   rJ   )r   r   rM   datesrN   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ZrB   r   r   r8   gsh|??r   )r   r   r   r
   r   r   rI   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 )Nrw   r   Z60sry   endr?   r   r   r@   )r   rH   r   r   r   randr   r   r   rV   rI   rJ   )rA   r   r   rM   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   rV   rI   r|   )rq   rM   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-01r:   r<   r=   )r   rA   r\   gТr   r"   gk/      @      @      @r@   )
r   r
   r,   r   r^   r   rV   r   rI   r|   )r   dsrM   rN   r   r   r    (test_rolling_numerical_too_large_numbers  s&    r
  )r   r;   )r   r5   )rW   rC   )rX   rC   )rV   rC   )r   rC   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   br1   )rA   r   rC   r$   r   r   )r   r  r1   r@   )r   r]   r   rI   rJ   )r   r;   r   rM   rN   r   r   r     test_rolling_mixed_dtypes_axis_1  s    r  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  rB   rC   rD   r  r5   rn   r  )r   r   r   r   r   rI   rJ   r   r   r   r    test_rolling_axis_one_with_nan  s    r  r;   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  rC   r5   )r   r   r   rI   rJ   )r;   r   rM   rN   r   r   r    &test_rolling_axis_1_non_numeric_dtypes  s
    r  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   rC   r  g      &@      *@r   )r   r$   r   )r   r$   )r   r   r   r   r   rI   rJ   r   )r   rN   rM   r   r   r    test_rolling_on_df_transposed  s    r  )rA   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   r8   r   r"   rZ   r   r   r@   rl   r   )r
   r]   r   rI   r|   )rA   r$   r   r   r	  rM   rN   r   r   r    test_rolling_period_index  s    r  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   rt   
isinstancer   r
   r   r   r   rI   r|   )r0   objrM   rN   r   r   r    test_rolling_sem-  s    
r  zGH 38921)reason)r   third_valuer   g|Fg >gfoCgPp?g۞?c                 C   sH   t dd|ddddg}t|d|  }t tjg| }t|| d S )Nl   ;r   r   r8   r
   r]   r   r   r   rI   r|   )r   r  r   r	  rM   rN   r   r   r    !test_rolling_var_numerical_issues7  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      rC   g6<AԿg     ?g?)r   ra   z20130101 09:00:00r   ra   z20130102 09:00:02z20130103 09:00:03z20130105 09:00:05z20130106 09:00:06r@   r   r   r   r   r8   r   rZ   r   Z3dr#   )
r   r   r   r	   from_tuplesr   r   corrrI   rJ   )expr   resr   r   r    ,test_timeoffset_as_window_parameter_for_corrI  sb    









+r   ZskewZ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   ir:   r   Nr*   r@   r"   r#   r   g-q=)
r   r   rG   rA   r]   r   absr   rW   r   )rT   r   Z
df_reverseZ
increasingZ
decreasingr   r   r    test_rolling_decreasing_indices  s
    *r#  zmethod,expectedr   g     E@g
a@g     E@gCݽW@g     f@g     s@g     5@r  g`UU"@r  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 )Nr[   r   r   )r   emptyr   r,   use_expandingwindow_size)selfZ
num_valuesr   r'   re   ry   r  r   r   r   r    get_window_bounds  s    
zCtest_rolling_non_monotonic.<locals>.CustomIndexer.get_window_boundsN)__name__
__module____qualname__r(  r   r   r   r    CustomIndexer  s   r,  r   )r&  r%  N)	r   r   rG   r   r   r]   r   rI   rJ   )rT   rN   r%  r   r,  ZindexerrM   r   r   r    test_rolling_non_monotonic  s    >r-  z
2001-01-01)r?   r>   c                 C   sd   t dddddg| d}| }d|dd< |||}t tjtjdddg| d}t|| d S )	Nr   r   r8   r   r"   r@   rB   r   )r
   copyr   r  r   r   rI   Zassert_almost_equal)rA   r$   r   r   rM   rN   r   r   r    !test_rolling_corr_timedelta_index  s    	r/  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   r8   r   )groupr   r0  F)Zdropnar   r   rB   r5   rD   rC   rn   r   r@   )	r   r   r   r   r   rV   r	   rI   rJ   )r   r   rM   rN   r   r   r    !test_groupby_rolling_nan_included  s    "r1  c                 C   s`   t tjd}| }t|d|  }t|| |d }t|d|  }t|| d S )Nr:   r8   iP  )	r
   r   r   r  r.  r]   r   rI   r|   )rT   r   Zser_copyrN   rM   r   r   r    *test_rolling_skew_kurt_numerical_stability  s    r2  )rT   r   g+X?gJ_9?rn   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   r8   r   i  r  )rT   r   rq   rM   rN   r   r   r    (test_rolling_skew_kurt_large_value_range  s    	r3  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   r6   )rT   )r-   r.   r/   r
   r,   r   r   r   r   r    test_invalid_method-  s    r4  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 )Nrw   r   r5  r  r   r   r@   rl   r   r   r*   z-1dr8   )	r   r,   r   r   r   r   rI   r   ro   )r$   r0   r   r  rM   rN   r   r   r    .test_rolling_descending_date_order_with_offset2  s    r6  c                  C   sH   t ddddg} | d }t tjtjddg}tj||ddd d S )Nr   r"   r8   gUUUUUU?r   V瞯<ZatolZrtol)r
   r   rY   r   r   rI   r|   r}   r   r   r    ,test_rolling_var_floating_artifact_precisionA  s    r9  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[^>>r7  r8  )r
   r   rU   r   r   rI   r|   r}   r   r   r    test_rolling_std_small_valuesI  s    r:  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 )Nr;  r<  Mb`?Mb?{Gzt?g?r=  g=
ףp=?r@   r"   r   r   )r   r   rQ   listr,   r   ro   r   rV   rI   rJ   )ry   Z
exp_valuesr   r   rN   rM   r   r   r    3test_rolling_mean_all_nan_window_floating_artifactsW  sB    	
rB  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 )Nr>  r?  r@  r8   r   r   g{Gz?gQ?g9v?rB   )r   r   rQ   r   r   rI   rJ   r   r   r   r    2test_rolling_sum_all_nan_window_floating_artifacts  s    rC  c                  C   s6   t td} | d }t tjg}t|| d S )Nr   r   )r
   r,   r   rX   r   r   rI   r|   r}   r   r   r    test_rolling_zero_window  s    rD  )`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_testingrI   Zpandas.api.indexersr   Zpandas.core.windowr   r!   r3   markZparametrizer   r7   rO   rS   r`   rk   rv   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  r  Zxfailr  r   r#  r   r-  r/  r1  r2  r3  r4  r6  r9  r:  rB  rC  rD  r   r   r   r    <module>   sN  0



-



" $"" $"
		

		
 !"#$+
	
 !"#$Y

"D

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

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