U
    Cvf                    @  s  d dl mZ d dlZd dlmZmZ d dlmZmZ d dlmZ d dl	Z
d dlZd dlZd dlZd dlmZ d dlmZmZmZmZmZmZ d dlmZmZmZ d d	lmZmZmZ d d
l m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? e+dZ@ddidgddidgddidgddddgddddggZAejBdd ZCG d d! d!ZDG d"d# d#eDZEe;G d$d% d%eDZFe>G d&d' d'ZGG d(d) d)eDZHG d*d+ d+ZId,d- ZJG d.d/ d/ZKd0d1 ZLejMNd2eegG d3d4 d4ZOejMjNd5e
Pd6d7d8fe
Pd6d9d:fe
Qe
Pd6d7gd8fe
Qe
Pd6d9gd:fejRd;dd<d8fed=ddd8fe
Qed=ddgd8fejRd;deSd>d?d8feTejRd;deSd>d?d8fg	d@dA dBdCdDdEdFZUe<dCdDdGdHZVejMjNd5e
WdId7d8fe
WdId9d:fe
Qe
WdId7gd8fe
Qe
WdId9gd:fejXdJdd<d8feddKd8fe
QeddKgd8fgdLdA dBdCdDdMdNZYe<dCdDdOdPZZdS )Q    )annotationsN)copydeepcopydatetime	timedelta)dedent)Version)
Coordinate	DataArrayDatasetIndexVariableVariableset_options)dtypesduck_array_opsindexing)	full_like	ones_like
zeros_like)	BasicIndexerCopyOnWriteArrayDaskIndexingAdapterLazilyIndexedArrayMemoryCachedArrayNumpyIndexingAdapterOuterIndexerPandasIndexingAdapterVectorizedIndexer)
array_type)NDArrayMixin)as_compatible_dataas_variable)assert_allcloseassert_array_equalassert_equalassert_identicalassert_no_warningshas_pandas_version_tworaise_if_dask_computesrequires_bottleneckrequires_cupyrequires_daskrequires_pandas_version_tworequires_pintrequires_sparsesource_ndarraydaskx      )r3   r   r   r6   r5   )r5   r5   r6   r6   yr      )r6   r9   r6   r:   r5   r4   r   r2   z)r;   r6   r<   r4   )r;   r6   r4   r4   c                   C  s   t tdtjddddS )NZxyzr:         dimsdata)r   listnprandomrand rI   rI   >/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/test_variable.pyvar;   s    rK   c                   @  s  e Zd ZU ded< dd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdddZdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zejjd2d3d4d5 Zd6d7 Zd8d9 Z d:d; Z!d<d= Z"d>d? Z#d@dA Z$dBdC Z%dDdE Z&dFdG Z'dHdI Z(dJdK Z)dLdM Z*dNdO Z+dPdQ Z,dRdS Z-ej.dTdUdVgej.dWe/e0e1gdXdYdZd[d\d]Z2dZd^d_d`Z3dadb Z4dZd^dcddZ5dZd^dedfZ6dZd^dgdhZ7dZd^didjZ8dkdl Z9dmdn Z:dodp Z;dqdr Z<dsdt Z=dudv Z>dwdx Z?dydz Z@d{d| ZAd}d~ ZBdd ZCdd ZDdd ZEej.ddejFdejjdd3dejFdejjdd3ddejFdejjdd3dddddg	ej.deGejHddd ZIej.deGdd ZJej.dddgejFdddddddddejFdVdddi ddejFdUddddddddgdd ZKej.dddd ZLdd ZMej.ddUdUgdVdVggej.ddddgdd ZNej.ddddgddUfdddddUdUgfgdd ZOdS )VariableSubclassobjectszstaticmethod[Variable]clsc                 C  s   dt d }| dg|ddi}|jdks0tt|j| |jtksJt|j	dksXt|j
dksft|jddiksxt|jdkst|jd	kstt|dkst|jddikstd S )
N      ?
   timefoobarrP   )rO   P   r5   )rF   arangerM   rC   AssertionErrorr$   valuesdtypefloatshapesizeZsizesnbytesndimlenattrsselfrD   vrI   rI   rJ   test_propertiesC   s    z'VariableSubclassobjects.test_propertiesc                 C  sr   |  dgdtd }|ji ks&tddi}||_|j|ksBtt|jtsRtd|jd< |jd dksntd S )NrP   rN   rO   rQ   rR   Zbaz)rM   rF   rU   r_   rV   
isinstancedict)ra   rb   r_   rI   rI   rJ   
test_attrsQ   s    
z"VariableSubclassobjects.test_attrsc                 C  s8   |  dgtjd}|ddi }|d }t|| d S )Nr2   rA   r   )rM   rF   rG   randnr&   ra   rb   actualexpectedrI   rI   rJ   test_getitem_dict[   s    z)VariableSubclassobjects.test_getitem_dictc                 C  s  t dddg}| dg|}|tddgd }|jdks>tt||ddg  |ttd d }|jdksptt|| |ttdddgd }|jdkstt||ddg  |tdd }|jdkstt||d  |td  }|jdkstt|| d S )	Nr   r5   r4   r2   r2   arm   rI   )	rF   arrayrM   re   rC   rV   r$   slicer   )ra   rD   rb   v_newrI   rI   rJ   test_getitem_1da   s"    
z'VariableSubclassobjects.test_getitem_1dc              	   C  s   |  dgdddg}tdddgddgg}|| }|jdks@tt|jddgddgfdf }t|| tddd	dg}|| }t|ddg | |dd	dg }t|ddg | t	j
td
d tddd	dg}||  W 5 Q R X d S )Nr2   r   r5   r4   rm   b.rl   TFzBoolean indexer shouldmatchrn   )rM   r   rC   rV   rF   ro   _datar$   r&   pytestraises
IndexError)ra   rb   indrq   rj   rI   rI   rJ   test_getitem_1d_fancyz   s     
z-VariableSubclassobjects.test_getitem_1d_fancyc                 C  s   |  dgdddg}t|dtdtj t|dddg|  dgdtjdg t|td|  dgddg t|jdddgdd|  dgdddg d S )	Nr2   r   r5   r4   rI   i
fill_value)rM   r&   _getitem_with_maskr   rF   nanrp   ra   rb   rI   rI   rJ   test_getitem_with_mask   s     "z.VariableSubclassobjects.test_getitem_with_maskc                 C  sV   |  dgg }t|dtdtj t|dddg|  dgtjtjtjg d S )Nr2   r}   rI   )rM   r&   r   r   rF   r   r   rI   rI   rJ    test_getitem_with_mask_size_zero   s    z8VariableSubclassobjects.test_getitem_with_mask_size_zeroc                 C  sB   |  dgdddg}tdddgddgg}t|j|dd| d S )Nr2   r   r5   r4   r2   r8   r}   r~   )rM   r   r&   r   )ra   rb   indexerrI   rI   rJ   !test_getitem_with_mask_nd_indexer   s    z9VariableSubclassobjects.test_getitem_with_mask_nd_indexerNc              	   C  s  |d j dkst|d jdks$t|d jdks6t|| sHt|| sZtt : t	dd t
j|jd | t
j|d j| W 5 Q R X |dkrt|jd t|kstt|d jt|kstn4|dk	r|jd j|kst|d jj|kstdS )zjGiven a 1-dimensional variable, verify that the variable is indexed
        like a numpy.ndarray.
        r   rI   r5   ignorezIn the future, 'NAT == x'NF)rZ   rV   r]   r[   equalsr   	identicalwarningscatch_warningsfilterwarningsrF   testingr%   rW   typerX   )ra   variableZexpected_value0expected_dtyperI   rI   rJ   _assertIndexedLikeNDArray   s    

z1VariableSubclassobjects._assertIndexedLikeNDArrayc                 C  sF   dt jft dt jffD ]&\}}| dg|g}| ||| qd S )Nr   r2   )rF   int_Zint32rM   r   ra   valuerX   r2   rI   rI   rJ   test_index_0d_int   s    "z)VariableSubclassobjects.test_index_0d_intc                 C  sF   dt jft dt jffD ]&\}}| dg|g}| ||| qd S )NrN   r2   )rF   Zfloat_float32rM   r   r   rI   rI   rJ   test_index_0d_float   s    "z+VariableSubclassobjects.test_index_0d_floatc                 C  s0   d}t d}| dg|g}| ||| d S )NrQ   U3r2   )rF   rX   rM   r   r   rI   rI   rJ   test_index_0d_string   s    
z,VariableSubclassobjects.test_index_0d_stringc                 C  s   t ddd}| dg|g}| |t| | dgt|g}| |t|d | dgt|g}| |t|d d S )N  r5   r2   datetime64[ns])r   rM   r   rF   
datetime64pdZDatetimeIndexra   dr2   rI   rI   rJ   test_index_0d_datetime   s    z.VariableSubclassobjects.test_index_0d_datetimec                 C  sb   t dd}| dgt|g}| |t|d | dgt|g}| |t|d d S )Nr5   )hoursr2   timedelta64[ns])r   rM   rF   timedelta64r   r   to_timedelta)ra   tdr2   rI   rI   rJ   test_index_0d_timedelta64   s
    
z1VariableSubclassobjects.test_index_0d_timedelta64c                 C  s,   t dd}| dg|g}| || d S )NZNaTnsr2   )rF   r   rM   r   r   rI   rI   rJ   test_index_0d_not_a_time   s    z0VariableSubclassobjects.test_index_0d_not_a_timec                 C  s8   G dd d}|d}|  d|g}| j||dd d S )Nc                   @  s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
zIVariableSubclassobjects.test_index_0d_object.<locals>.HashableItemWrapperc                 S  s
   || _ d S Nitem)ra   r   rI   rI   rJ   __init__   s    zRVariableSubclassobjects.test_index_0d_object.<locals>.HashableItemWrapper.__init__c                 S  s   | j |j kS r   r   )ra   otherrI   rI   rJ   __eq__   s    zPVariableSubclassobjects.test_index_0d_object.<locals>.HashableItemWrapper.__eq__c                 S  s
   t | jS r   )hashr   ra   rI   rI   rJ   __hash__   s    zRVariableSubclassobjects.test_index_0d_object.<locals>.HashableItemWrapper.__hash__c                 S  s   t | j d| jdS )Nz(item=))r   __name__r   r   rI   rI   rJ   __repr__   s    zRVariableSubclassobjects.test_index_0d_object.<locals>.HashableItemWrapper.__repr__N)r   
