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Zd dl	Z	d dl
mZmZ d dlmZ d dl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 d dlmZ d dlm Z m!Z!m"Z"m#Z# ed	Z$d
d Z%ddddZ&ddddZ'ddddZ(ddddZ)ddddZ*ddddZ+dd Z,ddddZ-dd Z.ddd d!Z/ddd"d#Z0ddd$d%Z1e#ddd&d'Z2ddd(d)Z3ddd*d+Z4ddd,d-Z5ddd.d/Z6ddd0d1Z7ddd2d3Z8ddd4d5Z9ddd6d7Z:e	j;<d8d9d:d;ge	j=dd<d=id<d>id<d?igi d@dAdBe	j=d@d<d=id<d>id<d?igi d@dCdBe	j=dDd<d=id<d>id<d?igd<d=id@dEdBe	j=dFd<d=id<d>id<d?igd<d=id@dFdBe	j=dGd<d=id<d>id<d?igi d@dGdBe	j=dHd=d>dId=d?dJd?dKdLgd=d?dKdMd@dHdBe	j=dNd<d=idOd>idOd?igddDdNdBfdddPdQZ>e	j;<d8d9d:d;ge	j=dd<d=id<d>id<d?igi d@dAdBe	j=d@d<d=id<d>id<d?igi d@dCdBe	j=dDd<d=id<d>id<d?igd<d=id@dEdBe	j=dFd<d=id<d>id<d?igd<d=id@dFdBe	j=dGd<d=id<d>id<d?igi d@dGdBe	j=dHd=d>dId=d?dJd?dKdLgd=d?dKdMd@dHdBe	j=dNd<d=idOd>idOd?igddDdNdBfdddRdSZ?e	j;<dTdUe	j;<d8d9d:d;ge	j=dd<d=id<d>id<d?igi d@dAdBe	j=d@d<d=id<d>id<d?igi d@dCdBe	j=dDd<d=id<d>id<d?igd<d=id@dEdBe	j=dFd<d=id<d>id<d?igd<d=id@dFdBe	j=dGd<d=id<d>id<d?igi d@dGdBe	j=dHd=d>dId=d?dJd?dKdLgd=d?dKdMd@dHdBe	j=dNd<d=idOd>idOd?igddDdNdBfdVdW Z@e	j;<d8d9d:d;ge	j=dd<d=id<d>id<d?igi d@dAdBe	j=d@d<d=id<d>id<d?igi d@dCdBe	j=dDd<d=id<d>id<d?igd<d=id@dEdBe	j=dFd<d=id<d>id<d?igd<d=id@dFdBe	j=dGd<d=id<d>id<d?igi d@dGdBe	j=dHd=d>dId=d?dJd?dKdLgd=d?dKdMd@dHdBe	j=dNd<d=idOd>idOd?igddDdNdBfdddXdYZAe	j;<dTdZe	j;<d8d9d:d;ge	j=dd<d=id<d>id<d?igi d@dAdBe	j=d@d<d=id<d>id<d?igi d@dCdBe	j=dDd<d=id<d>id<d?igd<d=id@dEdBe	j=dFd<d=id<d>id<d?igd<d=id@dFdBe	j=dGd<d=id<d>id<d?igi d@dGdBe	j=dHd=d>dId=d?dJd?dKdLgd=d?dKdMd@dHdBe	j=dNd<d=idOd>idOd?igddDdNdBfd[d\ ZBddd]d^ZCe#ddd_d`ZDe#dddadbZEe#dddcddZFe#dddedfZGe#e	j;HdgdddhdiZIe#dddjdkZJe#dddldmZKdndo ZLdddpdqZMe#dddrdsZNe#dddtduZOe#e	j;<dvejPd d=d>gd=d>d?ggdwdxejPdydzd{ggdwdxgddd|d}ZQe	j;jRe$ed~kdde#ddddZSdd ZTddddZUe#ddddZVddddZWdd ZXe	j;<dd d=ge	j;<deX d= d? eX d= dK eX d= d eX d= d eX d= d eX d= d ge	j;<ddddge#ddddZYe	j;<dd d=ge	j;<deX d= d  eX d= d= eX d= d> ge	j;<dddgddddZZe	j;<deX d= d  eX d= d= eX d= d> ge	j;<dddgddddZ[e	j;<deX d= e	j;<ddddgddddZ\e#e	j;<deX d= e	j;<ddddge	j;HdddddZ]e#dd Z^e	j;<deX d  e	j;<ddddddggddddZ_e#ddddZ`ddddZaddddZbddddZce	j;<ddDd@gdddddZde	j;<ddDd@gdddddZeddddZfddddZge	j;<de	j=d@ddBe	j=dDd	dBge	j;<ddd:ge	j=ejPd=d>d?gddxejPd>d?dKgddd d=d>gidejPdddgddxddBe	j=ejPd=d>d?gddxejPd d=gd d=ggddd d=gidejPd=d=gd>d>gd?d?ggdwdxddBe	j=ejPd=d>d?gddxejPd d=gd=d gd=d=ggddd d=gidejPd=d=dKgddxddBe	j=ejPd=d>d?gddxejPd=d d gddd>d=d gidejPd=dKdgddxddBe	j=ejPd=d>d?gddxejPdgddd?gidejPdddgddxddBe	j=ejPd=d>d?gddxejhdd d=gfdd=d gfdIdd d=gidɍehdd=d>d?gfdd=d=d=gfdIddBe	j=ehdd=d>d?gfdd>d?dKgfdIejPd=d=gddd d=gidehdd>d?dKgfdd?dKdgfdIddBe	j=ehdd=d>d?gfdd>d?dKgfdIejhdd d=gfdd=d=gfdIdd d=gidɍehdd=d>d?gfdd?dKdgfdIddBe	j=ejPejiddd?dЍddxejPd d=gddd d=gidejPd ddgddejiddd?dЍidddBe	j=ejPejjdddgdd؍ddxejPd d=gddd d=gidejPdddgddxddBg
ddddddޜddZke"e	j;<de	j=d@ddBe	j=dDd	dBge	j;<dddgddddddZlddddZme	j;<de	j=d@ddBe	j=dDd	dBge	j;<de	j=ejPd d=d>gddxddBe	j=ejPejiddd?dЍddxddBe	j=ejPejjd d=d>gdd؍ddxddBge	j;<de	j=ejPd=ddgddxddBe	j=ejPd=ddgdddggddxddBgdddddddZne	j;<dd@dDge	j;<dePd=d>d?gePdKddgd=d>d?gdKddgddgePd=d>gePdKddgd=d>gdKddgddgejodgd=d>d?gdejodgdKddgdd=d>d?gdKddgddgejodgd=d>gdejodgdKddgdd=d>gdKddgddgejPepd dqddddgerdgepd dfdgdddgfdgd=dd>dgfd dejPepd dqdd= dddgerdgepd dfdgdddgfdgd=dd>dgfd depd dqdepd dqdd= dd=gejPejd=gdgerdgdgfddejPejdKddgdgerdgdddgfddd d d=gdKddgddgejPd=d>gdgerdgddgfddejPdKddgdgerdgdddgfddd=d d>gdKddgddggdddddddZsdS (      )annotationsN)assert_allcloseassert_array_equal)Version)	broadcast)	_UFuncSignatureapply_ufuncbroadcast_compat_datacollect_dict_valuesjoin_dict_keysordered_set_intersectionordered_set_unionresult_nameunified_dim_sizes)mod_version)has_daskraise_if_dask_computesrequires_cftimerequires_daskdaskc                 C  s4   d}ddl m} t| dr&|| | n
t| | dS )z5A version of this function which accepts numpy arraysTr   )assert_identicalZ	identicalN)Zxarray.testingr   hasattrr   )abZ__tracebackhide__Zassert_identical_ r   A/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/test_computation.pyr   %   s
    
