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	m
Z
 d dlZd dlmZmZ d dlmZmZmZmZmZmZ d dlmZ d dlmZ zd dlmZ W n ek
r   Y nX edZ e j!j"Z"e j#d	d
Z$e$j%Z%ej&'dgZ(dd Z)dd Z*dd Z+dd Z,dd Z-dd Z.dd Z/dd Z0dd Z1dd Z2d d! Z3d"d# Z4ej5e6e7e6e8ge9d$d%d& Z6d'd( Z:G d)d* d*Z;G d+d, d,Z<ej&=d-d.ej>d/ej&j?d0d1d2d3fd4d5 Z@ej&=d-d.ej>d/ej&j?d0d1d2d3fd6d7 ZAej&j=d8ej>d9e"d:d;ej>e$jBe"d<d;ej>e$jCe"d=d;ej>e$jDdd>d;ej>e$jEdd?d;feFd@ej&=d-d.ej>d/ej&j?d0d1d2d3fej&=dAdBejGfdCdD ZHej&j=d8ej>d9e"d:d;ej>e$jBe"d<d;ej>e$jCe"d=d;ej>e$jDdd>d;ej>e$jEdd?d;feFd@ej&=d-d.ej>d/ej&j?d0d1d2d3fej&=dAdBejGfdEdF ZIdGdH ZJdIdJ ZKej&j=d8ej>d9e"d:d;ej>e$jBe"d<d;ej>e$jCe"d=d;ej>e$jDdd>d;ej>e$jEdd?d;feFd@ej&=d-d.ej>d/ej&j?d0d1d2d3fdKdL ZLej&j=d8ej>d9e"d:d;ej>e$jBe"d<d;ej>e$jCe"d=d;ej>e$jDdd>d;ej>e$jEdd?d;feFd@ej&=d-d.ej>d/ej&j?d0d1d2d3fdMdN ZMej&j=d8ej>d9e"d:d;ej>e$jBe"d<d;ej>e$jCe"d=d;ej>e$jDdd>d;ej>e$jEdd?d;feFd@ej&=d-d.ej>d/ej&j?d0d1d2d3fdOdP ZNej&j=d8ej>d9e"d:d;ej>e$jBe"d<d;ej>e$jCe"d=d;ej>e$jDdd>d;ej>e$jEdd?d;feFd@ej&=d-d.ej>d/ej&j?d0d1d2d3fdQdR ZOej&j=d8ej>d9e"d:d;ej>e$jBe"d<d;ej>e$jCe"d=d;ej>e$jDdd>d;ej>e$jEdd?d;feFd@ej&=d-d.ej>d/ej&j?d0d1d2d3fdSdT ZPej&j=d8ej>d9e"d:d;ej>e$jBe"d<d;ej>e$jCe"d=d;ej>e$jDdd>d;ej>e$jEdd?d;feFd@ej&=d-d.ej>d/ej&j?d0d1d2d3fdUdV ZQej&=d-d.ej>d/ej&j?d0d1d2d3fej&=dWejRejSfdXdY ZTej&=d-d.ej>d/ej&j?d0d1d2d3fej&=dWejRejSfdZd[ ZUej&=d-d.ej>d/ej&j?d0d1d2ej>d3ej&jVd\d1d2fd]d^ ZWej&=d-d.ej>d/ej&j?d0d1d2ej>d3ej&jVd\d1d2fd_d` ZXej&j=d8ej>d9e"d:d;ej>e$jBe"d<d;ej>e$jCe"d=d;ej>e$jDdd>d;ej>e$jEdd?d;feFd@ej&=daejYdbfdcdd ZZej&j=d8ej>d9e"d:d;ej>e$jBe"d<d;ej>e$jCe"d=d;ej>e$jDdd>d;ej>e$jEdd?d;feFd@ej&=daejYdbfdedf Z[dgdh Z\G didj djZ]G dkdl dlZ^G dmdn dnZ_eG dodp dpZ`eG dqdr dreZadS )s    )annotationsN)version)dtypesduck_array_ops)assert_allcloseassert_duckarray_allcloseassert_equalassert_identicalrequires_daskrequires_matplotlib)PlotTestCase)_PAD_XR_NP_ARGSpintT)Zforce_ndarray_likezerror::pint.UnitStrippedWarningc                 C  s   dd }|| ||kS )Nc                 S  s$   t | tjtjfr| }ntj}|jS N)
isinstanceunit_registryQuantityUnitdimensionlessdimensionality)objZ	unit_like r   ;/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/test_units.pyr   .   s    z%is_compatible.<locals>.dimensionalityr   )unit1unit2r   r   r   r   is_compatible-   s    r   c                 C  s   dd t | |D S )Nc                 S  s    i | ]\}\}}|t ||qS r   r   ).0keyr   r   r   r   r   
<dictcomp>:   s   
 z'compatible_mappings.<locals>.<dictcomp>)zip_mappings)firstsecondr   r   r   compatible_mappings9   s    r#   c                 G  s    |   }|D ]}|| q|S r   )copyupdate)basemappingsresultmr   r   r   merge_mappings@   s    r*   c                  '  s@   t | d j| dd   D ]   t fdd| D fV  qd S )Nr      c                 3  s   | ]}|  V  qd S r   r   )r   r)   r   r   r   	<genexpr>J   s     zzip_mappings.<locals>.<genexpr>)setintersectiontuple)r'   r   r,   r   r    H   s    r    c                 C  s@   t | tjtjtjfr| j} z| jW S  tk
r:   Y d S X d S r   )r   xrVariable	DataArrayDatasetdataunitsAttributeError)r   r   r   r   array_extract_unitsM   s    r8   c                 C  s&   z| j W S  tk
r    |  Y S X d S r   )	magnituder7   )arrayr   r   r   array_strip_unitsW   s    r;   c                 C  s\   t | trtd| d|  z| | }W n, tjjjk
rV   t |tjrN | }Y nX |S )Nzcannot attach unit z to quantity )	r   r   
ValueErrornpcore_exceptionsZUFuncTypeErrorr   r   )r5   unitquantityr   r   r   array_attach_units^   s    

rB   c                 C  s   t | tjr>dd | j D }dd | j D }||}n|t | tjrv| jt| i}dd | j D }||}nDt | tj	rd t| j
i}|}n"t | trd t| i}|}ni }|S )Nc                 S  s   i | ]\}}|t |qS r   r8   r   namevaluer   r   r   r   o   s     z!extract_units.<locals>.<dictcomp>c                 S  s   i | ]\}}|t |qS r   rC   rD   r   r   r   r   r   s     c                 S  s   i | ]\}}|t |qS r   rC   rD   r   r   r   r   y   s     )r   r1   r4   	data_varsitemscoordsr3   rE   r8   r2   r5   r   )r   Z
vars_unitsZcoords_unitsr6   r   r   r   extract_unitsm   s,    


rJ   c                 C  s   t | tjrDdd | j D }dd | j D }tj||d}nt | tjrt| jj	}dd | j D }tjt
| j||| jd}n`t | tjrt| j}| j|d}n<t | tjr| j}n(t | ttfrt| dd	 | D S | }|S )
Nc                 S  s   i | ]\}}t |t |qS r   strip_unitsrD   r   r   r   r      s    zstrip_units.<locals>.<dictcomp>c                 S  s   i | ]\}}t |t |qS r   rK   rD   r   r   r   r      s     rG   rI   c                 S  s8   i | ]0\}}t |t|jtr0|jt|jjfn|qS r   )rL   r   r5   r   dimsr;   variable_datarD   r   r   r   r      s
   
rE   r5   rI   rN   r5   c                 s  s   | ]}t |V  qd S r   rK   r   elemr   r   r   r-      s     zstrip_units.<locals>.<genexpr>)r   r1   r4   rG   rH   rI   r3   r;   rO   rP   rL   rE   rN   r2   r5   r$   r   r   r9   listr0   type)r   rG   rI   new_objr5   r   r   r   rL      s8    	   
rL   c           	        s:  t | tjtjtjfs< dd p0 d d p0d t|  S t | tjr fdd| j D } fdd| j	 D }tj||| j
d}nt | tjr | jd p d d pd}t| j|} fdd| j	 D }| j}| j
}tj| j||||d}n8 dd p d d pd}t| j|}| j|d	}|S )
Nr5   r+   c                   s   i | ]\}}|t | qS r   attach_unitsrD   r6   r   r   r      s     z attach_units.<locals>.<dictcomp>c                   s   i | ]\}}|t | qS r   rX   rD   rZ   r   r   r      s     rG   rI   attrsc              	     sB   i | ]:\}}|| kr2|j t|j |p,d fn
|j |jfqS )r+   )rN   rB   r5   getrD   rZ   r   r   r      s
   rE   r5   rI   r\   rN   rR   )r   r1   r3   r4   r2   r]   rB   rG   rH   rI   r\   rE   r5   rN   r$   )	r   r6   rG   rI   rW   Z
data_unitsr5   rN   r\   r   rZ   r   rY      s<    



     rY   c           
        sB  dd   D t tjrbfdd j  D }fdd j  D }tj|| jd}nt tjr j}	|d p	dd p	d d pd }t
 jd |i} fdd j  D }tj||| j jd}n^t tjrt
 j} j|d	}n6t tjr:	d }	|	d k	r4 |	n }n }|S )
Nc                 S  s&   i | ]\}}|t |tjsd n|qS r   )r   r   r   r   r   rF   r   r   r   r      s    z!convert_units.<locals>.<dictcomp>c              	     s(   i | ] \}}|t |jd  |iqS r   convert_unitsrO   r]   r   rE   r:   tor   r   r      s    c              	     s(   i | ] \}}|t |jd  |iqS r   r`   rb   rc   r   r   r      s    r[   r5   c              
     s8   i | ]0\}}| j kr||jt|jd |ifqS r   )rE   rN   ra   rO   r]   rb   r   rd   r   r   r      s   
 r^   rR   )rH   r   r1   r4   rG   rI   r\   r3   rE   r]   ra   rO   rN   r2   r5   r$   r   r   rd   )
r   rd   rG   rI   rW   rE   	new_unitsr5   new_datar6   r   re   r   ra      sD    

&    
ra   c                 C  s   d}t | t |kstd S )NT)rJ   AssertionError)abZ__tracebackhide__r   r   r   assert_units_equal  s    rk   )paramsidsc                 C  s   | j S r   )param)requestr   r   r   dtype  s    rp   c                   s.   ddl m} t   fdd|| | dD S )Nr   )zip_longestc                   s    g | ]\}}| k	r|n|qS r   r   )r   r!   r"   
fill_valuer   r   
<listcomp>  s   zmerge_args.<locals>.<listcomp>)	fillvalue)	itertoolsrq   object)Zdefault_argsnew_argsrq   r   rr   r   
merge_args  s
    
ry   c                   @  s.   e Zd ZdZddddZdd Zdd	 ZdS )
methodzwrapper class to help with passing methods via parametrize

    This is works a bit similar to using `partial(Class.method, arg, kwarg)`
    Nfallback_funcc                O  s   || _ || _|| _|| _d S r   )rE   fallbackargskwargs)selfrE   r|   r~   r   r   r   r   __init__&  s    zmethod.__init__c           
        s   ddl m} t| j|}| j|}tjtjtjtj	j
jf}t||sd  fdd| D }| jd k	rv|| j|}qt|| jd }|d kst|stt| j}	||	|}nt|| j}|||S )Nr   )partial)dimrN   c                   s   i | ]\}}| kr||qS r   r   r_   Zexclude_kwargsr   r   r   =  s    z#method.__call__.<locals>.<dictcomp>)	functoolsr   ry   r~   r   r1   r2   r3   r4   r>   groupbyZGroupByr   rH   r}   getattrrE   callabler=   )
r   r   r~   r   r   all_args
all_kwargsZxarray_classesfuncZ
numpy_funcr   r   r   __call__,  s*    



zmethod.__call__c                 C  s   d| j  S )NZmethod_rE   r   r   r   r   __repr__P  s    zmethod.__repr____name__
__module____qualname____doc__r   r   r   r   r   r   r   rz      s   $rz   c                   @  s.   e Zd ZdZddddZdd Zdd	 ZdS )
functionzpwrapper class for numpy functions

    Same as method, but the name is used for referencing numpy functions
    Nfunction_labelc                O  sn   t |r$|d k	r|n|j| _|| _n:|d kr0|n|| _tt|| _| jd kr^td| j d|| _|| _d S )Nz'module 'numpy' has no attribute named '')	r   r   rE   r   r   r=   r7   r~   r   )r   Zname_or_functionr   r~   r   r   r   r   r   Z  s    
zfunction.__init__c                 O  s"   t | j|}| j|}| j||S r   )ry   r~   r   r   )r   r~   r   r   r   r   r   r   r   m  s    
zfunction.__call__c                 C  s   d| j  S )NZ	function_r   r   r   r   r   r   s  s    zfunction.__repr__r   r   r   r   r   r   T  s   r   variantr5   rN   indexes don't support unitsreasonmarksrI   c                 C  s   t jddfdt jdfddt jfd}|| \}}}tjtjtjdggddid}t	ddd	
|| }td	| }t	ddd	| }	tj|d|d|	fd
d}
t|t|
t|
}||
}t|| t|| d S )Nr+   r5   rN   rI   xaxisZinput_core_dimsr   r   
      r   u)r   r)   r]   r   r   r1   apply_ufuncr=   meanlinspaceastypearanger3   rY   rL   rJ   rk   r	   )r   rp   variants	data_unitdim_unit
coord_unitr   r:   r   r   
data_arrayexpectedactualr   r   r   test_apply_ufunc_dataarrayw  s&    


   
r   c                 C  s  t jddfdt jdfddt jfd}|| \}}}tjtjtj	dggddid}t
ddd	d
d|| }t
ddd
|| }td
| }	td| }
t
ddd| }tjd|fd|fd|	|
d|fdd}t|t|t|}||}t|| t|| d S )Nr+   r   r   r   r   r   r   r   2      r   yri   rj   r   r   r   r   rM   )r   r)   sr]   r   r   r1   r   r=   r   r   reshaper   r   r4   rY   rL   rJ   rk   r	   )r   rp   r   r   r   r   r   array1array2r   r   r   dsr   r   r   r   r   test_apply_ufunc_dataset  s0    


    
r   
unit,errorr+   no_unitidr   incompatible_unitcompatible_unitidentical_unitrm   rF   r   c              	     s  |dkr*| t jkst|tjr*tjdd | t jkr>t |n| }tj}||fddfd||fdfdd||ffd}|	|\\ \}}	\}
}t
ddddd	|  }t
dd
ddd	| }t
d| }t
d	| }t
dd|	 }t
dd	dd
dg|
 }t
