U
    /eE                     @   sn  d dl Z d dlZd dlZd dlZd dlmZ d dl	m
Z d dlZd dlmZ dZeeje ejjdefdejjdefdejjdefdejjdefddZeedZejd	d
ddejd	dddde Zejd	dddde Zeje ejjdefdejjdefdejjdefdejjdefddZejeedZejeedZeedZ dnddZ!ej"#dddgej"#dddgdd Z$ej"#dddgej"#dddgej"#dddgej"#dddgej"#dddgej"#ded dfedd feddfed d fee j%dde j%ddfee j%ddd fgdd Z&ej"#dddgej"#dddgej"#dddgej"#dddgd d! Z'd"d# Z(d$d% Z)d&d' Z*d(d)d*d+d,d-d.d/d0d1d2d3e*fdfgZ+ej"#d4e+ej"#d5dd6dd7gej"#d8ddgd9d: Z,ej"#d5dd6dd7gej"#d8ddgd;d< Z-d=d> Z.d?d@ Z/dAdB Z0dCdD Z1dEdF Z2dGdH Z3dIdJ Z4ej"#d4e+ej"#d5dKdLdMej56d7gdNdO Z7ej"#d5dKdLdMej56d7gdPdQ Z8ej"#dRdSdTdUdVdWdXgdYdZ Z9ej"#d5d[dd\d]gd^d_ Z:ej"#d`dadbdcgddde Z;dfdg Z<dhdi Z=djdk Z>dldm Z?dS )o    N)parse)	assert_eq(   d   size)abcde   z
2016-01-01Z3s)freqperiodsZ5s1sindexc                 C   s&   |  |}|  | }| | | | S N)shift)dfbeforeafterr
   r   r	    r   E/tmp/pip-unpacked-wheel-dbjnr7gq/dask/dataframe/tests/test_rolling.pyshifted_sum2   s    
r   npartitions      use_dask_inputTFc              
   C   s   t }|rtt | }dD ]x\}}tjjjt|||||dd}tt ||dd}t|| tjjjt|j	||||dd}tt j	||dd}t|| qd S )N))r   r   )r   r   )r   r   )r   r      r
   )
r   ddfrom_pandasdask	dataframerollingmap_overlapr   r   r	   )r   r   ddfr   r   ressolr   r   r   test_map_overlap8   s4          
      r*   enforce_metadatatransform_divisionsalign_dataframesoverlap_setup)secondsc                 C   s   |\}}}|}	|d }
| r2t |	|}	t |
|}
dd }|||| }}tjjjt|	|||||
|||d
}t||||d }t|| tjjjt|	j|||||
j|||d
}t|j|||jd }t|| d S )Nr   c                 S   s   t | tjr| jd S | S )Nr   )
isinstancedatetime	timedeltar/   )overlapr   r   r   get_shifted_sum_args   s    zAtest_map_overlap_multiple_dataframes.<locals>.get_shifted_sum_arg)r-   r,   r+   )	r!   r"   r#   r$   r%   r&   r   r   r	   )r   r   r+   r,   r-   r.   r$   r   r   r'   Zddf2r4   Zbefore_shifted_sumZafter_shifted_sumr(   r)   r   r   r   $test_map_overlap_multiple_dataframesO   sZ    

   r5   c           
      C   s   t t| }|jtddddd|||d	}|jtddddd|||d	}t|jt|jks\t|jtddddd|||d	}|j|jkst|j	 |j	  }t
|| kst|jtdddddd}	|	j|jkstd S )Nr   r   r   )r
   r-   r,   r+   r    )r!   r"   r   r&   r   setr#   AssertionError_namekeyslen)