__module____qualname__r   r   r   r   rI   rI   rI   rJ   HashableItemWrapper   s   r   )r5   r4   r:   r2   F)r   )rM   r   )ra   r   r   r2   rI   rI   rJ   test_index_0d_object   s    z,VariableSubclassobjects.test_index_0d_objectc                 C  s`   t jdtd}dddg|d< | d|}t|j| t|d j|  t| j|  d S )Nr5   rX   r5   r4   r:   r   r2   )rF   emptyobjectrM   r$   rD   squeeze)ra   Z	listarrayr2   rI   rI   rJ   test_0d_object_array_with_list   s    z6VariableSubclassobjects.test_0d_object_array_with_listc                   s   t jddd}||j| fD ]|}| d|  fddtdD  fddtdD  fddtdD fD ]*}t|d} j|jkst	t
 | qnqd S )	Nz
2011-09-01rO   periodstc                   s   g | ]} | qS rI   rI   .0irj   rI   rJ   
<listcomp>  s     zJVariableSubclassobjects.test_index_and_concat_datetime.<locals>.<listcomp>c                   s   g | ]} ||d   qS r   rI   r   r   rI   rJ   r   	  s     c                   s   g | ]} |g qS rI   rI   r   r   rI   rJ   r   
  s     )r   
date_rangerW   to_pydatetimerM   ranger   concatrX   rV   r$   )ra   r   datestimesri   rI   r   rJ   test_index_and_concat_datetime  s    z6VariableSubclassobjects.test_index_and_concat_datetimec                 C  s8   |  dtjddd}tdd}|d j|ks4td S )NrP   
2000-01-01rA   r   r   r   )rM   r   r   rF   r   rW   rV   )ra   r2   rj   rI   rI   rJ   test_0d_time_data  s    z)VariableSubclassobjects.test_0d_time_datac                 C  s   t jddd}|df|jdf|jddf| dffD ]l\}}| dg|}|jtdksbtt	|j|j |jjtdkstt
|jt
|k}||ks8tq8d S )	Nr   r:   r   Tdatetime64[s]Fr   r   )r   r   rW   astyper   rM   rX   rF   rV   r$   r0   ra   r   rW   Zpreserve_sourcerb   Zsame_sourcerI   rI   rJ   test_datetime64_conversion  s    
z2VariableSubclassobjects.test_datetime64_conversionc                 C  s   t jddd}|df|jdf|jddf| dffD ]l\}}| dg|}|jtdksbtt	|j|j |jjtdkstt
|jt
|k}||ks8tq8d S )	Nr   r:   )startr   Ttimedelta64[s]Fr   r   )r   timedelta_rangerW   r   Zto_pytimedeltarM   rX   rF   rV   r$   r0   r   rI   rI   rJ   test_timedelta64_conversion%  s    
z3VariableSubclassobjects.test_timedelta64_conversionc                 C  s6   t dtt}| d|}|j|jks2td S )NrA   r2   )rF   rU   r   strr   rM   rX   rV   )ra   rD   ri   rI   rI   rJ   test_object_conversion4  s    z.VariableSubclassobjects.test_object_conversionc              	   C  sB   t dd}tjj}tj|dd | dg|g W 5 Q R X d S )Nz
1250-01-01usOut of bounds nanosecondru   r   )rF   r   r   errorsZOutOfBoundsDatetimerx   ry   rM   ra   rD   ZpderrorrI   rI   rJ   test_datetime64_valid_range9  s    z3VariableSubclassobjects.test_datetime64_valid_rangezpandas issue 36615reasonc              	   C  sB   t dd}tjj}tj|dd | dg|g W 5 Q R X d S )NZ200000Dr   ru   r   )rF   r   r   r   ZOutOfBoundsTimedeltarx   ry   rM   r   rI   rI   rJ   test_timedelta64_valid_range?  s    z4VariableSubclassobjects.test_timedelta64_valid_rangec                 C  sn   |  dgtjdddgdddgd}t||dddg  |  dgtdddg}|d j|jd ksjtd S )Nr2   r   r5   r4   r:   )index)rM   r   Seriesr&   IndexrW   rV   r   rI   rI   rJ   test_pandas_dataF  s    $z(VariableSubclassobjects.test_pandas_datac                 C  sP   |  dgtjdddd}| }|d tjdddks<tdt|ksLtd S )	Nr2   2000   B)r   r   freqr   )r   zPeriod('2000-01-03', 'B'))rM   r   period_rangeloadZPeriodrV   reprr   rI   rI   rJ   test_pandas_period_indexL  s    z0VariableSubclassobjects.test_pandas_period_indexc              	   C  s*  dt d }t d}| dg|}| }t||
  t|t| t| j|  t||d  t|d|  t||d  t|| j|d  t|| j|d  t|| |d  t|| d|  | dg|ddi}t	d	d
 t||
  W 5 Q R X t|| d|  | dg|ddi}t|| | dg||   t|| j||  t|d | d | j|d | d |  t
|
 jkstt
|
 jjkstt
d| jkstt
d| jjkstt|
 tstt|
 trttd| tsttd| tr&td S )N      ?rA   r2   r   r5   r4   unitsZmetersF
keep_attrsrQ   rR   )rF   rU   onesrM   to_base_variabler&   absr$   rW   r   rY   rX   rV   rd   r   r   )ra   r2   r8   rb   Zbase_vv2wrI   rI   rJ   test_1d_mathR  s<    
 ,z$VariableSubclassobjects.test_1d_mathc                 C  sH   t d}| dg|}| }tdd}t|| t|tksDtd S )NrA   r2   rI   rO   )rF   rU   rM   sumr   r&   r   rV   )ra   r2   rb   ri   rj   rI   rI   rJ   test_1d_reduce~  s    


z&VariableSubclassobjects.test_1d_reducec              	   C  s   t d}| dg|}tt || t|t|t t| |	  t|
dd| d|
dd	  tt || dgt |	  tt |tsttt |trtd S )NrA   r2   r4   r:   )rF   rU   rM   r$   asarrayr   rY   r&   Zargsortr   clipsinrd   r   rV   r   ra   r2   rb   rI   rI   rJ   test_array_interface  s    
&$z,VariableSubclassobjects.test_array_interfacec                 c  sb   t ddtd dtjdtjd tjdddtjdddgtdfD ]}| d	||fV  qFd S )
Nr:   rN   r   r   r   rm   rt   cr2   )	r   rF   rU   r   r   r   ro   r   rM   )ra   rD   rI   rI   rJ   example_1d_objects  s    z*VariableSubclassobjects.example_1d_objectsc                 C  sz   |   D ]l\}}t|jt| tt|t| |d jt|d ksTtt|d t|d kstqd S )Nr   )r  r$   rW   rF   r   rV   )ra   rb   rD   rI   rI   rJ   test___array__  s
    z&VariableSubclassobjects.test___array__c                 C  s   |   D ]\}}| }||s&t||s4t||sBt|d |d sXt|d |d snt|d |d st|d d |d d st|d d |d d st|d d |d d stqd S )Nr   r4   )r  r   r   rV   r   no_conflicts)ra   rb   _r   rI   rI   rJ   test_equals_all_dtypes  s    z.VariableSubclassobjects.test_equals_all_dtypesc                 C  sL   t dddg }|  D ].\}}d|k}t|| d|k }t|| qd S )Nr2   r:   Fr>   )r   r  r&   )ra   rj   rb   r  ri   rI   rI   rJ   test_eq_all_dtypes  s    

z*VariableSubclassobjects.test_eq_all_dtypesc              	   C  s   |  dtdddiddi}|j|d | |jtd d|ddi|jd	d
|jdd
fD ]&}t|	 |	  |j
|j
ks^tq^d S )Nr2   r:   rQ   r5   rR   r4   .rl   TdeepF)rM   r   Tr   iselrp   set_dimsr   r&   r   encodingrV   ra   rj   ri   rI   rI   rJ   test_encoding_preserved  s    


z/VariableSubclassobjects.test_encoding_preservedc              	   C  sF  t d}t dd}| dg|}| dg|}ttddgt ||gt||gd ttddgt ||gt||fd ttddgt ||gt||fd tjt	dd t|tdg|gd W 5 Q R X tj||gt ddd	t d
dd	gdd}tdt ||gj
dd}t|| tddgt jd}t|t|d d |dd  gd t|t|d d |dd |dd  gd t|t|d d
 |d
d  gd t|t|d d d df |d d dd f gd tjt	dd2 t|d d df |d d d
d f gd W 5 Q R X d S )NrA   rO   rm   rt   zVariable has dimensionsru   r  r   r4   r5   )	positionsdimF)orderrP   r2   )rO         zall input arrays must have)rF   rU   rM   r&   r   ro   r   rx   ry   
ValueErrorZravelrG   )ra   r2   r8   rb   r   ri   rj   rI   rI   rJ   test_concat  s@    
   "  
&0&6z#VariableSubclassobjects.test_concatc              	   C  st   |  dtdddi}|  dtd}|  dttdtdg }d|jd< t|t	||gd d S )Nrm   rA   rQ   rR   )
rM   rF   rU   r   Zconcatenater   r_   r&   r   r   )ra   rb   r   rj   rI   rI   rJ   test_concat_attrs  s     
z)VariableSubclassobjects.test_concat_attrsc                 C  sp   dD ]f}|  dtjdg|d}|  dtjdg|d}t||gd}tdtjddg|d}t|| qd S )N)SUZanimalZhorser   Zaardvark)rM   rF   ro   r   r   r%   )ra   kindr2   r8   ri   rj   rI   rI   rJ   test_concat_fixed_len_str  s    z1VariableSubclassobjects.test_concat_fixed_len_strc                 C  sl   |  ddddg}|  dddg}tj||gdd}tdtdt}t|| |jj	|jj	ksht
d S )	Nr2   01234r  rA   )rM   r   r   rF   rU   r   r   r&   rX   r  rV   ra   rm   rt   ri   rj   rI   rI   rJ   test_concat_number_strings  s    
z2VariableSubclassobjects.test_concat_number_stringsc                 C  sf   |  dddg}|  ddg}tj||gdd}tdtjdddgtd}t|| |jtksbtd S )Nr2   r   r5   twor"  r   )	rM   r   r   rF   ro   r   r&   rX   rV   r#  rI   rI   rJ   test_concat_mixed_dtypes  s    
z0VariableSubclassobjects.test_concat_mixed_dtypesr	  TFr   boolztype[object]None)r	  r   returnc                 C  s   |  ddtd |ddi}|j|d}t|t|ksBtt|| |j|jks\t| j t	kr|rt
|jt
|jk	stnt
|jt
|jkstt|t| d S )Nr2   rN   rO   rQ   rR   r  )rM   rF   rU   r   r   r   rV   r&   rX   r   r0   rW   )ra   r	  r   rb   r   rI   rI   rJ   	test_copy  s    "

z!VariableSubclassobjects.test_copyr)  c                 C  sf   |  dddg}||jd< |jdd |  ddd	g}||jd< ||jd< |jdd |jdd d S )
Nr2   r   r5   r   Tr  r8   r4   r:   )rM   r_   r   )ra   rb   r   rI   rI   rJ   test_copy_deep_recursive  s    


z0VariableSubclassobjects.test_copy_deep_recursivec                 C  s~   t jjddgddgddggdd}| d	|}d
D ]F}|j|d}t|jtsRtt|	 t jsftt
|jj|jj q2d S )Nrm   rt   r5   r4   r}   )oner%  Zthreenamesr2   )TFr  )r   
MultiIndexfrom_productrM   r   rd   rw   r   rV   to_indexr$   ro   )ra   midxrb   r	  r   rI   rI   rJ   test_copy_index3  s     z'VariableSubclassobjects.test_copy_indexc                 C  sZ   t dddgddggddi}tdd	gd
dgg}|j|d}| }||_t|| d S )Nr         ?       @@333333@rQ   rR         @      @gffffff@+   rD   )r   rF   ro   r   rD   r&   ra   orignew_datari   rj   rI   rI   rJ   test_copy_with_data>  s    z+VariableSubclassobjects.test_copy_with_datac              	   C  sN   t dddgddggddi}dd	g}tjtd
d |j|d W 5 Q R X d S )Nr   r6  r7  r8  r9  rQ   rR   r:  r;  must match shape of objectru   r=  )r   rx   ry   r  r   ra   r?  r@  rI   rI   rJ   test_copy_with_data_errorsF  s    z2VariableSubclassobjects.test_copy_with_data_errorsc                 C  sH   t dtd}tdd}|j|d}t dtdd}t|| d S )Nr2   rA   rO   r=  )r   rF   rU   r   r&   r>  rI   rI   rJ   test_copy_index_with_dataL  s
    z1VariableSubclassobjects.test_copy_index_with_datac              	   C  s   t dtd}tdd}tjtdd |j|d W 5 Q R X tjtdd ||_W 5 Q R X tjtdd ||_W 5 Q R X d S )	Nr2   rA   r   rB  ru   r=  zCannot assign to the .datazCannot assign to the .values)	r   rF   rU   rx   ry   r  r   rD   rW   rC  rI   rI   rJ    test_copy_index_with_data_errorsS  s    z8VariableSubclassobjects.test_copy_index_with_data_errorsc                 C  s\   t dddgddggddi}| }t|| tdd	d	}|j|d
}t|j| d S )Nr   r6  r7  r8  r9  rQ   rR   r@   r4   r=  )r   _replacer&   rF   rU   reshaper$   rD   )ra   rK   resultr@  rI   rI   rJ   test_replace]  s    
z$VariableSubclassobjects.test_replacec              	   C  s   |  dtddtd  ddi}|  dtdddi}t|j| |  dtd ddi}t|j| |  dtdtdd   }tt	|| d S )Nr2   r:   y              ?rQ   rR   r4   )
rM   rF   rU   r&   realimagsqrtr   r#   r   )ra   rb   Zexpected_reZexpected_imZexpected_absrI   rI   rJ   test_real_and_imagf  s    &$z*VariableSubclassobjects.test_real_and_imagc                 C  s0   |  dddtjg}tdd}t| | d S )Nr2   r5   y               @rI   y      ?      ?)rM   rF   r   r   r#   meanra   rb   rj   rI   rI   rJ   test_aggregate_complexq  s    
z.VariableSubclassobjects.test_aggregate_complexc                 C  s:   t tjddd}| d|}t| |jdks6td S )NrO   Zint64r   r2   )r   ZCategoricalrF   rU   rM   printrX   rV   r`   rI   rI   rJ   test_pandas_cateogrical_dtypew  s    z5VariableSubclassobjects.test_pandas_cateogrical_dtypec                 C  sL   t jdtdddd}| d|}t| dt|jkrH|jdksHtd S )Nr   zAmerica/New_YorkrO   Z1h)r   tzr   r   r2   r   )	r   r   pytztimezonerM   rR  r   rX   rV   r`   rI   rI   rJ   test_pandas_datetime64_with_tz}  s    z6VariableSubclassobjects.test_pandas_datetime64_with_tzc                 C  sN   t jtdddgg}| d|}ttdd|d  t||d d   d S )Nabcr   r5   r2   rI   )rm   r   )r   r1  r2  rE   rM   r&   r   )ra   idxrb   rI   rI   rJ   test_multiindex  s    z'VariableSubclassobjects.test_multiindexc                 C  sp   |  dtd}|j}|jdd}|jd krl|  t|jt|ksLtt|jt|ksbtt	|| d S )Nr2   rA   Tr  )
rM   rF   rU   rw   r   chunksr   r   rV   r&   )ra   ro   Z	orig_datacopiedrI   rI   rJ   	test_load  s    
z!VariableSubclassobjects.test_loadc              	   C  s  |  ddgdddgdddgg}| j}|ddgddgf }|jd	ksLtt||ddg d d ddgf  |ddg }|jd	kstt||ddg  td
gddg}|tddg|d	 }|jdkstt||ddg d d ddgf  |tddgdddgd	 }|jd	kstt||d d  tdd}|t|d }|tdd }t|| t	ddg}t
jtdd |tdddgg|f  W 5 Q R X td
gdddg}t
jtdd |t|d  W 5 Q R X d S )Nr2   r8   r   r5   r4   r:   r@   rA   r   rm   )r2   rm   TFrI   r8   zBoolean array size 2 is ru   rs   zBoolean indexer should be)rM   computerD   rC   rV   r$   r   re   rF   ro   rx   ry   rz   )ra   rb   v_datarq   r{   rj   rI   rI   rJ   test_getitem_advanced  s2     
""

"z-VariableSubclassobjects.test_getitem_advancedc                 C  sb   |  dgdddg}| j}|tdg }t||d  |tjdgdd }t||d  d S )Nr2   r   r5   r4   uint64r   )rM   r_  rD   rF   ro   r$   ra   rb   r`  rq   rI   rI   rJ   test_getitem_uint_1d  s    
z,VariableSubclassobjects.test_getitem_uint_1dc                 C  s   |  ddgdddgdddgg}| j}|tdg }t||dgd d f  |tjdgd	d
 }t||dgd d f  |td }t||dd d f  d S )Nr2   r8   r   r5   r4   r:   r@   rA   rb  r   )rM   r_  rD   rF   ro   r$   rb  rc  rI   rI   rJ   test_getitem_uint  s     
