U
    Cvf+                     @  s2  d dl mZ d dlmZmZmZ d dlZd dlZ	d dl
Z
d dlmZmZ d dlmZmZ d dlmZmZ G dd dZe
jd	d
ded
dggdde	ddgggdd Zdd ZG dd dZG dd dZdd Zdd Zdd ZG dd dZ G dd dZ!ed d! Z"d"d# Z#d$d% Z$e
jd&d'd(ge%d)e%d)e%d)fd
d*d+ge%d)e%d)fd
d*ge%d)e%d)fd+d*ge%d)e%d,fd*dge%d)e%d-fd*ge%d)e%d)fgd.d/ Z&e
jd&d'gd*d*ge%d)fd*ge%d0fgd1d2 Z'e
jd3d(ge
j(d
d4d5d6e
j(d
dgd7d8d6e
j(d
dgd9d:d6e
j(d7d7d;d6e
j(d
d<gd=d>d6e
j(d?d?d@d6e
j(dddAd6e
j(d*d*dBd6gdCdDdAdEdFdGZ)dAdHdIdJZ*e
jd3e
j(ddAd6e
j(d*dBd6gdKdAdLdMdNZ+e
jd3e
j(dOdPd6e
j(d
dOgdQd6e
j(dOdgdRd6gdSdAdLdTdUZ,e
jd3d(ge
j(d
d4d5d6e
j(d
dgd7dVd6e
j(d*gdWdXd6e
j(d
d*gdWdYd6e
j(d
d*dgdZd[d6gd\dDdAdEd]d^Z-dAdHd_d`Z.e
jdag g fdgdgfdddbgdddbgfdggdgfddgdbdcggdddbdcgfdddbgdcggdddeggdddbdcdddegfgdfdg Z/dhdi Z0dS )j    )annotations)HashableIterableSequenceN)duck_array_opsutils)either_dict_or_kwargsiterate_nested)assert_array_equalrequires_daskc                   @  s   e Zd Zdd ZdS )	TestAliasc              	   C  sF   dd }t |d}d|jks"ttjtdd |  W 5 Q R X d S )Nc                   S  s   d S N r   r   r   ;/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/test_utils.py
new_method   s    z"TestAlias.test.<locals>.new_method
old_method
deprecatedmatch)r   alias__doc__AssertionErrorpytestZwarnsWarning)selfr   r   r   r   r   test   s
    zTestAlias.testN)__name__
__module____qualname__r   r   r   r   r   r      s   r   za, b, expectedab      c                 C  s\   t | g} t |g}t| t|}t|| |g}t|| |j|jksXt	d S r   )
nparraypdIndexappendr   maybe_coerce_to_strr
   dtyper   )r   r    expectedindexactualr   r   r   test_maybe_coerce_to_str   s    
r-   c                  C  sP   t ddg} tdg}t|| g}t d}t|| |j|jksLtd S )Nr   Za_long_string)	r#   r$   r%   r&   r   r(   r
   r)   r   )r   r+   r,   r*   r   r   r   *test_maybe_coerce_to_str_minimal_str_dtype(   s    

r.   c                   @  s   e Zd Zdd ZdS )TestArrayEquivc                 C  sV   t dtjdtdstt tjtjtjtds8tt dtjdtdrRtd S )Nr   )r)   r!   )r   Zarray_equivr#   r$   objectr   nanr   r   r   r   test_0d5   s    zTestArrayEquiv.test_0dN)r   r   r   r3   r   r   r   r   r/   4   s   r/   c                   @  sX   e 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dd ZdS )TestDictionariesT)Zautousec                 C  s&   ddd| _ ddd| _ddi| _d S )NABr   r    C)cr    r   Z)xyzr2   r   r   r   setup>   s    zTestDictionaries.setupc                 C  s   t ddstt tjtjs$tt dtds:tt dgtdgsTtt tdgdgsntt tddtd stt dtdrtd S )Nr   g                 ?)r   Z
equivalentr   r#   r1   r$   arangezerosr2   r   r   r   test_equivalentD   s     z TestDictionaries.test_equivalentc                 C  s   t | j| j d S r   )r   update_safety_checkr;   r<   r2   r   r   r   	test_safeM   s    zTestDictionaries.test_safec              	   C  s*   t t t| j| j W 5 Q R X d S r   )r   raises
ValueErrorr   rD   r;   r=   r2   r   r   r   test_unsafeQ   s    zTestDictionaries.test_unsafec                 C  s8   ddit | j| jksti t | j| jks4td S )Nr    r6   )r   Zcompat_dict_intersectionr;   r<   r   r=   r2   r   r   r   test_compat_dict_intersectionU   s    z.TestDictionaries.test_compat_dict_intersectionc              	   C  sN   ddddt | j| jks ttjtdd t | j| j W 5 Q R X d S )Nr5   r6   r8   r   r    r9   zGunsafe to merge dictionaries without overriding values; conflicting keyr   )	r   Zcompat_dict_unionr;   r<   r   r   rF   rG   r=   r2   r   r   r   test_compat_dict_unionY   s     z'TestDictionaries.test_compat_dict_unionc                 C  s.  i }d|d< t dddg|d< i }t dddg|d< d|d< t||sPtdddg|d< t||sntdddg|d< t||std |d	< t||rtt j|d	< t j|d	< t||stt j|d	< t j|d	< t||stt|}t||stdt d |d< t||r*td S )
Nr?   r   r!   r"   r    r@   g       @g      @r9   )	r#   r$   r   Z
dict_equivr   r1   infdictrA   )r   r;   r<   r   r   r   test_dict_equivb   s.    



z TestDictionaries.test_dict_equivc              	   C  s   t | j}tt d|d< W 5 Q R X tt |d= W 5 Q R X tt || j W 5 Q R X |j	| jksxt
t|dkst
d S )Nbarfoor   )zFrozen({'a': 'A', 'b': 'B'})zFrozen({'b': 'B', 'a': 'A'}))r   ZFrozenr;   r   rF   	TypeErrorAttributeErrorupdater<   mappingr   repr)r   r;   r   r   r   test_frozen{   s    zTestDictionaries.test_frozenN)r   r   r   r   Zfixturer>   rC   rE   rH   rI   rK   rN   rV   r   r   r   r   r4   =   s   

		r4   c                  C  s:   t d} t| dkstt| ts(tt| tr6td S )NrP   )r   
ReprObjectrU   r   
isinstancer   str)objr   r   r   test_repr_object   s    
r[   c                  C  s   t d} t d}t d}d}| |ks.t| |ks:t| |ksFtt| t|ksZtt| t|ksntt| t|kstd S )NrP   rO   )r   rW   r   hash)Zo1Zo2Zo3Zo4r   r   r   test_repr_object_magic_methods   s    


r]   c                   C  s<   t dstt dstt dr*tt dr8td S )Nzhttp://example.comzhttps://example.comz http://example.comz
example.nc)r   Zis_remote_urir   r   r   r   r   test_is_remote_uri   s    r^   c                   @  s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )Test_is_uniform_and_sortedc                 C  s   t tdstd S )N   )r   is_uniform_spacedr#   rA   r   r2   r   r   r   test_sorted_uniform   s    z.Test_is_uniform_and_sorted.test_sorted_uniformc                 C  s   t dddgrtd S )Nr!   Y   r   ra   r   r2   r   r   r   test_sorted_not_uniform   s    z2Test_is_uniform_and_sorted.test_sorted_not_uniformc                 C  s   t dddgrtd S )Nr!   r?   re   r2   r   r   r   test_not_sorted_uniform   s    z2Test_is_uniform_and_sorted.test_not_sorted_uniformc                 C  s   t dddgrtd S )N   r!   rd   re   r2   r   r   r   test_not_sorted_not_uniform   s    z6Test_is_uniform_and_sorted.test_not_sorted_not_uniformc                 C  s   t ddgstd S )Nr   g333333?re   r2   r   r   r   test_two_numbers   s    z+Test_is_uniform_and_sorted.test_two_numbersc                 C  s   t jdddgddstd S )Nr   g
ףp=
?r"   g?)Zrtolre   r2   r   r   r   test_relative_tolerance   s    z2Test_is_uniform_and_sorted.test_relative_toleranceN)	r   r   r   rb   rf   rh   rj   rk   rl   r   r   r   r   r_      s   r_   c                   @  s   e Zd Zdd ZdS )Test_hashablec                 C  sF   dD ]}t |stqddgddgddifD ]}t |r.tq.d S )N)Fr!   )r"   )r?   ri   Zfourr`      Zseven8	   Zten)r   Zhashabler   )r   vr   r   r   test_hashable   s    zTest_hashable.test_hashableN)r   r   r   rr   r   r   r   r   rm      s   rm   c                  C  s,   dd l m}  | jddd}t|r(td S )Nr      ri   )chunks)Z
dask.arrayr$   rA   r   Z	is_scalarr   )dar<   r   r   r   test_dask_array_is_scalar   s    rv   c               	   C  s   d} dddd| di}ddd}t || g}t|dks<t| |ksHt| D ]\}}|| |ksPtqPtt ||   W 5 Q R X tt || = W 5 Q R X d S )NZ_hidden_keyr   r!   r    r"   r?   r7   )r   ZHiddenKeyDictlenr   itemsr   rF   KeyError)Z
hidden_keydataZdata_expectedZhkdkrq   r   r   r   test_hidden_key_dict   s    
r|   c               	   C  s   t tddd d} tdd}| |ks(tt d tddd} tdd}| |ksPttjtdd t tddtddd} W 5 Q R X d S )Nr!   r   rP   r   )r   rM   r   r   rF   rG   )resultr*   r   r   r   test_either_dict_or_kwargs   s    