dd
dddg| }||d}||d}|dkr`d|f|d< d|f|d< tj||dd}tj||dd}| }ttjd|d}|d k	r| t jkst|trt| ||| W 5 Q R X d S  fdd|j D }t|}t|}|t|tt||f|\}}t||}t|trPtt|||}n
t||}|||\}}t|| t|| t|| t|| d S )NrI   gfill_value is used for both data variables and coords. See https://github.com/pydata/xarray/issues/4165r   r+   r+   r   r   r      r            	         r   r   Zy_ar5   rI   rN   outerjoinrs   c              	     s0   i | ](\}}|t t|d dkr" nd iqS Nr+   rL   ra   r_   
data_unit1
data_unit2r   r   r     s
    z(test_align_dataarray.<locals>.<dictcomp>)r   NAr   r   r   pytestxfailget_fill_valuer)   r]   r=   r   r   r   r   r:   r1   r3   r   alignr   raisesr   rH   rJ   rL   ra   rY   rk   r   )rF   r   r@   errorrp   rs   original_unitr   	dim_unit1	dim_unit2coord_unit1coord_unit2r   r   r   y1y2u1u2coords1coords2Zdata_array1Zdata_array2r   stripped_kwargsunits_aunits_b
expected_a
expected_bactual_aactual_br   r   r   test_align_dataarray  sv    
	  


"




r   c              	     s  |dkr*| t jkst|tjr*tjdd | t jkr>t |n| }tj}||fddfd||fdfdd||ffd}|	|\\ \}}	\}
}t
ddddd	|  }t
ddddd	| }t
d| }t
d	| }t
dd
|	 }t
dd	d
ddg|
 }t
d
ddddg| }||d}||d}|dkr`d|f|d< d|f|d< tjdd|fi|d}tjdd|fi|d}| }ttjd|d}|d k	r| t jkst|trt| ||| W 5 Q R X d S  fdd|j D }t|}t|}|t|tt||f|\}}t||}t|tr\tt|||}n
t||}|||\}}t|| t|| t|| t|| d S )NrI   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ri   rM   r   r   c              	     s0   i | ](\}}|t t|d dkr" nd iqS r   r   r_   r   r   r   r   w  s
    z&test_align_dataset.<locals>.<dictcomp>)r   r   r   r   r   r   r   r   r)   r]   r=   r   r   r   r   r:   r1   r4   r   r   r   r   r   rH   rJ   rL   ra   rY   rk   r   )rF   r@   r   r   rp   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ds1ds2r   r   r   r   r   r   r   r   r   r   r   test_align_dataset*  sv    
	  


"




r   c                 C  s   t dddtj }t dddtj }tj|dd}tj|dd}t|}t|}tt|t|\}}t	||}t
t	|||}t||\}	}
t||	 t||	 t||
 t||
 d S )Nr   r   r   r   r   r5   rN   r   )r=   r   r   Par1   r3   rJ   	broadcastrL   rY   ra   rk   r	   )rp   r   r   ri   rj   r   r   r   r   r   r   r   r   r   test_broadcast_dataarray  s    



r   c                 C  s   t dddtj }t dddtj }t d}t d}t dd}t dd}tjd|fd|fd	||d
d}tjd|tjfd|tjfd	||d
d}t	|}	t	|}
t
t|t|\}}t||	}t||
}t
||\}}t|| t|| t|| t|| d S )Nr   r   r   r         r   r   r   r   rM   )r=   r   r   r   r   r1   r4   rd   ZhParJ   r   rL   rY   rk   r	   )rp   r   r   x1r   x2r   r   otherr   r   r   r   r   r   r   r   r   test_broadcast_dataset  s4    

 




r  c              	   C  s  t j}||fddfd||fdfdd||ffd}|| \\}}\}}	\}
}tjd|d| }tjd|d| }tddd | }td| }td	|
 }t|| }t|| }tddd |	 }tdd|	 }td	d
| }tjd|fd|fd||d|fdd}tjd|fd|fd||d|fdd}|d k	rrt	
| t||g W 5 Q R X d S t|}ttt|tt||g|}t||g}t|| t|| d S )Nr   r   r   r   shaperp   r+   r   r   r   r   r   r   r   r   r   r   rM   )r   r)   r]   r=   zerosr   	ones_liker1   r4   r   r   Zcombine_by_coordsrJ   rY   rL   ra   rk   r	   )r   r@   r   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   other_array1other_array2other_xZother_yZother_ur   r   r6   r   r   r   r   r   test_combine_by_coords  sT    	

r  c              	     s  t j}||fddfd||fdfdd||ffd}|| \\}}\}}	\}
}tjd|d| }tjd|d| }tddd | }td| }td	|
 }tjd
|fd
|fd||d|fdd}tjd
t|| fd
t|| fdtd	|	 tdd|	 dtdd| fdd}tjd
tj	|tj
d| fd
tj	|tj
d| fdtd	d|	 tdd|	 dtd	d| fdd}tjd
dt| | fd
dt| | fdtdd|	 tdd|	 dtdd| fdd}ttjddgd}|d k	rDt| |||g||gg W 5 Q R X d S t|  fdd}t|t|||g||||gg }|||g||gg}t|| t|| d S )Nr   r   r  r  r+   r   r   r   r   r  r   r   r   r   zrM   r   rr   r   r   r   r   r   )Z
concat_dimc                   s   t t|  S r   r   r   rZ   r   r   <lambda>s      z%test_combine_nested.<locals>.<lambda>)r   r)   r]   r=   r  r   r1   r4   r  	full_likenanr   Zcombine_nestedr   r   rJ   rY   rL   rk   r	   )r   r@   r   rp   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   ds3Zds4r   convert_and_stripr   r   r   rZ   r   test_combine_nested  s    	
	
r  c              	   C  s  t j}||fddfd||fdfdd||ffd}|| \\}}\}}	\}
}tddd|| }tddd|| }tdd| }td|	 }tdd	d||
 }tddd|| }tj||d
|fdd
d}tj||d
|fdd
d}|d k	r4t	
| tj||gd
d W 5 Q R X d S t|}ttjt|tt||gd
d|}tj||gd
d}t|| t|| d S )Nr   r   r   r   r      r+   r   r   r   r   r   )r   r)   r]   r=   r   r   r   r1   r3   r   r   concatrJ   rY   rL   ra   rk   r	   )r   r@   r   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   arr1arr2r6   r   r   r   r   r   test_concat_dataarray  sB    	
 
r  c              	   C  s  t j}||fddfd||fdfdd||ffd}|| \\}}\}}	\}
}tddd|| }tddd|| }tdd| }td|	 }tdd	d||
 }tddd|| }tjd
d|fi|d|fdd}tjd
d|fi|d|fdd}|d k	r@t	
| tj||gdd W 5 Q R X d S t|}ttjt|tt||gdd|}tj||gdd}t|| t|| d S )Nr   r   r   r   r   r  r  r+   r   ri   r   r   rM   r  )r   r)   r]   r=   r   r   r   r1   r4   r   r   r  rJ   rY   rL   ra   rk   r	   )r   r@   r   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r   r   r   r   r   test_concat_dataset  s<    	  

r  c           !   	     s|  t j}||fddfd||fdfdd||ffd}|| \\}}\}}	\}
}tddddd|| }td| }td| }tdd	d|
 }tdd	d|
 }tddd
dd|| }tdd|	 }td| }td	dd| }tdd	d|
 }tddddd|| }tdd|	 }tdd
|	 }tdd	d| }tdd	d| }tj	d|||d|fd|fddd}tj	d|||d|fd|fddd}tj	d|||d|fd|fddd}|d k	rt
| t|||g W 5 Q R X d S ||
|
|
|||d  fdd}tt||||||g }t|||g} t||  t||  d S )Nr   r   r   r+   r   r   r   r   r   r   r         ri   r   r   )r   r   r   vr   rQ   r  )r   r  r   wr   r  )r   r  r!  r"  r   r  )ri   r   r!  r"  r   r   r  c                   s   t t|  S r   r   )arrrZ   r   r   r  b  r  z&test_merge_dataarray.<locals>.<lambda>)r   r)   r]   r=   r   r   r   r   r1   r3   r   r   mergerY   rk   r   )!r   r@   r   rp   r   r   r   r   r   r   r   r   r   r   r   r   Zv1r   r   z2r   Zw2array3Zy3Zz3Zv3Zw3r  r  Zarr3r  r   r   r   rZ   r   test_merge_dataarray	  s    	   
	
r)  c              	     s   t j}||fddfd||fdfdd||ffd}|| \\}}\}}	\}
}tjd|d| }tjd|d| }tdd| }td| }td|
 }tjd	|fd	|fd
||d|fdd}tjd	t|| fd	t|| fd
td|	 tdd|	 dtdd| fdd}tjd	t	|tj
| fd	t	|tj
| fd
tdd|	 tdd|	 dtdd| fdd}ttj}|d k	rt| ||||g W 5 Q R X d S t|  fdd}t|||||||g }||||g}t|| t|| d S )Nr   r   r  r  r      r   r   r  r   r   r   rM   r   r  r   r   c                   s   t t|  S r   r   r  rZ   r   r   r    r  z$test_merge_dataset.<locals>.<lambda>)r   r)   r]   r=   r  r   r1   r4   r  r  r  r   r&  r   r   rJ   rY   rk   r   )r   r@   r   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r   r   r   rZ   r   test_merge_datasetq  sf    	


r+  r   c                 C  s   t j}|ddfd|dfdd|fd}||\}}}tddd|| }td| }	tddd| }
tj|d|	d|
fdd}t	|}|
|j t| t||}| |}t|| t|| d S )Nr+   r   r   r   r   r   r   )r   r)   r]   r=   r   r   r   r1   r3   rJ   poprE   rY   rL   rk   r	   )r   r   rp   r@   r   r   r   r   r:   r   r   r   r6   r   r   r   r   r   test_replication_dataarray  s     
r-  c                   s  t j}t jt jfddfd|dfdd|fd}||\\}}}}tddd|| }	tddd|| }
td|| }td|| }tddd| }tj	d|	fd	|
fd
||d	|fdd  fddt
  D }t| t |}|  }t|| t|| d S )Nr+   r   r   r   r   r   r   r   r   r   r   rM   c                   s    i | ]\}}| j kr||qS r   rG   )r   rE   r@   r  r   r   r     s   
 z,test_replication_dataset.<locals>.<dictcomp>)r   r)   r   r]   r=   r   r   r   r1   r4   rJ   rH   rY   rL   rk   r	   )r   r   rp   r@   r   r   r   r   r   r   r   r   r   r   r6   r   r   r   r  r   test_replication_dataset  s,    


r/  z%can't copy quantity into non-quantityc                 C  s   t j}|ddfd|dfdd|fd}|| \}}}tddd| }td| }tddd| }	tj|d|d|	fdd}
dt j }t	|
}|j
||
j< ttjt|
t|d	|}tj|
|d	}t|| t|| d S )
Nr+   r   r   r   r   r   r   r   rr   )r   r)   r]   r=   r   r   r1   r3   degKrJ   r6   rE   rY   r  rL   rk   r	   )r   rp   r@   r   r   r   r   r:   r   r   r   rs   r6   r   r   r   r   r   $test_replication_full_like_dataarray  s(    
 
r1  c                 C  s6  t j}t jt jfddfd|dfdd|fd}|| \\}}}}tddd|| }tddd|| }	td|| }
td|| }tddd| }t	j
d|fd	|	fd
|
|d	|fdd}dt j }t|dd |jD }tt	jt|t|d|}t	j||d}t|| t|| d S )Nr+   r   r   r   r   r   r   r   r   r   r   rM   r   c                 S  s   i | ]}|t jqS r   )r   r0  r   rE   r   r   r   r   n  s      z6test_replication_full_like_dataset.<locals>.<dictcomp>rr   )r   r)   r   r   r]   r=   r   r   r   r1   r4   r0  rJ   rG   rY   r  rL   rk   r	   )r   rp   r@   r   r   r   r   r   r   r   r   r   r   r   rs   r6   r   r   r   r   r   "test_replication_full_like_datasetG  s4    
 
r3  rs   gffffff$@c           	   
   C  s   t ddd|tj }tj|dd}|dtj k }| | } |d k	rt | rZt| t	rt
| t|||  W 5 Q R X d S tt|t|tt| d tjit|}t||| }t|| t|| d S )Nr   r   r   r   r   )r=   r   r   r   r)   r1   r3   isnanr   r   r   r   whererY   rL   ra   rJ   rk   r	   )	rs   r@   r   rp   r:   r   condr   r   r   r   r   test_where_dataarrayy  s.    
r7  c           
   
   C  s   t ddd|tj }t ddd|tj }tjd|fd|fdd}|dtj k }| | } |d k	rt | rt| t	rt
