
    dL                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dl	m
Z
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 d dlmZ d dlmZmZmZmZ d d	lmZ  G d
 d          Z  G d d          Z!d!dZ"e G d d                      Z#e G d d                      Z$ G d dee          Z%e G d de                      Z& G d d          Z'd Z(d Z)ed             Z*d!dZ+d Z,d!d Z-dS )"    )annotationsN)DatasetSerializationWarningVariablecftime_rangecodingconventionsopen_dataset)WritableCFDataStore)InMemoryDataStore)	decode_cf)assert_identical)assert_array_equalrequires_cftimerequires_daskrequires_netCDF4)CFEncodedBasec                      e Zd ZddZdS )TestBoolTypeArrayreturnNonec                    t          j        g dd          }t          j                            |          }|j        t          k    sJ t          |t          j        g dt                               d S )N)   r   r   r   r   i1dtype)TFTTF)nparrayr   	variablesBoolTypeArrayr   boolr   )selfxbxs      =lib/python3.11/site-packages/xarray/tests/test_conventions.pytest_booltype_arrayz%TestBoolTypeArray.test_booltype_array!   sp    H___D111++A..x42rx(H(H(HPTUUUVVVVV    Nr   r   )__name__
__module____qualname__r&    r'   r%   r   r       s.        W W W W W Wr'   r   c                      e Zd ZddZdS )TestNativeEndiannessArrayr   r   c                   t          j        dd          }t          j        dd          }t          j                            |          }|j        |j        k    sJ |j        |d d          j        k    sJ t          ||           d S )N   z>i8r   int64)r   aranger   r   NativeEndiannessArrayr   r   )r"   r#   expectedas       r%   testzTestNativeEndiannessArray.test)   s    Iau%%%9Qg...22155w(.((((w(111++++++1h'''''r'   Nr(   )r)   r*   r+   r6   r,   r'   r%   r.   r.   (   s(        ( ( ( ( ( (r'   r.   r   r   c            	        t          dgt          j        t          j        dgddi          } t          dgt          j        d          dddd          }t	          j        d	
          5 }t          j        d|          }t          ||            dt          |d         j
                  v sJ 	 d d d            n# 1 swxY w Y   t          dgt          j        d          ddi          } t          dgt          j        d          dt          j        t          j        d          }t          j        d|          }t          ||            t          dgt          j        d          dt          j        t          j                  t          j        t          j                  d          }t          j        d|          }t          ||            d S )Nt   unitsfoobar   r   r   )r:   missing_value
_FillValueTrecordhas multiple fill
   )r   r   nanr2   warningscatch_warningsr	   decode_cf_variabler   strmessagefloat32)r4   varwactuals       r%   2test_decode_cf_with_conflicting_fill_missing_valuerM   2   s   2Wh4GHHH
	ry||x!STUU C 
	 	-	-	- 8/S99***"c!A$,&7&7777778 8 8 8 8 8 8 8 8 8 8 8 8 8 8
 ry}}w.ABBH
	
	"RV26JJ C
 +C55FVX&&&
	
	"Z//*RV,,	
 	
 C +C55FVX&&&&&s   )AB::B>B>c                      e Zd ZddZddZddZddZddZej	        
                    d          dd	            Zej	        
                    d          dd
            Zedd            ZdS )TestEncodeCFVariabler   r   c           
        t          dgt          j        dd          ddi          t          dgt          j        dg          ddi          t          dgg dd	d
id	di          t          dgg ddd
iddi          g}|D ]G}t	          j        t                    5  t          j        |           d d d            n# 1 swxY w Y   Hd S )Nr8   
2000-01-01r<   periodsr:   r;   z1 dayr   r   r9   
add_offsetr   r9   r>   )	r   pd
date_rangeto_timedeltapytestraises
ValueErrorr	   encode_cf_variable)r"   invalid_varsrJ   s      r%   test_incompatible_attributesz1TestEncodeCFVariable.test_incompatible_attributesU   s+   r}\1===?R  cUBOWI66(8KLLcUIIIa'8<:KLLcUIIIa'8<:KLL
   	4 	4Cz** 4 4.s3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4	4 	4s   B>>C	C	c           	     
   t          dgt          j        t          j        dddg                    }ddi|_        t          j        t          d          5  t          j	        |           d d d            d S # 1 swxY w Y   d S )	Nr#   r   r9   r<   r   int16z!floating point data as an integermatch)