r   suppliedall_r*   abc.r9   ZcabZacbc                 C  s    t t| |}||kstd S r   )listr   
infix_dimsr   )r   r   r*   r~   r   r   r   test_infix_dims   s    r   Zaacc              	   C  s*   t t tt| | W 5 Q R X d S r   )r   rF   rG   r   r   r   )r   r   r   r   r   test_infix_dims_errors   s    r   dimr}   rY   )idr7   Zlist_of_str)r   r!   Z
list_mixedZtuple_of_strr    r9   )r   r   Zlist_with_tuple)r   Ztuple_of_tupleNoneZellipsiszstr | Iterable[Hashable] | Noneztuple[Hashable, ...])r   r*   returnc                 C  s$   d}t j| |dd}||ks td S )Nr   r    r!   r   FZreplace_noner   
parse_dimsr   r   r*   all_dimsr,   r   r   r   test_parse_dims   s    r   )r   c                  C  s,   d} ddh}t || }t||ks(td S )Nr   r   r!   )r   r   setr   )r   r   r,   r   r   r   test_parse_dims_set  s    r   zNone | ellipsis)r   r   c                 C  s$   d}t j| |dd}||ks td S )Nr   Tr   r   )r   r   r,   r   r   r   test_parse_dims_replace_none  s    r   r;   Zstr_missingZlist_missing_oneZlist_missing_allzstr | Iterable[Hashable]c              	   C  s2   d}t jtdd tj| |dd W 5 Q R X d S )Nr   z'x'r   TZcheck_exists)r   rF   rG   r   r   )r   r   r   r   r   test_parse_dims_raises%  s    	r   r   rJ   Zlist_only_ellipsisZlist_with_ellipsis)r   r9   r    Zlist_with_middle_ellipsisz#str | Sequence[Hashable | ellipsis]c                 C  s    d}t | |}||kstd S )NrJ   )r   parse_ordered_dimsr   r   r   r   r   test_parse_ordered_dims3  s    r   c               	   C  s   d} t jtdd tjd| dd W 5 Q R X t jtdd tdd	g| d
  W 5 Q R X t jtdd tdd	dd	g|  W 5 Q R X d S )NrJ   z'x' do not existr   r;   Tr   zrepeated dimsr   .r}   zMore than one ellipsisr    )r   rF   rG   r   r   )r   r   r   r   test_parse_ordered_dims_raisesF  s    r   znested_list, expectedr?   ri   r`   rn   c                 C  s   t t| |kstd S r   )r   r	   r   )Znested_listr*   r   r   r   test_iterate_nestedS  s    r   c                  C  s>   t  dkstt jdddks$tdd } |  dks:td S )Nr!   TZ	test_moder"   c                   S  s   t jddS )NTr   )r   find_stack_levelr   r   r   r   ff  s    z test_find_stack_level.<locals>.fr?   )r   r   r   )r   r   r   r   test_find_stack_levelb  s    r   )1
__future__r   typingr   r   r   Znumpyr#   Zpandasr%   r   Zxarray.corer   r   Zxarray.core.utilsr   r	   Zxarray.testsr
   r   r   markZparametrizer$   r&   r-   r.   r/   r4   r[   r]   r^   r_   rm   rv   r|   r   r   r   r   paramr   r   r   r   r   r   r   r   r   r   r   r   <module>   s    &
	M

 
	 
	
&