r   None)returnc                  C  s   t dgddggdgg} | jdks&t| jdks4t| jtddgksJt| jtdgks^t| jdkslt| jdksztt	| dkst| 
 d	kst| j
tdd
dkstt dggt dggkstd S )Nxyz)r   r   r   ))r          z(x),(x,y)->(z)z(dim0),(dim0,dim1)->(dim2)exclude_dimsz(dim0_0),(dim0_1,dim1)->(dim2))r   input_core_dimsAssertionErroroutput_core_dimsZall_input_core_dims	frozensetZall_output_core_dimsZ
num_inputsZnum_outputsstrZto_gufunc_stringset)sigr   r   r   test_signature_properties0   s    r.   c                  C  s   G dd d} t ddgd ks"tt |  gd ks6tt | ddgdksNtt | d| dgd ksjtt | d|  gd kstd S )Nc                   @  s   e Zd ZdddZdS )ztest_result_name.<locals>.NamedNc                 S  s
   || _ d S Nname)selfr1   r   r   r   __init__C   s    z(test_result_name.<locals>.Named.__init__)N)__name__
__module____qualname__r3   r   r   r   r   NamedB   s   r7   r$   r#   foobar)r   r(   )r7   r   r   r   test_result_nameA   s    r:   c                   C  sr   t tddggddgkstt tddgddggddgksBtt tdgddgddggddddgksntd S )Nr$   r#   r      )listr   r(   r   r   r   r   test_ordered_set_unionM   s    $r=   c                   C  s   t tddggddgkstt tddgddggddgksBtt tddgddggdgksdtt tddgdggdgkstd S )Nr$   r#   r;   )r<   r   r(   r   r   r   r   test_ordered_set_intersectionS   s    $"r>   c               	   C  s   dd ddgddgfD } t t| dddgks4tt t| dddgksNtt t| ddgksftt t| d	dddgksttt t| d
 W 5 Q R X tt t| d W 5 Q R X d S )Nc                 S  s   g | ]}t |qS r   )dictfromkeys).0keysr   r   r   
<listcomp>[   s     z'test_join_dict_keys.<locals>.<listcomp>r   r   r    leftrightinnerouterexactZfoobar)r<   r   r(   pytestraises
ValueErrorKeyError)dictsr   r   r   test_join_dict_keysZ   s    rN   c                  C  sV   ddddddidg} dddgdddgdddgg}t | d	d
dgdd}||ksRtd S )Nr$   r#   r;   )r   r   r    r          r   r   r   )Z
fill_value)r
   r(   )rM   expectedZ	collectedr   r   r   test_collect_dict_valuesf   s    rR   c                 C  s   | S r/   r   r!   r   r   r   identitym   s    rS   c                  C  s   t d} td| }t|d|  fg}td|id|  i}ttt	}t
| ||  t
||| t
||| t
|||d t
||| t
|||d d S )N
   r   r   )nparangexrVariable	DataArrayDataset	functoolspartialr   rS   r   groupby)arrayvariable
data_arraydatasetZapply_identityr   r   r   test_apply_identityq   s    
rb   c                 C  s   t tj| |S r/   r   operatoraddr   r   r   r   r   re      s    re   c                  C  sz  t dddg} td| }t|d|  fg}td|id|  i}t | }td|}t|d|  fg}td|id|  i}t| t| | t| t||  t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|	d| t|t||	d t|t|	d| t|t||	d t|t|	d| t|t|	d| t|t||	d t|t||	d d S )Nr$   r#   r;   r   r   )
rU   r^   rW   rX   rY   rZ   Z
zeros_liker   re   r]   r^   r_   r`   ra   Z
zero_arrayZzero_variableZzero_data_arrayZzero_datasetr   r   r   test_apply_two_inputs   sH    
rh   c                  C  sb  t dddg} td| }t|d|  fg}td|id|  i}d}td|}t|}td|i}t| t| | t| t||  t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|| t|t|d| t|t||d t|t|d| t|t||d t|t|d| t|t|d| t|t||d t|t||d d S )Nr$   r#   r;   r   r   r   r   )	rU   r^   rW   rX   rY   rZ   r   re   r]   rg   r   r   r   test_apply_1d_and_0d   sH    
ri   c                  C  s  t d} td| }t|d|  fg}td|id|  i}dd }|| \}}t||  t||  ||\}}t|| t|| ||\}}t|| t|| ||\}}t|| t|| ||d\}}t|| t|| ||d\}}t|| t|| d S )NrP   r   r   c                 S  s   dd }t || g g gdS )Nc                 S  s   | | fS r/   r   r!   r   r   r   func   s    z3test_apply_two_outputs.<locals>.twice.<locals>.funcr)   r   objrj   r   r   r   twice   s    z%test_apply_two_outputs.<locals>.twice)rU   rV   rW   rX   rY   rZ   r   r]   )r^   r_   r`   ra   ro   out0out1r   r   r   test_apply_two_outputs   s.    











rr   c                  C  sT   t jdddgdddggdd} dd }|| d	di\}}t| | t| | d S )
Nr   r$   r#   r;   r"   dimsc                 S  s   dd }t || g g gddS )Nc                 S  s   | | fS r/   r   r!   r   r   r   rj     s    zEtest_apply_dask_parallelized_two_outputs.<locals>.twice.<locals>.funcparallelized)r)   r   rl   rm   r   r   r   ro     s    z7test_apply_dask_parallelized_two_outputs.<locals>.twicer   )rW   rY   chunkr   )r`   ro   rp   rq   r   r   r   (test_apply_dask_parallelized_two_outputs  s
    