| t|||  W 5 Q R X d S tt|t|tt| d tjit|}t||| }	t||	 t||	 d S )	Nr   r   r   r  r   r   r.  r   )r=   r   r   r   r)   r1   r4   r4  r   r   r   r   r5  rY   rL   ra   rJ   rk   r	   )
rs   r@   r   rp   r   r   r   r6  r   r   r   r   r   test_where_dataset  s0    
r8  c                 C  s   t ddddd| tj tj }t ddddd| tj }tj|dd}tj|d	d}t	t
t|t|d tji}t
||}t|| t|| d S )
Nr   r   r   r   r      r   r   r$  )r=   r   r   r   r   r)   r   r1   r3   rY   dotrL   rk   r	   )rp   r   r   r   r   r   r   r   r   r   test_dot_dataarray  s"      
r;  c                   @  s6  e Zd Zejjdedededddedddeded	ed
ededededededededfeddd Zdd Z	ejjdede
jedededdddfedejdejd ed!d"ejejed#d"ejejed$d"ejejd%d&d"ejejd%d'd"fd(d) Zejjded*d+ed,d+fedejdejd ed!d"ejejed#d"ejejed$d"ejejd%d&d"ejejd%d'd"fd-d. Zejjded/ed0ed1fedd2d3 Zejdejd ed!d"ejejed#d"ejejed$d"ejejd%d&d"ejejd%d'd"fd4d5 Zejd6ejd d!d"ejejd#d"ejejd$d"ejejd&d"ejejd'd"fejd7ejd8d9d"ejd:d;d"fejjded<ejed=ejjd>d?d@feddAdB Zejd6ejd d!d"ejejd#d"ejejd$d"ejejd&d"ejejd'd"fdCdD ZejdEd8ejd:egd@gejdFdGgejede
dHd+dIddJidKd"ejede
dHd+dIdd+ddLd gidMd"ejedNe
dHd+dOdJd+d dJdNdPd"ejedNe
dHd+dOdJd+dHd dgdHddJgdNdQd"fdRdS Zejdejd ed!d"ejejed#d"ejejed$d"ejejd%d&d"ejejd%d'd"fejjde dTdU dVdWe dXdU dYdWe dZdU d[dWe d\dU ddWe d]dU d^dWe d_dU d`dWe dadU dbdWfeddcdd Z!ejdejd ed!d"ejejed#d"ejejed$d"ejejd%d&d"ejejd%d'd"fejjdedeedffeddgdh Z"ejdidjdkdl Z#ejjdedmdndie
j$doedpdqdrgdsejedtddejjdud?d@edvddiejedwddxdyejj%dzd?d@ed{e
j&ded|ded}dd~ieddndf	eddd Z'ejdejd ed!d"ejejed#d"ejejed$d"ejejd%d&d"ejejd%d'd"fdd Z(dd Z)dd Z*ejdejd ed!d"ejejed#d"ejejed$d"ejejd%d&d"ejejd%d'd"fdd Z+dd Z,dd Z-ejd6ejd d!d"ejejd#d"ejejd$d"ejejd&d"ejejd'd"fdd Z.ejdddddddddddg
ejde/dd Z0ejdejd ed!d"ejejed#d"ejejed$d"ejejd%d&d"ejejd%d'd"fdd Z1d%S )TestVariabler   allanyargmaxr   r  argminargsortcumprodcumsummaxr   medianminprodstdsumvarr   c           	      C  s   |j dkr6|jdkr6ttjtdk r6tjdd t	ddd
||j d	krXtjntj }td
|}|j }d|jkr||d|d< t||f|}t|t||}||}t|| t|| d S )NrG  f0.19'nanprod is not by older `pint` versionsr   r   r+   r   rB  r   r   r   )rE   kindr   parser   __version__r   r   r=   r   r   r   r)   r   r1   r2   r   r$   get_axis_numr,  rJ   rY   rL   rk   r   )	r   r   rp   r:   rO   numpy_kwargsr6   r   r   r   r   r   test_aggregation  s&    


zTestVariable.test_aggregationc                 C  sL   t dddtjgtj }t ddtj }| }t|| t|| d S )Nr   r+   y               @r   y      ?      ?)	r1   r2   r=   r  r   r)   r   rk   r   )r   rO   r   r   r   r   r   test_aggregate_complex  s
    
z#TestVariable.test_aggregate_complexr   conj	conjugateclipr   r   rF  rD  r   r+   r   r   r   r   Nr   r   c              	     s  t ddd|tj }td|} fdd|jD } fdd|j	 D }|d k	r|j
d	krt| ||f|| W 5 Q R X d S d
d |D }	dd |	 D }
t||f||}t|t|f|	|
|}||f||}t|| t|| d S )Nr   r+   r   r   c                   s(   g | ] }t |tttfr |  n|qS r   r   intfloatrU   r   itemr@   r   r   rt   6  s   z3TestVariable.test_numpy_methods.<locals>.<listcomp>c                   s.   i | ]&\}}|t |tttfr&|  n|qS r   rY  r_   r^  r   r   r   :  s    z3TestVariable.test_numpy_methods.<locals>.<dictcomp>)searchsortedrW  c                 S  s    g | ]}t t|d tjiqS r   rL   ra   r   r)   r\  r   r   r   rt   E  s    c                 S  s&   i | ]\}}|t t|d tjiqS r   r`  r_   r   r   r   r   H  s    )r=   r   r   r   r)   r1   r2   r~   r   rH   rE   r   r   rJ   rY   rL   rk   r   r   r   r@   r   rp   r:   rO   r~   r   Zconverted_argsZconverted_kwargsr6   r   r   r   r^  r   test_numpy_methods  s4    

 
zTestVariable.test_numpy_methodsr]  r   r_  c              	     s  t ddd|tj }td|} fdd jD } fdd j	 D }|d k	r j
d	krt|  |f|| W 5 Q R X d S  fd
d|D }	 fdd|	 D }
t |f||}t t|f|	|
|} |f||}t|| t|| d S )Nr   r+   r   r   c                   s2   g | ]*}t |tttfr* jd kr*| n|qS r]  r   rZ  r[  rU   rE   r\  r   r@   r   r   rt   i  s   
z7TestVariable.test_raw_numpy_methods.<locals>.<listcomp>c                   s8   i | ]0\}}|t |tttfr0 jd kr0| n|qS rc  rd  r_   re  r   r   r   o  s   
z7TestVariable.test_raw_numpy_methods.<locals>.<dictcomp>r]  c                   s.   g | ]&} j d kr&tt|dtjin|qS r]  NrE   rL   ra   r   r)   r\  r   r   r   rt   |  s   c                   s4   i | ],\}}| j d kr,tt|dtjin|qS rf  rg  r_   rh  r   r   r     s
   )r=   r   r   r   r)   r1   r2   r~   r   rH   rE   r   r   rJ   rY   rL   rk   r   ra  r   re  r   test_raw_numpy_methodsV  s4    

 
z#TestVariable.test_raw_numpy_methodsisnullnotnullcountc              	   C  s~   t ddt jdgt jdt jt jgdt jt jdgdt jddggtj }td	|}|t|}||}t|| t	|| d S )
Nffffff?ffffff@@ffffff#@ @ffffff@#@333333"@r   )
r=   r:   r  r   r0  r1   r2   rL   rk   r	   )r   r   r:   rO   r   r   r   r   r   test_missing_value_detection  s    
z)TestVariable.test_missing_value_detectionc           	   	   C  s   d}t ddt jdgt jdt jt jgdt jt jdgdt jdd	ggtj }td
|}|| }|d k	rt| |j	|d W 5 Q R X d S t
t|j	|tjjdt|}|j	|d}t|| t|| d S )Nr   rm  rn  ro  rp  rq  rr  rs  rt  r   rF   )r=   r:   r  r   r)   r1   r2   r   r   fillnarY   rL   rd   r9   rJ   rk   r	   )	r   r@   r   rF   r:   rO   rs   r   r   r   r   r   test_missing_value_fillna  s4    
z&TestVariable.test_missing_value_fillnar@   convert_dataFZno_conversionTZwith_conversionequals	identicalz"behavior of identical is undecidedr   r   c                 C  s   t ddd|}|tj }td|}|rPttj|rPt|tj d |i}n|| }td|}	|t	|t	ttj|rt|	t
|n|	}
|jdkr|
t
|t
|	kM }
n|
ttt
|t
|	 M }
|||	}|
|kstd S )Nr   r+   r   r   r{  )r=   r   r   r   r)   r1   r2   r   ra   rL   rJ   rE   r=  r#   valuesrh   )r   r   r@   ry  rp   r:   Z	quantity1rO   Z	quantity2r   r   r   r   r   r   test_comparisons  s2     


 
zTestVariable.test_comparisonsc                 C  s   t j}tjd|d| }t||r2d| |jnd}tjd||d| }t	d|}t	d|}t
|t||rvi nd d i}	t|tt||	t||@ }
||}|
|kstd S )Nr   r   r  r+   r   )r  rs   rp   r   r   )r   r)   r=   onesr   rd   r9   fullr1   r2   rJ   rL   broadcast_equalsra   rh   )r   r@   rp   	base_unit
left_arrayrF   right_arrayleftrightr6   r   r   r   r   r   test_broadcast_equals  s"    
z"TestVariable.test_broadcast_equalsdaskrO   indexersr   r   r   zsingle value-single indexerr   zmultiple values-single indexerr   r   zsingle value-multiple indexersz!multiple values-multiple indexersc                 C  sp   |r| dd |jD }t|j|j|tj }tt	|
|t|}|
|}t|| t|| d S )Nc                 S  s   i | ]
}|d qS r  r   )r   r   r   r   r   r   R  s      z*TestVariable.test_isel.<locals>.<dictcomp>)chunkrN   r1   r2   r5   r   r   r   rY   rL   iselrJ   rk   r	   )r   rO   r  r  rp   Z
quantifiedr   r   r   r   r   	test_isel6  s      

zTestVariable.test_iselc                 G  s   | 
 S r   r   r   _r   r   r   r  n  r  zTestVariable.<lambda>Z
unary_plusr   c                 G  s   |  S r   r   r  r   r   r   r  o  r  Zunary_minusc                 G  s   t | S r   )absr  r   r   r   r  p  r  absolutec                 C  s   | | S r   r   r   r   r   r   r  q  r  c                 C  s   ||  S r   r   r   r   r   r   r  r  r  commutative_sumc                 C  s   | | S r   r   r   r   r   r   r  s  r  productc                 C  s   ||  S r   r   r   r   r   r   r  t  r  Zcommutative_productc              	   C  s  t j}td|| }td|}td}|| }	|d k	rn|jdkrnt	
| |||	 W 5 Q R X d S t|||	}
tt|
t|	 rt|	|
}n|	}tt|
t| rt||
}n|}t|t|t||
}|||	}t|| t|| d S )Nr   r   )rI  r  )r   r)   r=   r   r   r1   r2   r  rE   r   r   rJ   r=  r#   r|  ra   rY   rL   rk   r   )r   r   r@   r   rp   r  r:   rO   r|  r   r6   Zconverted_yZconverted_variabler   r   r   r   r   test_1d_math_  s.    
 

zTestVariable.test_1d_mathr5  Z_getitem_with_maskc              
   C  s   t j}tddd|| }td|}tddgd }d| }	|d k	rrt	| ||||	 W 5 Q R X d S t
|t||tt|	t||rd |ind d it|}
||||	}t|
| t|
| d S )Nr   r   r   r   TFr   )r   r)   r=   r   r   r1   r2   r:   r   r   rY   rL   ra   r   rJ   rk   r	   )r   r   r@   r   rp   r  r:   rO   r6  r   r   r   r   r   r   test_masking  s6    

zTestVariable.test_maskingr   r   r   r  tr=  c                 C  s   d}t d}tt||}tj|dtj }t||}|dkrX|	|ddkrXd|ini }t
t|jf |t|}	|jf |}
t|	|
 t|	|
 d S )N)r   r+   r   r+   r+   r   Zabcdefr  r=  r   r+   r   )rU   dictzipr=   r  r   r)   r1   r2   r]   rY   rL   squeezerJ   rk   r	   )r   r   rp   r  namesdim_lengthsr:   rO   r   r   r   r   r   r   test_squeeze  s    $ 
zTestVariable.test_squeezecoarsenr   )Zwindowsr   quantile      ?      ?qrank$rank not implemented for non-ndarrayrollZrolling_windowr   Zwindowzconverts to ndarrayreduceroundshift	transposec                 C  sh   t j}tddddd|| }td|}t|t	|t
|}||}t|| t|| d S )Nr   r   r   r   r   )r   r)   r=   r   r   r   r1   r2   rY   rL   rJ   rk   r	   )r   r   rp   r  r:   rO   r   r   r   r   r   test_computation  s     
zTestVariable.test_computationc           
   	   C  s   t j}tddd|| }td|}d| }|d k	r^t| |	| W 5 Q R X d S t
|	t
t|d |i}|	|}	t||	 tj||	 d S )Nr   r   r   r   )r   r)   r=   r   r   r1   r2   r   r   r_  rL   ra   rk   testingr   )
r   r@   r   rp   r  r:   rO   rF   r   r   r   r   r   test_searchsorted  s    

zTestVariable.test_searchsortedc                 C  sl   t ddddd|tj }td|}tt	|j
ddt|}|j
dd}t|| t|| d S )Nr   r   r  r   r   r   r  )r=   r   r   r   r   r)   r1   r2   rY   rL   stackrJ   rk   r	   r   rp   r:   rO   r   r   r   r   r   
test_stack  s    " 
zTestVariable.test_stackc                 C  sp   t ddd|tj }td|}tt|j	ddddt
|}|j	dddd}t|| t|| d S )	Nr   r   r  r  r   r   r   r  )r=   r   r   r   r)   r1   r2   rY   rL   unstackrJ   rk   r	   r  r   r   r   test_unstack*  s     
zTestVariable.test_unstackc              	   C  s   t dddddd|tj }t dddddd|| }td	|}td	|}|d k	rt	| tjj
||gd
d W 5 Q R X d S t|}ttjj
t|tt||gd
d|}	tjj
||gd
d}
t|	|
 t|	|
 d S )Nr   r   Z   r   r   r   r  r   r  r   r  )r=   r   r   r   r   r)   r1   r2   r   r   r  rJ   rY   rL   ra   rk   r	   )r   r@   r   rp   r   r   rO   r   r6   r   r   r   r   r   test_concat6  s(    ""
zTestVariable.test_concatc                 C  sx   t ddddd|tj }td|}dddd	dd
}tt	|
|t|}|
|}t|| t|| d S )Nr   r   r  r   r   r   r   r+   r   )r  r   ri   rj   r   )r=   r   r   r   r   r)   r1   r2   rY   rL   Zset_dimsrJ   rk   r	   )r   rp   r:   rO   rN   r   r   r   r   r   test_set_dims^  s    " 

zTestVariable.test_set_dimsc                 C  s~   t ddd|tj }t d|tj }td|}t	t
|jt
|dt|}|j|d}t|| t|| d S )Nr   r   r   r   rR   )r=   r   r   r   r)   r   r   r1   r2   rY   rL   r$   rJ   rk   r	   )r   rp   r:   r   rO   r   r   r   r   r   	test_copyk  s     
zTestVariable.test_copyc           
   	   C  s   t j}tdddgtjddgdtjdgdddgg| }ttjdtjg| }td|}td	|}t|tt	|d t
||r|nd it
||@ }||}	||	kstd S )
N333333@g333333?g?g@g?g\("@gffffff?r   r   )r   r)   r=   r:   r  r1   r2   rL   Zno_conflictsra   r   rh   )
r   r@   rp   r  r   r   rO   r   r   r   r   r   r   test_no_conflictsx  s4    

 
zTestVariable.test_no_conflictsmodeconstantZreflectZedgeZlinear_rampmaximumZminimumZ	symmetricwrapzxr_arg, np_argc                 C  sz   t ddddtj }tdddg|}tt|j	f d|i|t
|}|j	f d|i|}t|| t|| d S )	N   r   r   r   r   r   r  r  )r=   r   r   r   r)   r1   r2   rY   rL   padrJ   rk   r   )r   r  Zxr_argZnp_argr5   r!  r   r   r   r   r   test_pad  s    
zTestVariable.test_padc              	   C  s   t ddddd|tj }td|}d| }tdd	d
dd}|d k	rtt	
| |||d W 5 Q R X d S t|}t|t|tt||d|}	|||d}
t|	|
 t|	|
 d S )Nr   r   r  r   r   r   ir  r  r  )r+   r   )r  r   r   )Zconstant_values)r=   r   r   r   r   r)   r1   r2   rz   r   r   rJ   rY   rL   ra   rk   r	   )r   r@   r   rp   r:   rO   rs   r   r6   r   r   r   r   r   test_pad_unit_constant_value  s&    "
z)TestVariable.test_pad_unit_constant_value)2r   r   r   r   markparametrizerz   reprrS  rT  r=   float32rn   DimensionalityErrorr   r   r   cmr)   rb  ri  ru  rx  skipr}  r  r
   r1   r2   r   r   r  r   r  r  r  r   r   rH  r  r  r  r  r  r  r  r  r   r  r  r   r   r   r   r<    sB  




  $    -  
  
" 

  	!    "



  
  


  r<  c                   @  s  e Zd Zejdejdejjdddddfdd	 Zejd
eje	ddeje
ddfejdejdejjdddededfdd Zejjd
ededejedejjdddejedejjdddededejedejjdddededededededed edededd!d"edd!d"edededededededededed fe
d#d$d% Zejd
ejejd&dejed'dejejd(dfd)d* Zejd
ejd+d, d-dejd.d, d/dejd0d, d1dejd2d, d3dfd4d5 Zejd6ejejd7dejejd8dejejd9dfejd:ejd;ed<dejejed=dejejed>dejejd?d@dejejd?dAdfdBdC Z ejdDejejd?d=dejejed>dejej!d?d@dfdEdF Z"ejj#dGdejd:ejd;ed<dejejed=dejejed>dejejd?d@ejj#dHddIejejd?dAdfdJdK Z$ejdLdMdNdO Z%ejjd
edPedQedRed(fe
d#dSdT Z&dUdV Z'ejd:ejd;edWdejejed=dejejed>dejej(d?d@dejejd?dAdfejjd
edXdYejedXdYejj#dZddfe
d#d[d\ Z)ejjd
ed]d^d_d`ejed]d^d_daejj#dZddfe
d#ejd:ejd;edWdejejed=dejejed>dejej(d?d@dejejd?dAdfdbdc Z*ejjd
eddedeedffe
d#dgdh Z+ejj#didejjd
edjedkfe
d#dldm Z,ejd:ejd;edWdejejed=dejejed>dejej(d?d@dejejd?dAdfejdnejdodpdeje-dodqdeje-dogdrdfdsdt Z.dudv Z/ejdwejd;dWdejejd=dejejd>dejej(d@dejejdAdfdxdy Z0ejddzejd:ejd;edWdejejed=dejejed>dejej(d?d@dejejd?dAdfd{d| Z1ejj#d}dd~d Z2ejd:ejd;edWdejejed=dejejed>dejej(d?d@dejejd?dAdfdd Z3ejdwejd;dWdejejd=dejejd>dejej(d@dejejdAdfejddejdejjddddfejjd
edejedejjdddfe
d#dd Z4ejdwejd;dWdejejd=dejejd>dejej(d@dejejdAdfejddejdejjddddfdd Z5ejdwejd;dWdejejd=dejejd>dejej(d@dejejdAdfdd Z6dd Z7ejddejdejjddddfejjd
eddd, edde8dej fdedddedddejedd!diejjdddejedde9dddej id;dejjdddedd!edddededej:f
e
d#dd Z;ejdwejd;dWdejejd=dejej<ddfdd Z=ejdejdddejdYddd;gddfdd Z>ejjddejdejdddejddYdgddeje-dd^ddgddfejd:ejd;e?ddejeje?d=dejej!e?d>dejej@e?d@dejejd?dAdfdd ZAejjddejdejdddejddYdgddeje-dd^ddgddfejd:ejd;e?ddejeje?d=dejej!e?d>dejej@e?d@dejejd?dAdfdd ZBejjddejdejdddejddYdgddeje-dd^ddgddfejd:ejd;e?ddejeje?d=dejej!e?d>dejej@e?d@dejejd?dAdfdd ZCejddġejdejdddejdddejdddejdddejdddfddф ZDejjd
eddd^dӍeddd^dӍeddd^dӍfe
d#ddׄ ZEejddءejjd
ejedكejj#dddedۃfe
d#dd݄ ZFejjddejd:ejd;edWdejejed=dejejed>dejej(d?d@dejejd?dAdfejjd
edكedۃfe
d#dd߄ ZGejddءejjd
ejedejj#dddedfe
d#dd ZHejjddejd:ejd;edWdejejed=dejejed>dejej(d?d@dejejd?dAdfejjd
ededfe
d#dd ZIejjd
ededdedfe
d#dd ZJejjdddd ZKejjd
eddd!dedddedddedddejedd!d"ejjdddeddddeddfe
d#dd ZLejdejdejjddddfejjd
edejMdedeNjOdedeNjPdfe
d#d d ZQejddejdejjddddfejjd
edd!d"edddgdedejRd!dejd	d, d
dfe
d#dd ZSejddejdejjddddfejjd
edd!eddddedddejedd^dejj#dddejedd^dejj#dddedeTjUe9dd;dddfe
d#dd ZVdd ZWejddejdejjddddfejjd
edd!e8dYej fdedededdd dgd!d!fe
d#d"d# ZXd?S ($  TestDataArrayr   	with_dimsr   r   r   with_coordswithout_coordsc           	      C  s   t jddd|dtj }t t|tj }|tj}d|idd|fii d}|d|	|d}t
jf |}t|jts~ttd	d
 |j D  std S )Nr+   r   r   rp   r   r   r  r  r  r   c                 S  s   i | ]\}}|t |jtqS r   )r   r5   r   )r   rE   coordr   r   r   r    	  s    z+TestDataArray.test_init.<locals>.<dictcomp>)r=   r   r   r)   r   lenr   rd   msr]   r1   r3   r   r5   r   rh   r=  rI   rH   r|  )	r   r   rp   r:   r   r   r   r   r   r   r   r   	test_init  s    