z)VariableSubclassobjects.test_getitem_uintc                 C  s   |  dgdddg}| j}|tdgd  }t||d  |td }t||d  |tdtd }t||d  d S )Nr2   r   r5   r4   rI   )rM   r_  rD   rF   ro   r$   r   rc  rI   rI   rJ   test_getitem_0d_array  s    
z-VariableSubclassobjects.test_getitem_0d_arrayc                 C  sF  |  ddgdddgdddgg}| j}td	d
gdddgdddgg}|| }|jdks^tt||dddgdddggd d f  tdd
gdddgdddgg}|| }|jdkstt||dddgdddggd d f  td	d
gdddgdddgg}|t|d }|jdkstt||d d dddgdddgff  td	d
gddgddgg}|tddg|d }|jdks~tt||ddg d d |f  td	gddg}|||f }|jdkstt||ddgddgf  td	d
gddgddgg}|td|d }|jdkstt|d |d ddg  t|d |d ddg  td	d
gddgddgg}|ttd |d }|jdkstt||d d ddgddggf  td	d
gddgddgg}|t|td d }|jdkstt||ddgddggd d f  td	d
gddgddgg}|t|td dd }|jdksPtt||ddgddggtd df  tdgddg}||d df }|jdkstt||ddgddgf  |  dddgdddgdddggg}td	d
gdgg}||d d d d f }td	d
ddg|jt	j
df }t|| tddddgdddgdddgggg}tdgdg}||d d dddf }tddgdgg}t|| tdddgt	dddd}tdgdddg}|d d |f }tdt	d}|jd |d< |jd |d< |jd |d< t|| |d d |jf }|jdksBtd S )Nr2   r8   r   r5   r4   r:   r@   rA   rm   rt   )rm   rt   r8   )r2   rt   r8   r^  )r2   rm   rt   r   rn   rs   r>   r  .r   <   r=   r:   rA   r6   r7   r?   )r:   r:   rA   )rM   r_  rD   r   rC   rV   r$   re   rp   rF   newaxisr&   rU   rH  zerosrZ   )ra   rb   r`  r{   rq   rj   rI   rI   rJ   test_getitem_fancy  s~     
&&&""$$
&
 
z*VariableSubclassobjects.test_getitem_fancyc              	   C  s6  |  ddgdddgdddgg}tjtd	d
 |ddgddgg  W 5 Q R X tdgdddg}tdgddg}tjtdd
 |||f  W 5 Q R X tddgddgddgg}tjtdd
 |t|d  W 5 Q R X tdddgtdddd}tdgddg}tjtdd
 |d d |f  W 5 Q R X d S )Nr2   r8   r   r5   r4   r:   r@   rA   zlabeled multi-ru   rm   zDimensions of indexers rt   TFz2-dimensional booleanrl   r>   rg  zDimensions of indexers mis)	rM   rx   ry   rz   r   re   rF   rU   rH  )ra   rb   ind_xind_yr{   rI   rI   rJ   test_getitem_error>  s      z*VariableSubclassobjects.test_getitem_errormoderO  medianz!median is not implemented by DaskZmarksreflectzdask.array.pad bugedgelinear_rampz5pint bug: https://github.com/hgrecco/pint/issues/1026maximumminimum	symmetricwrapxr_arg, np_argz5ignore:dask.array.pad.+? converts integers to floats.c                 C  sn   t dddd}| dddg|}|jf d|i|}t j|||d	}t|| t|jt|jsjt	d S )
N   r@   r:   r4   r2   r8   r>   ro  )ro  )
rF   rU   rH  rM   padr$   rd   rw   r   rV   )ra   ro  xr_argnp_argrD   rb   ri   rj   rI   rI   rJ   test_padR  s    
z VariableSubclassobjects.test_padc                 C  s   t dddd}| dddg|}|jf |}t jt |jt|dt j	d	}t
|| t|jt|jsttt j|d
tdddd}| dddg|}|jf dd
d	|}t jt |j|dd
d	}t
|| d S )Nrz  r@   r:   r4   r2   r8   r>   constantro  constant_valuesFr   )rF   rU   rH  rM   r{  ro   rD   r   rY   r   r$   rd   rw   r   rV   r   r'  )ra   r|  r}  rD   rb   ri   rj   rI   rI   rJ   test_pad_constant_valuesx  s*    

   z0VariableSubclassobjects.test_pad_constant_valuesr   r_   rj   r5   r4   rs   default)idFalseTruec              	   C  s   t jdtd}| dg||}|d kr*dn|}t|d* |jddidt jd}|j|ks^tW 5 Q R X |jddidt j|d	}|j|kstd S )
NrO   r   r2   r  r   r7   r  r  )ro  r  r   )	rF   rU   rY   rM   r   r{  r   r_   rV   )ra   r   r_   rj   rD   rb   Zkeep_attrs_ri   rI   rI   rJ   test_pad_keep_attrs  s    	z+VariableSubclassobjects.test_pad_keep_attrszd, w))r2   r:   )r8   rA   c              	   C  s   |  dddgtdddd}||||d }|jddd|d fksNt|j|j|f ksdt|j|||d d	d
}|jddd|d fkst|j|j|f kst| j|||d d	d
}t	|| t
|jtjrtt d|d< W 5 Q R X d S )Nr2   r8   r>   `	  (      r4   Z_windowT)centerr   r   )rM   rF   rU   rH  rolling_windowrC   rV   rZ   r   r$   rd   rw   ndarrayrx   ry   r  )ra   r   r   rb   Z	v_rollingZv_loadedrI   rI   rJ   test_rolling_window  s    "
z+VariableSubclassobjects.test_rolling_windowc              
   C  s<  |  dtjddddgtd}tdddd}|jf |d	tjd
}tdtjtjddgdddgdddgddtjggtd}t|| |jf |ddd
}|  dtjdddgdddgdddgdddggtd}t|| |  dt	||d g}|jf |ddd
}|  dtj	|j
|j
d gdd}t|| d S )Nr2   r5   r4   r:   r@   r   xw)r  window
window_dimTr  r   )r2   r  F        r   )r8   r2   皙?)r8   r2   r  axis)rM   rF   ro   rY   re   r  r   r   r%   stackrD   )ra   r2   kwargsri   rj   rI   rI   rJ   test_rolling_1d  s0    & 
,
 z'VariableSubclassobjects.test_rolling_1dr  rC   r   r8   r>   )r>   r2   c           
      C  s   |  dtddddt}ddg}|j||dd |D |tjd	}|}t|||D ]&\}}}	|j||| d
|	tjd	}qZt	|| d S )Nr2   r8   r>   P     r  r  r:   c                 S  s   g | ]}| d qS )r   rI   )r   krI   rI   rJ   r     s     z;VariableSubclassobjects.test_nd_rolling.<locals>.<listcomp>)r  r  r  r  r   r   )
rM   rF   rU   rH  r   rY   r  r   zipr%   )
ra   r  rC   r2   r  ri   rj   r  wincentrI   rI   rJ   test_nd_rolling  s,    z'VariableSubclassobjects.test_nd_rollingzdim, window, window_dim, centerr2   r:   x_w)r2   r:   )r  r  Tc              	   C  sN   |  dtddddt}tt |j	||||d W 5 Q R X d S )Nr  r  r  r  r  )r  r  r  r  )
rM   rF   rU   rH  r   rY   rx   ry   r  r  )ra   r  r  r  r  r2   rI   rI   rJ   test_rolling_window_errors  s    	z2VariableSubclassobjects.test_rolling_window_errors)N)Pr   r   r   __annotations__rc   rf   rk   rr   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rx   markxfailr   r   r   r   r   r   r  r  r  r  r  r  r  r  r$  r&  parametrizerY   intr   r*  r,  r5  rA  rD  rE  rF  rJ  rN  rQ  rS  rW  rZ  r]  ra  rd  re  rf  rk  rn  param_PAD_XR_NP_ARGSr   r~  r  r  r  r  r  r  rI   rI   rI   rJ   rL   @   s   


	
,

 
		
	
(
W 



rL   c                   @  sZ  e Zd ZeeZejdddd Zdd Z	dd Z
d	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zejd/e j!d0d1gd2d3 Z"d4d5 Z#d6d7 Z$d8d9 Z%d:d; Z&d<d= Z'd>d? Z(d@dA Z)dBdC Z*dDdE Z+dFdG Z,dHdI Z-dJdK Z.dLdM Z/dNdO Z0dPdQ Z1dRdS Z2dTdU Z3dVdW Z4dXdY Z5dZd[ Z6e7d\d] Z8ejd^dd_d`gejdadbdcgdbddggejdee9d`dfdfgdfdgggd`dhdhgdhdiggdjdk Z:e;ejdadbdcgdbddggejdedgdigdggdigggdldm Z<ejdndodpgejdqej=de;drd_gdsdtdudvZ>ejdndodpgdsdtdwdxZ?e;dydz Z@ejdad{d|d0gdbd0ggd}d~ ZAe;e7dd ZBdd ZCe7dd ZDdd ZEdd ZFdd ZGe;dd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdddZPd`S )TestVariableTZautousec                 C  s   t jdt j| _d S NrO   r:   rF   rG   r   Zfloat64r   r   rI   rI   rJ   setup  s    zTestVariable.setupc              	   C  s   t ddg| j}t|j| j t|j| j t|j| jks@ttt	 t
jd|_W 5 Q R X t
jd}||_t|j|kstt
jd}||_t|j|kstd S )NrP   r2   rA   r  )r   r   r$   rD   rW   r0   rV   rx   ry   r  rF   rG   )ra   rb   Zd2Zd3rI   rI   rJ   test_data_and_values  s    z!TestVariable.test_data_and_valuesc                 C  sZ   t g td}| dks tt| tks4ttdtd}d|	dksVtd S )Nr  r   r2   rA   r4   )
r   rF   r   r   rV   r   rY   r   rU   Zsearchsortedr   rI   rI   rJ   test_numpy_same_methods"  s
    z$TestVariable.test_numpy_same_methodsc                 C  sv   t dd}t dtdtdddfD ]F}tg |}|jt dksLt|j|ksZt|jjt dks*tq*d S )Nr   r   z2000-01-01T00r   r5   r   )	rF   r   r   	Timestampr   r   rX   rV   rW   ra   rj   rW   rb   rI   rI   rJ   !test_datetime64_conversion_scalar*  s    