rw   c               	   C  s  dd } t ddgddgg}tddg|}t|d	d
gddgd}td|i}tdgddg}t|dddgi}td|i}tdgddg}t|dd	d
gi}	td|	i}
t|| |d t|| |d t|| |d t|	| |d t|| |d t|
| |d t|| |dd t|| |dd dd }t	t
& t|||d jdggdggd W 5 Q R X tj|||d ddg|jd}t|||d jdgg gdggd}t|| d S )Nc                 S  s   dd }t || |ggdS )Nc                 S  s   | d S N).r   r   r!   r   r   r   rj     s    zDtest_apply_input_core_dimension.<locals>.first_element.<locals>.funcr'   rl   )rn   dimrj   r   r   r   first_element  s    z6test_apply_input_core_dimension.<locals>.first_elementr$   r#   r;   rO   r   r   r   r   r"   datac                  W  s&   | d }| dd  D ]}|| }q|S )Nr   r$   r   )argsvalargr   r   r   multiply7  s    
z1test_apply_input_core_dimension.<locals>.multiplyr'   r)   rt   coords)rU   r^   rW   rX   rY   rZ   r   r]   rI   rJ   rK   r   valuesr   )r{   r^   r_   r`   ra   Zexpected_variable_xZexpected_data_array_xZexpected_dataset_xZexpected_variable_yZexpected_data_array_yZexpected_dataset_yr   rQ   actualr   r   r   test_apply_input_core_dimension  sR      r   c                  C  s  dd } t ddgddgg}tddg|}t|d	d
gddgd}td|i}t ddgddggddgddggg}tdddg|}d	d
gddgddgd}t||}td|i}	t|| | t|| | t|| | t|	| | t|| |d t|	| |d dd }
|
|\}}t|| t|| |
|\}}t|| t|| |
|\}}t|| t|| |
|\}}t|| t|	| |
|d\}}t|| t|| |
|d\}}t|| t|	| d S )Nc                 S  s>   dd }t || dggd}t|tjtjfr:ddg|jd< |S )Nc                 S  s   t j| |  gddS Nr|   axisrU   stackr!   r   r   r   rj   U  s    zFtest_apply_output_core_dimension.<locals>.stack_negative.<locals>.funcsignrk   r$   r|   r   
isinstancerW   rZ   rY   r   rn   rj   resultr   r   r   stack_negativeT  s
    z8test_apply_output_core_dimension.<locals>.stack_negativer$   r#   r;   rO   r   r   r   r   r|   r}   r"   r~   r   r   r   r   c                 S  sH   dd }t || g dggd}t|d tjtjfrDddg|d jd< |S )Nc                 S  s   | t j| |  gddfS r   r   r!   r   r   r   rj   p  s    zStest_apply_output_core_dimension.<locals>.original_and_stack_negative.<locals>.funcr   rk   r$   r|   r   r   r   r   r   original_and_stack_negativeo  s
    zEtest_apply_output_core_dimension.<locals>.original_and_stack_negative)rU   r^   rW   rX   rY   rZ   r   r]   )r   r^   r_   r`   ra   Zstacked_arrayZstacked_variableZstacked_coordsZstacked_data_arrayZstacked_datasetr   rp   rq   r   r   r    test_apply_output_core_dimensionS  sF    	&	










r   c            	   	   C  s  ddd} t dgt ddgg}dd |D }d	d t|d
gddggD }dd |D }t dddg}td|}t|dtdfg}td|i}t|| | t|| | t|| | t|| | t	
t tt|d dhd W 5 Q R X d S )Nr   c                   sj   dd }t |f|  ggt|   gg hd}t|tjtjfrft fdd| D }||j < |S )Nc                  W  s   t j| ddS r   )rU   concatenater!   r   r   r   rj     s    z5test_apply_exclude.<locals>.concatenate.<locals>.funcr'   r)   r&   c                   s   g | ]}|j   qS r   r   )rA   rn   rz   r   r   rC     s     z;test_apply_exclude.<locals>.concatenate.<locals>.<listcomp>)	r   lenr   rW   rZ   rY   rU   r   r   )Zobjectsrz   rj   r   Z	new_coordr   r   r   r     s    
z'test_apply_exclude.<locals>.concatenater$   r#   r;   c                 S  s   g | ]}t d |qS r!   )rW   rX   )rA   r   r   r   r   rC     s     z&test_apply_exclude.<locals>.<listcomp>c              
   S  s.   g | ]&\}}t ||d tt|fdqS )r   r"   )rW   rY   ranger   )rA   vcr   r   r   rC     s   r   r   r   c                 S  s   g | ]}t d |iqS )r~   )rW   rZ   )rA   r`   r   r   r   rC     s     abcr~   r   r%   )r   )rU   r^   ziprW   rX   rY   r<   rZ   r   rI   rJ   rK   r   rS   )	r   arrays	variablesZdata_arraysZdatasetsZexpected_arrayexpected_variableexpected_data_arrayexpected_datasetr   r   r   test_apply_exclude  s"    
r   c               	   C  s  t d} td| }|  ddddddgfd}tj||dd}td|i|}td	dd
g}tj|d	d}td|i}tdddddt jg}tj||dd}	td|i|}
t|	t|	d	| t|
t|	d	| t|
t|	d	| t|
t|	d	| t
t t|	d	| W 5 Q R X t
t$ t|	d	|d d 	d	 W 5 Q R X t
t$ t|	d	|dd  	d	 W 5 Q R X t
t t|	d	|	d	 W 5 Q R X t
t t|	d	|	d W 5 Q R X d S )NrP   r   r   r$   r#   r"   rs   r    r   rT         rO   )rU   rV   rW   rX   rY   rZ   nanr   re   r]   rI   rJ   rK   )r^   r_   r   r`   ra   Zother_variableZother_data_arrayZother_datasetr   r   r   r   r   r   test_apply_groupby_add  s8    
 (( r   c                	   C  s  t tddgi kstt tddgtddggddiksFtt tddgtdddggdddksvtt tddggtd	ddgd
dgggdhddddksttt t tddggg W 5 Q R X tt( t tddgtdddgg W 5 Q R X d S )Nr   r   r   r$   r   r#   r"   r   r    r   r    r;   rO   r    r%   )r   r   )r   rW   rX   r(   rI   rJ   rK   r   r   r   r   test_unified_dim_sizes  s     , & r   c               	   C  s   t d} td| }t| t|dd t| t|dd t| d d  t|dd t| d d d f t|dd tt t|dd W 5 Q R X tt t|dd W 5 Q R X d S )NrP   r   r!   r   w)r   r   r   )	rU   rV   rW   rX   r   r	   rI   rJ   rK   r~   varr   r   r   test_broadcast_compat_data_1d  s    
r   c                  C  s  t ddd} tddg| }t| t|dd t| t|dd	 t| t|dd t| jt|d
d t| jt|d	d t| t|dd	 t| t|dd t| jt|dd
 t| d d d d d f t|dd t| d d d d d f jt|dd d S )Nr   r;   rO   r   r   r"   r   r!   r   r   r   )r   r   r   )r   r   r   r    )r   r   r   r    )rU   rV   reshaperW   rX   r   r	   Tr   r   r   r   test_broadcast_compat_data_2d  s$     
 