zTestDataArray.test_initr   strr   r  c           
      C  sz   t jddd|dtj }t t|tj }|tj}d|idd|fii d}|d|	|d}t
jf |}	||	 d S )	Nr+   r   r   r  r   r   r  r   )r=   r   r   r)   r   r  r   rd   r  r]   r1   r3   )
r   r   r   rp   r:   r   r   r   r   r   r   r   r   	test_repr	  s    
zTestDataArray.test_reprr=  r>  r?  zBcalling np.argmax as a function on xarray objects is not supportedr@  zBcalling np.argmin as a function on xarray objects is not supportedrD  r   rE  z(median does not work with dataarrays yetrF  rG  rI  rH  rJ  rC  rB  r   r  r   c           	      C  s   |j dkr6|jdkr6ttjtdk r6tjdd t	d
||j dkrTtjntj }tj|dd	}|j }d
|kr||d
|d< t||}t|t||}||}t|| t|| d S )NrG  rK  rL  rM  r   r   rB  r   r   r   r   )rE   rN  r   rO  r   rP  r   r   r=   r   r   r   r)   r   r1   r3   r   r$   rQ  r,  rJ   rY   rL   rk   r   )	r   r   rp   r:   r   rR  r6   r   r   r   r   r   rS  &	  s&    5

zTestDataArray.test_aggregationnegater  r  c                 C  s`   t d|tj }tj|d}t||}t|t	||}||}t
|| t|| d S Nr   rR   r=   r   r   r   r)   r1   r3   rJ   rY   rL   rk   r	   r   r   rp   r:   r   r6   r   r   r   r   r   test_unary_operationss	  s    	
z#TestDataArray.test_unary_operationsc                 C  s   d|  S )Nr   r   r   r   r   r   r  	  r  zTestDataArray.<lambda>multiplyc                 C  s   | |  S r   r   r  r   r   r   r  	  r  addc                 C  s   | d |  S )Nr   r   r  r   r   r   r  	  r  z
add scalarc                 C  s
   | j |  S r   )Tr  r   r   r   r  	  r  zmatrix multiplyc                 C  s`   t d|tj }tj|d}t||}t|t	||}||}t
|| t|| d S r  r  r  r   r   r   test_binary_operations	  s    

z$TestDataArray.test_binary_operations
comparison	less_thanZgreater_equalequalr   r+   Zwithout_unitr   r   Nr   r   c              	   C  s   t dddddddg|tj }tj|d}d	}|| }|d k	r|tjk	rt	
| ||| W 5 Q R X t	
| ||| W 5 Q R X d S |||}	d ||rtjnd i}
|||t|tt||
@ }t||	 t||	 d S )
Ng333333$@g@g      @g       @gL5@gffffff@g?rR   r   )r=   r:   r   r   r)   r1   r3   operatoreqr   r   checkrL   ra   rk   r	   )r   r  r@   r   rp   r:   r   rF   Zto_compare_withr   expected_unitsr   r   r   r   test_comparison_operations	  s*    


z(TestDataArray.test_comparison_operationszunits,errorc           	   	   C  s   t d|| }tj|d}td}|d k	rTt| t | W 5 Q R X d S t	|t
t|d tjid tji}||}t|| t|| d S )Nr   rR   sin)r=   r   r   r1   r3   r   r   r   r  rY   rL   ra   r   radiansr   rk   r	   )	r   r6   r   rp   r:   r   r   r   r   r   r   r   test_univariate_ufunc	  s    	
z#TestDataArray.test_univariate_ufuncz2needs the type register system for __array_ufunc__z pint converts to the wrong units)r   r   c           
   	   C  s   t j}td|| }tj|d}|d k	rXt| t	|d|  W 5 Q R X d S d |i}t
t	t|ttd| ||}t	|d| }	t||	 t||	 t	d| |}	t||	 t||	 d S )Nr   rR   r+   )r   r)   r=   r   r   r1   r3   r   r   r  rY   rL   ra   rk   r	   )
r   r@   r   rp   r   r:   r   r  r   r   r   r   r   test_bivariate_ufunc	  s*    


z"TestDataArray.test_bivariate_ufuncproperty)r  imagrealc                 C  s~   t d|dt ddd|  ddtj }tj|dd}t	t
t||t|}t
||}t|| t|| d S )	Nr   y              ?r   r   r   r   r   r   )r=   r   r   r   r   r   r   r1   r3   rY   r   rL   rJ   rk   r	   )r   r  rp   r:   r   r   r   r   r   r   test_numpy_properties
  s"      

z#TestDataArray.test_numpy_propertiesrU  rA  rV  c                 C  s^   t d|tj }tj|dd}t||}tt	||}||}t
|| t|| d S )Nr   r   r   r  r  r   r   r   rb  )
  s    
z TestDataArray.test_numpy_methodsc                 C  sT   t d|tj }tj|d}tdd}|t|tj }||}t	|| d S )Nr   rR   r]  r   )
r=   r   r   r   r)   r1   r3   rz   rL   r   )r   rp   r:   r   r   r   r   r   r   r   	test_item9
  s    
zTestDataArray.test_itemr   r_  r   z,xarray does not implement __array_function__c              	     s  t d|tj }tj|d}ttf t	fdd|j
D } fdd|j D }|d k	rt| ||f|| W 5 Q R X d S t|t||f||}	fdd|D }
fd	d| D }t|t|f|
||	}||f||}t|| t j|| d S )
Nr   rR   c                 3  s   | ]}|  V  qd S r   r   r   rF   r^  r   r   r-   b
  s     z2TestDataArray.test_searchsorted.<locals>.<genexpr>c                   s(   i | ] \}}|t | r | n|qS r   r   r_   scalar_typesr@   r   r   r   c
  s    z3TestDataArray.test_searchsorted.<locals>.<dictcomp>c                   s   g | ]}t t| qS r   r   r  rZ   r   r   rt   p
  s     z3TestDataArray.test_searchsorted.<locals>.<listcomp>c                   s    i | ]\}}|t t| qS r   r   r_   rZ   r   r   r   q
  s    )r=   r   r   r   r)   r1   r3   rZ  r[  rU   r~   r   rH   r   r   rJ   rY   rL   rk   r  r   r   r   r@   r   rp   r:   r   r~   r   r  Zstripped_argsr   r   r   r   r  r@   r6   r   r  D
  s0    

zTestDataArray.test_searchsortedrW  r   r   rX  )Za_minZa_maxc              	     s  t d|tj }tj|d}ttf t	fdd|j
D } fdd|j D }|d k	rt| ||f|| W 5 Q R X d S t|t||f||}	fdd|D }
fd	d| D }t|t|f|
||	}||f||}t|| t|| d S )
Nr   rR   c                 3  s   | ]}|  V  qd S r   r   r  r^  r   r   r-   
  s     z=TestDataArray.test_numpy_methods_with_args.<locals>.<genexpr>c                   s(   i | ] \}}|t | r | n|qS r   r  r_   r  r   r   r   
  s    z>TestDataArray.test_numpy_methods_with_args.<locals>.<dictcomp>c                   s   g | ]}t t| qS r   r   r  rZ   r   r   rt   
  s     z>TestDataArray.test_numpy_methods_with_args.<locals>.<listcomp>c                   s    i | ]\}}|t t| qS r   r   r_   rZ   r   r   r   
  s    )r=   r   r   r   r)   r1   r3   rZ  r[  rU   r~   r   rH   r   r   rJ   rY   rL   rk   r	   r  r   r  r   test_numpy_methods_with_args~
  s0    

z*TestDataArray.test_numpy_methods_with_argsrj  rk  rl  c              	   C  s~   t ddt jdgt jdt jt jgdt jt jdgdt jddggtj }tj|d	}|t|}||}t|| t	|| d S )
Nrm  rn  ro  rp  rq  rr  rs  rt  rR   )
r=   r:   r  r   r0  r1   r3   rL   rk   r	   r   r   rp   r:   r   r   r   r   r   r   ru  
  s    