r   r   r   rC   encodingrY   warnsWarningr	   r\   )r"   vs     r%   test_missing_fillvaluez+TestEncodeCFVariable.test_missing_fillvalueb   s    cUBHbfaA%67788w'
\')LMMM 	. 	.*1---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   A88A<?A<c                &   t          j        d          }t          j        d          }t          j        d          }t          ddg|                    d          i fddg|                    d          i fddg|                    d          i fddg|                    d          i fddg|                    d          i fddg|                    d          i fg d	|d
difg d|d
difg d|d
difddgddifd
          }t	          j        |          }t	          j        |          \  }}|d         j                            d
d          }|d         j                            d
d          }|d         j                            d
d          }	t          |
                                          ddhk    sJ t          |
                                          ddhk    sJ t          |	
                                          ddhk    sJ d
|vsJ d S )N)r   r0   r<   )r      r<   )r   r0      x1y1r   x2y2)timerk   rl   coordinatesz	lon1 lat1)ro   rm   rl   z	lon2 lat2)ro   rk   rn   z	lon3 lat3ro   g        r:   zhours since 2017-01-01)
lon1lon2lon3lat1lat2lat3foo1foo2foo3ro   rw    rx   ry   rt   rq   ru   rr   rv   rs   )r   zerosr   squeezer	   r   encode_dataset_coordinatesattrsgetsetsplit)
r"   zeros1zeros2zeros3origencr~   foo1_coordsfoo2_coordsfoo3_coordss
             r%   !test_multidimensional_coordinatesz6TestEncodeCFVariable.test_multidimensional_coordinatesh   sF    )$$)$$)$$v~~a'8'8"=v~~a'8'8"=v~~a'8'8"=v~~a'8'8"=v~~a'8'8"=v~~a'8'8"=---v{7ST---v{7ST---v{7ST#2J(KL 
 
 $T** ;DAA
U&k'++M2>>&k'++M2>>&k'++M2>>;$$&&''FF+;;;;;;$$&&''FF+;;;;;;$$&&''FF+;;;;;E))))))r'   c           	        t          ddt          j        d          ddifidt          j        d          fdt          j        d          fdt          j        d          fd          }t          j        |          \  }}|d         j                            dd          }t          |                                          h d	k    sJ d|vsJ d S )
Nvaluesro   r9   rp   ztime lon lat)ro   latloncoordsrz   >   r   r   ro   )	r   r   r{   r	   r}   r~   r   r   r   )r"   r   r   r~   values_coordss        r%   test_var_with_coord_attrz-TestEncodeCFVariable.test_var_with_coord_attr   s     m^-LMN!-,, 
 
 
 !;DAA
UH+//rBB=&&(())-C-C-CCCCCE))))))r'   c                   t          g ddg dfdg dfddg dfdg dfd	          }d
|d         j        d<   d|d         j        d<   t          j        |          \  }}|d         j        d         d
k    sJ |d         j        d         dk    sJ d|d         j        d<   t          j        t          d          5  t          j        |           d d d            d S # 1 swxY w Y   d S )NrT   r#   )r0   ri      )   	   rB   )r#   yzr   r9   r<   )r<   r0   ri   r5   b)r   	data_varsr   r5   rp   r   r   fooz!'coordinates' found in both attrsra   )r   rc   r	   r}   r~   rY   rZ   r[   r"   r   r   _s       r%   &test_do_not_overwrite_user_coordinatesz;TestEncodeCFVariable.test_do_not_overwrite_user_coordinates   sa   "#yyy)9jjj@QRR ))),C3CDD
 
 
 -0S	=),/S	=)7==Q3x~m,33333x~m,3333).S	&]:-QRRR 	9 	924888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   ?C!!C%(C%z ignore:Converting non-nanosecondc                n   t          ddddt          j        dt          j                  i          }d |d         j        d<   t          j        |          \  }}d|d         j        vsJ d|d         j        vsJ |d	         j                            d          dk    sJ d|d	         j        vsJ d S 