z.TestVariable.test_datetime64_conversion_scalarc                 C  sv   t dd}t ddtdtddfD ]F}tg |}|jt dksLt|j|ksZt|jjt dks*tq*d S )Nl     "R: r   r5   r   z1 daydaysr   )	rF   r   r   Z	Timedeltar   r   rX   rV   rW   r  rI   rI   rJ   "test_timedelta64_conversion_scalar6  s    

z/TestVariable.test_timedelta64_conversion_scalarc                 C  sh   t g d}|jtdkst|jdks,tt g td}|jtdksPt|jtddksdtd S )NrQ   r   ZS3ascii)r   rX   rF   rV   rW   string_bytesr   rI   rI   rJ   test_0d_strB  s    
zTestVariable.test_0d_strc                 C  s>   t g td}|jtdks$t|jtddks:td S )Nr   r   r   )r   r   r  rX   rF   rV   rW   r   r   rI   rI   rJ   test_0d_datetimeK  s    zTestVariable.test_0d_datetimec                 C  sT   t dtddfD ]8}tg |}|jtdks8t|jtddkstqd S )NZ1sr5   sr   i ʚ;r   )r   r   rF   r   r   rX   rV   rW   )ra   r   rb   rI   rI   rJ   test_0d_timedeltaP  s    
zTestVariable.test_0d_timedeltac                 C  s  t jdd}t j|d< td|ddddgdd}td|ddddgdd}||sZt||shttd	|d
}||rttd|d
}||st||rtt|}t jdd|j	d d < ||rt|d rt||rt|d rt||rtd S )NrO   r:   r6   )dim1Zdim2r5   r4   )Zatt1Zatt2)rD   r_   )r  Zdim3r=  )
rF   rG   rH   r   r   r   rV   r   r   rW   )ra   r   v1r   v3v4Zv5rI   rI   rJ   test_equals_and_identicalV  s$    
z&TestVariable.test_equals_and_identicalc                 C  s   t dtj}t dtjtjg}||s,t||r:t||rHtt dtjg}||sdt||rrt||rt|d rtt dtjgd }||rtd S )NrI   r2   r:   )r   rF   r   broadcast_equalsrV   r   r   )ra   r  r   r  r  rI   rI   rJ   test_broadcast_equalso  s    z"TestVariable.test_broadcast_equalsc                 C  s   t dddtjtjg}t dtjddtjg}||s:t||rHt||rVt||rdt|d rrtt dtjddtjg}||rttddtjtjg}||rt||rtt d|g}||std S )Nr2   r5   r4   r:   r8   )r   r2   )	r   rF   r   r  rV   r   r  r   ro   )ra   r  r   r  r   r  rI   rI   rJ   test_no_conflicts  s    zTestVariable.test_no_conflictsc           
   	   C  s:  t d}td|}td|ddiddid}t|t| td|i}t|d  }t|| t|d trrttt|d tst|j	|j
|j|jf}t|t| tjtdd	 tt| W 5 Q R X tjtdd	 td
 W 5 Q R X tjtdd	 t| W 5 Q R X t|dd}t| | td}tg d}t|| t dd}td|}tjtdd	 t|dd W 5 Q R X tjtdd	 t|dd W 5 Q R X t dd tdD }t|djjdkstt dd tdD }	t|	djjdksttt tdtg f W 5 Q R X d S )NrO   r2   ZmyattrvalZscale_factorr5   )r_   r  ztuple of formru   )ZfivesixZsevenz&without an explicit list of dimensionsnamer   	   r:   r:   r   z without explicit dimension nameszhas more than 1-dimensionc                 S  s"   g | ]}t d ddt|d qS )i  r5   r  r   r   r2   rI   rI   rJ   r     s     z1TestVariable.test_as_variable.<locals>.<listcomp>rP   Mc                 S  s   g | ]}t |d qS )r  )r   r  rI   rI   rJ   r     s     m)rF   rU   r   r&   r"   r   r   rd   rV   rC   rW   r_   r  rx   ry   	TypeErrortupler  to_index_variablerH  ro   r   rX   r  r   )
ra   rD   rj   Zexpected_extradsrK   Zxarray_tupleri   dtr   rI   rI   rJ   test_as_variable  sV    

   



zTestVariable.test_as_variablec                 C  sD   t ddgdddgdddggd	d
i}td }|t|ks@td S )NrP   r2   r5   r4   r:   r@   rA   r  rQ   rR   z
        <xarray.Variable (time: 2, x: 3)>
        array([[1, 2, 3],
               [4, 5, 6]])
        Attributes:
            foo:      bar
        )r   r   stripr   rV   rP  rI   rI   rJ   	test_repr  s
    $	zTestVariable.test_reprc                 C  s8   t dttd}dt|ks$tt|jts4td S )Nr2   g     jAz200000 values with dtype)r   r   rF   rU   r   rV   rd   rw   r   rI   rI   rJ   test_repr_lazy_data  s    z TestVariable.test_repr_lazy_datac                 C  s  t jd}tddg|}|d\}}}t|tjks<t|dtdddf\}}}t|tjksjt|dddgf\}}}t|tj	kst|ddgdf\}}}t|tj	kst|ddgddgf\}}}t|tj	kst|ddgtdddf\}}}t|tj	ks ttd	ddg}||tdddf\}}}t|tj	ks^ttd
ddg}||df\}}}t|tj	ksttd	ddg}|||f\}}}t|tj
ksttdddgddgg}||df\}}}t|tj
kstdS )z*Tests indexer type was correctly detected.rO      r2   r8   r   r5   r   r  r4   r5   rn   r^  r:   rs   N)rF   rG   r   _broadcast_indexesr   r   r   rV   rp   r   r   )ra   rD   rb   r  r{   ZvindrI   rI   rJ   test_detect_indexer_type  s4     z%TestVariable.test_detect_indexer_typec                   sl  t jd}tddg|  fdd}|dt |dtd d ft |tg dtd d ft |tg dtg d	ft |dd
gd
ft |dd
gd
dgft |tddd
gd
ft |tddd
gtd d ft |tddd
gtddd
gft |tddd
gdd
gft |tddd
gtddd
gft |tddd
gd
dggtddd
gd
dggft d S )Nr  r2   r8   c                   s"     | \}}}t||std S r   )r  rd   rV   )keyZobject_typerC   Zindex_tupleZ	new_orderrb   rI   rJ   assert_indexer_type  s    z;TestVariable.test_indexer_type.<locals>.assert_indexer_typer  r   r:   r  r5   r4   r>   rs   )rF   rG   r   r   rp   r   r   )ra   rD   r  rI   r  rJ   test_indexer_type  s4    
  zTestVariable.test_indexer_typec              	   C  s^  t jd}tddg|}t||d d   t||d  ttdg|d |d  ttdg|d d df |d d df  ttddg|d dd df |d dd df  tdgt d}tdgt d	}t|||j  t|||  t|d d ||dk   t|d d dd f |d d |dkf  t|d ddd f ||dk |dkf  t|d dd df ||d d |d d f  t|d dd df |tdtdf  t|D ] \}}ttdg|| | qtj	t
