U
    Cvfy                     @  s   d dl mZ d dlmZ d dlZd dlZd dlZd dl	m
Z
 d dlZd dlmZmZmZ d dlmZmZmZmZmZmZmZ ejdejdgZG d	d
 d
ZeG dd dZG dd dZeG dd dZdS )    )annotations)AnyN)Version)	DataArrayDatasetset_options)assert_allcloseassert_array_equalassert_equalassert_identicalhas_daskrequires_daskrequires_numbaggzerror:Mean of empty slicez&error:All-NaN (slice|axis) encounteredc                
   @  sH  e Zd Zejjddddejdddgejddd	d
dgdddddddZejjddddddddZeddddZ	ddddZ
ddddZejddejddejd d!ejjd"d#gddddd$d%Zeejdd&ejddejd d!ejd'd(ejjd"d)gddddd*d+Zejdd,ddd-d.Zejdd/ejd d0ejd'd1ddd2d3Zejdd/ejd'd1ddd4d5Zejjddddejdd/ejd d0ejd'd1ejdd6ddd7d8Zejdd/ejd d0ejd'd1ejdd9ddd:d;Zddd<d=Zejjddddejdd/ejd d>ejdd?ddd@dAZejddBejdCejdDfdddEdFZejdGdHejffdIdJdKgdddLdMZeejdNddOdPgdddQdRZdSS )TTestDataArrayRollingda      TZindirectcenterFsizer   r         r   boolintNone)r   r   r   returnc                 C  s   |j ||d}| }t|jt|d ks0tt|j|d  t|D ]L\}\}}||d j|dkslt|j|d}	|d}
tj	
|	j|
j qHd S )Ntimer   r   r   )rollingmeanlenZwindow_labelsAssertionErrorr   	enumerateiselnptestingr   values)selfr   r   r   rolling_objZrolling_obj_meanilabelZ	window_daactualexpected r/   =/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/test_rolling.pytest_rolling_iter   s    
z&TestDataArrayRolling.test_rolling_iter)r   r   c                 C  s^   |j dd}t|dkst|j ddd}t|dks:t|j dddd}t|d	ksZtd S )
Nr   r   zDataArrayRolling [time->7]Tr   z"DataArrayRolling [time->7(center)]r   )r   xr   z/DataArrayRolling [time->7(center),x->3(center)])r    reprr#   r)   r   r*   r/   r/   r0   test_rolling_repr/   s    z&TestDataArrayRolling.test_rolling_reprc                 C  sD   t tjdddd}|ddi}|jdd jd	d  d S )
Ni  i,  )dayitemdimsr8      
   )r7      )r   r&   randomZrandchunkr    r!   std)r)   ZdatZ	dat_chunkr/   r/   r0   test_repeated_rolling_rechunks8   s    z3TestDataArrayRolling.test_repeated_rolling_rechunksc                 C  s    |j dd}d|jjkstd S )Nr   r   z`mean`)r    r!   __doc__r#   r5   r/   r/   r0   test_rolling_doc@   s    z%TestDataArrayRolling.test_rolling_docc              	   C  sr   |j dd}|jddks ttjtdd |j dd W 5 Q R X tjtdd |j d	d
d W 5 Q R X d S )N   r   r   r   window must be > 0match%min_periods must be greater than zeror   r   r   min_periods)r    objZget_axis_numr#   pytestraises
ValueErrorr5   r/   r/   r0   test_rolling_propertiesF   s    z,TestDataArrayRolling.test_rolling_propertiesname)sumr!   r@   minmaxmedianTFNrK   r   Nbackendnumpyc           
   	   C  s   t jddd}|jd|d}d| }t|| }t|||jdd|d}	t|j|	 t jtd	d
 t||dd W 5 Q R X |jd|d}t|| d }t||d  d S )N
bottleneck1.1Z
minversionr   rJ   move_r   windowZaxisZ	min_countReductions are appliedrF   r   dimr   )	rM   importorskipr    getattrr(   r	   warnsDeprecationWarningr
   )