z*TestDataArray.test_missing_value_detectionz"ffill and bfill lose units in dataffillbfillc                 C  s   t dt jdt jt jdg|tj }t t|}tj	|d|idd}t
|t|ddt|}||dd}t|| t|| d S Nrm  rn  rt  r   r   r  )r=   r:   r  r   r   r0  r   r  r1   r3   rY   rL   rJ   rk   r	   )r   r   rp   r:   r   r   r   r   r   r   r   test_missing_value_filling
  s      
z(TestDataArray.test_missing_value_fillingrs   r   python_scalarnumpy_scalarnumpy_arrayc              	   C  s   t j}tdtjdtjtjdg|| }tj|d}td}|| }	|d k	rvt	
| |||	d W 5 Q R X d S t|}
t|t|tt|	|
d|
}|||	d}t|| t|| d S )Nrm  rn  rt  rR   rw  rv  )r   r)   r=   r:   r  r   r1   r3   rz   r   r   rJ   rY   rL   ra   rk   r	   )r   rs   r@   r   rp   r   r:   r   r   rF   r6   r   r   r   r   r   test_fillna
  s.      
zTestDataArray.test_fillnac                 C  s   t dt jdt jt jdg|tj }t t|}tj	|d|idgd}t
|}tt|jdd|}|jdd}t|| t|| d S r  )r=   r:   r  r   r   r)   r   r  r1   r3   rJ   rY   rL   dropnark   r	   )r   rp   r:   r   r   r6   r   r   r   r   r   test_dropna  s     
zTestDataArray.test_dropnar@   c           
      C  s   t dt jdt jt jdg|tj }tj|dd}t dt jdg|}|| }d ||rhtjnd i}t	|
t	t||||@ }|
|}	t||	 t||	 d S )Nrm  rn  rt  r   r   )r=   r:   r  r   r   r)   r1   r3   r  rL   isinra   rk   r	   )
r   r@   rp   r:   r   
raw_valuesr|  r6   r   r   r   r   r   	test_isin   s      

zTestDataArray.test_isinmaskingZreplacing_scalarZreplacing_arraydroppingc              	     s  t jtddd|  tj d}|d k }tddd| }d|i|d d	||d	|d
dd}||}	 fdd|	 D }
|dkr|d k	rt	
| |jf |	 W 5 Q R X d S tt|jf |
t|}|jf |	}t|| t|| d S )Nr   r+   r   rR         ?r  r   r6  r6  r   Tr6  Zdropr  c              
     s2   i | ]*\}}|t t|d  r$nd iqS r   )rL   ra   r  r_   r:   r   r@   r   r   r   [  s     z,TestDataArray.test_where.<locals>.<dictcomp>r  r	  )r   r)   r=   r   r   r1   r3   r]   rH   r   r   r5  rY   rL   rJ   rk   r	   )r   r   r@   r   rp   r   	conditionr   variant_kwargsr   kwargs_without_unitsr   r   r   r  r   
test_where=  s2    
	
zTestDataArray.test_wherezuses numpy.vectorizec              
   C  s   t dddt jdt jt jdgtj }t t|}tj|d|idd}t	|}t
t|jdd|}|jdd}t|| t|| d S )	Ng{Gzg?rm  rn  rt  r   r   r  )r=   r:   r  r   r)   r   r  r1   r3   rJ   rY   rL   interpolate_nark   r	   )r   r:   r   r   r6   r   r   r   r   r   test_interpolate_nas  s    
z!TestDataArray.test_interpolate_nac              	   C  s   t jd|dtj }t || }tj|ddgddgddd	gd
}tj|ddgddgddd	gd
}|d k	rt| |	| W 5 Q R X d S t
|}tt|	tt|||}	|	|}
t|	|
 t|	|
 d S )Nr~  r  ri   rj   r   r   r   r   r   r   cr+   )r=   r  r   r)   r  r1   r3   r   r   combine_firstrJ   rY   rL   ra   rk   r	   )r   r@   r   rp   r:   Zother_arrayr   r   r6   r   r   r   r   r   test_combine_first  s4        

z TestDataArray.test_combine_first	variationr5   rN   rI   rz  r{  z&the behavior of identical is undecidedc                   sV  dd  t ddd|}t t||}tj}||dkrD|nd }||dkrX|nd }	||d	krl|nd }
|ddfd|dfdd|fd
}||\}}}tj	||	d|
fddd}t
t||||d}t|t|t fdd D ot|tt|t|}k}|o8|jdkp8|}|||}||ksRtd S )Nc                 S  s@   | d k	r| nd} |d k	r|nd}t d|  }| |kp>||S )Nr+   r   )r=   r   r  )ri   rj   rA   r   r   r   r     s    z5TestDataArray.test_comparisons.<locals>.is_compatibler   r   r   r5   r+   rN   rI   r   r   r   r   )Nr   r   c                 3  s    | ]} | | V  qd S r   r   r2  r   other_unitsr6   r   r   r-     s    z1TestDataArray.test_comparisons.<locals>.<genexpr>r{  )r=   r   r   r   r  r   r)   r]   r1   r3   rY   rL   rJ   r=  keysrz  ra   rE   rh   )r   r   r  r@   rp   r5   r  r  r:   r   r   Z
variationsr   r   r   r   r   Zequal_arraysequal_unitsr   r   r   r  r   r}    s<      


zTestDataArray.test_comparisonsc                 C  s`  t j}||fddfd||fdfdd||ffd}||\\}}\}}	\}
}tddddd|| }tddddd|| }td| }td|	 }tdg| }td|	 }tddd|
 }tddd| }t	j
|||d|fd	d
d}t	j
|||d|fd	d
d}tt|t|t|}||}t|| t|| d S )Nr   r   r+   r   r   r   r   r   r   r   r   )r   r)   r]   r=   r   r   r   r   r:   r1   r3   rY   rL   broadcast_likerJ   rk   r	   )r   r   r@   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r   r   r   test_broadcast_like  sF    	       

z!TestDataArray.test_broadcast_likec           
      C  s   t jd|dtj }t jd|d| }tj|dd}tj|dd}t|||rVi nd d i}t|	tt
||||@ }|	|}	||	kstd S )Nr~  r  r  r   r   r   )r=   r  r   r)   r1   r3   rJ   r  rL   r  ra   rh   )
r   r@   rp   r  r  r  r  r6   r   r   r   r   r   r  =  s    
z#TestDataArray.test_broadcast_equalsc                 C  sj   t ddd|tj }tj|dd}t|}tt	|j
dd|}|j
dd}t|| t|| d S )Nr   r   r   r   r   r  r  )r=   r   r   r   r)   r1   r3   rJ   rY   rL   r  rk   r   )r   rp   r:   r   r6   r   r   r   r   r   r  Y  s    
zTestDataArray.test_padpipec                 C  s   | d S Nr   r   )dar   r   r   r  r  r  assign_coordsr   r   )r"  assign_attrsrF   Zattr1renamer!  r   	swap_dimsr   expand_dimsr  r   r   )r   r   	drop_varsreset_coordsr  r$   r   c                 C  s$  t j}|ddfd|dfdd|fd}||\}}}tddddd|| }	t|	jd | }
t|	jd | }tdd|	jd | }t	j
d|	|
d|f|d	d
d}dd |j D }t|}t|dd |d< t|dd |d< t|t|f||}||}t|| t|| d S )Nr+   r   r   r   r   r   ri   r   )r   r   r   r   rQ   c                 S  s   i | ]\}}|t |qS r   )r;   r_   r   r   r   r     s     z;TestDataArray.test_content_manipulation.<locals>.<dictcomp>r6   r   r!  )r   r)   r]   r=   r   r   r   r   r  r1   r3   r   rH   rJ   r   rY   rL   rk   r	   )r   r   r   rp   r@   r   r   r   r   rA   r   r   r   r   r   r6   r   r   r   r   r   test_content_manipulatione  s4    % 
z'TestDataArray.test_content_manipulationZ	with_unitc                 C  sr   t jddd|dtj }t d}tj|dd}tt|j	|dd |i}|j	|| d}t
|| t|| d S )Nr   r   r   r  r   r   rR   )r=   r   r   pascalr   r1   r3   rY   rL   r$   rk   r	   )r   r@   rp   rA   rg   r   r   r   r   r   r   r    s    	
 
zTestDataArray.test_copyindicesr   single indexr   r   multiple indicesc                 C  sb   t d|tj }tj|dd}tt|j	|dt
|}|j	|d}t|| t|| d S )Nr   r   r   r  )r=   r   r   r   r   r1   r3   rY   rL   r  rJ   rk   r	   )r   r.  rp   r:   r   r   r   r   r   r   r    s    	 
zTestDataArray.test_iselr  single_valuer   list_of_valuesr   array_of_valuesno_unitsc              	   C  s   t ddd|tj }t t|tj }tj|d|idd}|| }|d k	rt	|t
tfrj||st| |j|d W 5 Q R X d S tt|jtt|d |jidt|}	|j|d}
t|	|
 t|	|
 d S Nr   r   r   r   r   r  )r=   r   r   r   r)   r   r  r1   r3   r   rZ  r[  r  r   r   selrY   rL   ra   r6   rJ   rk   r	   r   r  r@   r   rp   r:   r   r   r|  r   r   r   r   r   test_sel  s*    
zTestDataArray.test_selc              	   C  s   t ddd|tj }t t|tj }tj|d|idd}|| }|d k	rt	|t
tfrj||st| |jd|i  W 5 Q R X d S tt|jdtt|d |jii t|}	|jd|i }
t|	|
 t|	|
 d S )Nr   r   r   r   r   )r=   r   r   r   r)   r   r  r1   r3   r   rZ  r[  r  r   r   locrY   rL   ra   r6   rJ   rk   r	   r7  r   r   r   test_loc  s*    
zTestDataArray.test_locc              	   C  s   t ddd|tj }t t|tj }tj|d|idd}|| }|d k	rt	|t
tfrj||st| |j|d W 5 Q R X d S tt|jtt|d |jidt|}	|j|d}
t|	|
 t|	|
 d S r5  )r=   r   r   r   r)   r   r  r1   r3   r   rZ  r[  r  r   r   drop_selrY   rL   ra   r6   rJ   rk   r	   r7  r   r   r   test_drop_sel2  s*    
zTestDataArray.test_drop_selr   r  r  r   r   Znothing_squeezabler   r   r+   Zlast_dimension_squeezabler   r+   r   Zmiddle_dimension_squeezabler+   r   r   Zfirst_dimension_squeezabler+   r   r+   r   Z#first_and_last_dimension_squeezablec                 C  s   d}t t||}d}td||tj }tj	|t
|d t| d}|dkrp||ddkrpd|ini }tt|jf |t|}	|jf |}
t|	|
 t|	|
 d S )Nxyztr9  r   r=  r   r+   r   )r  r  r=   r   r   r   r   Jr1   r3   r0   r  r]   rY   rL   r  rJ   rk   r	   )r   r  r   rp   r  r  r:   r   r   r   r   r   r   r   r  _  s    $ 
zTestDataArray.test_squeezeheadr   tailthinc                 C  s`   t dddddtj }tj|dd}t|t|t	|}||}t
|| t|| d S )Nr+   r   r   r   r   r   r   )r=   r   r   r   r0  r1   r3   rY   rL   rJ   rk   r	   r  r   r   r   test_head_tail_thin{  s    
 
z!TestDataArray.test_head_tail_thinr5   rI   interp
uses scipyreindexc                 C  s   t jdfdt jfd}||\}}tddd|| }td| }td}	tdd }
tj||	d|fddd}t	|}t
|t||
d	|}|||
d	}t|| t|| d S )
Nr+   rH  r   r   r
  r   r   rI   rN   r  )r   r)   r]   r=   r   r   r   r1   r3   rJ   rY   rL   rk   r   )r   r   r   rp   r   r   r   r:   r   r   new_xr   r6   r   r   r   r   r   test_interp_reindex  s    

z!TestDataArray.test_interp_reindexc              	   C  s   t ddd|}t dtj }t dd | }tj|d|idd}|d k	rxt	| |||d W 5 Q R X d S t
|}	t|t|tt|d tjid|	}
|||d}t|
| t|
| d S )Nr+   r   r   r
  r   rL  r  )r=   r   r   r   r   r)   r1   r3   r   r   rJ   rY   rL   ra   rk   r	   )r   r   r@   r   rp   r:   r   rM  r   r6   r   r   r   r   r   test_interp_reindex_indexing  s&    
z*TestDataArray.test_interp_reindex_indexinginterp_likereindex_likec                 C  s   t jdfdt jfd}||\}}tddd|| }td| }td}	tddd }
tj||	d|fddd	}tjt	|
d|
idd	}t
|}t|t|||}|||}t|| t|| d S )
Nr+   rH  r   r   r  r
  r   r   rL  )r   r)   r]   r=   r   r   r   r1   r3   
empty_likerJ   rY   rL   rk   r   )r   r   r   rp   r   r   r   r:   r  r   rM  r   r   r6   r   r   r   r   r   test_interp_reindex_like  s    


z&TestDataArray.test_interp_reindex_likec              	   C  s   t ddd|}t dtj }t ddd | }tj|d|idd}tjt |d|idd}	|d k	rt	
| |||	 W 5 Q R X d S t|}
t|t|tt|	d tji|
}|||	}t|| t|| d S )	Nr+   r   r   r  r
  r   rL  rN   )r=   r   r   r   r   r)   r1   r3   rR  r   r   rJ   rY   rL   ra   rk   r	   )r   r   r@   r   rp   r:   r   rM  r   r   r6   r   r   r   r   r   !test_interp_reindex_like_indexing  s(    

z/TestDataArray.test_interp_reindex_like_indexingr  reset_indexreorder_levelsc           
      C  s   t ddddd|tj }t |jd }t |jd }tj	d|||ddd}|j