Nr   r   r8   z2004-11-01T00:00:00r   r   r5   rp   r   )	r   r   r   
datetime64r~   r	   r}   rc   r   r   s       r%   (test_emit_coordinates_attribute_in_attrsz=TestEncodeCFVariable.test_emit_coordinates_attribute_in_attrs   s    !"7r}MMMN
 
 

 *.S	&7==Q CHN2222CH$55555 3x~!!-00C7777CH$5555555r'   c                n   t          ddddt          j        dt          j                  i          }d |d         j        d<   t          j        |          \  }}d|d         j        vsJ d|d         j        vsJ |d	         j                            d          dk    sJ d|d	         j        vsJ d S r   )	r   r   r   r   rc   r	   r}   r~   r   r   s       r%   +test_emit_coordinates_attribute_in_encodingz@TestEncodeCFVariable.test_emit_coordinates_attribute_in_encoding   s    !"7r}MMMN
 
 

 -1S	=)7==Q CHN2222CH$55555 3x~!!-00C7777CH$5555555r'   c                .   t          dt          j        ddgt                                                              }t          j        t          d          5  t          j	        |          }d d d            n# 1 swxY w Y   t          ||           d S )Nr#   r   barr   zdask array with dtype=objectra   )r   r   r   objectchunkrY   rd   r   r	   r\   r   )r"   originalencodeds      r%   test_string_object_warningz/TestEncodeCFVariable.test_string_object_warning   s    FBHeU^6$J$J$JKKQQSS\.6TUUU 	? 	?!4X>>G	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?7+++++s   A::A>A>Nr(   )r)   r*   r+   r^   rg   r   r   r   rY   markfilterwarningsr   r   r   r   r,   r'   r%   rO   rO   S   s        4 4 4 4. . . . *  *  *  *D* * * *&9 9 9 9 [ BCC6 6 6 DC6" [ BCC6 6 6 DC6" , , , ], , ,r'   rO   c                      e Zd ZddZddZddZddZddZddZe	j
                            d	          dd
            Zedd            Zedd            Zedd            Zedd            ZddZdS )TestDecodeCFr   r   c                   t          dg dddifdg ddddfdg d	d
difd          }t          ddg dddifit          j        dd          dddt          j        gfd          }t          j        |          }t          ||           d S )Nr8   rT   r:   days since 2000-01-01r   r   r   r   r   rp   r:   r0   rB   r>   r   r8   r   r   r   rQ   r<   rR   g      @g      $@)r8   r   r   rV   rW   r   rC   r	   r   r   r"   r   r4   rL   s       r%   test_datasetzTestDecodeCF.test_dataset   s    999w0G&HIYYYe(L(LM===<*>? 
 
 S)))gu%567]<;;;Crv./ 
 
 &x006*****r'   c                ~    t          ddddgddifi          }t          j        |          }t          ||           d S )Nr   r8   r   r9   rp   invalid)r   r	   r   r   r"   r   rL   s      r%   test_invalid_coordinatesz%TestDecodeCF.test_invalid_coordinates   sJ    EC!Q-1K#LMNN&x006*****r'   c                    t          dddgddifdddgfd          }t          j        |          }|j        j        d         dk    sJ d S )	Nr8   r   r9   rp   r#   rj   r0   )r   r#   )r   r	   r   r   rc   r   s      r%   test_decode_coordinatesz$TestDecodeCF.test_decode_coordinates   sg    1a&=#"67sQFmLL
 
 &x00z"=1S888888r'   c                   t          dt          j        d          ddi          }t          dt          j        d                    }t          j                                                            |          }t          ||           d S )Nr,   r   r   r1   )rc   )	r   r   int32r1   r   r   NonStringCoderencoder   r   s       r%   test_0d_int32_encodingz#TestDecodeCF.test_0d_int32_encoding   sr    Bw6HIIIB,,!002299(CC6*****r'   c           	        t          dgg ddt          j        ddg          i          }t          dgt          j        t          j        dgi           }t	          j        d          5 }t          j        d|          }t          ||           d	t          |d         j
                  v sJ 	 d d d            d S # 1 swxY w Y   d S )