r)   r   rQ   r   rK   bnr*   	func_namer-   r.   r/   r/   r0   test_rolling_wrapped_bottleneckR   s     
   z4TestDataArrayRolling.test_rolling_wrapped_bottleneck)r!   countr_   )r      daskc           	   	   C  s   |j |||d}t||  }|dkrRtjtdd t||dd W 5 Q R X | j |||d}t|| }t|| | j |||d}t||  }t|| d S )N)r   rK   r   rj   r`   rF   r   ra   )r    rd   loadrM   re   rf   r   r?   )	r)   r   rQ   r   rK   r_   r*   r-   r.   r/   r/   r0   test_rolling_wrapped_daskk   s&      
  z.TestDataArrayRolling.test_rolling_wrapped_dask)TNc                 C  sb   t d tjtddtddgdd}|jd|d }| jd|d }t	|| d S )Nz
dask.arrayr   io  	dayofyear)coordsr:      )ro   r   )
rM   rc   xrr   r&   aranger    r!   r?   r   )r)   r   Zda_day_climr.   r-   r/   r/   r0   !test_rolling_wrapped_dask_nochunk   s    

  z6TestDataArrayRolling.test_rolling_wrapped_dask_nochunkTFNr   r   r   r   r   r   rD   c           	      C  s   t td}t|}|d k	r.||k r.|}|j|||d }|j|||d }|j|||dtj	}tj
|j|j tj
|j|d  tj
|j|j tj
|j|d  d S )Nr<   r   rK   indexr   rK   rz   )pdSeriesr&   rs   r   from_seriesr    r!   reduceZnanmeanr'   r   r(   rz   )	r)   r   r_   rK   sr   	s_rolling
da_rollingZda_rolling_npr/   r/   r0   test_rolling_pandas_compat   s*    
  
  z/TestDataArrayRolling.test_rolling_pandas_compatc                 C  s  t td}t|}|j||dd }|j||dd}|dd}tj	
|j|j tj	
|j|d  |jdddd}tj	
|jd d d |j tj	
|jd d d |d  |jddd	d
d}|  dkst|d	k dkstd S )Nr<   r   rx   ry   r_   rz   r   stride        r   
fill_valuer   )r{   r|   r&   rs   r   r}   r    r!   	constructr'   r   r(   rz   isnullrR   r#   )r)   r   r_   r   r   r   r   Zda_rolling_meanr/   r/   r0   test_rolling_construct   s    
z+TestDataArrayRolling.test_rolling_construct)rR   r!   r@   rT   c           	      C  s~   |d k	r||k r|}|   dkr0|dkr0d}|j|||d}|ttd| }t|| }t|| |j|jksztd S )Nr   r   r   r   rK   nan%s)	r   rR   r    r~   rd   r&   r   r:   r#   )	r)   r   r   rK   r_   rQ   r*   r-   r.   r/   r/   r0   test_rolling_reduce   s    
z(TestDataArrayRolling.test_rolling_reducerR   rT   c           	      C  s   t dtjddtjdddtjddgd	d
 }|d k	r@||k r@|}|j|||d}|ttd| }t|| }t|| |j|jkst	d S )Nr   r   r   r   rD         r   r   r9   r   r   )
r   r&   nanr   r    r~   rd   r   r:   r#   )	r)   r   rK   r_   rQ   r   r*   r-   r.   r/   r/   r0   test_rolling_reduce_nonnumeric   s     

z3TestDataArrayRolling.test_rolling_reduce_nonnumericc                 C  s  t dtjddtjdddtjddgd	d
}ddddd ddddg}t dddddddddddgd	d
t tjtjtjtjtjtjtjtjtjtjtjgd	d
t tjtjdddddddddgd	d
g}t||D ]H\}}|jf | }t|| |jddjf | d }t|| qd S )Nr   r   r   r   rD   r   r   r   r   r9      rJ   rk   Zvar1)rQ   )r   r&   r   zipr    rj   r
   Z
to_dataset)r)   r   kwargs	expectedskwargr.   resultr/   r/   r0   test_rolling_count_correct   s8    ( $
z/TestDataArrayRolling.test_rolling_count_correctNr   )rR   r!   rT   c           	      C  s   |j dd||d}t|| }tt|j d||d| j d||d| }t|| |j|jksdt|dkrt|ddd	|ddg}| }|d krd
}t||||k d S )Nr   r   r   r3   r   rK   r   r3   r   rK   )r!   ZtwZxwr   r3   r   )r    rd   r   r:   r#   r   rj   where)	r)   r   r   rK   rQ   r*   r-   r.   rj   r/   r/   r0   test_ndrolling_reduce  s.       
z*TestDataArrayRolling.test_ndrolling_reduceTFru   r   r   c                 C  s   t tddddtdddgdd	d
ddgtddd}|jdd|djdd|d}t|t	sn||f}|jd|d djd|djd|d djd|d}t
|| d S )N   r   r   r   r3   yzabcder3   r   r:   rp   r   r   r3   r   r   x1z1r3   r   r   r   r3   r   r3   r   r   r   r   r   r   )r   r&   rs   reshapeastypefloatr    r   
isinstancetupler   )r)   r   r   r   r-   r.   r/   r/   r0   test_ndrolling_construct.  s0      
   z-TestDataArrayRolling.test_ndrolling_constructfuncname, argumentr~   r!   r/   r   )Z
window_dimrj   r/   c           	   	   C  s  ddi}t ddd}t ddd}t|dd|i|dd	}t|jdd
id|}|| }|j|ksft|jdksttt|jdd
id|}||ddi}|ji kst|jdkstt|jdd
id|}tdd || }W 5 Q R X |ji kst|jdkstt|jdd
id|}tdd ||ddi}W 5 Q R X |j|ksPt|jdks`tt|jdd
id|}tdd ||ddi}W 5 Q R X |ji kst|jdkstd S )Nda_attrtestr<      d   r   coordrQ   )r:   rp   attrsrQ   r   ra   
keep_attrsFr   T)	r&   linspacer   rd   r    r   r#   rQ   r   )	r)   funcnameargumentZattrs_dadatarp   r   funcr   r/   r/   r0   test_rolling_keep_attrsC  sB    
    z,TestDataArrayRolling.test_rolling_keep_attrsdtypeZfloat32Zfloat64c                 C  sj   t tjdddg|ddddddgid}|jddd }|ddijddd }|j|jksftd S )Nr   r   r   )r   r3   r   )r3   rK   )r   r&   arrayr    r!   r?   r   r#   )r)   r   r   Zunchunked_resultZchunked_resultr/   r/   r0   test_rolling_dask_dtypev  s      z,TestDataArrayRolling.test_rolling_dask_dtypeN)__name__