dd	}t|t|dtji}||}	t||	 |jd
krt||	dd n
t||	 d S )Nr   r   r   r   r+   r5   r   rQ   r  rV  FZcheck_default_indexes)r=   r   r   r   r   r)   r   r  r1   r3   r  rY   rL   rk   rE   r	   )
r   r   rp   r:   r   r   r   stackedr   r   r   r   r   test_stacking_stacked'  s"        

z#TestDataArray.test_stacking_stackedc           	   	   C  s   t ddddd|tj }t |jd tj }t |jd tj	 }t
j|||dddjdd}td	d
d}t|t|d|jitt|j|jgt| dd |D }||}t|| t|| d S )Nr   r   r   r   r+   r   r   r  Zto_unstacked_datasetr  r  r   c                 S  s   i | ]}|j |qS r   )r9   rS   r   r   r   r   S  s      z;TestDataArray.test_to_unstacked_dataset.<locals>.<dictcomp>)r=   r   r   r   r   r-  r   r  r)   r   r1   r3   r  rz   rY   rL   r6   r  r  r9   r  r%  rk   r	   )	r   rp   r:   r   r   r   r   r   r   r   r   r   test_to_unstacked_datasetA  s.      
$
z'TestDataArray.test_to_unstacked_datasetr  r  ri   	set_indexr   r  r  r  r  r  Fr   Zroll_coordssortbyc                 C  s   t dddddd|tj }t |jd }t |jd }t |jd }t dd|jd d d d }tj	d||||d	|fd
dd}t
|t|d tji}	||}
t|	|
 t|	|
 d S )Nr   r   d   r   r   r+   r   r5   r   r   r   r  r   r  rQ   )r=   r   r   r   r   r)   r   r  r1   r3   rY   rL   rk   r	   )r   r   rp   r:   r   r   r  r   r   r   r   r   r   r   test_stacking_reorderingY  s$    
z&TestDataArray.test_stacking_reorderingdifferentiater{   	integrateZcumulative_integratec                 C  s  t j}t j}d|dfdd|fd}||\}}}	tddddd|| }
t|
j	d | }t|
j	d | }tdd|
j	d |	 }t
j|
||d|fd	d
d}t|}|t||jt||jdd t|t|t|d|}|||d}t|| t|| d S )Nr   r+   r   )rN   rI   r   r   r   r   r   r   r   )r   r  )r   r)   r   r]   r=   r   r   r   r   r  r1   r3   rJ   r%   r5   r   rY   rL   rk   r	   )r   r   r   rp   r   r@   r   r  r   r   r:   r   r   r   r   r6   r   r   r   r   r   test_differentiate_integrate  s@       


z*TestDataArray.test_differentiate_integratediffr  r  r  r  r  r   r   c                 C  s
   |  | S r   )r:  r  r   r   r   r    r  Z
method_dotc                 C  s  t j}|ddfd|dfdd|fd}||\}}}tddddd|| }	t|	jd | }
t|	jd | }tdd|	jd | }t	j
|	|
|d|fdd	d
}t|}t|ttfs|t||	d t|t||}||}t|| t|| d S )Nr+   r   r   r   r   r   r   r   r   r   r   )r   r)   r]   r=   r   r   r   r   r  r1   r3   rJ   r   r   rz   r%   rY   rL   rk   r	   r   r   r   rp   r@   r   r   r   r   r:   r   r   r   r   r6   r   r   r   r   r   r    s,       
zTestDataArray.test_computationr   groupby_binsZbinsr  )r   rollingz6numpy.lib.stride_tricks.as_strided converts to ndarrayrolling_exp+numbagg functions are not supported by pintweightedr   r   c                 C  s   t j}|ddfd|dfdd|fd}||\}}}tddddd|| }	tdddddg| }
t|	j	d d | }tddd| }t
j|	|
|d	|fd
dd}t|}t|t| |}|| }t|| t|| d S )Nr+   r   r   r   r   r   r   r   r   r   r   r   )r   r)   r]   r=   r   r   r   r:   r   r  r1   r3   rJ   rY   rL   r   rk   r   ri  r   r   r   test_computation_objects  s(    !   
z&TestDataArray.test_computation_objectsc           	      C  s   t ddd|tj }tjdt|dd}tj	|d|idd}t
|}td	d
d}t|t| |}|| }t|| t|| d S )Nr   r   r   
10-09-20101yZperiodsfreqtimer   resample6mru  )r=   r   r   r   r)   pd
date_ranger  r1   r3   rJ   rz   rY   rL   r   rk   r	   )	r   rp   r:   ru  r   r6   r   r   r   r   r   r   test_resample+  s    
zTestDataArray.test_resampler  r!   lastr
  r  r   c                 C  s  t j}|ddfd|dfdd|fd}||\}}}tddddd|| }	t|	jd | }
t|	jd d | }tdd|	jd | }t	j
|	|
|d|fd	d
d}t|t jd d}dd |j D }t|t|df||}||d}t|| t|| d S )Nr+   r   r   r   r   r   r   r   r   r   r   )r  r  c                 S  s6   i | ].\}}|t |ts t|ntd d |D qS )c                 s  s   | ]}t |V  qd S r   rK   rS   r   r   r   r-   g  s     zCTestDataArray.test_grouped_operations.<locals>.<dictcomp>.<genexpr>)r   r0   rL   r_   r   r   r   r   c  s
   
z9TestDataArray.test_grouped_operations.<locals>.<dictcomp>r   )r   r)   r]   r=   r   r   r   r   r  r1   r3   rJ   r   r   rH   rY   rL   r   rk   r	   )r   r   r   rp   r@   r   r   r   r   r:   r   r   r   r   r6   r   r   r   r   r   r   test_grouped_operations:  s4        
z%TestDataArray.test_grouped_operations)Yr   r   r   r   r  r  rn   r  r  r  r  r  r   rz   rS  r  negr  r=   r  r  r  ltger  r<   r   r   r  r   mmr)   r  degreer  r   r  r  rb  r  r  r  r  ru  r  r:   r  r  r  r  r  r  r}  r  r  r  r   r   r  r,  r0  r  r  KeyErrordmr8  r:  r<  r  rG  rN  rO  rS  rU  rZ  r[  rb  Zgradientr   Zcumulative_trapezoidZtrapzrf  rI  r  r1   r3   rp  r{  r~  r   r   r   r   r    s  
 

/3

	
  
  

  	!	     
  

   '
  

 
.
 
(

 




#





&
 
   
  






 		) 

  

" 

r  c                   @  s  e Zd Zejdejdejddeje	j
ejddeje	jejddeje	jdddeje	jdd	dfejd
dejdejjddddfdd Zejdejeddejeddfejddejdejjddddfdd Zejjdedededddeddded ed!ed"ed#ed$ed%ed&ed'ed(ed)fed*d+d, Zejd-d.d/d0 Zejjded1eed2ed3ed4ed5fed*d6d7 Zejjded8d9d:d;fed*ejdejdeddeje	j
eddeje	jeddeje	jdddeje	jdd<dfd=d> Zejjded?ed@edAfed*dBdC ZejjdDdejjdedEedFfed*dGdH Zejdejdeddeje	j
eddeje	jeddeje	jdddeje	jdd<dfejdIejdJdKdejedJdLdejedJgdMdfdNdO Z dPdQ Z!ejdRejdddeje	j
ddeje	jddeje	jddeje	jd	dfdSdT Z"ejddUejdejdeddeje	j
eddeje	jeddeje	jdddeje	jdd	dfdVdW Z#ejjdXddYdZ Z$ejdejdeddeje	j
eddeje	jeddeje	jdddeje	jdd	dfejddejdejjdddfd[d\ Z%ejdRejdddeje	j
ddeje	jddeje	jddeje	jd<dfejddejdejjddddfejjded]ejed^ejd_dfed*d`da Z&ejdRejdddeje	j
ddeje	jddeje	jddeje	jd<dfejddejdejjdddfdbdc Z'ejdRejdddeje	j
ddeje	jddeje	jddeje	jd<dfddde Z(dfdg Z)ejjdedhedidjedkfed*ejddejdejjdddfdldm Z*ejjdnddodp Z+ejjdedqdrddsdtedudvdwedxdydzed{d|dzejed}ddejjd~ddedd|ddeddyfed*dd Z,ejdejdddejdd|ddgddfdd Z-ejjddejdejdddejdddgddejedd9ddgddfejdejde.ddeje	j
e.ddeje	j/e.ddeje	je.ddeje	jdd<dfdd Z0ejjddejdejdddejdddgddejedd9ddgddfejdejde.ddeje	j
e.ddeje	j/e.ddeje	je.ddeje	jdd<dfdd Z1ejjddejdejdddejdddgddejedd9ddgddfejdejde.ddeje	j
e.ddeje	j/e.ddeje	je.ddeje	jdd<dfdd Z2ejjdeddd9ddeddd9ddeddd9ddfed*ejddejdejjddddfdd Z3ejddejdejdddejdddejdddejdddejdddfdd Z4ejddejjdejedejjdddedfed*dd Z5ejjddejdejdeddeje	j
eddeje	jeddeje	jdddeje	jdd<dfejjdededfed*dd Z6ejddejjdejedejjdddedfed*dd Z7ejjddejdejdeddeje	j
eddeje	jeddeje	jdddeje	jdd<dfejjdededfed*dd Z8ejjdedddedddedddedddgdǍedej9ddɍedej:fed*ejddejdejjddddfdd̄ Z;ejjdeddeddd|dύedd|dzejedd9dzejjdddejedd9dzejjdddedej<e=ddddrd׍fed*ejddejdejjddddfddل Z>ejddejdejjddddfddۄ Z?ejjdedddބ dߍedde@de	j fdedededdddgddfed*ejddejdejjddddfdd ZAejjdedddބ edddބ deddre@de	j fdedddedddedddߍedddzedddiejede=ddde	j ddejjdddeddeddedd deddydedfed*ejddejdejjddddfdd ZBejdejdejddeje	j
ejddeje	jejddeje	jejddeje	jdd<dfejddejdejjddddfdd ZCdS (  TestDatasetr   r+   r   r   r   r   Nr   Z	same_unitsharednothingrN   r   r   r   rI   c              	   C  s  t j}t j}tddd|t j }tddd|t j }t|j	d }	|	| }
|

|}t|j	d }|| }t ||r||kr|
|n|d }i i fd|
id|if|	d|fd|d|fdfd}||\}}|d	krdnd
\}}tj|||d}tj|||d}|d k	rV|d	krVt| tj||dd W 5 Q R X d S tj||dd}tt|dt|d}ttjt|t|dd|}t|| t|| d S )Nr   r+   r   r   i  r   r   )r  rN   rI   r  )r   r   r   r   r.  ri   rj   )r   r)   r  r=   r   r   r   r0  r   r  rd   Zis_compatible_withr]   r1   r3   r   r   r4   r*   rJ   r%  rY   rL   rk   r   )r   r  r@   r   rp   r   Zscaled_unitri   rj   Zvalues_aZdim_aZcoord_aZvalues_bZdim_bZcoord_br   Zcoords_aZcoords_bZdims_aZdims_br   r6   r   r   r   r   r  u  sP    

  
zTestDataset.test_initr   r  r  r   r5   c                 C  s   |dkrt jt jfnd\}}tjddd|d| }tjddd|d| }tt|t j }|t j	}	d|id	d|	fii d
}
t
jd|fd|fd|
|d}|| d S )Nr5   r   r+   r   r   r  r   r   r   )rN   rI   r5   r   rM   )r   r   r0  r=   r   r   r  r   rd   r  r1   r4   r]   )r   r   r   rp   r   r   r   r   r   r   r   r   r   r   r   r    s    
zTestDataset.test_reprr=  r>  r?  r   r  r@  rD  rF  r   rE  rI  rG  rH  rJ  rC  rB  r   c                 C  s`  |j dkr6|jdkr6ttjtdk r6tjdd |j dkrLtj	tj
fn
tjtjf\}}tddd	|| }td
dd	|| }td|fd|fd}d|jkr|j }|d}	|j|	}
|j|	}| }|
|d< | }||d< ni }i }t||f|}t||f|}||d}||}t|t||}t|| t|| d S )NrG  rK  rL  rM  r   rB  r   r+   r   r   r   r   r   r   )rE   rN  r   rO  r   rP  r   r   r   r   r0  r   r=   r   r   r1   r4   r   r$   r,  ri   rQ  rj   r8   rY   rL   rk   r   )r   r   rp   unit_aunit_bri   rj   r   rR  r   Zaxis_aZaxis_bZnumpy_kwargs_aZnumpy_kwargs_br   r   r6   r   r   r   r   r   rS    s@    






zTestDataset.test_aggregationr  )r  r  c           	      C  s~   t dddtj }t dddtj }td|fd|fd}t|}t||}t	tt
|||}t|| t|| d S )	Nr   r+   r   r   r  r   r   r   )r=   r   r   r   r0  r1   r4   rJ   r   rY   rL   rk   r   )	r   r  rp   ri   rj   r   r6   r   r   r   r   r   r  (  s    

z!TestDataset.test_numpy_propertiesr   rU  rA  rV  r  c                 C  s   t dddtj }t dddtj }td|fd|fd}t||}t||}||d}||}	t|t	||}
t
|
|	 t|
|	 d S )Nr+   r   r   r  r   r   r   )r=   r   r   r   r0  r1   r4   r8   rY   rL   rk   r   )r   r   rp   ri   rj   r   r   r   r6   r   r   r   r   r   rb  5  s    