r   c                  C  s`  dd } t ddgdddgfg}d|jd< d|d jd< t dd	gdddgfg}| ||d
d}|jrlt| ||dd}t|j|j t|d j|d j | |j|jd
d}|jrt| |j|jdd}t|j|j t dddgi}d|jd< d|jjd< t dddgi}| ||d
d}|jr.t| ||dd}t|j|j t|jj|jj d S )Nc                 S  s(   |rt tj| ||dS t tj| |S d S )N
keep_attrsrc   )r   r   r   r   r   r   re     s    ztest_keep_attrs.<locals>.addr   r$   r   daattrZda_coordr#   Fr   Tds)rW   rY   attrsr(   r   r_   rZ   r   )re   r   r   r   Zds_aZds_br   r   r   test_keep_attrs  s.    



r   strategyr   rQ   errorr   r$   r#   r;   Fdefault)idFalseTTrueoverrideZdropZdrop_conflictsrf   r   r   rO   )r   d)r   r   r   Zno_conflictsr   c              	   C  s   t jdddg|d d}t jdddg|d d}t jdddg|d d}|r|tt j tdd |||| d W 5 Q R X n4t jddd	g|d}td
d |||| d}t|| d S )Nr   r   r$   r   r#   c                  W  s   t | S r/   sumr   r   r   r   <lambda>x      z5test_keep_attrs_strategies_variable.<locals>.<lambda>r   r;   c                  W  s   t | S r/   r   r   r   r   r   r   {  r   )rW   rX   rI   rJ   
MergeErrorr   r   r   r   rQ   r   r   r   r   r   r   r   r   #test_keep_attrs_strategies_variable;  s    7"r   c              	   C  s   t jdddg|d d}t jdddg|d d}t jdddg|d d}|r|tt j tdd |||| d W 5 Q R X n4t jddd	g|d}td
d |||| d}t|| d S )Nr   r   r$   )rt   r~   r   r#   c                  W  s   t | S r/   r   r   r   r   r   r     r   z6test_keep_attrs_strategies_dataarray.<locals>.<lambda>r   r;   c                  W  s   t | S r/   r   r   r   r   r   r     r   )rW   rY   rI   rJ   r   r   r   r   r   r   r   $test_keep_attrs_strategies_dataarray  s    7"r   variantrz   coordc              	   C  sd  dd dd d | }||i i i g\}}tjdddgdddg|d fdddg|d fdd	}tjdddgdddg|d fdddg|d fdd	}	tjdddgdddg|d
 fdddg|d
 fdd	}
|rttj tdd ||	|
|d W 5 Q R X n\||i \}}tjdddgdddg|fdddg|fdd	}tdd ||	|
|d}t|| d S )Nc                 S  s   | |fS r/   r   r   r   r   r   r   r      r   z@test_keep_attrs_strategies_dataarray_variables.<locals>.<lambda>c                 S  s   || fS r/   r   r   r   r   r   r     r   r   r   r   r$   r   u)rt   r~   r   r#   c                  W  s   t | S r/   r   r   r   r   r   r     r   r   r;   c                  W  s   t | S r/   r   r   r   r   r   r      r   )getrW   rY   rI   rJ   r   r   r   )r   r   r   rQ   r   compute_attrs	dim_attrscoord_attrsr   r   r   r   r   r   r   .test_keep_attrs_strategies_dataarray_variables  s@    ;$$$"r   c              	   C  s   t jddddgfi|d d}t jddddgfi|d d}t jddddgfi|d d}|rtt j tdd |||| d	 W 5 Q R X n:t jdddd
gfi|d}tdd |||| d	}t|| d S )Nr   r   r   r$   r   r#   c                  W  s   t | S r/   r   r   r   r   r   r   b  r   z4test_keep_attrs_strategies_dataset.<locals>.<lambda>r   r;   c                  W  s   t | S r/   r   r   r   r   r   r   e  r   )rW   rZ   rI   rJ   r   r   r   r   r   r   r   "test_keep_attrs_strategies_dataset%  s    7"r   r~   rz   r   c              	   C  sj  dd dd dd d | }||i i i g\}}}tjddg |d fidg |d fdg |d fd	d
}	tjddg |d fidg |d fdg |d fd	d
}
tjddg |d fidg |d fdg |d fd	d
}|rttj tdd |	|
||d W 5 Q R X nZ||i \}}}tjddg |fidg |fdg |fd	d
}tdd |	|
||d}t|| d S )Nc                 S  s
   | ||fS r/   r   r   r   r   r   r     r   z>test_keep_attrs_strategies_dataset_variables.<locals>.<lambda>c                 S  s
   || |fS r/   r   r   r   r   r   r     r   c                 S  s
   ||| fS r/   r   r   r   r   r   r     r   r   r   r   r   r   r   r$   r#   c                  W  s   t | S r/   r   r   r   r   r   r     r   r   c                  W  s   t | S r/   r   r   r   r   r   r     r   )r   rW   rZ   rI   rJ   r   r   r   )r   r   r   rQ   r   r   Z
data_attrsr   r   r   r   r   r   r   r   r   ,test_keep_attrs_strategies_dataset_variablesj  s:    ;"r   c               	   C  s  t dddgfddgd} t dddgfddgd}tjtdd	 ttj| | W 5 Q R X tjtd
d	 ttj| |dd W 5 Q R X dd }|| |dd}t dt	j
dt	j
gfdddgd}t|| || |dd}t|| tjtdd	 ttj| t ddi W 5 Q R X t dddgfddgd}|| |dd}t ddddgi}t|| || |dd}t dt	j
t	j
t	j
gfdt	j
t	j
t	j
gfdddgd}t|| d S )Nr   r$   r#   r   r   r   c   r;   zcannot align.*join.*exact.*matchzmust supplyrG   )dataset_joinc                 S  s   t tj| |||tjdS )N)joinr   Zdataset_fill_value)r   rd   re   rU   r   )r   r   r   r   r   r   r   re     s    ztest_dataset_join.<locals>.addrF   e   zdata variable namesr   )r   r   )r   r   r   )rW   rZ   rI   rJ   rK   r   rd   re   	TypeErrorrU   r   r   )Zds0Zds1re   r   rQ   Zds2r   r   r   test_dataset_join  s4    
$

"
r   c               	   C  s  dd l m}  | jddd}td|}t|jj}tj|dg|d}td|i}t	
t tt| W 5 Q R X t	
t tt| W 5 Q R X t	
t tt| W 5 Q R X t	
t tt| W 5 Q R X t	
t tt|dd	 W 5 Q R X d
d }|||kst||}t|j| js.tt|| ||}t|j| jsTtt|| ||}t|d j| js~tt|| d S )Nr   )r#   r#   chunksr   r   r   unknownr   c                 S  s   t t| ddS )Nallowedr   )r   rS   r!   r   r   r   dask_safe_identity  s    z+test_apply_dask.<locals>.dask_safe_identity)
dask.arrayr^   onesrW   rX   rY   r   r   rZ   rI   rJ   rK   r   rS   r(   r   r~   Arrayr   )r   r^   r_   r   r`   ra   r   r   r   r   r   test_apply_dask  s6    