r   r+   r,   r-   r'   r(   Zres2Zres3ZdiffZres4r   r   r   test_map_overlap_names   sP    r;   c                	   C   s   t t tjtdddddd W 5 Q R X t t tjtdddddd W 5 Q R X t t  tjtdddddd  W 5 Q R X t t( tjtt	
dt	
ddddd W 5 Q R X t t tjtdddddd W 5 Q R X d S )	Ng      ?r   r   r   r    r   r   )pytestraises
ValueErrorr'   r&   r   NotImplementedErrorcompute	TypeErrorpd	Timedeltar   r   r   r   test_map_overlap_errors   s      $,rE   c                  C   sp   t dddddgdddd	d
gdd} tj| dd}|jdd dddddd}| d }t|| d S )Nr   r   r         g      ?g       @g      @g      @g      @)xyZmyindexr   c                 S   s   |  d S )Nr   )r%   sumr   r   r   r   <lambda>       z/test_map_overlap_provide_meta.<locals>.<lambda>r   i8)meta)	rC   	DataFrameZrename_axisr!   r"   r&   r%   rK   r   )r   r'   r(   r)   r   r   r   test_map_overlap_provide_meta   s       rR   c                 C   s   t | |    S r   )npfabsmeanrH   r   r   r   mad   s    rW   )countr   F)rK   r   F)rU   r   F)Zmedianr   F)minr   F)maxr   F)stdr   T)varr   T)Zskewr   T)Zkurtr   T)Zquantile)gRQ?Fapplyzmethod,args,check_less_precisewindowr      centerc           	      C   s   t jjr|rddd}q&i }nd|i}t jjr<| dkr<d}nd }tj|||d}tj|||d}| dkrrdd	i}ni }tt|| ||t|| ||f| tj	j|||d}tj	j|||d}tt|| ||t|| ||f| d S )
NMbP?ZatolZrtolcheck_less_preciserX   r   )r`   min_periodsr]   rawF)
r!   _compatPANDAS_GT_110ZPANDAS_GT_120r   r%   r'   r   getattrr   )	methodargsr^   r`   rc   rd   prollingdrollingkwargsr   r   r   test_rolling_methods  s6    
rn   c                 C   sx   t jdddj| |d}tjdddj| |d}t| |  t jj| |d}tjj| |d}t| |  d S )Nr   r   axis)r`   )r   dropr%   r'   r   covr	   )r^   r`   rk   rl   r   r   r   test_rolling_cov:  s    rs   c                     s   t tjd tjjdddd} t| d t	
t fdd t	
t fd	d t	
t fd
d t	
t fdd t	
t fdd t	
t fdd t	
t fdd d S )N   r   )rt   r   r   r	   r   c                      s
     dS )Ng      ?r%   r   r'   r   r   rM   M  rN   z%test_rolling_raises.<locals>.<lambda>c                      s
     dS )Nrv   r   rw   r   r   rM   N  rN   c                      s    j dddS )Nr   g333333?rd   rv   r   rw   r   r   rM   O  rN   c                      s    j dddS )Nr   ry   rv   r   rw   r   r   rM   P  rN   c                      s    j dddS )Nr   
   ro   rv   r   rw   r   r   rM   Q  rN   c                      s    j dddS )Nr   Zcoulombsro   rv   r   rw   r   r   rM   R  rN   c                      s     d  S )Nr   )r%   rU   rA   r   rw   r   r   rM   S  rN   )rC   rQ   rS   randomrandncumsumrandintr!   r"   r=   r>   r?   r@   rL   r   rw   r   test_rolling_raisesH  s     r   c                  C   sZ   t dddgdddgd} tj| dd}t|d jt|d jksVtd S )	Nr   r   r   r   r_      ru   rJ   )	rC   rQ   r!   r"   sortedr%   rK   r#   r7   )r   r   r   r   r   test_rolling_namesV  s    r   c                  C   s  t tjdd} tj| dd}t| jddd	 |jddd	  t| jddd	 |jddd	  t| jdddd	 |jdddd	  t| jdd	d	 |jdd	d	  t| jdd
d	 |jdd
d	  | d }|d }t|jddd
 |jddd
  d S )N      r   rJ   r   ro   r   )rd   rp   columnsZrowsr_   )rC   rQ   rS   r|   r}   r!   r"   r   r%   rU   r[   )r   r'   sZdsr   r   r   test_rolling_axis\  s     && &r   c               
   C   s   t tjdd} tj| dd}| |f| d |d ffD ]l\}}t|d	 |d	  t|d	 |d	  t
t |d	   W 5 Q R X q:d S )	N2   r   r_   rJ   r   r{   rG      )rC   rQ   rS   r|   r}   r!   r"   r   r%   rU   r=   r>   r@   rA   )r   r'   objZdobjr   r   r   test_rolling_partition_sizep  s     r   c                  C   s8   t jtdgd dd} t| d}|dks4td S )Nr{      r   rJ   r   z&Rolling [window=4,center=False,axis=0])r!   r"   rC   rQ   reprr%   r7   )r'   r(   r   r   r   test_rolling_repr{  s    r   c                  C   s   t td} | dkstd S )N4sz5Rolling [window=4s,center=False,win_type=freq,axis=0])r   dtsr%   r7   )r(   r   r   r   test_time_rolling_repr  s    r   c                  C   sF   t d} | jdkst| jd ks&t| jd ks4t| jdksBtd S )Nr   r   )r   r%   r^   r7   rd   Zwin_typeZ	_win_type)resultr   r   r   test_time_rolling_constructor  s
    
r   Z1SZ2SZ3Sc                 C   s   t jjr|rddd}q&i }nd|i}| dkr8ddi}ni }t|}t|}tt|| ||t|| ||f| tj|}tj|}tt|| ||t|| ||f| d S )Nra   rb   rc   r]   re   F)	r!   rf   rg   tsr%   r   r   rh   r   )ri   rj   r^   rc   rm   rk   rl   r   r   r   test_time_rolling_methods  s0    