zTestDataset.test_numpy_methodsrW  r   r   rX  r   c              	     s   t j tdddt j }tdddt j }td|fd|fd	}t|}fd
d|j D }	|d k	rt	
| ||f|	 W 5 Q R X d S  fdd|	 D }
||f|	}t|t|f|
|}t|| t|| d S )Nr   r   r  r  r   r   r   r   r   c                   s   i | ]\}}|t | qS r   )rB   r_   r^  r   r   r   c  s     z<TestDataset.test_numpy_methods_with_args.<locals>.<dictcomp>c                   s$   i | ]\}}|t t|d  iqS r   r   r_   )r   r   r   r   m  s    )r   r)   r=   r   r1   r4   rJ   r   rH   r   r   rY   rL   rk   r   )r   r   r@   r   rp   ri   rj   r   r6   r   r   r   r   r   )r   r@   r   r  O  s&    


z(TestDataset.test_numpy_methods_with_argsrj  rk  rl  c              
   C  s   t ddt jdgt jdt jt jgdt jt jdgdt jddggtj }t t jd	d
dgt jdt jdgdt jddgdt jdt jgddt jt jggtj }td|fd|fd}|t|}||}t	|| t
|| d S )Nrm  rn  ro  rp  rq  rr  rs  rt  g@g      (@g(@g@皙#@r  g @g333333@r   )r  r   r   )r=   r:   r  r   r0  r   r1   r4   rL   rk   r   )r   r   rp   r   r   r   r   r   r   r   r   ru  x  s4    	
z(TestDataset.test_missing_value_detectionzffill and bfill lose the unitr  r  c           	      C  s   t dt jdt jt jdg|tj }t dddt jdt jg|tj }td|fd	|fd
}t	|}t
|t|dd|}||dd}t|| t|| d S )Nrm  rn  rt  333333@r        @ffffff @r   r   r   r  )r=   r:   r  r   r   r0  r   r1   r4   rJ   rY   rL   rk   r   )	r   r   rp   r   r   r   r6   r   r   r   r   r   r    s     
z&TestDataset.test_missing_value_fillingrs   r   r  r  r   c              	   C  s   t dt jdt jt jdg|tj }t dddt jdt jg|tj }td|fd|fd	}|| }t|}	|d k	rt	
| |j|d
 W 5 Q R X d S |j|d
}
tt|jtt|d tjid
|	}t||
 t||
 d S )Nrm  rn  rt  r  r  r  r  r   r   rv  )r=   r:   r  r   r   r)   r1   r4   rJ   r   r   rw  rY   rL   ra   rk   r   )r   rs   r@   r   rp   r   r   r   rF   r6   r   r   r   r   r   r    s0     
zTestDataset.test_fillnac                 C  s   t dt jdt jt jdg|tj }t dddt jdt jg|tj }td|fd|fd	}t	|}t
t|jdd
|}|jdd
}t|| t|| d S Nrm  rn  rt  r  r  r  r  r   r   r  )r=   r:   r  r   r   r0  r   r1   r4   rJ   rY   rL   r  rk   r   r   rp   r   r   r   r6   r   r   r   r   r   r    s     
zTestDataset.test_dropnar@   c                 C  s  t dt jdt jt jdg|tj }t dddt jdt jg|tj }td|fd|fd	}t dt jdg|}|| }t|tjrt	|d tjin|}t
|t
|}	t|tjsd
|	jd d < d
|	jd d < ||}
t|	|
 t|	|
 d S )Nrm  rn  rt  r  r  r  r  r   r   F)r=   r:   r  r   r   r)   r1   r4   r   ra   rL   r  ri   rj   rk   r   )r   r@   rp   r   r   r   r  r|  Zconverted_valuesr   r   r   r   r   r    s,     


zTestDataset.test_isinr  c              	     s2  t j tddd|  }tddd|  }td|fd|fd}t|}|d  k }	tddd|| }
d	|	i|	d| d
|	|
d
|	ddd}||}|dkr|d k	rt	
| |jf | W 5 Q R X d S  fdd| D }tt|jf ||}|jf |}t|| t|| d S )Nr   r+   r   r   r   r   r
  r  r6  r  Tr  r  r  c                   s$   i | ]\}}|t t|d  iqS r   r   r_   r   r   r   r   I  s    z*TestDataset.test_where.<locals>.<dictcomp>)r   r)   r=   r   r   r1   r4   rJ   r]   r   r   r5  rH   rY   rL   rk   r   )r   r   r@   r   rp   r   r   r   r6   r  r   r  r   r  r   r   r   r  r   r  #  s6    


zTestDataset.test_wherez#interpolate_na uses numpy.vectorizec                 C  s   t dt jdt jt jdg|tj }t dddt jdt jg|tj }td|fd|fd	}t	|}t
t|jdd
|}|jdd
}t|| t|| d S r  )r=   r:   r  r   r   r0  r   r1   r4   rJ   rY   rL   r  rk   r   r  r   r   r   r  W  s"     
zTestDataset.test_interpolate_nac              	   C  sz  t j|ddfddt j|fd}||\}}}}	tdtjdtjtjdg|| }
tdddtjd	tjg|| }tt|
| }t	j
d
|
fd
|fdd
|id}t|}t|
| }tj|dd| }t|
jd d |	 }t	j
d
|fd
|fdd
|id}|d k	r:t| || W 5 Q R X d S tt|tt|||}||}t|| t|| d S )Nr+   r   rm  rn  rt  r  r  r  r  r   r   rM   r   rr   r   r   )r   r)   r]   r=   r:   r  r   r   r  r1   r4   rJ   r  r  r  r   r   r  rY   rL   ra   rk   r   )r   r   r@   r   rp   r   r   other_data_unitZ	dims_unitZother_dims_unitr   r   r   r   r6   r  r	  r
  r   r   r   r   r   r   r  m  s@    $"


zTestDataset.test_combine_firstrz  r{  z!behaviour of identical is unclearc                 C  s  t ddd|}t ddd|}t t||}tjddfdtjdfddtjfd}||\}	}
}||	 }||	 }||
 }|| }tj	d|fd|fd|d|fd	d
}t
|}|ddfd|dfdd|fd}||\}}}||||d}dd t||D }ttt|||}t
|}tdd t||D oZt|tt||}||k}|ox|jdkpx|}|||}||kstd S )Nr   r   r   r  r+   r   r   r   r   rM   )ri   rj   r   r   c                 S  s(   i | ] \}\}}|t ||r |nd qS r   r   )r   r   r@   	referencer   r   r   r     s   
 z0TestDataset.test_comparisons.<locals>.<dictcomp>c                 s  s    | ]\}\}}t ||V  qd S r   r   )r   r  r@   Z
other_unitr   r   r   r-     s   
z/TestDataset.test_comparisons.<locals>.<genexpr>r{  )r=   r   r   r   r  r   r)   r]   r1   r4   rJ   r    rY   rL   ra   r=  rz  rE   rh   )r   r   r   r@   rp   r   r   r  r   r   r   r   ri   rj   r   r   r   r6   Zother_variantsr  Zother_dim_unitZother_coord_unitr  Z
to_convertr   Zequal_dsr  r   r   r   r   r   r}    sR     




zTestDataset.test_comparisonsc                 C  s$  t j|fdfdt j|ffd}||\\}}\}}tddddd|| }	tddddd|| }
td| }td| }tdg| }td| }t	j
dd	|	fi||d	d
}t	j
dd	|
fi||d	d
}tt|t|t|}||}t|| t|| d S )Nr   r   r+   r   r   r   r   ri   r   rM   )r   r)   r]   r=   r   r   r   r   r:   r1   r4   rY   rL   r  rJ   rk   r   )r   r   r@   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    s2      
 
  

zTestDataset.test_broadcast_likec                 C  s   t jd|dtj }t jd|dtj }t jdd| }t jdd| }td|fd|fd	}td
|fd|fd	}tt|t	||ri nd d d	}	t	||ot
|t
t||	}
||}|
|kstd S )Nr  r  )r   r   r  r  )r   r   r$  r   r   r   )r=   r  r   r)   r  r1   r4   r*   rJ   r   rL   r  ra   rh   )r   r@   rp   Zleft_array1Zleft_array2Zright_array1Zright_array2r  r  r6   r   r   r   r   r   r  =  s&    
z!TestDataset.test_broadcast_equalsc                 C  s   t ddd|tj }t ddd|tj }td|fd|fd}t|}t	t
|jdd|}|jdd}t|| t|| d S )	Nr   r   r   r  r   r   r  r  )r=   r   r   r   r   r0  r1   r4   rJ   rY   rL   r  rk   r   )r   rp   ri   rj   r   r6   r   r   r   r   r   r  _  s    
zTestDataset.test_padr  rV  r!  rW  c                 C  s(  t jdfdt jfd}||\}}tddddd|| }tdddddd	|| }t|jd | }	t|jd | }
t|jd
 | }t	j
d|fd|fd|	|
|dd}t|}|jdd}t|t||}||}t|| |jdkrt||dd n
t|| d S )Nr+   r   r   r   r   r   i  r  r   r   r  r   rM   r!  rV  FrX  )r   r)   r]   r=   r   r   r   r   r  r1   r4   rJ   r  rY   rL   rk   rE   r   )r   r   r   rp   r   r   r   r   r   r   r   r  r   r6   rY  r   r   r   r   r   rZ  l  s0     

z!TestDataset.test_stacking_stackedzDstacked dimension's labels have to be hashable, but is a numpy.arrayc           	        s   t dtj } fdd|D }tdd | D }tjtjd}tdddd	gd
}||d }t	|t
|d |}t|| t|| d S )Nr   c                   s(   i | ] }|t d dd tj qS )r   r+   r   )r=   r   r   r   r)   r2  r  r   r   r     s    z5TestDataset.test_to_stacked_array.<locals>.<dictcomp>c                 S  s   i | ]\}}|d |fqS r  r   rb   r   r   r   r     s      )Nr   Zto_stacked_arrayr  r   r   )Zvariable_dimZsample_dims)ranger   r   r1   r4   rH   r)   rz   r%  rY   rL   rk   r   )	r   rp   labelsZarraysr   r6   r   r   r   r   r  r   test_to_stacked_array  s    