r   c                  C  s   dd l m}  | jddd}tj|dd}dd }||}t|j| jsJt|jj	|j	ks\tt
|| | }||}t
|| d S )	Nr   r#   r#   r$   r$   r   r"   rs   c                 S  s   t t| d| jgdS Nru   )r   output_dtypes)r   rS   dtyper!   r   r   r   parallel_identity&  s    z?test_apply_dask_parallelized_one_arg.<locals>.parallel_identity)r   r^   r   rW   rY   r   r~   r   r(   r   r   compute)r   r^   r`   r   r   Zcomputedr   r   r   $test_apply_dask_parallelized_one_arg  s    
r   c                    s   dd l m jddtjd tj ddd _dd  fd	d
} | df | d | td | d  | dd   | d d df dd   | d   d S )Nr   r   r   )r   r   r"   rs   c                 S  s   t tj| |dtjgdS r   )r   rd   re   rU   int64r"   r   r   r   parallel_add;  s        z;test_apply_dask_parallelized_two_args.<locals>.parallel_addc                   s<   | |}t |jjst|jj jks.tt| d S r/   )r   r~   r   r(   r   r   )r   r   r   r^   r   r`   r   r   r   check@  s    
z4test_apply_dask_parallelized_two_args.<locals>.check)	r   r^   r   rU   r   rW   rY   r1   r   )r   r   r   r   %test_apply_dask_parallelized_two_args3  s    
r  c               	   C  s   dd l m}  | jddd}tj|dd}tjtdd tt	|d	d
 W 5 Q R X tjtdd  tt	|d	t
gdgdgd W 5 Q R X d S )Nr   r   r   r   r"   rs   z&at least one input is an xarray objectr   ru   r   zconsists of multiple chunksr   )r   r   r'   r)   )r   r^   r   rW   rY   rI   rJ   rK   r   rS   float)r   r^   r`   r   r   r   #test_apply_dask_parallelized_errorsO  s    r  zignore:Mean of empty slicec            
      C  s  dd l m}  dd }tjd}| j|dddd}| j|dddd}tj|dd	}tj|d
d	}t	||
 |
 dgdggd}t	|||dgdggdd}t|j| jsttj||
  t	|||dgdggdtgd}	t|	j| jsttj||	
  d S )Nr   c                 S  s,   | | j ddd ||j ddd  j ddS )Nr|   T)r   Zkeepdimsr   )meanr"   r   r   r   
covariancem  s    "z3test_apply_dask_multiple_inputs.<locals>.covariance*   rO   )r#   rO   r   r   rs   r   r    ry   r   )r'   r   ru   )r'   r   r   )r   r^   rU   randomZRandomStateZ
from_arrayZrandnrW   rY   r   r   r   r~   r   r(   testingr   r  )
r   r  rsZarray1Zarray2Zdata_array_1Zdata_array_2rQ   r   ru   r   r   r   test_apply_dask_multiple_inputsh  s@    


r
  c                  C  s   dd l m}  | jddd}tj|dd}dd }|| }||}|jd	ksRt|jd
ks`tt	|j
| jsrtt|| d S )Nr   r   r   r   r"   rs   c              	   S  s.   dd }t || dggd| jgtddiddS )Nc                 S  s   t j| |  gddS r   r   r!   r   r   r   rj     s    zJtest_apply_dask_new_output_dimension.<locals>.stack_negative.<locals>.funcr   ru   r#   Zoutput_sizes)r)   r   r   dask_gufunc_kwargs)r   r   r?   rm   r   r   r   r     s    z<test_apply_dask_new_output_dimension.<locals>.stack_negativer   )r#   r#   r#   )r   r^   r   rW   rY   r   rt   r(   shaper   r~   r   r   )r   r^   r`   r   rQ   r   r   r   r   $test_apply_dask_new_output_dimension  s    r  c                    s~   t dddgtddfi} | d | d< ddd	  fd
d}|| }||  }|jddd	ksltt| | d S )Nr8   lonlatd   )rT   rT   r9   r;      )lon_newlat_newc              	     s.   dd }t || dddggddggt dd	S )
Nc                 S  s   | ddddf S )Nr$   rO      r   )r   r   r   r   rj     s    z?test_apply_dask_new_output_sizes.<locals>.extract.<locals>.funcru   r  r  r  r  r  )r   r'   r)   r  )r   r?   rm   Znewdimsr   r   extract  s    z1test_apply_dask_new_output_sizes.<locals>.extract)	rW   rZ   rU   rV   r   rv   rt   r(   r   )r   r  rQ   r   r   r  r    test_apply_dask_new_output_sizes  s    "
r  c                 C  s   t |  S r/   pdZSeriesZmedianr!   r   r   r   pandas_median  s    r  c                  C  sT   t jdddgdddggdd} t jddgdgd}tt| dggd	d
}t|| d S )Nr   r$   r#   r;   r"   rs   r   r   T)r'   	vectorize)rW   rY   r   r  r   r`   rQ   r   r   r   r   test_vectorize  s       r  c                  C  sd   t jdddgdddggdd} t jddgdgd}tt| ddidggd	d
tgd}t|| d S )Nr   r$   r#   r;   r"   rs   r   r   Tru   r'   r  r   r   )rW   rY   r   r  rv   r  r   r  r   r   r   test_vectorize_dask  s    r   c                  C  s   t jdddgdddggdd} t jddgdgd}tt| ddidggd	d
tgd}t|| |j|jksptt jdddggdd} | 	 }tt
| ddid	d
tgd}t|| |j|jkstd S )Nr   r$   r#   r;   r"   rs   r   r   Tru   r                        ?       @       @      ?)r  r   r   )rW   rY   r   r  rv   intr   r   r(   copyrS   complexr  r   r   r   test_vectorize_dask_dtype  s.    