r   c                 C   sh   t jddd| }tjddd| }t| |  t j| }tj| }t| |  d S )Nr   r   ro   )r   rq   r%   r   r   rr   r	   )r^   rk   rl   r   r   r   test_time_rolling_cov  s    r   zwindow,N)r   r{   )2sr{   )10sr{   )10hr{   )r   r   )r   r   c                 C   s   t t jd|ddtjjd|fdd}|d}t|d}t	|
|  |
|   t	|
|  |
|   t	|
|  |
|   d S )	N2016-01-01 00:00:00r   r   r   r   r   ru   r   r_   )rC   rQ   
date_rangerS   r|   r   	set_indexr!   r"   r   r%   rK   rX   rU   )r^   Nr   r'   r   r   r   +test_time_rolling_large_window_fixed_chunks  s    
r   r   Z20sr   c                 C   s   t t jddddtjjdddd}t|d}|jd	dd
dddddddg
d}|	d}|	d}t
||  ||   t
||  ||   t
||  ||   d S )Nr   r   r   r   )r   r   ru   r_   r   r      !   6   O   P   R   c   )Z	divisionsr   )rC   rQ   r   rS   r|   r   r!   r"   Zrepartitionr   r   r%   rK   rX   rU   )r^   r   r'   r   r   r   .test_time_rolling_large_window_variable_chunks  s     

r   zbefore, after)6sr   )r   r   )r   r   c                    sn   |  t    }t  fdd| |}t|| t| } t|}t  fdd| |}t|| d S )Nc                    s   |    S r   r%   rX   rV   r^   r   r   rM     rN   z#test_time_rolling.<locals>.<lambda>c                    s   |    S r   r   rV   r   r   r   rM     rN   )r   rA   r%   rX   r&   r   rC   rD   )r   r   expectedr   r   r   r   test_time_rolling  s    


r   c                  C   sT  t tdtdddd} tj| dd}t| jddtj	tj
g|jddtj	tj
g t| jddtjd	d
 d|jddtjdd
 d t| jddtjtj	g|jddtjtj	g t| jdddtjtj	gi|jdddtjtj	gi ddi}t| jddjdd
 f||jddjdd
 f| d S )Nr_   r   r{   r   ABr   rJ   r   c                 S   s   t j| ddS Nr   )ZddofrS   r[   rV   r   r   r   rM     rN   z,test_rolling_agg_aggregate.<locals>.<lambda>c                 S   s   t j| ddS r   r   rV   r   r   r   rM     rN   r   re   Tc                 S   s   t j| ddS r   r   rV   r   r   r   rM     rN   c                 S   s   t j| ddS r   r   rV   r   r   r   rM     rN   )rC   rQ   ranger!   r"   r   r%   ZaggrS   rU   r[   rK   r]   )r   r'   rm   r   r   r   test_rolling_agg_aggregate  s.    r   c                  C   s   t d} t| j}tjjs2|tdkr2t d t	t
dt
dddd}tj|d	d
}dd }t|d	j|ddd|d	j|ddd d S )Nnumbaz0.49z.Known incompatibility between pandas and numbar_   r   r{   r   r   r   rJ   c                 S   s   t | d S )Nr_   )rS   rK   rV   r   r   r   f  s    z$test_rolling_numba_engine.<locals>.fT)Zenginere   )r=   Zimportorskipparse_version__version__r!   rf   ZPANDAS_GT_104ZxfailrC   rQ   r   r"   r   r%   r]   )r   Znumba_versionr   r'   r   r   r   r   test_rolling_numba_engine  s    


r   c                  C   s   t jtdddd tdD  dt jddd	d
d} tj| dd}| dd	 }|dd	 }t
||dd | djd }|djd }t
||dd d S )NiX  r_   c                 S   s   g | ]}d t | qS )g)str).0ir   r   r   
<listcomp>)  s     z(test_groupby_rolling.<locals>.<listcomp>x   )column1group1Z20190101<   )r   r{   r      rJ   r   Z15DF)Zcheck_divisions)rC   rQ   r   r   repeatr!   r"   groupbyr%   rK   r   r   rU   )r   r'   r   actualr   r   r   test_groupby_rolling%  s    r   c               
   C   sn   t dddtjdddgdddddddgd	} tj| dd
}tjtdd |	d
d  W 5 Q R X d S )Nr   r   r   r   r_   r   r   r	   )r   CrJ   z``window`` must be a ``freq``)matchr   )rC   rQ   rS   nanr!   r"   r=   r>   r?   r   r%   rK   )r   r'   r   r   r   /test_groupby_rolling_with_integer_window_raises;  s    &r   )r   )@r1   ZnumpyrS   ZpandasrC   r=   Zpackaging.versionr   r   Zdask.dataframer$   r!   Zdask.dataframe.rollingr#   Zdask.dataframe.utilsr   r   rQ   r|   r}   r~   r   r   r"   r'   r   unionidxZidx_constant_freqZts_datar   Zts_constant_freqr   r   markZparametrizer*   r2   r5   r;   rE   rR   rW   Z&rolling_method_args_check_less_precisern   rs   r   r   r   r   r   r   r   offsetsZSecondr   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   	


<1
 $	  