z!TestDataset.test_to_stacked_arrayr  r   z1r'  r  r   r&  r]  r   r  r  r   r  r  r  Fr^  r_  c                 C  s  t dddddd|tj }t dddddd|tj }t |jd }t |jd }t |jd }t |jd }t dd|jd d d d	 }	t	j
d
|fd|fd||||d|	fdd}
t|
}t|t|
|}||
}t|| t|| d S )Nr   r   r`  r   r      r  r+   r   )r   r   r  )r   r   r'  r   r   )r   r   r  r'  r   rM   )r=   r   r   r   r   r   r0  r   r  r1   r4   rJ   rY   rL   rk   r   )r   r   rp   r   r   r   r   r  r'  r   r   r6   r   r   r   r   r   rb    s0    
z$TestDataset.test_stacking_reorderingr.  r   r/  r   r   r0  c           	      C  s   t d|tj }t ddd|tj }tjd|fd|fdd}t	|}t
t|j|d|}|j|d}t|| t|| d S )Nr   r   r+   r   r   r.  r  )r=   r   r   r   r   r   r   r1   r4   rJ   rY   rL   r  rk   r   )	r   r.  rp   r   r   r   r6   r   r   r   r   r   r    s    
zTestDataset.test_iselr  r   r1  r   r2  r   r   r3  r4  c              	   C  s   t ddd|tj }t ddd|tj }t t|tj }t	j
t	j|ddt	j|dddd|id}|| }	|d k	rt| |j|	d	 W 5 Q R X d S tt|jtt|	d tjid	t|}
|j|	d	}t|
| t|
| d S 
Nr   r   r   r   r   r   r   rM   r  )r=   r   r   r   r0  r   r   r  r)   r1   r4   r3   r   r   r6  rY   rL   ra   rJ   rk   r   r   r  r@   r   rp   r   r   r   r   r|  r   r   r   r   r   r8    s.    
zTestDataset.test_selc              	   C  s   t ddd|tj }t ddd|tj }t t|tj }t	j
t	j|ddt	j|dddd|id}|| }	|d k	rt| |j|	d	 W 5 Q R X d S tt|jtt|	d tjid	t|}
|j|	d	}t|
| t|
| d S r  )r=   r   r   r   r0  r   r   r  r)   r1   r4   r3   r   r   r;  rY   rL   ra   rJ   rk   r   r  r   r   r   r<  .  s.    
zTestDataset.test_drop_selc              	   C  s   t ddd|tj }t ddd|tj }t t|tj }t	j
t	j|ddt	j|dddd|id}|| }	|d k	rt| |jd|	i  W 5 Q R X d S tt|jdtt|	d tjii t|}
|jd|	i }t|
| t|
| d S )	Nr   r   r   r   r   r   r   rM   )r=   r   r   r   r0  r   r   r  r)   r1   r4   r3   r   r   r9  rY   rL   ra   rJ   rk   r   r  r   r   r   r:  c  s.    
zTestDataset.test_locrD  r   r  rE  rF  c                 C  s6  t jt jfddfdt jdfddt jfd}||\\}}}}tddddd| }	tddddd	| }
td| td| td	| d
tddd| fdtddd| fdtddd	| fd}t	j
t	j|	ddt	j|
ddd|d}t|t|t|}||}t|| t|| d S )Nr+   r   r   r   r   r   r   P   r   r   r   r   r  r   )r   r   r  r   r!  r"  r   r   r#  r   rM   )r   r0  r   r)   r]   r=   r   r   r   r1   r4   r3   rY   rL   rJ   rk   r   )r   r   r   rp   r   r  r  r   r   r   r   rI   r   r   r   r   r   r   rG    s0    

	
zTestDataset.test_head_tail_thinr   r  r  r=  znothing squeezabler>  zlast dimension squeezabler?  zmiddle dimension squeezabler@  zfirst dimension squeezablerA  z#first and last dimension squeezablec                 C  s   d}t t||}tddd||tj }tddd||tj }t	j
t|d t| |ft|d t| |fdd}t|}	|dkr||ddkrd	|ini }
tt|jf |
|	}|jf |
}t|| t|| d S )
NrB  r   r+   r9  r   r   r.  r=  r   )r  r  r=   r   r   r   r   r0  r   r1   r4   r0   r  rJ   r]   rY   rL   r  rk   r   )r   r  r   rp   r  r  r   r   r   r6   r   r   r   r   r   r   r    s"    $
zTestDataset.test_squeezerH  rI  rJ  rK  c                 C  s   t jdfdt jfd}||\}}tddd|| }tddd|| }td| }	td}
tdd }tjd|fd|fd	|
d|	fd
d}t	|}t
|t||d|}|||d}t|| t|| d S )Nr+   rH  r   r   r   r   r
  r   r   r   rI   r  )r   r)   r]   r=   r   r   r   r1   r4   rJ   rY   rL   rk   r   )r   r   r   rp   r   r   r   r   r   r   r   rM  r   r6   r   r   r   r   r   rN    s$    
 
zTestDataset.test_interp_reindexc              	   C  s   t ddd|}t ddd|}t dtj }t dd | }tjd|fd|fdd|id	}	t|	}
|d k	rt	
| ||	|d
 W 5 Q R X d S t|t|	|d
|
}||	|d
}t|| t|| d S )Nr   r   r   r+   r   r
  r   r   r  r  )r=   r   r   r   r   r)   r1   r4   rJ   r   r   rY   rL   rk   r   )r   r   r@   r   rp   r   r   r   rM  r   r6   r   r   r   r   r   rO    s     
z(TestDataset.test_interp_reindex_indexingrP  rQ  c                 C  s   t jdfdt jfd}||\}}tddd|| }tddd|| }td| }	td}
tdd }tjd|fd|fd	|
d|	fd
d}t	|}tjddt
|fid|id}t|t|||}|||}t|| t|| d S )Nr+   rH  r   r   r   r   r
  r   r   r   r  ri   )r   r)   r]   r=   r   r   r   r1   r4   rJ   rR  rY   rL   rk   r   )r   r   r   rp   r   r   r   r   r   r   r   rM  r   r6   r   r   r   r   r   r   rS  <  s&    
  

z$TestDataset.test_interp_reindex_likec              	   C  s   t ddd|}t ddd|}t dtj }t dd | }tjd|fd|fdd|id	}	t|	}
tjd
dt 	|fid|id	}|d k	rt
| ||	| W 5 Q R X d S t|t|	||
}||	|}t|| t|| d S )Nr   r   r   r+   r   r
  r   r   r  ri   )r=   r   r   r   r   r)   r1   r4   rJ   rR  r   r   rY   rL   rk   r   )r   r   r@   r   rp   r   r   r   rM  r   r6   r   r   r   r   r   r   rU  c  s      

z-TestDataset.test_interp_reindex_like_indexingrg  rc  re  rd  r  r  r  r  r  rh  mapc              	   C  s"  t jt jfddfdt jdfddt jfd}||\\}}}}tddddd|| }	tddd	dd
|| }
t	d| }t	d| }t	d
| }t
jt
j|	ddt
j|
ddd|||dt	d| fdd}t|}t|t||}||}t|| t|| d S )Nr+   r   r   r  r   r   r   r   r   r   r   r   r#  r   r   r   r   r  r   rM   )r   r0  r   r)   r]   r=   r   r   r   r   r1   r4   r3   rJ   rY   rL   rk   r   )r   r   r   rp   r   r   r   r   r   r   r   r   r   r  r   r6   r   r   r   r   r   r    s*    

  
zTestDataset.test_computationr   rj  rk  r  rl  zstrips unitsrm  rn  ro  r   r   c              	   C  s>  t jt jfddfdt jdfddt jfd}||\\}}}}tddddd|| }	tddd	dd
|| }
t	d| }t	d| }t	d
| }t
jd|	fd|
fd|||dt	d| fdd}t|}|jdkrg ndg}i }t|t|j|||}||j||}t|| t|| d S )Nr+   r   r   r  r   r   r   r   r   r   r   r#  r   r   r  rM   r   )r   r0  r   r)   r]   r=   r   r   r   r   r1   r4   rJ   rE   rY   rL   r   rk   r   )r   r   r   rp   r   r   r   r   r   r   r   r   r   r  r   r6   r~   r   r   r   r   r   r   rp    s*    

  
z$TestDataset.test_computation_objectsc                 C  s:  t jt jfddfdt jdfddt jfd}||\\}}}}tddddd|| }tddd	dd
|| }	t	j
d|jd dd}
td| }td
| }tddd| }tjd|fd|	fd|
||d|fdd}t|}tddd}t|t| |}|| }t|| t|| d S )Nr+   r   r   r  r   r   r   r   r  r   rq  r   rr  rs  r   )ru  r   )ru  r  r   r   )ru  r   r  r   rM   rv  rw  rx  )r   r0  r   r)   r]   r=   r   r   r   ry  rz  r  r   r1   r4   rJ   rz   rY   rL   r   rk   r   )r   r   rp   r   r   r   r   r   r   r   r  r   r  r   r   r6   r   r   r   r   r   r   r{    s*    

  
zTestDataset.test_resampleZassignc                 C  s
   d| j  S r   rj   r  r   r   r   r  (  r  zTestDataset.<lambda>)r  r"  r  r!   r|  r
  r}  c                 C  sV  t jt jfddfdt jdfddt jfd}||\\}}}}tddddd|| }	tddd	ddd
|| }
t	d| }t	d| }t	d
| }tddd| }t
jd|	fd|
fd|||d|fdd}|t jd}tt||}dd |j D }t|t|df||}||d}t|| t|| d S )Nr+   r   r   r  r   r   r   r   <   r   r   r   r   r  r   r   )r   r   r  r   rM   )r  r!  c                 S  s   i | ]\}}|t |qS r   rK   rD   r   r   r   r   R  s     z7TestDataset.test_grouped_operations.<locals>.<dictcomp>)r   r0  r   r)   r]   r=   r   r   r   r   r1   r4   r   r*   rJ   r   rH   rY   rL   r   rk   r   )r   r   r   rp   r   r   r   r   r   r   r   r   r   r  r   r   Zassigned_unitsr6   r   r   r   r   r   r   r~  %  s6    

 " 
z#TestDataset.test_grouped_operationsr  c                 C  s   | d S r   r   r  r   r   r   r  `  r  c                 C  s
   | j d S r   r  r  r   r   r   r  a  r  )d)r   r#  rF   r$  r%  x_mm)r   Zrename_varstemperaturerename_dimsoffset_xr'  r   r(  r   )r!  r   r)  Z	drop_dimsr  Z
set_coordsr  r+  r*  r$   c                 C  s  t jd t jt jfddfdt jdfddt jfd}||\\}}}}}	tddddd|| }
td	dd
ddd|| }tdd	d|| }t	d| }t	d| }t	d| }tddd|	 }t
jd|
fd|fd|fd|||d|fdd}t j|	t j||d}tt||}dd |j D }t|t|f||}||}t|| |jdkrt||dd n
t|| d S )Nr   r+   )r+   r+   r+   r   r  r   r   r   r   r  r   r   r   r  r   )ri   rj   r  ra  rM   )r   r  r  r  r  c                 S  s   i | ]\}}|t |qS r   rK   r_   r   r   r   r     s     z9TestDataset.test_content_manipulation.<locals>.<dictcomp>r  FrX  )r   r)   r   r0  r]   r=   r   r   r   r   r1   r4   r  r*   rJ   r   rH   rY   rL   rk   rE   r   )r   r   r   rp   r   r   r   Zunit3r   r   r   r   r(  r   r   r  r   r   rf   r6   r   r   r   r   r   r   r,  ]  sL    &

	 "

z%TestDataset.test_content_manipulationc              	   C  s  t jddfdt jdfddt jfd}||\}}}|ddfd|dfdd|fd}	|	|\}
}}td|| }tdd||
 }tdd| }tdd| }tdd	| }td
d| }tjdd|fi|d|fdd}tjdd|fi|d|fdd}t|}|d k	rBt	
| || W 5 Q R X d S t||}tt|t||}||}t|| t|| d S )Nr+   r   r   r  r   r   r  r  r   iri   r   r   rM   )r   r)   r]   r=   r   r   r1   r4   rJ   r   r   r&  ra   rY   rL   rk   r   )r   r   r@   r   rp   Zleft_variantsZleft_data_unitZleft_dim_unitZleft_coord_unitZright_variantsZright_data_unitZright_dim_unitZright_coord_unitr  r  Zleft_dimZ	right_dimZ
left_coordZright_coordr  r  r6   Z	convertedr   r   r   r   r   
test_merge  sD    








zTestDataset.test_merge)Dr   r   r   r   r  r  rn   r1   Z
MergeErrorr   r   r   r  r)   r  r  r  r  r  rz   rS  r  r[  rb  r  r  r  ru  r   r  r=   r:   r  r  r  r  r  r  r}  r  r  r  rZ  r  rb  r  r  r  r8  r<  r:  rG  r  rN  rO  rS  rU  rI  fabsr  r3   r   rp  r{  r   r~  r,  r  r   r   r   r   r  t  sl     
5 


,

    
!  

    %
  
+
 

>




"





 

"
"
"	 
"
 
   
    



 


 
 
 

  
#



   
4   
r  c                   @  s   e Zd Zdd ZdS )TestPintWrappingDaskc                 C  s   dd l }|jdddg}tj|dd}tj|dd}|  }d |_ttjt	d	dd}t
|| t|jt|jkstd S )
Nr   r+   r   r   r)   rZ   r   rT  g       @)Z
dask.arrayr:   r   r   r1   r3   r   ZcomputerE   r=   rk   rV   r5   rh   )r   r  r  r  r!  r   r   r   r   r   test_duck_array_ops  s    
z(TestPintWrappingDask.test_duck_array_opsN)r   r   r   r  r   r   r   r   r    s   r  c                
   @  s   e Zd Zejddddifejeji ejj	dddgdd	 Z
ejddddifejeji ejj	dddgd
d Zejddddifejeji ejj	dddgdd Zdd Zdd Zdd Zdd ZdS )	TestPlotszcoord_unit, coord_attrsr+   r6   Zmeterr   r   r   c                 C  s   t dddtj }t ddd| }tj|d|d}tj|dd|idd}|j  t	 }|
 dksnt| d	ks~td S )
Nr+   r   r   r   )rN   r\   pressure)r5   rN   rI   rE   pressure [pascal]z	x [meter])r=   r   r   r   r1   r3   plotlinepltgca
get_ylabelrh   Z
get_xlabel)r   r   coord_attrsr%  Z	coord_arrZx_coordr!  axr   r   r   test_units_in_line_plot_labels  s    
z(TestPlots.test_units_in_line_plot_labelsc              
   C  s   t jdtddgddggtdtddg| |fd	td
dg| |fddd}|jddjdd t 	 dks|t
d S )Nvar_ar+   r   r   r   ri   r   r   rj   r   r   r   rQ   r\  omarkera = 5 [meter])r1   r3   r=   r:   r  r6  r  r  r  	get_titlerh   r   r   r  r%  r   r   r   (test_units_in_slice_line_plot_labels_sel'  s    	z2TestPlots.test_units_in_slice_line_plot_labels_selzpint.errors.UnitStrippedWarningc              
   C  sz   t jdtddgddggtdtddg| |fd	td
dgfddd}|jddjdd t 	 dksvt
d S )Nr  r+   r   r   r   r   r   r   r   r   r   r   r   rQ   r   r  r  r  r  )r1   r3   r=   r:   r  r  r  r  r  r  rh   r  r   r   r   )test_units_in_slice_line_plot_labels_isel@  s    	z3TestPlots.test_units_in_slice_line_plot_labels_iselc                 C  s^   t dtj }tj|ddgdd}tdd\}\}}|jj	||dd	}|
 d
ksZtd S )Nr  r   r   r  r5   rN   rE   r+   r   T)r  Zcbar_axZadd_colorbarr  )r=   r  r   r   r1   r3   r  subplotsr  contourfr  rh   )r   r%  r!  figr  caxr   r   r   $test_units_in_2d_plot_colorbar_labelX  s
    z.TestPlots.test_units_in_2d_plot_colorbar_labelc                 C  sb   t dtj }tj|ddgdd}tdd\}\}}|jj	ddd}|j
d	  d
ks^td S )Nr  r   r   r  r  r+   r   )r   col)r   r   r  )r=   r  r   r   r1   r3   r  r  r  r  Zaxsr  rh   )r   r%  r!  r  r  r  fgridr   r   r    test_units_facetgrid_plot_labelsa  s
    z*TestPlots.test_units_facetgrid_plot_labelsc                 C  s>   t dtj }tj|ddddgdd}|jjdddd d S )	N)r   r   r   r   r   r   r  r"  r  r  r   r   r  )r=   r  r   r   r1   r3   r  Zimshow)r   r%  r!  r   r   r   3test_units_facetgrid_2d_imshow_plot_colorbar_labelsj  s    z=TestPlots.test_units_facetgrid_2d_imshow_plot_colorbar_labelsc           	      C  sh   t dtj }tj|dddgdd}tdd\}\}}}}|jj	dddd	}|j
j d
ksdtd S )N)r   r   r   r   r   r  r  r  r+   r   r  r  )r=   r  r   r   r1   r3   r  r  r  r  Zcbarr  r  rh   )	r   r%  r!  r  Zax1Zax2Zax3r  r  r   r   r   5test_units_facetgrid_2d_contourf_plot_colorbar_labelsp  s
    z?TestPlots.test_units_facetgrid_2d_contourf_plot_colorbar_labelsN)r   r   r   r   r  r  rn   r   r)   r   r  r  r  r  r  r  r  r   r   r   r   r    sJ   





		r  )b
__future__r   r   r  Znumpyr=   Zpandasry  r   	packagingr   Zxarrayr1   Zxarray.corer   r   Zxarray.testsr   r   r   r	   r
   r   Zxarray.tests.test_plotr   Zxarray.tests.test_variabler   Zmatplotlib.pyplotZpyplotr  ImportErrorZimportorskipr   errorsr  ZUnitRegistryr   r   r  filterwarningsZ
pytestmarkr   r#   r*   r    r8   r;   rB   rJ   rL   rY   ra   rk   Zfixturerp   r[  rZ  r  ry   rz   r   r  rn   r  r   r   r   r   r  r)   r  r   r   r   r   r  r  r  r  r  r)  r+  Z
zeros_liker  r-  r/  r   r1  r3  r  r7  r8  r;  r<  r  r  r  r  r   r   r   r   <module>   s   


&,.

4# 

 

   	 
P  	 
P$  	 
6  	 
S  	 
-  	 
+  	 
Q  	 
C 
 
" 
 
%  	  	                                