Nr8   rT   r=   r   r   r9   Tr?   rA   )r   r   r   rC   rD   rE   r	   rF   r   rG   rH   )r"   r   r4   rK   rL   s        r%   +test_decode_cf_with_multiple_missing_valuesz8TestDecodeCF.test_decode_cf_with_multiple_missing_values   s   SE999!Q@P@P.QRRSEBFBFA#6;;$D111 	<Q 3CBBFXv...&#adl*;*;;;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   )AB;;B?B?c           	        t          dg dddifdg dddifdg d	g d
g dgddifdg dddifd          }t          t          j        dd          dg d	g d
g dgddifdddt          j        gfd          }t          j        |d          }t          j        |d          }t          ||           t          ||           d S )Nr8   rT   r:   r   r#   )r   r   r   km)r8   r#   r   )r   r   r   )r9   r9   r9   r   r   r>   r   )r8   r#   r   r   rQ   r<   rR   r0   rB   r   r   )drop_variablesr   )r"   r   r4   rL   actual2s        r%   "test_decode_cf_with_drop_variablesz/TestDecodeCF.test_decode_cf_with_drop_variables  s3   999w0G&HI999wo6YY			9995e$
 ===<*>?	 	
 
 ]<;;;YY			9995e$
 Ar26?+ 

 

 &xGGG'EEE6***7+++++r'   z&ignore:Ambiguous reference date stringc                    t          ddddgddifi          }t          j        t          d          5  t	          |           d d d            d S # 1 swxY w Y   d S )Nro   r   r   r:   zfoobar since 123unable to decode timera   r   rY   rZ   r[   r   )r"   dss     r%   &test_invalid_time_units_raises_eagerlyz3TestDecodeCF.test_invalid_time_units_raises_eagerly$  s    fv1v9K/LMNOO]:-EFFF 	 	bMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc           	     r   ddd}t          j                    5  t          j        dd           t          t	          ddddg|fi                    }d	t          |          v sJ 	 d d d            n# 1 swxY w Y   d
di}t          t	          ddddg|fi                    }dt          |          v sJ d S )Nzdays since 0001-01-01noleap)r:   calendarignorer   ro   r   r   z(time) objectr:   zdays since 1900-01-01z(time) datetime64[ns])rD   rE   r   r   r   repr)r"   r~   r   s      r%   (test_dataset_repr_with_netcdf4_datetimesz5TestDecodeCF.test_dataset_repr_with_netcdf4_datetimes*  s    2xHH$&& 	/ 	/#H.EFFF7FVaVU,C#DEEFFB"d2hh.....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/
 12w!Q(?@AABB&$r((222222s   AA22A69A6c           
        ddl m } t          dddgi          }d}t          |          |j        _        t          j                    5  t          j        dd	           t          j	        |          }d d d            n# 1 swxY w Y   t          j         |d
dddd           |ddddd          g          }t          |j        j        |           d S )Nr   )datetimero   iB{ r   zdays since 2000-01-01 00:00:00)r:   r   r   i  r   i  rB      )r   r   dictro   r~   rD   rE   r   r	   r   r   r   r   r   )r"   r   r   r:   
ds_decodedr4   s         r%   -test_decode_cf_datetime_transition_to_invalidz:TestDecodeCF.test_decode_cf_datetime_transition_to_invalid7  s'    	&%%%%%Va^455505)))$&& 	3 	3#H.EFFF$.r22J	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 8XXdAq!Q77$BPQST9U9UVWW:?18<<<<<s   
*B  BBc           
        dd l m t          dg dddifdg dddd	fd
ddgfddgddifdg dddifd                                          }t	          j        |          t                     t          fdj        	                                D                       sJ t          t	          j        |                                                     d S )Nr   r8   rT   r:   r   r   r   r   r   string2   a   br#   s   abc	_Encodingzutf-8r   r>   r   )r8   r   r   bazr   c              3  d   K   | ]*\  }}|j         vt          |j        j                  V  +d S N)xindexes
isinstancedataArray).0namerJ   dadecodeds      r%   	<genexpr>z8TestDecodeCF.test_decode_cf_with_dask.<locals>.<genexpr>V  sO       
 
c7+++ sx**++++
 
r'   )
dask.arrayr   r   r   r	   r   printallr   itemsr   compute)r"   r   r   r   s     @@r%   test_decode_cf_with_daskz%TestDecodeCF.test_decode_cf_with_daskG  s9   999w0G&HIYYYe(L(LM!D$<0x+w)?@===<*>? 
 
 %'' 	 '11g 
 
 
 
 
