U
    Cvf,                     @  s  d dl mZ d dlZd dlZd dl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 ddddd	Zejd
ddgejdddgdd Zejd
ddgdd Zedd ZejddejffdgddddZejjejjddddejdd ejd!d"dddd#d$Zejddejffdgddd%d&Zejjd'dddejdd ejd!d(ddd)d*ZG d+d, d,ZdS )-    )annotationsN)	DataArrayDatasetset_options)assert_allcloseassert_equalassert_identicalhas_daskraise_if_dask_computesrequires_cftimer   None)dsreturnc              	   C  s*   t jtdd | jdd W 5 Q R X d S )Nznot found in Dataset.)match   foo)pytestraises
ValueErrorcoarsen)r    r   =/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/test_coarsen.pytest_coarsen_absent_dims_error   s    r   daskTF)boundaryside)trimleft)padrightc                 C  st   |rt r| ddi} | jdd||d }t|d | d jd||d  t|d | d jd||d	  d S )
Nx   r      )timer!   r   r   z1)r!   r   r   r$   )r$   r   r   )r	   chunkr   maxr   mean)r   r   r   r   actualr   r   r   test_coarsen_dataset   s      r*   c              	   C  s  |rt r| ddi} | jdddddid }t|d	 | d	 jddd
  t|d | d jddd  tt | jdd  W 5 Q R X | j	t
ddt| d d  djdd  tjtjddddddtjdddid}|jdd }d S )Nr!   r"   r   r#   r   r$   r'   )r$   r!   r   Z
coord_funcr%   )r!   r   r$   r   )r!   r   m  il  )numz
1999-12-15periods)dimscoordsr$   )r	   r&   r   r'   r   r   r   r   r(   Ziselslicelenxrr   nplinspacepdZ
date_range)r   r   r)   dar   r   r   test_coarsen_coords(   s      .r:   c                  C  sX   t jddd} t tdd| fg}|jdd }t jddd	d
}tj|j	| d S )N2000   r.   r$   r#   r2   z
2000-01-02Z3Dr   )freqr/   )
r5   Zcftime_ranger   ranger   r(   r6   testingZassert_array_equalr$   )timesr9   r)   Zexpected_timesr   r   r   test_coarsen_coords_cftimeA   s
    rA   zfuncname, argumentreduce)r(   r   )r   c              	   C  s\  ddd}ddi}ddi}ddi}t ddd	}t d
dd	}td||fd||fddd||fi|d}t|jddid| }	|	| }
|
j|kst|
j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i ksNt|
jj
dks`t|
jj
dksrt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i kst|
jj
dkst|
jj
dkstt|jddid| }	tdd |	|ddi}
W 5 Q R X |
j|ksZt|
jj|kslt|
jj|ks~t|
j	j|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i kst|
jji kst|
jji ks"t|
j	ji ks4t|
jj
dksFt|
jj
dksXtd S )Ntestr?   )ZunitsZ	long_nameda_attrattrs_coordsZda_not_coarsend_attr
      d      coordZno_coord)r9   da_not_coarsend)	data_varsr1   attrs   Zdimr9   rK   
keep_attrsFrP   T)r6   r7   r   getattrr   rM   AssertionErrorr9   rK   rJ   namer   )funcnameargumentZglobal_attrsZda_attrsrE   Zda_not_coarsend_attrsdatar1   r   funcresultr   r   r   test_coarsen_keep_attrsJ   sp    

rZ   r   )rI   r   )Zindirectwindow)rI   r   r#   r"   rT   )sumr(   stdvarminr'   Zmedianc                 C  s   | j |dd}|ttd| }t|| }t|| t| j t|j ksZt| j	 D ]\}}|j
|| j
ksdtqdd S )Nr   r+   nan)r   rB   rR   r6   r   listrL   keysrS   itemsr0   )r   r[   rT   coarsen_objr)   expectedkeyZsrc_varr   r   r   test_coarsen_reduce   s    
 rg   c           	   	   C  s
  ddi}ddi}t ddd}t ddd}t|ddd||fi|d	d
}t|jddid| }|| }|j|kstt|jj|k |jd	kstt|jddid| }||ddi}|ji kst|jji k |jd	kstt|jddid| }t	dd || }W 5 Q R X |ji kst|jji k |jd	ks:tt|jddid| }t	dd ||ddi}W 5 Q R X |j|kst|jji k |jd	kst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 |jd	kstd S )NrD   rC   rE   rF   rG   rH   rI   rJ   rT   )r0   r1   rM   rT   rN   rO   rP   FrQ   T)
r6   r7   r   rR   r   rM   rS   rJ   rT   r   )	rU   rV   Zattrs_darE   rW   r1   r9   rX   rY   r   r   r   test_coarsen_da_keep_attrs   sN    	rh   r9   )r\   r(   r]   r'   c                 C  s`   |    dkr"|dkr"td | j|dd}|ttd| }t|| }t|| d S )NrI   z'These parameters lead to all-NaN slicesr   r+   r`   )	Zisnullr\   r   skipr   rB   rR   r6   r   )r9   r[   rT   rd   r)   re   r   r   r   test_coarsen_da_reduce   s    
rj   c                   @  s6   e Zd ZejdddgdddddZd	d
 ZdS )TestCoarsenConstructr   TFboolr   )r   r   c              	   C  s  t dtdddifdtdddifdtdddddifd	td
fdtdtd
dddid}|rtr|ddd}tj ddid}d|jjdddif|d< d|j	jdddif|d< d|j
jdddd
ddif|d< |j|d< d|jjdf|jd< t   |jd
ddddd}W 5 Q R X t|| t  |jd
ddjddd}W 5 Q R X t|| t T |jd
ddjddddd}|D ]}|| ji kstq|ji kstW 5 Q R X t " |j
jd
ddddd}W 5 Q R X t||d  tt |jd
d jdd! W 5 Q R X tt |jd
ddjdd  W 5 Q R X tt |jd
d   W 5 Q R X tt |jd
d jdd  W 5 Q R X tt |jd
d jd"d  W 5 Q R X d S )#Nr$   0   abr!   rF   )r!   r$   i  y   )vartvarxvartxvary)r$   rp   r   bar)r1   rM   r"   )rM   yearmonth)rq   rr   )r!   
x_reshaped)rz   rN   rs   )r!   r{   rx   ry   r   rN   rt   ru   )r$   r!   FrQ   r2   r   )rv   )r   r6   arangeZreshaper	   r&   r5   rr   rW   rs   rt   ru   r$   r1   r
   r   	constructr   rM   rS   r   r   r   )selfr   r   re   r)   r^   r   r   r   test_coarsen_construct   sx    

 
  z+TestCoarsenConstruct.test_coarsen_constructc                 C  s   t jtddgd}|jd| d}|jddjdd}t|jt|jksRt	|j
d	d
}|jddjdd}t|jt|jkst	d S )N   r$   )r0   r,   )dayrq   r2   rw   T)rT   )r5   r   r6   r|   Zassign_coordsr   r}   ra   r1   rS   Z
to_dataset)r~   r9   rY   r   r   r   r   'test_coarsen_construct_keeps_all_coordsJ  s    z<TestCoarsenConstruct.test_coarsen_construct_keeps_all_coordsN)__name__
__module____qualname__r   markparametrizer   r   r   r   r   r   rk      s   Lrk   ) 
__future__r   Znumpyr6   Zpandasr8   r   Zxarrayr5   r   r   r   Zxarray.testsr   r   r   r	   r
   r   r   r   r   r*   r:   rA   r(   rZ   Zslowrg   rh   rj   rk   r   r   r   r   <module>   sL    



J
5