r'  r`   r"   rs   r!  r"  r#  c                 C  s@   |   }tt| ddiddd}t|| |j|jks<td S )Nr   r$   Tru   )r  r   )r%  r   rS   rv   r   r   r(   r  r   r   r   /test_vectorize_dask_dtype_without_output_dtypes	  s    
r(  z2021.06z9dask/dask#7669: can no longer pass output_dtypes and meta)reasonc                  C  s   t jdddgdddggdd} t jddgdgd}tt| ddidggd	d
tgttjdt	ddd}t
|| t	|jkstd S )Nr   r$   r#   r;   r"   rs   r   r   Tru   )r   r   r   )meta)r'   r  r   r   r  )rW   rY   r   r  rv   r$  r?   rU   Zndarrayr  r   r   r(   r  r   r   r   test_vectorize_dask_dtype_meta!  s    

r,  c                 C  s   t |  t |  S r/   r  r"   r   r   r   pandas_median_add9  s    r-  c                  C  s   t jdddgdddggdd} t jdddddgdddddggdd}t jddgd	gd}tt| |d
gd
ggdtd
d}t|| d S )Nr   r$   r#   r;   r"   rs   rO   rP   r   r   T)r'   r  r&   )rW   rY   r   r-  r,   r   Zdata_array_aZdata_array_brQ   r   r   r   r   test_vectorize_exclude_dims>  s    &
r/  c               
   C  s   t jdddgdddggdd} t jdddddgdddddggdd}t jddgd	gd}tt| d	di|d	did
gd
ggtd
ddtgd}t|| d S )Nr   r$   r#   r;   r"   rs   rO   rP   r   r   Tru   )r'   r&   r  r   r   )rW   rY   r   r-  rv   r,   r  r   r.  r   r   r    test_vectorize_exclude_dims_daskO  s    &

r0  c                	   C  s2   t jtdd tt t  W 5 Q R X d S )NzOnly xr.DataArray is supportedr   )rI   rJ   r   rW   corrrZ   r   r   r   r   test_corr_only_dataarrayc  s    r2  c                  C  s>  t jtjddtjddddidd} | jtd	d
d| jtdddjddd	 t jddgdtj
ggddgdt jddgtj
tj
ggddgdt jddgddggddgdg}|d	 |d	 f|d	 |d f|d |d f|d |d f|d |d f|d |d f|d |d f|d |d f|d |d fg	}||fS )N)r;      rO   timez
2000-01-011Dr3  freqperiods)r   r4  r   )r   rt   r      )r4  r#      r;   T)r4  centerr$   r   rs   rO   )rW   rY   rU   r  r  
date_rangeZiselr   Zrollingr  r   )r   r   Zarray_tuplesr   r   r   arrays_w_tuplesh  s,    
 	r=  ddofz
da_a, da_brP   r  r     rz   r   r4  c              	   C  sl   ddl m} t P tj|  | ||d}||s:ttj|  | |d}||s^tW 5 Q R X d S )Nr   )is_dask_collectionrz   r>  r   )r   r@  r   rW   covrv   r(   r1  )da_ada_brz   r>  r@  rB  r1  r   r   r   test_lazy_corrcov  s    rE  c           
        s   |d k	rh fdd}t d}dD ]&}dD ]}|| |||d|||f< q*q"tj| || d}t|| n2 fdd	}	|	| |}tj| || d}t|| d S )
Nc                   sx   t | |\} }|  | @ }| |} ||}tjjtj| j||dj	 tj|j||dj	  dd S )Nr   r>  r   r$   )
r   notnullwhererU   marB  masked_invalidselr~   flattents1ts2r   r   valid_valuesrF  r   r   
np_cov_ind  s    

ztest_cov.<locals>.np_cov_indr;   rO   r   r$   r#   r   r$   r#   r;   r   rA  c                   sd   t | |\} }|  | @ }| |} ||}tjjtj| j tj|j  dd S )NrF  rG  )	r   rH  rI  rU   rJ  rB  rK  r~   rM  rO  rP  rQ  rF  r   r   np_cov  s    

ztest_cov.<locals>.np_cov)rU   zerosrW   rB  r   )
rC  rD  rz   r>  rR  rQ   r   r   r   rW  r   rF  r   test_cov  s    

rY  c           	      C  s   |d k	r`dd }t d}dD ]&}dD ]}|| |||d|||f< q&qt| ||}t|| n*dd }|| |}t| ||}t|| d S )	Nc              	   S  st   t | |\} }|  | @ }| |} ||}tjtj| j||dj	 tj|j||dj	 d S )Nr   rG  )
r   rH  rI  rU   rJ  corrcoefrK  rL  r~   rM  rN  r   r   r   np_corr_ind  s    

ztest_corr.<locals>.np_corr_indrS  rT  rU  r   c                 S  s`   t | |\} }|  | @ }| |} ||}tjtj| j tj|j d S )NrG  )	r   rH  rI  rU   rJ  rZ  rK  r~   rM  rV  r   r   r   np_corr  s    

ztest_corr.<locals>.np_corr)rU   rX  rW   r1  r   )	rC  rD  rz   r[  rQ   r   r   r   r\  r   r   r   	test_corr  s    

r]  c                 C  sz   t | |\} }|  | @ }| |} ||}tj| ||dd| j|d|j|d  }tj| ||d}t|| d S )Nr   rA  r   )r   rH  rI  rW   rB  Zstdr1  r   )rC  rD  rz   rQ  rQ   r   r   r   r   test_covcorr_consistency  s    

r^  z,ignore:invalid value encountered in .*dividec                 C  sX   |   }|  }tj|||d}tj| ||d}tj| ||d}t|| t|| d S )Nr   )rv   rW   r1  r   )rC  rD  rz   Zda_alZda_blZc_ablZc_abZ
c_ab_mixedr   r   r   test_corr_lazycorr_consistency  s    
r_  c                  C  s   t jddgddggddgd} t jddgdtjggddgd}t jt | |t |  |  t jt | |t | |  d S )Nr$   r#   r   r4  rs   )rW   rY   rU   r   r  Zassert_equalr1  rv   )rC  rD  r   r   r   test_corr_dtype_error(  s     &r`  rC  c                 C  sj   |   }| |j|ddk} | | j|d d j|ddd}tj| | |d||d  }t|| d S )Nr   r$   r#   T)rz   ZskipnaZ	min_count)rH  rI  r   r  rW   rB  r   )rC  rz   rQ  rQ   r   r   r   r   test_autocov1  s
     ra  c                  C  s   t jdddgdddggdd} dd }| d	}t|| d