__module____qualname__rM   markparametrizer1   r6   r   rA   rC   rP   ri   rn   rt   r   r   r   r   r   r   r&   r   r   r!   r   r   r/   r/   r/   r0   r      s~   $
	*r   c                	   @  s  e Zd Zejdddgejdddgddgd	dgd
dggejjddgddejdddgddddZejdddgejdddgddgd	dgd
dggejjddgddddddZejjddgddejdddgddddZdS )TestDataArrayRollingExprb   r   r3   zwindow_type, windowspanr   alphag      ?comZhalfliferX   rY   Tr   r   r!   rR   r   r2   c           	      C  sv   dd l }tt|ddtdk r2|dkr2td ||dk}|jf d|i||i}t|| }t|tsrt	d S )	Nr   __version__0.1.00.2.1rR   &rolling_exp.sum requires numbagg 0.2.1皙?window_type)
numbaggr   rd   rM   skipr   rolling_expr   r   r#   )	r)   r   rb   r   r_   r   r   r   r   r/   r/   r0   test_rolling_exp_runs  s    
z-TestDataArrayRollingExp.test_rolling_exp_runsc                 C  s   |j dddd }|jf d|i||i }t|ts@t| }|jj	dksXt|dkrf|j
}t|jf ||i j|j }t|j|j d S )Nr   )r   c                 S  s   | dkS )Nr   r/   r3   r/   r/   r0   <lambda>      zFTestDataArrayRollingExp.test_rolling_exp_mean_pandas.<locals>.<lambda>r   r   r3   )r%   r   r   r!   r   r   r#   Z	to_pandasrz   rQ   Trr   ZewmZ	transposer:   r   variable)r)   r   rb   r   r_   r   Zpandas_arrayr.   r/   r/   r0   test_rolling_exp_mean_pandas  s    z4TestDataArrayRollingExp.test_rolling_exp_mean_pandasc              	   C  s2  dd l }tt|ddtdk r2|dkr2td ddi}||_t|jd	d
|}| }|j|ksft|dd}|ji ks~ttdd | }W 5 Q R X |ji ksttdd |dd}W 5 Q R X |j|ksttdd |dd}W 5 Q R X |ji ksttj	t
dd |jd	dd W 5 Q R X d S )Nr   r   r   r   rR   r   r   r   r<   r   Fr   T8Passing ``keep_attrs`` to ``rolling_exp`` has no effect.rF   r   r   )r   r   rd   rM   r   r   r   r#   r   re   UserWarning)r)   r   r   r   r   Zrolling_exp_funcr   r/   r/   r0   test_rolling_exp_keep_attrs  s6    