d
d ttg d W 5 Q R X d|jd d < t |jdks4td|tdtd	f< t|jt d d S )Nr  r2   r8   .r   r:   r4   rO   r  ziteration over a 0-dru   r5   )rF   rG   r   r&   rU   rW   r   	enumeraterx   ry   r  iterallrV   r$   r   )ra   rD   rb   r2   r8   nr   rI   rI   rJ   
test_items'  s0    *4**2*zTestVariable.test_itemsc                 C  s  |  ddgdddgdddgg}|d }|jd	ks6tt||jd  |d d }|jd
ks`tt||jd d  |dg }|jd
kstt||jdg  |g  }|jd
kstt||jg   |tdd }|jd	kstt||jd  |tdtd d
 }|jd	kstt||jd  |tddd
 }|jdksDtt||jd  |tdd	 }|jdksrtt||jd d df  |td df }|jdkstt||jd d df  |d }|d  d7  < t||jd  d S )Nr2   r8   r   r5   r4   r:   r@   rA   r^  r   rl   rI   r  r6   .c   )rM   rC   rV   r$   rw   re   rp   )ra   rb   rq   rI   rI   rJ   test_getitem_basicF  s>     
zTestVariable.test_getitem_basicc                 C  sp   t ddddgdddgg}t|ddgddgft dtjtjgdtjgg t|tddddgf| d S )	Nr   r   r5   r4   r:   r@   rA   r}   )r   r&   r   rF   r   rp   r   rI   rI   rJ   test_getitem_with_mask_2d_inputw  s    z,TestVariable.test_getitem_with_mask_2d_inputc              	   C  s  t ddg| j}t|jtd d| t|jdd|d  t|jtddd|d d  t|jdd|d d df  t|jddgd|d d ddgf  t|jg d|g   tjtdd	 |jdd
 W 5 Q R X tjt	dd	 |jddd W 5 Q R X t||jddd d S )NrP   r2   rS   r   r:   rl   r4   zNDimensions {'not_a_dim'} do not exist. Expected one or more of \('time', 'x'\)ru   )	not_a_dimwarn)r  missing_dimsr   )
r   r   r&   r  rp   rx   ry   r  warnsUserWarningr   rI   rI   rJ   	test_isel  s$     &zTestVariable.test_iselc                 C  s@   t g td}t|d | t g td}t|d | d S )NZasdfrI   )r   rF   r  r&   Zunicode_r   rI   rI   rJ   test_index_0d_numpy_string  s    z'TestVariable.test_index_0d_numpy_stringc                 C  s,   t ddgd d }t dd}t|| d S )Nr2   Ztmaxr   rI   )r   r&   )ra   ri   rj   rI   rI   rJ   test_indexing_0d_unicode  s    
z%TestVariable.test_indexing_0d_unicoder   r4   r7  c              	   C  s  t ddddddg}t||jdd ||jddk	s:tt dtjtjdddg}t||jdd |tjkrvtj}n|}t d|ddddg}t||jd|d	 t ddddd|g}t||jd
|d	 t d|gd }t||jd|d	 t||jd|d	 tj	t
dd |jdd W 5 Q R X t ddddddgddi}t||jdd t d|ddddgddi}t||jd|d	 d S )Nr2   r5   r4   r:   r@   rA   r   rl   )r2   r   r}   r  	dimensionru   r>   rQ   rR   )r   r&   shiftrV   rF   r   r   NArx   ry   r  )ra   r   rb   rj   Zfill_value_exprI   rI   rJ   
test_shift  s*    
zTestVariable.test_shiftc                 C  sJ   t dddgddgg}t dtjtjgtjdgg}t||jddd d S )Nr   r5   r4   r:   r@   )r   rF   r   r&   r  rP  rI   rI   rJ   test_shift2d  s    zTestVariable.test_shift2dc              	   C  s   t ddddddg}t||jdd ||jddk	s:tt ddddddg}t||jdd t||jd	d t||jd
d t ddddddg}t||jdd t||jdd tjtdd |jdd W 5 Q R X d S )Nr2   r5   r4   r:   r@   rA   r   rl   r  r  ru   r  )r   r&   rollrV   rx   ry   r  rP  rI   rI   rJ   	test_roll  s    zTestVariable.test_rollc                 C  s^   t dtjdd}dD ]@\}}dD ]2}tj|j||d}|jf ||ij}t|| q$qd S )Nr   rA   r  ))r   r2   )r5   r8   )r  r   r5   r  r  r  )r   rF   rG   rg   r  rW   r$   )ra   rb   r  r  r  rj   ri   rI   rI   rJ   test_roll_consistency  s    z"TestVariable.test_roll_consistencyc           	   	   C  s  t ddg| j}t ddg| jj}t||  t| |j tjdddd}t ddd	d
g|}t d
dd	dgtd|}|j	dkst
t||d
dd	d t||d
dd t||d
dd	d t||ddd	d t||ddd	d
 t dd	d
dgtd|}t||ddd	d
 tt |dd W 5 Q R X |jdddd}|d}t|| tt  |jdddd t|| W 5 Q R X d S )NrP   r2   r4   r:   r@   rA   rm   rt   r  r   z
abcd->dbca)rA   r:   r@   r4   .z
abcd->bcdar  r   )r  r  )r   r   r
  r&   	transposerF   rG   rg   einsumrZ   rV   rx   ry   r  r  r  )	ra   rb   r   r2   r   Zw2Zw3ri   Zexpected_ellrI   rI   rJ   test_transpose  s.    

zTestVariable.test_transposec                 C  sF   ddt dt ddd t fD ] }tg |}| }t|| q d S )N      @rm   r5   r   r5   h)rF   r   r   r   r   r  r&   )ra   r   r   ri   rI   rI   rJ   test_transpose_0d  s    

zTestVariable.test_transpose_0dc              	   C  s  t ddgdgg}tt g d|  tt dgdg|d tt dgdg|dg tt dgdg|d tt g d|ddg t ddgddgg}tt dgddg|  tt dgddg|d tjtdd |d W 5 Q R X d S )Nr2   r8   r5   r4   zcannot select a dimensionru   )r   r&   r   rx   ry   r  r   rI   rI   rJ   test_squeeze  s    zTestVariable.test_squeezec              	   C  s   t dddgtjddd}|ddks.t|dgdksBt|ddgd	ksXt|dddgd
kspttjtdd |d W 5 Q R X d S )Nr2   r8   r>   r4   r:   r@   r   )r   r  )r4   r5   r   znot found in array dimru   Zfoobar)	r   rF   rG   rg   Zget_axis_numrV   rx   ry   r  r   rI   rI   rJ   test_get_axis_num!  s    zTestVariable.test_get_axis_numc              	   C  s   t dgddg}|ddg}t ddgdgdgg}t|| |ddg}t||j |ddd}t ddgddgddgg}t|| t dgddg}|d}|}t|| tjtdd	 |d
g W 5 Q R X d S )Nr2   r   r5   r8   r4   r   rQ   zmust be a supersetru   r>   )r   r  r&   r
  rx   ry   r  rh   rI   rI   rJ   test_set_dims*  s    



zTestVariable.test_set_dimsc                 C  sT   t g d}|dd}tjdtd}tdD ]}d||< q,t dg|}t|| d S )Nr  rl   r:   r   r:   r2   )r   r  rF   r   r   r   r&   )ra   rb   ri   Z
exp_valuesr   rj   rI   rI   rJ   test_set_dims_object_dtype?  s    

z'TestVariable.test_set_dims_object_dtypec                 C  s   t ddgddgddggddi}|jd	d
}t dddddg|j}t|| |jdd
}t d|jj|j}t|| |jdd
}t|| |jddddd}t d|j|j}t|| d S )Nr2   r8   r   r5   r4   r:   rQ   rR   r   r  r>   rl   r  rI   r^  )XYr  r  )r   r  r_   r&   rD   r
  r  rh   rI   rI   rJ   
test_stackH  s     


zTestVariable.test_stackc              	   C  sp   t ddgddgddggddi}tjtd	d
 |jdd W 5 Q R X tjtdd
 |jdd W 5 Q R X d S )Nr2   r8   r   r5   r4   r:   rQ   rR   invalid existing dimru   )x1r  cannot create a new dimrl   )r   rx   ry   r  r  r   rI   rI   rJ   test_stack_errorsY  s
     zTestVariable.test_stack_errorsc                 C  s   t dddddgddi}|jdddd	}t dddgddgg|j}t|| |jd
ddd	}t ddgdgdgdgg|j}t|| |jdd
id	}t dddddg|j}t|| d S )Nr>   r   r5   r4   r:   rQ   rR   r   r  r@   r2   )r   unstackr_   r&   rh   rI   rI   rJ   test_unstacka  s    

zTestVariable.test_unstackc              	   C  s   t dddddg}tjtdd |jdd	id
 W 5 Q R X tjtdd |jdd W 5 Q R X tjtdd |jddid W 5 Q R X d S )Nr>   r   r5   r4   r:   r  ru   r2   r@   )rQ   r  r  zthe product of the new dimrA   )r   rx   ry   r  r  r  r   rI   rI   rJ   test_unstack_errorso  s    z TestVariable.test_unstack_errorsc                 C  st   t ddgddgddgg}|jddid}t ddg|j}t|| |jddid	}t ddg|jj}t|| d S )
Nr2   r8   r   r5   r4   r:   r>   r^  rl   )r   r  rD   r&   r
  rh   rI   rI   rJ   test_unstack_2dx  s    
zTestVariable.test_unstack_2dc                 C  sB   t ddgddgddgg}|jddjdddd}t|| d S )	Nr2   r8   r   r5   r4   r:   r   r  )r   r  r  r&   )ra   rb   ri   rI   rI   rJ   test_stack_unstack_consistency  s    z+TestVariable.test_stack_unstack_consistencyc                 C  sr  t jdd}tddg|}t|| tddgt d|| t||d  tddgt d||d  t|d | tddgt d|d | t|d |d d df  tddgt d	|d |d d df  t jdd
d}tdddg|}t|| tddddgt d|| t|| tddddgt d|| t||d  tddddgt d||d  d S )Nr4   r:   rm   rt   z	ab,ab->abr   zab,b->abzb,ab->bazb,a->bar@   rA   r  r   zab,bcd->abcdzbcd,ab->bcdazab,cd->abcd)rF   rG   rg   r   r&   r   )ra   r2   rb   r8   r   rI   rI   rJ   test_broadcasting_math  s.    "** &  
 z#TestVariable.test_broadcasting_mathc              	   C  s   t dgtd}t dgtd}t ddgtddd}tjtdd ||  W 5 Q R X tjtdd ||  W 5 Q R X d S )Nr2   rO   rA   d   zmismatched lengthsru   zduplicate dimensions)r   rF   rU   rH  rx   ry   r  )ra   rm   rt   r  rI   rI   rJ   test_broadcasting_failures  s    z'TestVariable.test_broadcasting_failuresc              	   C  s   t d}tdg|}|}|d7 }||ks.tt|j|ks@tt|jt dd  tjt	dd |tdt d7 }W 5 Q R X d S )NrA   r2   r5   zdimensions cannot changeru   r8   )
rF   rU   r   rV   r0   rW   r$   rx   ry   r  )ra   r2   rb   r   rI   rI   rJ   test_inplace_math  s    
zTestVariable.test_inplace_mathc              	   C  s<   t d}tdg|}tjtdd |d7 }W 5 Q R X d S )NrA   r2   z(Values of an IndexVariable are immutableru   r5   )rF   rU   r   rx   ry   r  r   rI   rI   rJ   test_inplace_math_error  s    
 z$TestVariable.test_inplace_math_errorc              	   C  s  t ddg| jddi}t|tjdt dg| jjdd t|jtjdd|jtjdd t|tjddgt g | jjdd t|tjt g | j  t|tjdtjdt g | jjdd  t|d|tjd tj	t
d	d
 |jddd W 5 Q R X d S )Nr2   r8   Zignored
attributesr   r  r"  r  zcannot supply bothru   )r  r  )r   r   r&   reducerF   ZstdrO  r#   rx   ry   r  r   rI   rI   rJ   test_reduce  s    &" zTestVariable.test_reducec              
   C  s   dd }dd l }||d| tddtjdg}tjtdd	$ td
d |	  W 5 Q R X W 5 Q R X tdd |	  W 5 Q R X d S )Nc                  _  s   t dd S )Nshould not have been called)RuntimeError)argsr  rI   rI   rJ   raise_if_called  s    z@TestVariable.test_reduce_use_bottleneck.<locals>.raise_if_calledr   Znanminr2   r  r   r  ru   TZuse_bottleneckF)

bottlenecksetattrr   rF   r   rx   ry   r   r   min)ra   Zmonkeypatchr"  bnrb   rI   rI   rJ   test_reduce_use_bottleneck  s    z'TestVariable.test_reduce_use_bottleneckskipnaFNq      ?rN         ?z	axis, dimr   r5   r2   r8   c           
      C  sr   | j  }tj|d< tddg|}|j|||d}|dkr@tjntj}||t|d |d}	tj	
|j|	 d S )Nr6   r2   r8   )r  r)  )TNr  r  )r   r   rF   NaNr   quantilenanpercentileZ
percentilero   r   r#   rW   )
ra   r*  r  r  r)  r   rb   ri   Z_percentile_funcrj   rI   rI   rJ   test_quantile  s    

zTestVariable.test_quantilec                 C  sh   t ddg| jddi}|j||d}t|jts8ttj	| jt
|d |d}tj|j| d S )Nr2   r8   r4   r"  r  r  )r   r   chunkr.  rd   rD   dask_array_typerV   rF   r/  ro   r   r#   rW   )ra   r*  r  r  rb   ri   rj   rI   rI   rJ   test_quantile_dask  s
    zTestVariable.test_quantile_daskmethodZmidpointloweruse_daskrq  r(  r+  c                 C  s   t ddg| j}|r"|ddi}tdddg}|j|d|d}ttjtdkrjtj| j|d	|d
}ntj| j|d	|d}|rt	|j
tsttj|j| d S )Nr2   r8   r4   r+  rN   r,  r  r4  z1.22r5   )r  r4  )r  interpolation)r   r   r1  rF   ro   r.  r	   __version__Znanquantilerd   rD   r2  rV   r   r#   rW   )ra   r4  r6  rb   r*  ri   rj   rI   rI   rJ   test_quantile_method  s    z!TestVariable.test_quantile_methodc              
   C  s   t ddg| j}tdddg}tjtdd |j|d|d}W 5 Q R X |j|d|d	}tj	|j
|j
 tjd
d2 tjtdd |j|d||d W 5 Q R X W 5 Q R X d S )Nr2   r8   r+  rN   r,  z<`interpolation` argument to quantile was renamed to `method`ru   )r  r8  r7  T)recordz!interpolation and method keywords)r  r8  r4  )r   r   rF   ro   rx   r  FutureWarningr.  r   r#   rW   r   r   ry   r  )ra   r4  rb   r*  ri   rj   rI   rI   rJ   'test_quantile_interpolation_deprecation  s    z4TestVariable.test_quantile_interpolation_deprecationc              	   C  sF   t ddg| jddi}tjtdd |jddd W 5 Q R X d S )Nr2   r8   r4   zconsists of multiple chunksru   rN   r"  )r   r   r1  rx   ry   r  r.  r   rI   rI   rJ   test_quantile_chunked_dim_error#  s    z,TestVariable.test_quantile_chunked_dim_errorgr  c              	   C  s<   t ddg| j}tjtdd |j|dd W 5 Q R X d S )Nr2   r8   z'Quantiles must be in the range \[0, 1\]ru   r"  )r   r   rx   ry   r  r.  )ra   r*  rb   rI   rI   rJ   test_quantile_out_of_bounds+  s     z(TestVariable.test_quantile_out_of_boundsc              	   C  sF   t dgddtjddgd}tjtdd |d W 5 Q R X d S )	Nr2         @r   r7        @r4   zarrays stored as daskru   )r   rF   r   r1  rx   ry   r  rankr   rI   rI   rJ   test_rank_dask_raises5  s    z"TestVariable.test_rank_dask_raisesc              
   C  sR   t dgddtjddg}tdd& tt |d W 5 Q R X W 5 Q R X d S )Nr2   r@  r   r7  rA  Fr#  )r   rF   r   r   rx   ry   r   rB  r   rI   rI   rJ   test_rank_use_bottleneck<  s    z%TestVariable.test_rank_use_bottleneckc              	   C  sJ  dd l }tddgddtjdgg}|j|jdd}|j|jdd}tj|dj	| tj|dj	| tdgdddg}|j
|jdd}tj|dj	| tdgd	d
dg}|j
|jdd}tj|dj	| tdgddtjddg}tdgddtjddg}t|jddd| tjtdd |d W 5 Q R X d S )Nr   r2   r8   r:   r@   r5   r  r4   r  rt   rm   r@  r   r7  rA  r,  r+  rN   T)Zpctz	not foundru   )r$  r   rF   r   ZnanrankdatarD   r   r#   rB  rW   Zrankdatar%   rx   ry   r  )ra   r'  rb   Zexpect_0Zexpect_1expectZv_expectrI   rI   rJ   	test_rankB  s"    zTestVariable.test_rankc                 C  s6   t jddd}tdg|}tg d}t||  d S )NrA   z>f4r   r2   )rF   r   r   r&   r   )ra   rD   rb   rj   rI   rI   rJ   test_big_endian_reduce\  s    
z#TestVariable.test_big_endian_reducec              
   C  s  t dtdtjddg}t| t g d t|jddt g d t|jddt g tj tt|t g d t| t g d t|jd	d
t dtddddg t|jd	d
t dtddddg t|	 t g d t|
 t g d t ddddg}t| t g d t|jddt g d t dtjddd}|jddddksftt| t g td d S )Nr2   r5   r4   r:   T)r)  Fr  r   r  gUUUUUU?r"  r   r   r   )r)  r  z
2000-01-03)r   rF   ro   r   r&   rO  prodZcumsumZcumprodrK   rp  anyr  r   r   ZargmaxrV   maxr  r   rI   rI   rJ   test_reduce_funcsc  s     &&zTestVariable.test_reduce_funcsc              	   C  s   t ddg| j}t|jddt |jtj| jdd t|jdddt |jtj| jddd t|jdddt |jtj| jddd t|jddgddt |jtj| jd	dd t g d
}t|jddt g tj|jdd d S )Nr2   r8   Tkeepdimsr  rM  r   r  rM  r5   )r5   r   r   )r   r   r&   rO  rC   rF   rD   r   rI   rI   rJ   test_reduce_keepdimsy  s,    
 

 z!TestVariable.test_reduce_keepdimsc                 C  s   dd l }tddg| j }|jdd}t|j|jjs<t	t|j
tj| jdd}t|| |jddd}t|j|jjst	t|j
tj| jddd}t|| d S )	Nr   r2   r8   TrL  rN  r5   rO  )
dask.arrayr   r   r1  rO  rd   rD   ro   ArrayrV   rC   rF   r&   )ra   r1   rb   ri   rj   rI   rI   rJ   test_reduce_keepdims_dask  s    
z&TestVariable.test_reduce_keepdims_daskc                 C  sx   ddd}t ddg| j|}| }t|jdks6t|ji ksDt|jdd}t|jt|ksft|j|ksttd S )	Ntestr   r   Z	long_namer2   r8   r   Tr   )r   r   rO  r^   r_   rV   )ra   _attrsrb   ZvmrI   rI   rJ   test_reduce_keep_attrs  s    
z#TestVariable.test_reduce_keep_attrsc              	   C  s   ddd}t ddgtjdd|}t ddgtjdd|}|| }|ji ksTttdd || }W 5 Q R X |j|kstd S )	NrT  r   rU  r2   r8   r:   Tr   )r   rF   rG   rg   r_   rV   r   )ra   rV  rm   rt   r   rI   rI   rJ   test_binary_ops_keep_attrs  s    
z'TestVariable.test_binary_ops_keep_attrsc                 C  s   t g d}t dgdddtjg }t|| t dgtjdddtjgtd}| }t|| t dgd	d
d	g }t|| |jtkst	t dgddg}t ddgddtjgdddggd}t|| d S )Nr:   r2   r5   r4   r  r  r   r   TFr8   r   )
r   rF   r   countr&   ro   r   rX   r  rV   )ra   rj   ri   rb   rI   rI   rJ   
test_count  s    

 

&zTestVariable.test_countc                 C  s  t ddgdddgdddgg}d|d	< |d	 dks6tt ddgdddgdddgg}d|tddgd
< t|ddg t|ddg  t ddgdddgdddgg}d|tddgd
< t|d t|d  t ddgdddgdddgg}d|tddgdddgd< |d	 dkstd S )Nr2   r8   r   r:   r4   r@   rA   r5   r  rl   TFr   )r   rV   re   r$   rF   r   r   rI   rI   rJ   test_setitem  s     zTestVariable.test_setitemc              	   C  s  dd }|t jddtdgddgtdgddgdd |t jddtdgddgtdgddgtd	dd |t jddtdgddgtdgddgtddd
gd |t jddtd tdgddgtddd
gd |t jddtddgddggtddgddggdd |t jddtddgddggtddgddggdgd |t jddtddgddgd
dggtddgddgddggd
dgd tdddgt d}tdgddg}d|t||d< tdddgt d}d|dd d df< d|dd d df< t|| tddgt d}tddgddgg}d||d d f< tddgddgddgddgg}t|| tj	t
dd t d|||f< W 5 Q R X tddgddd
gdddgg}tdgddg}tddgt jdtdd |t|d< t|d t |d d  t|d t |d d  |jdksFttddgt ddd
}tdgddg}|t|d  d7  < tddgdd
gddgddgg}t|| tdgddg}|t|d  d7  < tddgd
dgddgddgg}t|| d S )Nc                 S  s@   |   }||||f< tddg| }||t||d< t|| d S )Nr2   r8   r   )r   r   re   r$   )ro   key_xkey_yrW   rj   rb   rI   rI   rJ   assert_assigned_2d  s
    z;TestVariable.test_setitem_fancy.<locals>.assert_assigned_2dr@   r:   rm   r   r5   )r\  r]  rW   rI   r4   rt   rA   r2   r8   r>   )r@   r:   r4   r=   )r:   r4   zshape mismatchru   )r5   r4   r5   )r4   r:   r   rO   rl   r   r  )rF   rG   rg   r   rp   r   re   r&   rx   ry   r  rj  r  r$   r   rC   rV   rU   rH  )ra   r^  rb   r{   rj   rI   rI   rJ   test_setitem_fancy  s    
 
& 
 zTestVariable.test_setitem_fancyc                 C  s8  |  dgdddddg}|jddiddd	}|  dgd
ddg}t|| |jddidddd}|  dgdddg}t|| |jdditjddd}|  dgddg}t|| |  dddgtdddd}dditjddfdditjddidfdddtjddddffD ]\}}}}||||| qd S )Nr2   r   r5   r4   r:   r@   r{  rO  )boundaryfuncrN   r:  right)ra  r`  sider6  r  trim)ra  rc  r`  r8   r>   r  r  r  leftr   )	rM   coarsenr&   rF   rO  rU   rH  rp  rJ  )ra   rb   ri   rj   windowsra  rc  r`  rI   rI   rJ   test_coarsen>  s     