did	ggddtgtd	diddj|j }t	|| t
jtdd6 t|| d
did	ggddtgtddidd W 5 Q R X t
jtdd* t|| d
did	ggddtgd W 5 Q R X d S )Nr   r$   r#   r;   r"   rs   c                 S  s   | t jdf S N.rU   Znewaxisr!   r   r   r   r   F  r   z5test_vectorize_dask_new_output_dims.<locals>.<lambda>r    r   Tru   r  )r)   r  r   r   r  z0dimension 'z1' in 'output_sizes' must correspondr   Zz1z7dimension 'z' in 'output_core_dims' needs corresponding)r)   r  r   r   )rW   rY   Zexpand_dimsr   rv   r  r?   	transposert   r   rI   rJ   rK   )r`   rj   rQ   r   r   r   r   #test_vectorize_dask_new_output_dimsA  sP    
	
 
 re  c               	   C  s~   t dtd} dd }dd }tjtdd t|| d	d	gd
 W 5 Q R X tjtdd t|| d	d	gd
 W 5 Q R X d S )Nr   rT   c                 S  s   | S r/   r   r!   r   r   r   rS   p  s    z*test_output_wrong_number.<locals>.identityc                 S  s
   | | | fS r/   r   r!   r   r   r   tuple3xs  s    z)test_output_wrong_number.<locals>.tuple3xznumber of outputsr   r   rk   rW   rX   rU   rV   rI   rJ   rK   r   )r_   rS   rf  r   r   r   test_output_wrong_numberm  s    rh  c               	   C  s   t dtd} dd }dd }tjtdd t|| d	gd
 W 5 Q R X tjtdd t||  W 5 Q R X tjtdd t||  W 5 Q R X d S )Nr   rT   c                 S  s   | dt jf S rb  rc  r!   r   r   r   add_dim  s    z'test_output_wrong_dims.<locals>.add_dimc                 S  s   | d S rx   r   r!   r   r   r   
remove_dim  s    z*test_output_wrong_dims.<locals>.remove_dimzunexpected number of dimensionsr   r   rk   rg  )r_   ri  rj  r   r   r   test_output_wrong_dims}  s    rk  c               	     s  t d} td| }t|d|  fg}td|id|  i}dd   fdd}tjtdd	 || W 5 Q R X tjtdd	 || W 5 Q R X tjtdd	 || W 5 Q R X  fd
d}tjtdd	 || W 5 Q R X tjtdd	 || W 5 Q R X tjtdd	 || W 5 Q R X  fdd}t	td| d d || t	tj| d d dgd|| t	tdd| d d fi||  fdd}t	td| d d || t	tj| d d dgd|| t	tdd| d d fi|| d S )NrT   r   r   c                 S  s   | d d S )NrP   r   )r^   r   r   r   truncate  s    z,test_output_wrong_dim_size.<locals>.truncatec                   s
   t  | S r/   rl   rn   rl  r   r    apply_truncate_broadcast_invalid  s    zDtest_output_wrong_dim_size.<locals>.apply_truncate_broadcast_invalidzsize of dimensionr   c                   s   t  | dggdggdS )Nr   r   rl   rm  rn  r   r   apply_truncate_x_x_invalid  s       z>test_output_wrong_dim_size.<locals>.apply_truncate_x_x_invalidc                   s   t  | dggdggdS )Nr   r    r   rl   rm  rn  r   r   apply_truncate_x_z  s       z6test_output_wrong_dim_size.<locals>.apply_truncate_x_zr    rP   rs   c                   s   t  | dggdggdhdS )Nr   r   rl   rm  rn  r   r   apply_truncate_x_x_valid  s    z<test_output_wrong_dim_size.<locals>.apply_truncate_x_x_valid)
rU   rV   rW   rX   rY   rZ   rI   rJ   rK   r   )r^   r_   r`   ra   ro  rp  rq  rr  r   rn  r   test_output_wrong_dim_size  sH    
 $	  rs  use_daskbool)rt  r   c              	   C  s  | rt std tddd}tdddd}tddd}tj|d	d
gd	tdddid}tj|d	d
dgd	tdddid}tj|ddgd}| r|	d	di}|	d	di}|	ddi}tj
||d	d
gd}|jdkst|jtd||k stt|jjt|jjs,tt
||}|jdksHt|jtd||k sftt|jjt|jjstt
|}t|| t
|j|j}|jdkst|jtd||k stt|jt|jjst| rl|	d	di}|	d	di}tj
||d
gd}|jdks2t|jtd||k sPtt|jjt|jjslttj
||d
gd}|jdkst|jtd||k sttj
||d
d}|jdkst|jtd||k sttj
||d	d}|jdks
t|jtd||k s(ttj
||dd}|jdksHt|jtd||k sfttj
|||d	d
gd}|jdkst|jtd|||k sttj
||dd}|jdkst|jtd||k stt
|||}|jdkst|jtd|||k s(ttj
|d	d}|jdksFt|jtd|k sbttj
|jg d |jg d d	d}|jdkst|jt|jk sttj
||d!d}|jd"kst|jtd#||k sttj
|||d!d}|jd"kst|jtd$|||k s.ttj
|d!d}|jd"ksLt|jtd%|k shttj
|jg d |jg d d!d}|jd"kst|jt|jk st| stt tj
|d	d d& W 5 Q R X tt tj
|jd'd(d	d W 5 Q R X tt tj
d	d W 5 Q R X tj
||d
gd)d*}|jtd||k s`t|jjd+ srt|jjd, rttj
||d
gd-d*}|jtd||k st| s|jjd+ rt|jjd, stttt
| d S ).Ntest for dask.x      rO   X  rP   i,  <   r   r   r   r$   r   r   ers   r;   )r   z	ij,ijk->k)r   r   z
ij,ijk->ikr   z
ij,ijk->jkrf   z
ij,ijk->ij)r   r{  zij,ijk,kl->kl )r{  zij,ijk,kl->l )r   zij->j )r   .r   zij,ijk->zij,ijk,kl-> zij-> )rt   invalidr   r0   C)rt   orderZC_CONTIGUOUSZF_CONTIGUOUSF)r   rI   skiprU   rV   r   rW   rY   Zlinspacerv   dotrt   r(   r~   Zeinsumallr   r_   typer   rL  rX  r  rJ   r   Z
to_datasetr   flagspickleloadsdumps)rt  r   r   r   rC  rD  Zda_cr   r   r   r   test_dot  s    
"$

      r  c           	   
   C  s  | rt std tddd}tdddd}tdtdd}tddtd	dd}tj|d