$.4466
 
 
 
 
 	
 	
 	

 	+"7"A"A"I"I"K"KLLLLLr'   c           	         t          j        i ddiddddig ddid	          }t          t          j        |                                          t          j        |                                                     d S )
Nro   r0   
average_T1)ro   r:   zdays since 1958-01-01 00:00:00)g    f@g    }@g    P@g     @g    @)dimsr~   r   r   r   r   )r   	from_dictr   r	   r   r   )r"   r   s     r%   test_decode_dask_timesz#TestDecodeCF.test_decode_dask_times]  s    $  )")+K!L M M M# #
 

 
 	!(.."2"233!(++1133	
 	
 	
 	
 	
r'   c           	        t          j        t          j        g dd          dddidt          j        g dd          ddd	idd
dddddt          j        d          did          }t          j        |          }|j        j        t          j        d          k    sJ |j	        j        t          j        d          k    sJ t          j        |d          }|j        j        t          j        d          k    sJ |j	        j        t          j        d          k    sJ t          j        |dd          }|j        j        t          j        d          k    sJ |j	        j        t          j        d          k    sJ t          j        |dd          }|j        j        t          j        d          k    sJ |j	        j        t          j        d          k    sJ d S )Nr   r1   r   	timedeltar:   days)r   r   r~   ro   r   )r   ro   r<   )ro   r   r5   )r<   r<   )r   r   r   zm8[ns]zM8[ns]F)decode_timesT)r   decode_timedelta)
r   r   r   r   onesr	   r   r   r   ro   )r"   r   dscs      r%   test_decode_cf_time_kwargsz'TestDecodeCF.test_decode_cf_time_kwargsq  s    !#' B B B +")6!2" " !#' B B B &")+B!C   "#33"7QQ 
 
* #B''}"bhx&8&88888x~(!3!33333#BU;;;}"bhw&7&77777x~'!2!22222#BTERRR}"bhw&7&77777x~(!3!33333#BUTRRR}"bhx&8&88888x~'!2!2222222r'   Nr(   )r)   r*   r+   r   r   r   r   r   r   rY   r   r   r   r   r   r   r   r   r   r  r,   r'   r%   r   r      sW       + + + +$+ + + +9 9 9 9+ + + +< < < <, , , ,: [ HII   JI
 
3 
3 
3 _
3 = = = _= M M M ]M* 
 
 
 ]
&!3 !3 !3 !3 !3 !3r'   r   c                      e Zd Zd ZdS )CFEncodedInMemoryStorec                p    t           j                            d          }|                    |          }|S )zencode one variableT)allows_unicode)r   stringsEncodedStringCoderr   )r"   rJ   coders      r%   encode_variablez&CFEncodedInMemoryStore.encode_variable  s0    111FFll3
r'   N)r)   r*   r+   r  r,   r'   r%   r  r    s#            r'   r  c                      e Zd Zej        d             Zej        	 dd            Zej        	                    d          dd            Z
dd	Zdd
ZddZdS )TestCFEncodedDataStorec              #  *   K   t                      V  d S r   )r  r"   s    r%   create_storez#TestCFEncodedDataStore.create_store  s      $&&&&&&&r'   NFc              #  p   K   |i }|i }t                      } |j        |fi | t          |fi |V  d S r   )r  dump_to_storer
   )r"   r   save_kwargsopen_kwargsallow_cleanup_failurestores         r%   	roundtripz TestCFEncodedDataStore.roundtrip  sf       KK&((500K000500K0000000r'   z;cannot roundtrip coordinates yet for CFEncodedInMemoryStorer   r   c                    d S r   r,   r  s    r%   test_roundtrip_coordinatesz1TestCFEncodedDataStore.test_roundtrip_coordinates      r'   c                    d S r   r,   r  s    r%   "test_invalid_dataarray_names_raisez9TestCFEncodedDataStore.test_invalid_dataarray_names_raise  r  r'   c                    d S r   r,   r  s    r%   test_encoding_kwargz*TestCFEncodedDataStore.test_encoding_kwarg  s	     	r'   c                    d S r   r,   r  s    r%   &test_encoding_kwarg_fixed_width_stringz=TestCFEncodedDataStore.test_encoding_kwarg_fixed_width_string  r  r'   )NNFr(   )r)   r*   r+   