"zTestVariable.test_coarsenc                 C  s  |  ddgtddd}|jdddd	d
}|jddid	d
jddid	d
}t|| |  ddgtddd}|jdddd	dd}|jddid	ddjddid	dd}t|| |  ddgdtddd }tj|d< tj|d< |jdddd	dd}|jddidddjddidddd }||rBt|d  d9  < |d  d9  < t	|| |  dtjdtj
ddd}|jtdddddd}|  ddtd }t|| tj|d< tj|d< d|d< d|d< |jtdddddd}t|| |jtddddddd}|  dtjd gd!tjgg}t|| |jtdddddd"d}|  dd#d gd!d$gg}t|| d S )%Nr2   r8   H   r     r:   r@   r   rO  )ra  T   r  rd  )ra  r`  r   )r4   r@   rh  r   r  gtE]t?r7      r   r4   rY  exactr?   r6   )r}   r}   F)ra  r`  r)     *   TrO   #   )rM   rF   rU   rH  rf  r%   r   r   rV   r#   r   re   r   rh   rI   rI   rJ   test_coarsen_2dU  sX     
  
"

  
 




zTestVariable.test_coarsen_2drO  c              	   C  s   ddd}t t|d }tdd2 tdgtddd	|d
jddi|ddd}W 5 Q R X |ji ksfttdd2 tdgtddd	|d
jddi|ddd}W 5 Q R X |j|kstd S )NrT  r   rU  Fr   coordr5   rO   r  )r_   rm  re  )rg  ra  r`  rc  T)	getattrr   r   r   rF   Zlinspacerf  r_   rV   )ra   Z	operationrV  Z	test_funcnewrI   rI   rJ   test_coarsen_keep_attrs  s$    
   z$TestVariable.test_coarsen_keep_attrs)rO  )Qr   r   r   staticmethodr   rM   rx   fixturer  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r  r  r  r  r  r*   r(  r  r0  r,   r3  r  r:  r=  r>  r?  rC  rD  rF  rG  rK  rP  rS  rW  rX  rZ  r[  r_  rh  rq  ru  rI   rI   rI   rJ   r    s   

	5'%1
#				
	
 $ 

	

]4r  c                      s   e Zd Zedd Zdd Zejj fddZ	ejj fddZ
ejj fd	d
Zejjejd fddZ fddZ fddZdd Zejdddgejddddgejdddgdd Zejjd d! fd"d#Z  ZS )$TestVariableWithDaskc                  G  s   t |   S r   )r   r1  )r!  rI   rI   rJ   <lambda>      zTestVariableWithDask.<lambda>c                 C  s6  t ddgtd}|jd ks"t| }|jdks8t|jj}|jdd}|jdksZt|jj|ksjt|jdd}|jdkst|jj|kst|d	jj|d	jjkst| jd kstd
d l	m
} |jdd}t|j|jstd|jjkst|jddd}|jdks t|jj|ks2td S )Ndim_0dim_1)r:   r@   )r	  )r@   )r3   r?   r[  r  )r	  r;   r4   r   Z	testname_r  r:   )r{  r|  )r   rF   r   r[  rV   r1  rD   r  r   rQ  ro   rd   rR  )ra   Z	unblockedZblockedZfirst_dask_namedarI   rI   rJ   
test_chunk  s(     zTestVariableWithDask.test_chunkc                   s   t    d S r   )superr   r   	__class__rI   rJ   r     s    z3TestVariableWithDask.test_0d_object_array_with_listc                   s   t    d S r   )r  r   r   r  rI   rJ   r     s    z)TestVariableWithDask.test_array_interfacec                   s   t    d S r   )r  r5  r   r  rI   rJ   r5    s    z$TestVariableWithDask.test_copy_indexz4ignore:elementwise comparison failed.*:FutureWarningc                   s   t    d S r   )r  r  r   r  rI   rJ   r    s    z'TestVariableWithDask.test_eq_all_dtypesc                   s   t    d S r   r  rk  r   r  rI   rJ   rk    s    z'TestVariableWithDask.test_getitem_fancyc                   s   t    d S r   )r  r|   r   r  rI   rJ   r|     s    z*TestVariableWithDask.test_getitem_1d_fancyc                 C  sd   dd l m} tdg|jddd}tdddgddgg}t|j|dd| dddgddgg d S )	Nr   r2   r:   r}  r   r}   r4   r~   )rQ  ro   r   rU   r&   r   rM   )ra   r~  rb   r   rI   rI   rJ   r     s    z6TestVariableWithDask.test_getitem_with_mask_nd_indexerr  r2   r8   r  r:   r  r  r  TFc           
   	   C  s   dd l }dd lm} |jjdd tdtjtjddt	d}td|j
|dd	gd
}|j||d|tjd}t  |j||d|tjd}	W 5 Q R X t|	j|jst|	j|jkstt|	| d S )Nr   zsingle-threaded)Z	schedulerr   r  r  r   )r  r  r  r      r  r}  r  r  )r1   rQ  ro   configsetr   rF   rG   rg   rY   
from_arrayr  r   r)   rd   rD   rR  rV   rZ   r%   )
ra   r  r  r  r1   r~  r2   Zdxrj   ri   rI   rI   rJ   test_dask_rolling  s.            z&TestVariableWithDask.test_dask_rollingzDhttps://github.com/pydata/xarray/issues/6209#issuecomment-1025116203r   c                   s   t    d S r   )r  rZ  r   r  rI   rJ   rZ    s    z$TestVariableWithDask.test_multiindex)r   r   r   rv  rM   r  rx   r  r  r   r   r5  r   r  rk  r|   r   r  r  rZ  __classcell__rI   rI   r  rJ   rx    s,   "

rx  c                   @  s   e Zd Zdd ZdS )TestVariableWithSparsec                 C  s:   t ddd}td|jdd}| }t|| d S )Nrj  r:   r@   r   r}   r~   )rF   rU   rH  r   Z
_as_sparseZ	_to_denser&   )ra   rD   rK   ri   rI   rI   rJ   test_as_sparse
	  s    z%TestVariableWithSparse.test_as_sparseN)r   r   r   r  rI   rI   rI   rJ   r  	  s   r  c                      s  e Zd ZeeZdd Zdd Zdd Zdd Z	d	d
 Z
dd Zdd Zdd Zdd Zdd Zejdeegdd Zdd Zdd Zejj fddZejj fddZejj fd d!Zejj fd"d#Zejjejd$d%d&d'd(d)d*d+d,d-g	ejd.e fd/d0Zejj fd1d2Zejj fd3d4Z ejj fd5d6Z!ejj fd7d8Z"ejj fd9d:Z#ejj fd;d<Z$d=d>d?d@Z%  Z&S )ATestIndexVariablec              	   C  s(   t jtdd tdd W 5 Q R X d S )Nzmust be 1-dimensionalru   rI   r   )rx   ry   r  r   r   rI   rI   rJ   	test_init	  s    zTestIndexVariable.test_initc                 C  s@   dt d }tdg|ddi}tj|dd| s<td S )NrN   rO   rP   rQ   rR   r  )rF   rU   r   r   r   r   r3  rV   r`   rI   rI   rJ   test_to_index	  s    zTestIndexVariable.test_to_indexc                 C  sJ   t jjddgddggdd}td|id}|jj |d	sFt	d S )
Nrm   rt   r5   r4   )r.  r%  r/  r2   )coordsr.  )
r   r1  r2  r   r.  r   r3  r   get_level_valuesrV   )ra   r4  r  rI   rI   rJ   test_to_index_multiindex_level	  s    z0TestIndexVariable.test_to_index_multiindex_levelc                 C  s@   t jddgddgg}tdg|ddi}| jdks<td S )	Nrm   rt   r5   r4   r2   rQ   rR   )Z	x_level_0Z	x_level_1)r   r1  r2  r   r3  r0  rV   )ra   r4  rb   rI   rI   rJ   #test_multiindex_default_level_names"	  s    z5TestIndexVariable.test_multiindex_default_level_namesc              	   C  s   t dtd}t|jts tt|jtjs2tt	|j
ks@tttd| t	|jj
ks`ttjtdd d|d d < W 5 Q R X d S )Nr2   r@  r:   zcannot be modifiedru   r   )r   rF   rU   rd   rw   r   rV   rD   r  rY   rX   r$   rW   rx   ry   r  ra   r2   rI   rI   rJ   	test_data'	  s    zTestIndexVariable.test_datac              	   C  s:   t ddg}|jdksttt d|_W 5 Q R X d S )Nr2         $@r8   )r   r  rV   rx   ry   AttributeError)ra   rr  rI   rI   rJ   	test_name1	  s    zTestIndexVariable.test_namec                 C  sT   t jjddgddggddgd}td|}|j|jks:ttd	d
gjd ksPtd S )Nrm   rt   r5   r4   level_1level_2r/  r2   r8   r  )r   r1  r2  r   Zlevel_namesr0  rV   )ra   r4  r2   rI   rI   rJ   test_level_names8	  s     
z"TestIndexVariable.test_level_namesc              	   C  sz   t jjddgddggddgd}td|}td|d}t|d| tjt	d	d
 tddgd W 5 Q R X d S )Nrm   rt   r5   r4   r  r  r/  r2   zhas no MultiIndexru   r8   r  level)
r   r1  r2  r   r  r&   Zget_level_variablerx   ry   r  )ra   r4  r2   r  rI   rI   rJ   test_get_level_variableA	  s     
z)TestIndexVariable.test_get_level_variablec                 C  s   t jddd}td|d d td|dd  g}td|}tj|dd}t|| t| t jshtt	t
dt	t
ddg}tj|d|d}t|| t| t jstd S )Nr   rO   r   r   rA   r"  )r  r  )r   r   r   r   r&   rd   r3  ZPeriodIndexrV   rE   r   )ra   r   r  rj   ri   r  rI   rI   rJ   test_concat_periodsL	  s    $


z%TestIndexVariable.test_concat_periodsc                 C  sx   t jdddgddgg}td|d d td|dd  g}td|}tj|dd}t|| t| t jsttd S )Nr   r5   r4   rm   rt   r2   r"  )	r   r1  r2  r   r   r&   rd   r3  rV   )ra   rY  r  rj   ri   rI   rI   rJ   test_concat_multiindexY	  s    $

z(TestIndexVariable.test_concat_multiindexrX   c                 C  sv   t dtjdg|d}t dtjdg|d}t dtjddg|d}t ||g}||s`tt|j|srtd S )Nr2   rm   r   rt   )r   rF   ro   r   r   rV   Z
issubdtyperX   )ra   rX   rm   rt   rj   ri   rI   rI   rJ   test_concat_str_dtypea	  s    z'TestIndexVariable.test_concat_str_dtypec              	   C  s<   t jtdd tddddg}W 5 Q R X t|ts8td S )N
deprecatedru   r2   r5   r4   r:   )rx   r  Warningr
   rd   r   rV   r  rI   rI   rJ   test_coordinate_aliasl	  s    z'TestIndexVariable.test_coordinate_aliasc                 C  s6   t jddgdd}td|}|d j|d ks2td S )Nl   +j( l   Rj( r   r   r   r   )rF   ro   r   rD   rV   )ra   r   rb   rI   rI   rJ   test_datetime64q	  s    