dg|d}tj|d
ddg|d}| r|d
di}|d
di}t	||}|| 
d
dg}tj|| tj	||dd}|| 
 }tj|| tjdd, tjtdd t	|| W 5 Q R X W 5 Q R X tjdd2 t	||}|| 
d
dg}tj|| W 5 Q R X tjdd2 t	||}|| 
d
dg}tj|| W 5 Q R X tjdd2 t	||}|| 
d
dg}tj|| W 5 Q R X d S )Nrv  rw  rx  rO   ry  rP   rf   #   r$   r   r   r   r   r;   .rs   rH   )Zarithmetic_joinz&cannot align.*join.*exact.*not equal.*r   rD   rE   rG   )r   rI   r  rU   rV   r   rW   rY   rv   r  r   r  r   Zset_optionsrJ   rK   )	rt  r   r   Zcoords_aZcoords_brC  rD  r   rQ   r   r   r   test_dot_align_coordsN  sB    
 r  c                  C  s@   t jddgdd} t | dd}t jddgdd}t|| d S )NTFr   rs   r$   r   )rW   rY   rI  r   )condr   rQ   r   r   r   
test_where  s    r  c                  C  s  t jddgdddgiddid} dd	i| d _t jddgdddgidd
id}ddi|d _t jddgdddgiddid}ddi|d _t j| ||dd}t jddgdddgidd
id}ddi|d _t|| t j| d|dd}t jddgdddgid}t|| t j| |ddd}t jddgdddgidd
id}ddi|d _t|| t j| dddd}t jddgdddgid}t|| t jd||dd}t jddgdddgidd
id}ddi|d _t|| t jddddd}td}t|| t jd|iddid}t jd|iddid}t j| ||dd}	t jdt jddgdddgidd
ididdid}
ddi|
d _t|
|	 t j| |d|dd}	t jdt jddgdddgidd
idid}
ddi|
d _t|
|	 d S )NTFr   r   r$   r   Zcond_da)r   r   Z
cond_coordZx_daZx_coordZy_daZy_coordr   r   r   Zx_ds)	data_varsr   Zy_ds)r  )	rW   rY   r   rI  r   rU   r^   rZ   rename)r  r   r   r   rQ   Z	actual_npZexpected_npZds_xZds_yZ	ds_actualZds_expectedr   r   r   test_where_attrs  s\        

 

 


 
 r  Znodaskcoeffsdegreer   	      /   simple)r   r  zbroadcast-x)r   r  z
shared-dimzreordered-index(      zsparse-indexr   zarray-datasetzdataset-arrayr   zdataset-datasetz
1970-01-01sr6      eA    eAdatetimei  i  i  ztimedelta64[ns]r*  g     @@g     @@g     p@	timedeltazxr.DataArray | xr.Dataset)rt  r   r  rQ   r   c              	   C  s`   | r.t std |ddi}|ddi}t  tj||d}W 5 Q R X tj|| d S )Nrequires daskr  r#   r   r   r  )	r   rI   r  rv   r   rW   polyvalr  r   )rt  r   r  rQ   r   r   r   r   test_polyval  s    \
r  datez
0753-04-21r+   )rt  r  r   c           	   
   C  s   dd l }tjtj|dddddd}tjddgd	d	ddgid
}| rntsRtd |d	di}|ddi}tdd tj	||d}W 5 Q R X tj|ddd }||
ddd  d }tjdddgddtj|ddddid
| }tj|| d S )Nr   Z1Sr;   T)r7  r8  Z
use_cftimer   rs   r$   r  r   r  r#   )Zmax_computesr  )r8  i  r  r  )cftimerW   rY   r<  r   rI   r  rv   r   r  ZDatetimeGregoriantotal_secondsr  r   )	rt  r  r  r   r  r   t0offsetrQ   r   r   r   test_polyval_cftime4  s0    
r  c               	   C  s   t jdddgdd} t jdddgdddddgid	}tt t | |d W 5 Q R X tt" t | |j|j	t
d
 W 5 Q R X d S )Nr$   r#   r;   r   rs   rO   r  r   r   )r  )rW   rY   rI   rJ   rK   r  Z	drop_varsZassign_coordsr  Zastyper  )r   r  r   r   r   test_polyval_degree_dim_checksX  s     r  ns   r5  "   9   V   r   Z2Dzxr.DataArray)rt  r   r   r   c                 C  sj   ||j d< | r*tstd |ddi}|jddd}t|j|j	}|j
|j }tj|j|j d S )Nr   r  r#   )rz   deg)r   r   rI   r  rv   ZpolyfitrW   r  r   Zpolyfit_coefficientsrd  rt   r  r   r_   )rt  r   r   ZfitZ	evaluatedrQ   r   r   r    test_polyfit_polyval_integrationa  s    

r  za, b, ae, be, dim, axisZdim_0r|   )rt   r~   rz  )rP   r;   rO   	cartesianr   r    g      ?g      @)r4  r  r   )r  r$  )rz   r   rt  r   c           	      C  sT   t j|||d}|r2ts"td |  } | }tj| ||d}tj|| d S )Nr   rv  r   )	rU   Zcrossr   rI   r  rv   rW   r  Zassert_duckarray_allclose)	r   r   Zaeberz   r   rt  rQ   r   r   r   r   
test_cross  s    _
r  )t
__future__r   r[   rd   r  ZnumpyrU   Zpandasr  rI   Znumpy.testingr   r   Zpackaging.versionr   ZxarrayrW   Zxarray.core.alignmentr   Zxarray.core.computationr   r   r	   r
   r   r   r   r   r   Zxarray.core.pycompatr   Zxarray.testsr   r   r   r   Zdask_versionr   r.   r:   r=   r>   rN   rR   rS   rb   re   rh   ri   rr   rw   r   r   r   r   r   r   r   r   markZparametrizeparamr   r   r   r   r   r   r   r   r  r  filterwarningsr
  r  r  r  r  r   r'  rY   r(  Zskipifr,  r-  r/  r0  r2  r=  rE  rY  r]  r^  r_  r`  ra  re  rh  rk  rs  r  r  r  r  rZ   r<  r^   r  r  r  r  rX   rV   r   r?   r  r   r   r   r   <module>   s  ,//%<>)%#

6

6

6)

6

6%/)
*	 
&/&+


+< 5A   



"	"""
"	
 S 	  							
]