contextlibcontextmanagerr  r  rY   r   skipr  r  r  r!  r,   r'   r%   r  r    s        ' ' ' NS	1 	1 	1 	1 [STT   UT      
     r'   r  c                      e Zd ZddZdS )"TestDecodeCFVariableWithArrayUnitsr   r   c           	         t          dgg ddt          j        dgt                    i          }t	          j        d|          }t          ||           d S )Nr8   r   r:   r;   r   test2)r   r   r   r   r	   rF   r   )r"   rf   	v_decodeds      r%   (test_decode_cf_variable_with_array_unitszKTestDecodeCFVariableWithArrayUnits.test_decode_cf_variable_with_array_units  sW    cUIII8*F1S1S1S'TUU27A>>	I&&&&&r'   Nr(   )r)   r*   r+   r*  r,   r'   r%   r&  r&    s(        ' ' ' ' ' 'r'   r&  c                     t          dgt          j        dd                    } t          j        d|           }|j        i k    sJ t          ||            d S )Nro   1Dr9   rR   )r   rV   timedelta_ranger	   rF   rc   r   variabler   s     r%   #test_decode_cf_variable_timedelta64r0    s_    ""4T1"E"E"EFFH,VX>>Gr!!!!Wh'''''r'   c                     t          dgt          j        dd                    } t          j        d|           }|j        i k    sJ t          ||            d S Nro   2000r9   rR   )r   rV   rW   r	   rF   rc   r   r.  s     r%   "test_decode_cf_variable_datetime64r4    s^    "-"B"B"BCCH,VX>>Gr!!!!Wh'''''r'   c                     t          dgt          dd                    } t          j        d|           }|j        i k    sJ t          ||            d S r2  )r   r   r	   rF   rc   r   r.  s     r%   test_decode_cf_variable_cftimer6    s\    ,vq"A"A"ABBH,VX>>Gr!!!!Wh'''''r'   c                     t          dgt          j        t          j        dgdt          j        i          } t          j        d|           }t          ||            d S )Nr8   r9   r:   )r   r   rC   r	   rF   r   )rJ   rL   s     r%   test_scalar_unitsr8    sO    
C526261-/@
A
AC+C55FVS!!!!!r'   c                     t          dg dddifi          } t          j        t          d          5  t	          |            d d d            d S # 1 swxY w Y   d S )Nr   g yhGr:   r   z#Failed to decode variable 'invalid'ra   r   )r   s    r%   +test_decode_cf_error_includes_variable_namer:    s    	)b$2I(JKL	M	MB	z)N	O	O	O  "                 s   AAAc            	        t          dgt          j        ddgt          j                            t                                        } t          j        |           }|j	        j
        j        dk    sJ t          j                            |j	        j
                  t          k    sJ t          dgt          j        g t          j                            t                                        } t          j        |           }|j	        j
        j        dk    sJ t          j                            |j	        j
                  t          k    sJ d S )Nr#   r5   r   r   O)r   r   r   r   r	  create_vlen_dtyperG   r	   r\   r   r   kindcheck_vlen_dtype)rf   	encoded_vs     r%   'test_encode_cf_variable_with_vlen_dtyperA    s   	rxc
&.*J*J3*O*OPPP	 	A .q11I>$++++>**9>+?@@CGGGG 	#6>+K+KC+P+PQQQRRA.q11I>$++++>**9>+?@@CGGGGGGr'   r(   ).
__future__r   r"  rD   numpyr   pandasrV   rY   xarrayr   r   r   r   r   r	   r
   xarray.backends.commonr   xarray.backends.memoryr   xarray.conventionsr   xarray.testingr   xarray.testsr   r   r   r   xarray.tests.test_backendsr   r   r.   rM   rO   r   r  r  r&  r0  r4  r6  r8  r:  rA  r,   r'   r%   <module>rL     s6   " " " " " "                                7 6 6 6 6 6 4 4 4 4 4 4 ( ( ( ( ( ( + + + + + +            5 4 4 4 4 4W W W W W W W W( ( ( ( ( ( ( (' ' ' 'B @, @, @, @, @, @, @, @,F z3 z3 z3 z3 z3 z3 z3 z3z    02C             ]      F' ' ' ' ' ' ' '( ( (( ( ( ( ( (" " " "  H H H H H Hr'   