z!TestIndexVariable.test_datetime64c                   s   t    d S r   )r  rn  r   r  rI   rJ   rn  y	  s    z$TestIndexVariable.test_getitem_errorc                   s   t    d S r   )r  ra  r   r  rI   rJ   ra  }	  s    z'TestIndexVariable.test_getitem_advancedc                   s   t    d S r   r  r   r  rI   rJ   rk  	  s    z$TestIndexVariable.test_getitem_fancyc                   s   t    d S r   r  r   r  rI   rJ   re  	  s    z#TestIndexVariable.test_getitem_uintro  rO  rp  rr  rs  rt  ru  rv  rw  rx  ry  c                   s   t  ||| d S r   )r  r~  )ra   ro  r|  r}  r  rI   rJ   r~  	  s    zTestIndexVariable.test_padc                   s   t  || d S r   )r  r  )ra   r|  r}  r  rI   rJ   r  	  s    z*TestIndexVariable.test_pad_constant_valuesc                   s   t    d S r   )r  r  r   r  rI   rJ   r  	  s    z%TestIndexVariable.test_rolling_windowc                   s   t    d S r   )r  r  r   r  rI   rJ   r  	  s    z!TestIndexVariable.test_rolling_1dc                   s   t    d S r   )r  r  r   r  rI   rJ   r  	  s    z!TestIndexVariable.test_nd_rollingc                   s   t    d S r   )r  r  r   r  rI   rJ   r  	  s    z,TestIndexVariable.test_rolling_window_errorsc                   s   t    d S r   )r  rq  r   r  rI   rJ   rq  	  s    z!TestIndexVariable.test_coarsen_2dr(  r+  c                 C  s8   t ddg}| }||k	s td|_|jdks4td S )Nr2   rm   r^  rl   )r   r  rV   rC   )ra   rm   rt   rI   rI   rJ   test_to_index_variable_copy	  s
    z-TestIndexVariable.test_to_index_variable_copy)'r   r   r   rv  r   rM   r  r  r  r  r  r  r  r  r  r  rx   r  r  r   r  r  r  r  skiprn  ra  rk  re  r  r~  r  r  r  r  r  rq  r  r  rI   rI   r  rJ   r  	  sh   
	

r  c                   @  s   e Zd Zdd Zdd Zdd Zdd Zed	d
ddZd	d
ddZ	e
d	d
ddZd	d
ddZd	d
ddZdd ZdS )TestAsCompatibleDatac                 C  sf   t jttf}|D ]P}t dtjdddtjdddjfD ]$}||}t|tt	|ks:t
q:qd S )Nr:   r   r   )rF   r   r   r   rU   r   r   rW   r0   r!   rV   )ra   typesr   rD   r2   rI   rI   rJ   test_unchanged_types	  s    z)TestAsCompatibleData.test_unchanged_typesc                 C  sh   dddggt dddggfD ]D}t|}tt|| tjt|ksLtt|j	|j	kstqd S )Nr   r5   r4   )
r   Z	DataFramer!   r$   rF   r   r  r   rV   rX   )ra   Zinput_arrayri   rI   rI   rJ   test_converted_types	  s
    "z)TestAsCompatibleData.test_converted_typesc                 C  s   t jt d}t d}t|}t|| t t|jksBtt jjt dddg dg d}t d}t j	|d< t|}t|| t t
|jkstd S )NrA   r@   FT)maskr;  r}   )rF   maZMaskedArrayrU   r!   r$   rX   r  rV   r   rY   )ra   originalrj   ri   rI   rI   rJ   test_masked_array	  s    

"


z&TestAsCompatibleData.test_masked_arrayc                 C  s`  t d}t|}||kstt jt|ks0tt d|jksDtt t dg}t|}t ||ksptt jt|kstt d|jkstt t ddg}t|}t ||kstt jt|kstt d|jkst|t	t |kstt dd}tt
ddd}t ||ks2tt jt|ksFtt d|jks\td S )Nr   r   r   r   r5   )rF   r   r!   rV   r  r   rX   ro   r   r0   r   r  rI   rI   rJ   test_datetime	  s*    
z"TestAsCompatibleData.test_datetimer(  r+  c              	   C  s   t d}tjdd|d}|td|}t  td t	|}W 5 Q R X |j
|ks`t|j
jtd|ksxtt|}t  td t	|}W 5 Q R X tj||j |jtdkstd S )	N
US/Easternr   r5   r   rT  r  r   r   r   )rU  rV  r   r   r   DatetimeTZDtyper   r   simplefilterr!   ro   rV   rX   r   rF   r   r$   rW   )ra   rT  Ztimes_nsZtimes_sri   ZseriesrI   rI   rJ   test_tz_datetime	  s    





z%TestAsCompatibleData.test_tz_datetimec              	   C  s   t dddgddggddid}|jd	d
}ddgddgg|_t|t|d d	d	gd	d	gg|_|jtksltt|t|d	td tj	t
dd t|ddg W 5 Q R X tj	t
dd t|d	dtid W 5 Q R X d S )Nr   r6  r7  r8  r9  rQ   rR   rC   rD   r_   Tr  r4   r   zmust be scalarru   r   z'dtype' cannot be dict-liker2   )r   r   rW   r&   r   rX   r'  rV   rx   ry   r  )ra   r?  rE  rI   rI   rJ   test_full_like
  s      z#TestAsCompatibleData.test_full_likec                   s   t dddgddggddidd	  fd