z3TestDataArrayRollingExp.test_rolling_exp_keep_attrsN)	r   r   r   rM   r   r   r   r   r   r/   r/   r/   r0   r     s$   r   c                	   @  s@  e Zd Zejddejffdddgdddd	Zddd
dZ	ejddejddejddejddejjddgddddddZ
ejddejddejddddddZejddejddddd d!Zejjejjd"d#ddejddejddejddejddddd$d%Zejjd"d&ddejddejdd'ejdd(ejd)dddd*d+Zejdd,ejd-ejd.fejd)dddd/d0Zejjd1d2ejd3ejjd"d&ddejdd4ddd5d6Zd7S )8TestDatasetRollingr   r~   r   r   r   r   r2   c              	   C  s  ddd}ddi}ddi}t ddd}t d	dd}td
|fd|fdd
|i|d}||j_||j_t|jd
did|}	|	| }
|
j|kst|
jj|kst|
jj|kst|
jj	dkst|
jj	dkstt|jd
did|}	|	|ddi}
|
ji kst|
jji kst|
jji ks*t|
jj	dks<t|
jj	dksNtt|jd
did|}	t
dd |	| }
W 5 Q R X |
ji kst|
jji kst|
jji kst|
jj	dkst|
jj	dkstt|jd
did|}	t
dd |	|ddi}
W 5 Q R X |
j|ks$t|
jj|ks6t|
jj|ksHt|
jj	dksZt|
jj	dksltt|jd
did|}	t
dd |	|ddi}
W 5 Q R X |
ji kst|
jji kst|
jji kst|
jj	dkst|
jj	dkstd S )Nr   r'   )ZunitsZ	long_namer   Zda_not_rolled_attrr<   r   r   r   r   Zno_coord)r   da_not_rolled)	data_varsrp   r   r   ra   r   r   r   Fr   T)r&   r   r   r   r   r   rd   r    r#   rQ   r   )r)   r   r   Zglobal_attrsZda_attrsZda_not_rolled_attrsr   rp   dsr   r   r/   r/   r0   r     sd    

z*TestDatasetRolling.test_rolling_keep_attrsc              	   C  sx   t jtdd |jdd W 5 Q R X t jtdd |jddd W 5 Q R X t jtd	d |jdd
 W 5 Q R X d S )NrE   rF   rH   r   rI   r   r   rJ   time2)r   )rM   rN   rO   r    KeyError)r)   r   r/   r/   r0   rP   )  s    z*TestDatasetRolling.test_rolling_propertiesrQ   )rR   r!   r@   varrS   rT   rU   r   rV   rK   rW   key)r   z2rX   rY   Tr   c                 C  s   t jddd}|jd|d}d| }t|| }	|dkrD|| }
n*|dkrjt|||| jdd	|d
}
ntt|	| j|
 |jd|d}t|| d }	t|	|d  d S )NrZ   r[   r\   r   rJ   r]   r   r   r   r^   r   r   )rM   rc   r    rd   r(   rO   r	   r
   )r)   r   rQ   r   rK   r   rg   r*   rh   r-   r.   r/   r/   r0   ri   2  s$    


   z2TestDatasetRolling.test_rolling_wrapped_bottleneckru   rv   r_   rw   c              	   C  s   t tjdtjdtdddd}t|}|d k	rJ||k rJ|}|j|||d	 }|j|||d	 }tj
|d j|d j tj
|j|d  d S )	Nr;   r   r   r3   r   r   rx   ry   r3   rz   )r{   	DataFramer&   r>   randnr   r   from_dataframer    r!   r'   r   r(   rz   )r)   r   r_   rK   dfr   
df_rolling
ds_rollingr/   r/   r0   r   R  s"    


  
z-TestDatasetRolling.test_rolling_pandas_compatc              	   C  sB  t tjdtjdtdddd}t|}|j||dd	 }|j||d}|
d	d}tj|d j|d j tj|j|d	  |j
dd
d	d}tj|d d d d
 j|d j tj|jd d d
 |d	  |j