d}|t d jt jd |t dtdttj jdtd t djj}| D ]:}t	|t
r|D ]}t	|tjrtqqt	|tjrtqd S )Nr   r6  r7  r8  r9  rQ   rR   r  )r7   )r4   c                   s^   | j |kst| j jkst| j jks.t| j jks>t| j jksNtt| j| d S r   )rX   rV   rZ   rC   r_   r[  r$   rW   )ri   Zexpect_dtypeZexpect_valuesr?  rI   rJ   check)
  s    z7TestAsCompatibleData.test_full_like_dask.<locals>.checkr4   Tr   r5   )r   r1  r   rX   rF   rW   r'  rD   r1   rd   r  r  rV   )ra   r  Zdskrb   virI   r  rJ   test_full_like_dask#
  s(      
z(TestAsCompatibleData.test_full_like_daskc                 C  sR   t dddgddggddid}tt|t|d	 tt|td
t|d	td
 d S )Nr   r6  r7  r8  r9  rQ   rR   r  r   r   )r   r&   r   r   r  ra   r?  rI   rI   rJ   test_zeros_likeC
  s      z$TestAsCompatibleData.test_zeros_likec                 C  sR   t dddgddggddid}tt|t|d	 tt|td
t|d	td
 d S )Nr   r6  r7  r8  r9  rQ   rR   r  r5   r   )r   r&   r   r   r  r  rI   rI   rJ   test_ones_likeJ
  s      z#TestAsCompatibleData.test_ones_likec                 C  s   G dd dt }G dd d|tj}G dd d}|td}td|d	d
id}t|jtjsdt	|td}td|d	d
id}t|j|st	|td}td|d}t|j
 |st	d S )Nc                   @  s   e Zd Zdd ZdS )z?TestAsCompatibleData.test_unsupported_type.<locals>.CustomArrayc                 S  s
   || _ d S r   )ro   ra   ro   rI   rI   rJ   r   T
  s    zHTestAsCompatibleData.test_unsupported_type.<locals>.CustomArray.__init__Nr   r   r   r   rI   rI   rI   rJ   CustomArrayS
  s   r  c                   @  s   e Zd ZdS )zCTestAsCompatibleData.test_unsupported_type.<locals>.CustomIndexableN)r   r   r   rI   rI   rI   rJ   CustomIndexableW
  s   r  c                   @  s   e Zd Zdd ZdS )zHTestAsCompatibleData.test_unsupported_type.<locals>.CustomWithValuesAttrc                 S  s
   || _ d S r   )rW   r  rI   rI   rJ   r   \
  s    zQTestAsCompatibleData.test_unsupported_type.<locals>.CustomWithValuesAttr.__init__Nr  rI   rI   rI   rJ   CustomWithValuesAttr[
  s   r  r:   r2   rQ   rR   r  rI   rB   )r    r   ZExplicitlyIndexedrF   rU   r   rd   rw   r  rV   r   )ra   r  r  r  ro   r?  rI   rI   rJ   test_unsupported_typeQ
  s    z*TestAsCompatibleData.test_unsupported_typeN)r   r   r   r  r  r  r  r-   r  r  r,   r  r  r  r  rI   rI   rI   rJ   r  	  s   r  c                	   C  s,   t   tdddtjgdk W 5 Q R X d S )Nr2   r5   r4   r   )r'   r   rF   r-  rI   rI   rI   rJ   +test_raise_no_warning_for_nan_in_binary_opsl
  s    r  c                   @  s`   e Zd ZdZejdddd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zedd ZdS )TestBackendIndexingz0Make sure all the array wrappers can be indexed.Tr  c                 C  s   t jdt j| _d S r  r  r   rI   rI   rJ   setUpt
  s    zTestBackendIndexing.setUpc                 C  s@   t |jddgddgd| jddg d d ddgf s<td S )Nr  r:   r4   r5   r   )rF   allcloser  r   rV   r   rI   rI   rJ   check_orthogonal_indexingx
  s    z-TestBackendIndexing.check_orthogonal_indexingc                 C  sD   t dddg}t dddg}t|j||d| j||f s@td S )Nr>   r   r4   r5   r   )r   rF   r  r  r   rV   )ra   rb   rl  rm  rI   rI   rJ   check_vectorized_indexing{
  s    z-TestBackendIndexing.check_vectorized_indexingc              	   C  sZ   t dt| jd}| | | | tjtdd t dtt| jd}W 5 Q R X d S )Nr   rB   z NumpyIndexingAdapter only wraps ru   )r   r   r   r  r  rx   ry   r  r   rI   rI   rJ   test_NumpyIndexingAdapter
  s    

 z-TestBackendIndexing.test_NumpyIndexingAdapterc                 C  sj   t dt| jd}| | | | t dtt| jd}| | t dtt| jd}| | d S Nr   rB   )r   r   r   r  r  r   r   rI   rI   rJ   test_LazilyIndexedArray
  s    


 z+TestBackendIndexing.test_LazilyIndexedArrayc                 C  sT   t dt| jd}| | | | t dtt| jd}| | | | d S r  )r   r   r   r  r  r   r   rI   rI   rJ   test_CopyOnWriteArray
  s    


z)TestBackendIndexing.test_CopyOnWriteArrayc                 C  sT   t dt| jd}| | | | t dtt| jd}| | | | d S r  )r   r   r   r  r  r   r   rI   rI   rJ   test_MemoryCachedArray
  s    


z*TestBackendIndexing.test_MemoryCachedArrayc                 C  sh   dd l m} || j}tdt|d}| | | | tdtt|d}| | | | d S )Nr   r   rB   )	rQ  ro   r   r   r   r   r  r  r   )ra   r~  rb   rI   rI   rJ   test_DaskIndexingAdapter
  s    


z,TestBackendIndexing.test_DaskIndexingAdapterN)r   r   r   __doc__rx   rw  r  r  r  r  r  r  r  r,   r  rI   rI   rI   rJ   r  q
  s   


		r  c              
   C  s   | j dd}|ddkst| j dd}|ddks<t| j ddd}|ddks\t|ddksnt| j | d| d	d}|j| jkstt|jt | j| djtj	d d d d f | d	jd d d d tj	f  d S )
NrN   )r&  .)rJ  r+  r,  )r&  rJ  r2   r>   )
r   r&  rV   rJ  rO  rC   r$   rD   rF   ri  )rK   rI  rI   rI   rJ   	test_clip
  s"    r  Varc                   @  sT   e Zd Zdd Zedd Zedd Zedd Z	e
d	d
 Zeedd ZdS )TestNumpyCoercionc                 C  s@   |ddddg}t | | tj| tdddg d S Nr2   r5   r4   r:   )r&   as_numpyrF   r   r%   to_numpyro   )ra   r  rb   rI   rI   rJ   test_from_numpy
  s    z!TestNumpyCoercion.test_from_numpyc                 C  sN   |ddddg}| d}t| |  tj| tdddg d S r  )	r1  r&   r  r_  rF   r   r%   r  ro   )ra   r  rb   Z	v_chunkedrI   rI   rJ   test_from_dask
  s    
z TestNumpyCoercion.test_from_daskc              	   C  sz   dd l }tdddg}t * tjd|jd |d|j|dd	}W 5 Q R X t|	 |d| tj
| | d S 
Nr   r5   r4   r:   r   )categoryr2   r  )r   )pintrF   ro   r   r   r  UnitStrippedWarningQuantityr&   r  r   r%   r  )ra   r  r  arrrb   rI   rI   rJ   test_from_pint
  s    
z TestNumpyCoercion.test_from_pintc                 C  s   |t krtd dd l}tdddg}|jdddgdddggdddgd}tddg|}t|	 tddg| tj
| | d S )	NzCan't have 2D IndexVariablesr   r5   r4   r:   )r  rD   r2   r8   )r   rx   r  sparserF   ZdiagflatZCOOr   r&   r  r   r%   r  )ra   r  r  r  Zsparrrb   rI   rI   rJ   test_from_sparse
  s    
$z"TestNumpyCoercion.test_from_sparsec                 C  sd   |t krtd dd l}tdddg}|d||}t| |d| tj	|
 | d S )Nz6cupy in default indexes is not supported at the momentr   r5   r4   r:   r2   )r   rx   r  ZcupyrF   ro   r&   r  r   r%   r  )ra   r  cpr  rb   rI   rI   rJ   test_from_cupy
  s    
z TestNumpyCoercion.test_from_cupyc              	   C  s   dd l }dd l}tdddg}|jtdddg}t * tjd|jd |d|j	|dd	}W 5 Q R X |
 }t||d| tj| | d S r  )r1   r  rF   ro   r  r   r   r  r  r  r  r&   r   r%   r  )ra   r  r1   r  r  r   rb   rI  rI   rI   rJ   test_from_pint_wrapping_dask
  s    
z.TestNumpyCoercion.test_from_pint_wrapping_daskN)r   r   r   r  r,   r  r.   r  r/   r  r+   r  r  rI   rI   rI   rJ   r  
  s   



r  )rW   warns_under_pandas_version_twor   r   Fr  Tr   r   r   r  r  c                 C  s   |  S r   rI   rl   rI   rI   rJ   ry  -  rz  ry  )idsr(  r+  c              	   C  s   t | tjtjtjfrdgng }|rNtrNtjt	dd t
|| }W 5 Q R X n(t  td t
|| }W 5 Q R X |jjdkr|jtdkstn |jjjtdtdkstd S )	NrP   !non-nanosecond precision datetimeru   errorr  r   r   r  )rd   rF   r  r   r   r   r(   rx   r  r  r   r   r   r  rX   r  rV   rw   ro   r  rU  rV  rW   r  rC   rK   rI   rI   rJ    test_datetime_conversion_warning  s     

 r  c                  C  s   t jddddft t jddddft jddtddt dtdft t jddtddt dtdfg} | D ]4\}}tjtdd	 t	d
g|
|}W 5 Q R X q|jjdkr|jtdkstn |jjjt dtdkstd S )Nr   r5   r   r   r  r  r  r  ru   rP   r  r   r   )r   r   r   rU  rV  r  rx   r  r  r   r   rX   r  rF   rV   rw   ro   )ZcasesrD   rX   rK   rI   rI   rJ   1test_pandas_two_only_datetime_conversion_warningsD  s$     r  rO   r  r  c                 C  s   |  S r   rI   rl   rI   rI   rJ   ry  n  rz  c              	   C  s   t | tjtjfrdgng }|rJtrJtjtdd t	|| }W 5 Q R X n(t
  t
d t	|| }W 5 Q R X |jtdkstd S )NrP   "non-nanosecond precision timedeltaru   r  r   )rd   rF   r  r   r   r(   rx   r  r  r   r   r   r  rX   rV   r  rI   rI   rJ   !test_timedelta_conversion_warningc  s    

r  c               	   C  sR   t jdddd} tjtdd tdg| }W 5 Q R X |jtdksNt	d S )	Nr  r5   r   r   r  ru   rP   r   )
r   r   r   rx   r  r  r   rX   rF   rV   )rD   rK   rI   rI   rJ   1test_pandas_two_only_timedelta_conversion_warning}  s    r  )[
__future__r   r   r   r   r   r   textwrapr   ZnumpyrF   Zpandasr   rx   rU  Zpackaging.versionr	   Zxarrayr
   r   r   r   r   r   Zxarray.corer   r   r   Zxarray.core.commonr   r   r   Zxarray.core.indexingr   r   r   r   r   r   r   r   r   Zxarray.core.pycompatr   Zxarray.core.utilsr    Zxarray.core.variabler!   r"   Zxarray.testsr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r2  r  rw  rK   rL   r  rx  r  r  r  r  r  r  r  r  r  r   ro   r   rV  r   r  r  r   r   r  r  rI   rI   rI   rJ   <module>   s    ,@


	
       S         e
 . /IJ	