dd
dd	d}|  dkjdd s$t|d dk dks>td S )Nr;   r   r   r   rx   )rz   r   r_   r3   rz   r   r   r   r   varsra   )r{   r   r&   r>   r   r   r   r   r    r!   r   r'   r   r(   rz   r   rR   Zto_arrayallr#   )r)   r   r_   r   r   r   r   Zds_rolling_meanr/   r/   r0   r   j  s.    


 "z)TestDatasetRolling.test_rolling_constructr   r   c                 C  s   |d k	r||k r|}|dkr.|dkr.t d |j|||d}|ttd| }t|| }t|| |j|jksxtt	|j
 t	|j
 kst|j
 D ]\}	}
|
j||	 jkstqd S )Nr@   r   z.std with window == 1 is unstable in bottleneckr   r   )rM   r   r    r~   rd   r&   r   r:   r#   listr   keysitems)r)   r   r   rK   r_   rQ   r*   r-   r.   r   Zsrc_varr/   r/   r0   r     s    


 z&TestDatasetRolling.test_rolling_reduce)r   r   r   rl   c           	      C  s   |rt r|ddi}|jdd||d}t|| }tt|jd||d| jd||d| }t|| |j|jkszttt|jd||d| jd||d| }t|| |j|jkstd S )Nr3   rD   r   r   r   r   )r   r?   r    rd   r   r:   r#   )	r)   r   r   rK   rQ   rl   r*   r-   r.   r/   r/   r0   r     s<       
   
z(TestDatasetRolling.test_ndrolling_reducer   r   r   c                 C  s   t tddddtdddgdd	d
ddgtddd}td|i}|rdtrd|	ddi}|j
dd|djdd|d}t|ts||f}|j
d|d djd|dj
d|d djd|d}t|| d S )Nr   r   r   r   r3   r   r   r   r   r   r   r   r   r   r   rD   r   r   r   r   r   r   r   r   r   r   r   r   )r   r&   rs   r   r   r   rr   r   r   r?   r    r   r   r   r   )r)   r   r   rl   r   r   r-   r.   r/   r/   r0   r     s6      
   z+TestDatasetRolling.test_ndrolling_constructz;See https://github.com/pydata/xarray/pull/4369 or docstring)reasonerror)r!   rT   c                 C  sZ   | ddi}|jddd}t|| }tt|jdd| jdd| }t|| dS )u   
        This is a puzzle — I can't easily find the source of the warning. It
        requires `assert_allclose` to be run, for the `ds` param to be 2, and is
        different for `mean` and `max`. `sum` raises no warning.
        r3   rD   r   r   r   r   N)r?   r    rd   r   )r)   r   rQ   r*   r-   r.   r/   r/   r0   /test_raise_no_warning_dask_rolling_assert_close  s
    $zBTestDatasetRolling.test_raise_no_warning_dask_rolling_assert_closeN)r   r   r   rM   r   r   r&   r!   r   rP   ri   r   r   Zslowr   r   r   r   Zxfailfilterwarningsr  r/   r/   r/   r0   r     sj   
	B	  
r   c                   @  sP   e Zd ZejjddgddddddZejjddgddddd	d
ZdS )TestDatasetRollingExprX   rY   Tr   r   r2   c                 C  s$   |j ddd }t|ts td S )Nr<   r   )r   r   )r   r!   r   r   r#   )r)   r   r   r/   r/   r0   test_rolling_exp  s    z&TestDatasetRollingExp.test_rolling_expc              	   C  s  ddi}ddi}||_ ||j_ |jdd }|j |ks<t|jj |ksLt|jddjdd}|j i ksnt|jj i ks~ttdd |jdd }W 5 Q R X |j i kst|jj i ksttdd |jddjd	d}W 5 Q R X |j |kst|jj |ksttd	d |jddjdd}W 5 Q R X |j i ksFt|jj i ksXttjtd
d |jdd	d W 5 Q R X d S )Nr   globalattrr   r<   r   Fr   Tr   rF   r   )	r   r   r   r!   r#   r   rM   re   r   )r)   r   Zattrs_globalZattrs_z1r   r/   r/   r0   r      s6    z1TestDatasetRollingExp.test_rolling_exp_keep_attrsN)r   r   r   rM   r   r   r  r   r/   r/   r/   r0   r    s   r  )
__future__r   typingr   rY   r&   Zpandasr{   rM   Zpackaging.versionr   Zxarrayrr   r   r   r   Zxarray.testsr   r	   r
   r   r   r   r   r   r  Z
pytestmarkr   r   r   r  r/   r/   r/   r0   <module>   s*   $

  g[  