U
    Cvf~                    @  sN  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZmZmZmZmZ d dlZd dlZd dlZd dl m!Z! d dl"m#Z# d dl$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/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZA d dlBmCZC d dlDmEZE d dlFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZa d dlbmcZcmdZdmeZe d dlfmgZgmhZhmiZi zd dljZkW n elk
r^   Y nX zd dlmZmd dlnmoZp W n elk
r   Y nX dZqzd dlrmsZs dZqW n elk
r   dZsY nX dZtzd dlumvZvmwZw dZtW n elk
r   dZwY nX ej	dkZxey ZzeEdZ{er*d dl|m}Z}m~Z~ dd d!d"Zdd d#d$Zdd d%d&Zdd d'd(Zdd d)d*Zdd d+d,Zdd d-d.Zdd d/d0Zdd d1d2Zdd d3d4Zdd d5d6ZG d7d8 d8ZG d9d: d:ZG d;d< d<ZG d=d> d>eZG d?d@ d@eZe ZejddBdCdDdEdFdGZejddHdBdCdIdJdKdLZG dMdN dNeZeZG dOdP dPeZeZG dQdR dRZeZeUejdSG dTdU dUeZeaG dVdW dWeZeaG dXdY dYeZeaG dZd[ d[eZG d\d] d]eZejjet d^d_G d`da daeZejjet d^d_G dbdc dceZejjet d^d_G ddde deeZeaeVdfd dgdhZe_G didj djeeZe_G dkdl dleeZe_G dmdn dneeZeZG dodp dpeeZeZG dqdr dreeZe`G dsdt dteeZeWeZejduG dvdw dweZeWeZG dxdy dyZeWG dzd{ d{eZeWeUejdSG d|d} d}eZejd~ddddgddd Zejddgddd Zejddgddd Zejddgddd Zejddgddd Zdd ZeUejdudd ZeZeUdfd ddZeZeUdfd ddZe`eUG dd dZeUe_eZG dd deZe`e\ejdG dd dZeRe`e\G dd deZe_e]G dd deeZeSG dd dZe[ejdG dd dZe^ejddddezezddfddZe^G dd dZG dd dZG dd dZeZG dd dZe`G dd dZe`dfd ddZe`dfd ddZe`dfd ddZdd Ze`ejdeedfd ddZeTe`ejdeeejdddgdfd ddƄZeTe`ejdecejddddgdfd ddɄZe`ejdeedfd dd˄Ze`ejdeeejdddgdfd dd̈́Ze`ejdedejddddgdfd ddτZejddd~gdfd dd҄Zeadfd ddԄZeadfd ddքZeaeVejdSdfd dd؄ZeWeZddfdڜdd܄ZeaeUejdddi ddiddidddgddfdڜddZeaeUejdddi ddiddidddgejdddfdڜddZdd ZeZddfdڜddZe_ddfdڜddZeWddfdڜddZeZejdeejfdfd ddZeaeZG dd dZeZeUdd ZdS )    )annotationsN)	ExitStack)BytesIO)Path)TYPE_CHECKINGAnyFinalIteratorcast)Version)OutOfBoundsDatetime)		DataArrayDatasetbackendsload_dataarrayload_datasetopen_dataarrayopen_datasetopen_mfdatasetsave_mfdataset)robust_getitem)H5netcdfBackendEntrypoint)_nc3_dtype_coercions)NetCDF4BackendEntrypoint_extract_nc4_variable_encoding)PydapDataStore)ScipyBackendEntrypoint)SerializationWarning)encode_dataset_coordinates)indexing)set_options)
array_type)	arm_xfailassert_allcloseassert_array_equalassert_equalassert_identicalassert_no_warningshas_daskhas_h5netcdf_0_12has_netCDF4	has_scipymocknetworkrequires_cfgribrequires_cftimerequires_daskrequires_fsspecrequires_h5netcdfrequires_h5netcdf_0_12requires_irisrequires_netCDF4requires_pseudonetcdfrequires_pydaprequires_pyniorequires_rasteriorequires_scipyrequires_scipy_or_netCDF4requires_zarr)_ALL_CALENDARS_NON_STANDARD_CALENDARS_STANDARD_CALENDARS).create_append_string_length_mismatch_test_datacreate_append_test_datacreate_test_dataF)KVStoreT)DirectoryStoreV3	KVStoreV3win32dask)T_NetcdfEngineT_NetcdfTypesr   returnc                 O  s$   t tjtjtd| f||S )Ndata)r   ospathjoindirname__file__)nameargskwargs rU   >/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/test_backends.pyopen_example_dataset   s    rW   c                 O  s   t dd | D f||S )Nc                 S  s$   g | ]}t jt jtd |qS )rL   )rM   rN   rO   rP   rQ   ).0rR   rU   rU   rV   
<listcomp>   s     z*open_example_mfdataset.<locals>.<listcomp>)r   )namesrS   rT   rU   rU   rV   open_example_mfdataset   s    r[   c                  C  sF   t jt jt jdddgt jd} ddt ddd}td	d
| i |fiS )N
   333333$@ffffff$@dtype皙?i2)
_FillValue
add_offsetscale_factorr`   xt)nparraynanfloat32r   )rg   encodingrU   rU   rV   create_masked_and_scaled_data   s    rn   c               	   C  s:   ddt dd} tddt jddddd	gt jd
| fiS )Nra   r\   rb   )rd   re   rf   rg   rh   r         r_   )ri   rl   r   rj   int16
attributesrU   rU   rV   %create_encoded_masked_and_scaled_data   s    "rt   c                  C  sF   ddddt dd} t jddd	d
t jgt jd}tdd|i | fiS )N   truei1r\   rb   rd   	_Unsignedr`   re   rf         $@r]   333336@6@r_   rg   rh   ri   rl   rj   rk   r   rm   rg   rU   rU   rV   "create_unsigned_masked_scaled_data   s    r   c                  C  s>   dddt dd} t jdddd	dgd
d}tdd|| fiS )Nra   rv   r\   rb   rd   ry   re   rf   r   ro      rw   r_   rg   rh   ri   rl   Zasarrayr   rs   ZsbrU   rU   rV   *create_encoded_unsigned_masked_scaled_data   s    r   c                  C  sF   ddddt dd} t jddd	d
t jgt jd}tdd|i | fiS )Nru   Trw   r\   rb   rx   rz   r]   r{   r|   r_   rg   rh   r}   r~   rU   rU   rV   &create_bad_unsigned_masked_scaled_data   s    r   c                  C  s>   dddt dd} t jdddd	dgd
d}tdd|| fiS )Nra   Tr\   rb   r   r   ro   r   r   rw   r_   rg   rh   r   r   rU   rU   rV   .create_bad_encoded_unsigned_masked_scaled_data   s    r   c                  C  sD   ddddt dd} t jddd	t jgt jd
}tdd|i | fiS )Nfalserw   r\   rb   rx   g      r]   r{   r_   rg   rh   r}   r~   rU   rU   rV    create_signed_masked_scaled_data   s    r   c                  C  s<   dddt dd} t jddddgd	d
}tdd|| fiS )Nr   r   r\   rb   r   iro   r   rw   r_   rg   rh   r   r   rU   rU   rV   (create_encoded_signed_masked_scaled_data   s    r   c                  C  s"   ddi} t ddddddg| fiS )Nunits-rg   rh   TFr   rr   rU   rU   rV   create_boolean_data   s    r   c                   @  s   e Zd ZddddZdS )
TestCommonNonerJ   c              	     sz   G dd dt  G  fddd}|dg}t  |d  W 5 Q R X |d dksZtt|d dd}|dksvtd S )Nc                   @  s   e Zd ZdS )z>TestCommon.test_robust_getitem.<locals>.UnreliableArrayFailureN__name__
__module____qualname__rU   rU   rU   rV   UnreliableArrayFailure   s   r   c                      s"   e Zd ZdddZ fddZdS )z7TestCommon.test_robust_getitem.<locals>.UnreliableArrayro   c                 S  s   || _ || _d S N)rj   failures)selfrj   r   rU   rU   rV   __init__   s    z@TestCommon.test_robust_getitem.<locals>.UnreliableArray.__init__c                   s&   | j dkr|  j d8  _  | j| S )Nr   ro   )r   rj   )r   keyr   rU   rV   __getitem__   s    
zCTestCommon.test_robust_getitem.<locals>.UnreliableArray.__getitem__N)ro   )r   r   r   r   r   rU   r   rU   rV   UnreliableArray   s   
r   r   )ZcatchZinitial_delay)	ExceptionpytestraisesAssertionErrorr   )r   r   rj   actualrU   r   rV   test_robust_getitem   s    
zTestCommon.test_robust_getitemN)r   r   r   r   rU   rU   rU   rV   r      s   r   c                   @  s,   e Zd ZU dZded< eddddZdS )	NetCDF3Only)NETCDF3_CLASSICNETCDF3_64BITztuple[T_NetcdfTypes, ...]netcdf3_formatsr   rJ   c                 C  s   t t| jD ]\}}|dkr qt|j}tjddd|g|d}tdd|i fi}t	dd	.}t
jtd
d |j||d W 5 Q R X W 5 Q R X qdS )z.Failing dtype coercion should lead to an errorboolr   ro   rp   r_   rg   rh   Fallow_cleanup_failurezcould not safely castmatchformatN)	itertoolsproductr   r   ri   Ziinfomaxrj   r   create_tmp_filer   r   
ValueError	to_netcdf)r   r`   r   maxvalrg   dsrN   rU   rU   rV   test_dtype_coercion_error  s     z%NetCDF3Only.test_dtype_coercion_errorN)r   r   r   r   __annotations__r:   r   rU   rU   rU   rV   r     s   
r   c                   @  s*  e Zd ZU dZded< dZded< dd ZejdRd	d
Z	ejdSddZ
dd Zejdd ZddddZddddZdd ZddddZddddZddddZdddd Zejd!ddd"d#Zddd$d%Zejd!ddd&d'Zddd(d)Zddd*d+Zddd,d-Zeddd.d/Zeddd0d1Z ddd2d3Z!ddd4d5Z"ddd6d7Z#ddd8d9Z$ddd:d;Z%ddd<d=Z&ddd>d?Z'ddd@dAZ(dddBdCZ)ejj*dDdEdddFdGZ+dddHdIZ,dJdK Z-dddLdMZ.dddNdOZ/dddPdQZ0dS )TDatasetIOBaseNzT_NetcdfEngine | NoneenginezT_NetcdfTypes | Nonefile_formatc                 C  s
   t  d S r   NotImplementedErrorr   rU   rU   rV   create_store*  s    zDatasetIOBase.create_storeFc              
   c  sb   |d kri }|d kri }t |d6}| j||f| | j|f|}|V  W 5 Q R X W 5 Q R X d S Nr   r   saveopenr   rL   save_kwargsopen_kwargsr   rN   r   rU   rU   rV   	roundtrip-  s    zDatasetIOBase.roundtripc           
   
   c  s   |d kri }|d kri }t |dh}t|jD ]6\}}|dkrBdnd}| j||g |fd|i| q.| j|f|}	|	V  W 5 Q R X W 5 Q R X d S )Nr   r   awmode)r   	enumerate	variablesr   r   )
r   rL   r   r   r   rN   ir   r   r   rU   rU   rV   roundtrip_append:  s     zDatasetIOBase.roundtrip_appendc                 K  s   |j |f| j| jd|S )N)r   r   )r   r   r   r   datasetrN   rT   rU   rU   rV   r   J  s     zDatasetIOBase.savec              	   k  s,   t |fd| ji|}|V  W 5 Q R X d S )Nr   )r   r   r   rN   rT   r   rU   rU   rV   r   O  s    zDatasetIOBase.openr   rJ   c              	   C  sT   t  }g dddif|d< g df|d< g df|d< | |}t|| W 5 Q R X d S )	Ng    eAr   zunits of awesomeZ	float_vars   foobarZ	bytes_varfoobarZ
string_varrB   r   r&   r   expectedr   rU   rU   rV   test_zero_dimensional_variableT  s    z,DatasetIOBase.test_zero_dimensional_variablec              
   C  sH   t  }|  0}|| t|}t|| W 5 Q R X W 5 Q R X d S r   )rB   r   dump_to_storexr	decode_cfr#   )r   r   storer   rU   rU   rV   test_write_store\  s
    

zDatasetIOBase.test_write_storec                 C  sz   |j D ]n}|j | j}t| tr>t|tkr>ttt| }|j | j}dddh}||ks|j|krp|j|kstqd S )NOSU)	r   r`   
isinstancer   strr   ri   kindr   )r   r   r   kZexpected_dtypeZactual_dtypeZstring_kindsrU   rU   rV   check_dtypes_roundtrippede  s    


z'DatasetIOBase.check_dtypes_roundtrippedc              	   C  s6   t  }| |}| || t|| W 5 Q R X d S r   )rB   r   r   r&   r   rU   rU   rV   test_roundtrip_test_datax  s    z&DatasetIOBase.test_roundtrip_test_datac              
     s   t   tjd fdd	}tt | }W 5 Q R X W 5 Q R X | }|  W 5 Q R X |dddg}|d   W 5 Q R X  }| }W 5 Q R X t | d S )Nc              	   3  s   | d kr }   d}|j D ]\}}|j||jkks"tq"|V  |j D ]\}}|| krP|jsPtqPt | W 5 Q R X d S r   )r   r   items
_in_memorydimsr   r&   )varsr   r   vr   r   rU   rV   assert_loads  s    z-DatasetIOBase.test_load.<locals>.assert_loadsvar1dim1dim2)N)	rB   
contextlibcontextmanagerr   r   r   loadr   r&   )r   r   r   r   rU   r   rV   	test_load~  s    zDatasetIOBase.test_loadc              	   C  s   t  }| |}|j D ]\}}|j||jkkstq| }|j D ]\}}|j||jkksLtqL|j D ]}|jsttqtt	|| t	|| W 5 Q R X d S r   )
rB   r   r   r   r   r   r   computevaluesr&   )r   r   r   r   r   computedrU   rU   rV   test_dataset_compute  s    
z"DatasetIOBase.test_dataset_computec              
   C  sx   t std tdddgfi}| j|td@}| t|}W 5 Q R X t|}t	|| W 5 Q R X W 5 Q R X d S Nz+pickling requires dask for SerializableLockfoorg   *   r   
r(   r   xfailr   r   
ON_WINDOWSpickledumpsloadsr&   )r   r   roundtripped
raw_pickleZunpickled_dsrU   rU   rV   test_pickle  s    
zDatasetIOBase.test_pickle&ignore:deallocating CachingFileManagerc              
   C  st   t std tdddgfi}| j|td<}| t|d }W 5 Q R X t|}t	|d | W 5 Q R X d S r   r   )r   r   r  r  	unpickledrU   rU   rV   test_pickle_dataarray  s    

z#DatasetIOBase.test_pickle_dataarrayc              	   C  s   t dddddgfi}| |@}t|jjjtjs8t|jjj	rFt|jj
 |jjj	s\tW 5 Q R X | j|ddid@}t|jjjtjst|jjj	rt|jj
 |jjj	rtW 5 Q R X d S )	Nr   rg            cacheFr   )r   r   r   r   variable_datar   ZMemoryCachedArrayr   r   r   ZCopyOnWriteArrayr   rU   rU   rV   test_dataset_caching  s    z"DatasetIOBase.test_dataset_cachingc              	   C  s@   t d dddgddggfi}| |}t|| W 5 Q R X d S )Nrg   yr   ro   rp      r   r   r&   r   rU   rU   rV   test_roundtrip_None_variable  s    z*DatasetIOBase.test_roundtrip_None_variablec              
   C  sH  t jdddddgtd}t jt jt jdddgtd}t jdddgtd}t jddt jgtd}t jd	d
dgtd}t jd	d
t jgtd}t jt jt jgtd}td|fd|fd|fd|fd|fd|fd|fg t jfd}|jdd}	| |N}
zt|	|
 W n8 tk
r8   d|	d d< d|	d d< t|	|
 Y nX W 5 Q R X d S )N              ?       @g      @r_      ab   cdef   gabcdefgr   bc)floatsfloats_nansbytes
bytes_nansstringsstrings_nansall_nansrk   Tdeep    r"  ra    r$  )	ri   rj   objectrk   r   copyr   r&   r   )r   r  r   Zbytes_r"  r#  r$  r%  originalr   r   rU   rU   rV   test_roundtrip_object_dtype  s4    z)DatasetIOBase.test_roundtrip_object_dtypec              	   C  s8   t ddddgfi}| |}t|| W 5 Q R X d S )Nrg   rh   r  r  r  r   rU   rU   rV   test_roundtrip_string_data  s    z(DatasetIOBase.test_roundtrip_string_datac              	   C  s   t ddddgfi}d|d jd< | |&}t|| |d jd dksNtW 5 Q R X d	|d jd< | |&}t|| |d jd d	kstW 5 Q R X d S )
Nrg   rh   r  r  S1r`   Z	_Encodingzutf-8ascii)r   rm   r   r&   r   r   rU   rU   rV   (test_roundtrip_string_encoded_characters  s    
 
z6DatasetIOBase.test_roundtrip_string_encoded_charactersc              	   C  sr   t dddg}td|f|d d}ddd	d
iii}| j||d$}t|| |jjd	 d
ksdtW 5 Q R X d S )N
2000-01-01
2000-01-02NaTrh   r   rh   t0rm   r6  r   zdays since 1950-01-01r   )pdto_datetimer   r   r&   r6  rm   r   )r   timesr   rT   r   rU   rU   rV   "test_roundtrip_numpy_datetime_data  s    
z0DatasetIOBase.test_roundtrip_numpy_datetime_datac                 C  sv  ddl m} | }| D ]T}|ddd|dddg}td|f|d d}ddd	d
iii}t|}t|dddg}|d j}	t  |	dkrt	dd | j
||d}
t|
jj| }|tddk st|
jjd	 dkst|
jjd |	kstt|
jj| }|tddk s0t|
jjd	 d
ksFt|
jjd |	ks\tW 5 Q R X W 5 Q R X qd S )Nr   _all_cftime_date_typesro   rp   rh   r5  rm   r6  r   zdays since 0001-01-01>   standardproleptic_gregorianignorezUnable to decode time axisr7  sz%days since 0001-01-01 00:00:00.000000calendar)xarray.tests.test_coding_timesr=  r   r   ri   rj   rB  warningscatch_warningsfilterwarningsr   absrh   timedelta64allr   rm   r6  )r   r=  
date_types	date_typer:  r   rT   expected_decoded_texpected_decoded_t0Zexpected_calendarr   abs_diffrU   rU   rV   #test_roundtrip_cftime_datetime_data  s0    



z1DatasetIOBase.test_roundtrip_cftime_datetime_datac              	   C  sJ   t dddg}td|f|d d}| |}t|| W 5 Q R X d S )NZ1hZ2hr4  tdr   )rP  Ztd0)r8  to_timedeltar   r   r&   )r   Ztime_deltasr   r   rU   rU   rV   test_roundtrip_timedelta_data:  s    z+DatasetIOBase.test_roundtrip_timedelta_datac              	   C  sF   t ddtjddtjgddfi}| |}t|| W 5 Q R X d S )Nrg   r  r  r  float64r_   )r   ri   rj   pir   r&   r   rU   rU   rV   test_roundtrip_float64_data@  s    "z)DatasetIOBase.test_roundtrip_float64_datac              
   C  s8   t d&}| |}t|| W 5 Q R X W 5 Q R X d S )Nexample_1.nc)rW   r   r%   r   rU   rU   rV   test_roundtrip_example_1_netcdfE  s    
z-DatasetIOBase.test_roundtrip_example_1_netcdfc              
   C  s   t ddddgfiddgddgfdd	d
gfd}| |}t|| W 5 Q R X d|d jd< | j|ddid.}| j|ddid}t|| W 5 Q R X W 5 Q R X d S )Nr   rg   r   ro   rp   r  r   r      r  rg   r  zr  coordinatesdecode_coordsFr  )r   r   r&   rm   r   r,  r   r   rU   rU   rV   test_roundtrip_coordinatesN  s      z(DatasetIOBase.test_roundtrip_coordinatesc              	   C  s   t ddddgfiddgddgfdd	d
gfd}| |}t|| W 5 Q R X t|\}}|d dksltd|jd< tt" t|\}}|d dkstW 5 Q R X d S )Nr   rg   r   ro   rp   r  r   r   rX  r  rY  r[  r  )	r   r   r&   r   r   attrsr   warnsr   )r   r,  r   _r_  rU   rU   rV   !test_roundtrip_global_coordinates^  s     
z/DatasetIOBase.test_roundtrip_global_coordinatesc              
   C  s\   t dddd}t ddiddi}tt& | |}t|| W 5 Q R X W 5 Q R X d S )Nr   ro   rg   y zcoordsrd  rg   )r   r   r`  r   r   r&   )r   r,  r   r   rU   rU   rV   %test_roundtrip_coordinates_with_spaceo  s
    z3DatasetIOBase.test_roundtrip_coordinates_with_spacec              	   C  sN   t  }|d jdkst| |"}t|| |d jdks@tW 5 Q R X d S )Nrg   r   )r   r`   r   r   r&   r   r,  r   rU   rU   rV   test_roundtrip_boolean_dtypev  s
    
z*DatasetIOBase.test_roundtrip_boolean_dtypec              	   C  s   t  }| |l}dddgddddgtdd}||}|jf |}|d jjrXtt|| |jf |}t|| W 5 Q R X d S )Nro   rp   r   r  r  r   r   dim3r   )	rB   r   ri   arangeiselr  r   r   r&   r   	in_memoryon_diskindexersr   r   rU   rU   rV   test_orthogonal_indexing}  s     

z&DatasetIOBase.test_orthogonal_indexingc           
   	     s  t    v}tdddgddtdddgddd} |}|jf |}|d jjr^tt||  |jf |}t|| W 5 Q R X  fdd	}tdd
gddgddggddgdtddgddgddggddgddtddgdgdtddgdgddg}|| tdd
gddgddggddgdt	d ddg}|| ddidtdd
gddgddggddgdidt	d d dig}|| ddidtdd
gddgddggddgdidddg}	||	 d S )Nr   rp   r   r   r  )r   r   r   c              	     sb     N}|d } d }| D ]$}||}||}|jjr tq t||  W 5 Q R X d S )Nvar3r   rm  r  r   r   r&   r   rq  rp  r   r   indro  r   rU   rV   multiple_indexing  s    

zADatasetIOBase.test_vectorized_indexing.<locals>.multiple_indexingr	  r  r  r  rX  ro   r   rk  r  r   r  r\   rk  r   )
rB   r   r   rm  r  r   r   r&   r   slice)
r   rp  rq  r   r   ry  	indexers2Z	indexers3Z	indexers4Z	indexers5rU   rx  rV   test_vectorized_indexing  sB    
  $ $$z&DatasetIOBase.test_vectorized_indexingz>zarr without dask handles negative steps in slices incorrectlyreasonc                   s   t rdi ind t   fdd}tddgddgdd	ggd
dgdtddddg}|| tddgddgdd	ggd
dgdtddddg}|| d S )Nchunksc              	     sf   j  dN}|d } d }| D ]$}||}||}|jjr$tq$t||  W 5 Q R X d S )Nr  rt  ru  rv  ro  r   r   rU   rV   ry    s    

zODatasetIOBase.test_vectorized_indexing_negative_step.<locals>.multiple_indexingr   r	  rp   r  r  r  r   r  rs  ra   ro   rz  )r(   rB   r   r|  )r   ry  rq  rU   r  rV   &test_vectorized_indexing_negative_step  s    
 
 
z4DatasetIOBase.test_vectorized_indexing_negative_stepc              	   C  sR   t  }| |8}|j|d dk d}|j|d dk d}t|| W 5 Q R X d S )Nr   r  )r   )rB   r   rm  r&   )r   ro  rp  r   r   rU   rU   rV   test_isel_dataarray  s
    z!DatasetIOBase.test_isel_dataarrayc                   s.    fdd |j  D ]\}} |j qd S )Nc                   s   t | drt| jtjr$ | j nzt| jtjrDt| tjstnZt| jt	rbt| tj
stn<t| jtjrt| tjstntt| j dt|  d S )Nrj   z is wrapped by )hasattrr   rj   r   ZExplicitlyIndexedri   ndarrayZNumpyIndexingAdapterr   dask_array_typeZDaskIndexingAdapterr8  ZIndexZPandasIndexingAdapter	TypeErrortypeobjfind_and_validate_arrayrU   rV   r    s    
zBDatasetIOBase.validate_array_type.<locals>.find_and_validate_array)r   r   r  )r   r   r   r   rU   r  rV   validate_array_type  s    z!DatasetIOBase.validate_array_typec              	   C  s   t  }| |z}| | dddgddddgtdd}||}|jf |}t|| | | |jf |}t|| | | W 5 Q R X d S )Nro   rp   r   r  r  rj  )rB   r   r  ri   rl  rm  r&   rn  rU   rU   rV   test_array_type_after_indexing  s    
 



z,DatasetIOBase.test_array_type_after_indexingc              	   C  s   t jdd}t j|d< tjdd|fit dt ddd}t|jdd|j	t
d d d	d
 | |2}| | |jdd}|jdd}t|| W 5 Q R X d S )NrX  r  )ro   ro   r   )r  rg   re  rg   dimrp   rg   )ri   randomrandnNaNr   r   rl  r&   Zdropnarm  r|  r   r  )r   r   ro  rp  r   r   rU   rU   rV   test_dropna   s    

 
 
zDatasetIOBase.test_dropnac              	   C  s6   t  }| |}t| |d jr(tW 5 Q R X dS )z.Make sure print does not load file into memoryr   N)rB   r   reprr   r   )r   ro  rp  rU   rU   rV   test_ondisk_after_print2  s    z%DatasetIOBase.test_ondisk_after_print)NNF)NNF)1r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   markrF  r  r  r  r-  r.  r1  r"   r;  r/   rO  rR  rU  rW  r^  rb  rg  ri  rr  r~  r   r  r  r  r  r  r  rU   rU   rU   rV   r   &  sj   
          
	!

#	@'r   c                
   @  s  e Zd ZddddZddddZejdee	fej
eeejjdd	d
eefeefgddddZedd ZddddZ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ddZddddZdddd Zddd!d"Zddd#d$Z ddd%d&Z!ddd'd(Z"ddd)d*Z#ddd+d,Z$ddd-d.Z%ddd/d0Z&ddd1d2Z'ddd3d4Z(ddd5d6Z)d7S )8CFEncodedBaser   rJ   c              	   C  s   t jddt jgtd}ddd}tdd|i |fi}|jd	d
}| |}t|| W 5 Q R X tdd|i ddifi}| |}t|| W 5 Q R X d S )Nr  r  r_      Xr/  )rd   r`   rg   rh   Tr&  rd   r(  )ri   rj   rk   r*  r   r+  r   r&   )r   r   rm   r,  r   r   rU   rU   rV   $test_roundtrip_bytes_with_fill_value;  s    
z2CFEncodedBase.test_roundtrip_bytes_with_fill_valuec              
   C  s~   t jddt jgtd}tdd|fi}ddd}tdd|i |fi}tt& | |}t	|| W 5 Q R X W 5 Q R X d S )	Nr  r  r_   rg   rh   r/  r  )r`   rd   
ri   rj   rk   r*  r   r   r   r   r   r&   )r   r   r   rm   r,  r   rU   rU   rV   +test_roundtrip_string_with_fill_value_ncharG  s    
z9CFEncodedBase.test_roundtrip_string_with_fill_value_ncharzdecoded_fn, encoded_fnzBad _Unsigned attribute.r  Zmarksc              	   C  sh  | }| }|  |<}|jD ] }|j| j|j| jkstqt||dd W 5 Q R X | j |tddd<}|jD ] }|j| j|j| jksttqtt||dd W 5 Q R X | j |tddd<}|jD ] }|j| j|j| jkstqt||dd W 5 Q R X t|| dd |  |@}|jD ]$}|j| j|j| jks&tq&t||dd W 5 Q R X d S )NFZdecode_bytes)r   r  )r   r   r`   r   r#   dict)r   Z
decoded_fnZ
encoded_fndecodedencodedr   r   rU   rU   rV   test_roundtrip_mask_and_scaleR  s&    



"z+CFEncodedBase.test_roundtrip_mask_and_scalec                  C  sH  t tdtjddddddddifdtdd	ddddd
difddd
difdtdddgddifdddgddifddddifdddgddggfdddgddggfdddgddggddifdddgd d!d"fdd#dd$ifd%} | d& jd'd(d) | jd jtd(d*d+ | jd jtd(d,d+ | jd jd-d.i | S )/N)ln_platitude	longitude   f4r_   rp   Zancillary_variableszstd_devs det_limrb   g?standard_nameZstandard_errorrU   Zdetection_minimum)r  Zstd_devsZdet_limr  r   ro   r   degrees_northr  degrees_eastra   Zgrid_mapping_nameZlatitude_longitude)r  bnds2)r  r  r  r  zdegree^2r  r        ?Z!atmosphere_ln_pressure_coordinateZair_pressure)r  Zcomputed_standard_nameg     @ZhPa)r  r  latlonlatitude_bndslongitude_bndsareasr  P0r  zarea: areasr  )Zcell_measuresgrid_mappingr  )r  boundsr  Zformula_termszp0: P0 lev : ln_p)r   r  ri   rl  reshaperm   updaterf  )r,  rU   rU   rV   _create_cf_dataset  sZ    (


z CFEncodedBase._create_cf_datasetc              
   C  s   |   }t x}|| t|ddV}|jd jd dks@t|jd jd dksXtd|d	 jksjtd|jksxtW 5 Q R X W 5 Q R X d S )
NFr\  r  r  r  r  r  r[  r  )r  r   r   r   rf  r_  r   )r   r,  tmp_filer   rU   rU   rV   8test_grid_mapping_and_bounds_are_not_coordinates_in_file  s    
zFCFEncodedBase.test_grid_mapping_and_bounds_are_not_coordinates_in_filec              	   C  sh   |   }| j|ddid}t|| W 5 Q R X | |$}|dddddg}t|| W 5 Q R X d S )	Nr\  rI  r  r  r  r  r  r  )r  r   r&   Zreset_coordsr%   r]  rU   rU   rV   1test_coordinate_variables_after_dataset_roundtrip  s    z?CFEncodedBase.test_coordinate_variables_after_dataset_roundtripc              
   C  s^   |   }tjtdd> | j|d  ddid}t||d   W 5 Q R X W 5 Q R X d S )NzNVariable\(s\) referenced in bounds not in variables: \['l(at|ong)itude_bnds'\]r   r  r\  rI  r  )r  r   r`  UserWarningr   
to_datasetr&   rh  rU   rU   rV   Ftest_grid_mapping_and_bounds_are_coordinates_after_dataarray_roundtrip  s    	
 zTCFEncodedBase.test_grid_mapping_and_bounds_are_coordinates_after_dataarray_roundtripc                 C  s@   |   }|d  }t|}|jd= |jd= t||d  d S )Nr  r  r  )r  Zto_irisr   Z	from_irisrf  r&   )r   r,  Z	iris_cuber   rU   rU   rV   .test_coordinate_variables_after_iris_roundtrip  s
    
z<CFEncodedBase.test_coordinate_variables_after_iris_roundtripc              
   C  sZ  dd }t dddgfdddgfdddd	gfdd
dgfd}| |}t|| W 5 Q R X t }|| t|ddd}||d jd st||d jd std|jkstd|d jkstd|d jkstW 5 Q R X W 5 Q R X |ddg}| |}t|| W 5 Q R X t d}|| t|ddB}||jd sRtd|d jksftd|d jksztW 5 Q R X W 5 Q R X d|d j	d< | |}t|| W 5 Q R X d|d j	d< t }|| t|dd^}d|d j	d kstd|d j	d kstd|d j	ks.td|d j	ksBtW 5 Q R X W 5 Q R X d S )Nc                 S  s   | dkp| dkS )Nzlat lonzlon latrU   r  rU   rU   rV   equals_latlon  s    z>CFEncodedBase.test_coordinates_encoding.<locals>.equals_latlonrg   r   ro   ra   )temppreciprp   r  rX  r  latlonFr  r  r[  r  r  r  T)
r   r   r&   r   r   r   r_  r   	drop_varsrm   )r   r  r,  r   r  r   modifiedrU   rU   rV   test_coordinates_encoding  sF    
&
(
z'CFEncodedBase.test_coordinates_encodingc              
   C  s   t tjddddtjddddtjddddd	tjddtdfd
}| |}t|| W 5 Q R X | jdkrd|d jd< t	t
 | |}W 5 Q R X W 5 Q R X d S )Nr  r\   z>i2r_      z<i4   z=i8rg   )rg   r  rZ  r   netcdf4bigrZ  Zendian)r   ri   rl  floatr   r&   r   rm   r   r   r   r   r   r   rU   rU   rV   test_roundtrip_endian  s    	
z#CFEncodedBase.test_roundtrip_endianc           
      C  s   t df}tdf}tjd}t|}tddddg||||gD ]\\}\}}t||i}t	|}	| 
| W 5 Q R X W 5 Q R X |	| |	t| q@d S )Nzstring or Nonezstring must be length 1 or)rp   rp   r   )rX  r  Tr)  )r  r   ri   r  r   r   zipr   r   r   r   r   r  )
r   teverL   darR   errormsgr   excinforU   rU   rV   "test_invalid_dataarray_names_raise5  s    
&
z0CFEncodedBase.test_invalid_dataarray_names_raisec              
   C  s@  t ddtdfi}tdddiid}| j||d*}|jjd }|jdkrX|jd	ks\t	W 5 Q R X |jji ksvt	tdd
diid}t
jtdd  | j||d}W 5 Q R X W 5 Q R X tdd
id}t
jtdd  | j||d}W 5 Q R X W 5 Q R X tdi id}t
t  | j||d}W 5 Q R X W 5 Q R X d S )Nrg   r  rz   r`   r  rm   r7  frX  r   barunexpected encodingr   zmust be castableinvalid)r   ri   rl  r  r   rg   rm   r   itemsizer   r   r   r   KeyErrorr   r   rT   r   Zencoded_dtyperU   rU   rV   test_encoding_kwargB  s$    "z!CFEncodedBase.test_encoding_kwargc              	   C  sh   t dtjdddi}d}tdd|iid}| j||d$}|jjd |ksPtt|| W 5 Q R X d S )	Nrh   r2  r  periodszdays since 1900-01-01r   r  r7  )	r   r8  
date_ranger  r   rh   rm   r   r&   )r   r   r   rT   r   rU   rU   rV   test_encoding_kwarg_dates[  s    z'CFEncodedBase.test_encoding_kwarg_datesc              
   C  sv   dddgdddgfD ]\}t d|i}tddd	iid
}| j||d&}|d jd d	ks\tt|| W 5 Q R X qd S )N   foo   bar   bazr   r  bazrg   r`   r/  r  r7  )r   r  r   rm   r   r&   )r   r#  r   rT   r   rU   rU   rV   &test_encoding_kwarg_fixed_width_stringc  s    z4CFEncodedBase.test_encoding_kwarg_fixed_width_stringc              
   C  sB  t ddtdfi}tdddiid}| j||d}t|jjd sNt	W 5 Q R X |jji ksht	t ddtdfi}tddd	iid}t
 < t
d
d | j||d}d|jjkst	W 5 Q R X W 5 Q R X |jji kst	t ddtjdd	dfi}| |}d|jjks"t	W 5 Q R X |jji ks>t	d S )Nrg   r  rz   r`   r  r  r7  rd   rq   r@  z#.*floating point data as an integerr\   r_   )r   ri   rl  r  r   mathisnanrg   rm   r   rD  rE  rF  r   r   rT   r   rU   rU   rV   test_default_fill_valuel  s      
$z%CFEncodedBase.test_default_fill_valuec              	   C  sP   t ddtjtj gfi}d |jjd< | |}d|jjksBtW 5 Q R X d S )Nrg   r  rd   )r   ri   rT  rg   rm   r   r   r  rU   rU   rV   test_explicitly_omit_fill_value  s    z-CFEncodedBase.test_explicitly_omit_fill_valuec              	   C  sj   t ddtjtj gfi}tddd iid}| j||d}d|jjksLtW 5 Q R X |jji ksftd S )Nrg   r  rd   r  r7  )	r   ri   rT  r  r   rg   rm   r   r  r  rU   rU   rV   2test_explicitly_omit_fill_value_via_encoding_kwarg  s
    z@CFEncodedBase.test_explicitly_omit_fill_value_via_encoding_kwargc              	   C  s\   t ddtjtj gfidddgid}d |jjd< | |}d|jjksNtW 5 Q R X d S )Nrg   r  r  r  re  rd   )r   ri   rT  r  rm   r   r   r  rU   rU   rV   (test_explicitly_omit_fill_value_in_coord  s    &z6CFEncodedBase.test_explicitly_omit_fill_value_in_coordc              	   C  sv   t ddtjtj gfidddgid}tddd iid}| j||d}d|jjksXtW 5 Q R X |jji ksrtd S )	Nrg   r  r  r  re  rd   r  r7  )r   ri   rT  r  r   r  rm   r   r  rU   rU   rV   ;test_explicitly_omit_fill_value_in_coord_via_encoding_kwarg  s
    &zICFEncodedBase.test_explicitly_omit_fill_value_in_coord_via_encoding_kwargc              	   C  s~   t ddtjdddfi}tdddiid}| j||d*}|jjd }|jd	kr\|jd
ks`t	W 5 Q R X |jji kszt	d S )Nrg   r  rz   r  r_   r`   r  r7  r  rX  )
r   ri   rl  r  r   rg   rm   r   r  r   r  rU   rU   rV   test_encoding_same_dtype  s    "z&CFEncodedBase.test_encoding_same_dtypec              	   C  s*   t  }| |}t|| W 5 Q R X d S r   )rB   r   r&   r   rL   r   rU   rU   rV   test_append_write  s    zCFEncodedBase.test_append_writec              
   C  s   t  }tddn}| j||dd d|d d d < |d d |d< | j|ddg |d	d | |}t|| W 5 Q R X W 5 Q R X d S )
NFr   r   r   ivar2r  var9r   rB   r   r   r   r&   r   rL   r  r   rU   rU   rV   test_append_overwrite_values  s    z*CFEncodedBase.test_append_overwrite_valuesc              
   C  s|   t  }tddb}| j||dd |d d |d< |jtdd	d
}tjtdd | j||dd W 5 Q R X W 5 Q R X d S )NFr   r   r  r  r  r  rp   r  r   z,Unable to update size for existing dimensionr   r   )rB   r   r   rm  r|  r   r   r   )r   rL   r  rU   rU   rV   #test_append_with_invalid_dim_raises  s     z1CFEncodedBase.test_append_with_invalid_dim_raisesc              
   C  s`   t dddgfdddgfddjdd	gd
}tjtdd | | W 5 Q R X W 5 Q R X d S )Nrg   ro   rp   r   r  )r  rZ  re  r  rZ  r  Z
MultiIndexr   )r   Z	set_indexr   r   r   r   r   r   rU   rU   rV   test_multiindex_not_implemented  s     z-CFEncodedBase.test_multiindex_not_implementedN)*r   r   r   r  r  r   r  parametrizer   r   paramr   r   r   r   r   rn   rt   r  staticmethodr  r  r  r  r4   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rU   rU   rU   rV   r  :  sT   
5

)		r  c                   @  s.   e Zd ZdZejjeddddddZdS )	
NetCDFBasez+Tests for all netCDF3 and netCDF4 backends.z+Windows does not allow modifying open filesr  r   rJ   c                 C  s   t  }t  }td.}| || |j jd7  _| || W 5 Q R X t|| jd }t	|| t|| jd }zt|jj|jjrtW 5 |
  |
  X W 5 Q R X W 5 Q R X d S )NrV  d   r   )r   rW   r   Zrhr   r   r   r   shutilr+  closeri   Zarray_equalr   )r   Zexample_1_pathZexample_1_modified_pathZ	example_1r   r  rU   rU   rV   test_refresh_from_disk  s    
z!NetCDFBase.test_refresh_from_diskN)	r   r   r   __doc__r   r  skipifr   r
  rU   rU   rU   rV   r    s    r  .ncr   r   zIterator[str])suffixr   rK   c                 c  s`   t  }tj|dtt |  }z
|V  W 5 zt| W n t	k
rX   |sT Y nX X d S )Nztemp-)
tempfilemkdtemprM   rN   rO   next_counterr  rmtreeOSError)r  r   temp_dirrN   rU   rU   rV   r     s    
r   intzIterator[list[str]])nfilesr  r   rK   c              	   #  s6   t  & fddt| D }|V  W 5 Q R X d S )Nc                   s   g | ]} t qS rU   )enter_contextr   )rX   ra  r   stackr  rU   rV   rY     s   z$create_tmp_files.<locals>.<listcomp>)r   range)r  r  r   filesrU   r  rV   create_tmp_files  s
    r  c                   @  s  e Zd ZU dZdZded< ddddZddd	d
ZddddZddddZ	ddddZ
ddddZddddZddddZddddZddddZddddZddddZdddd Zddd!d"Zddd#d$Zddd%d&Zddd'd(Zddd)d*Zd+S ),NetCDF4Basez+Tests for both netCDF4-python and h5netcdf.r  rH   r   r   rJ   c           	      C  s  t  }t|dP}|d}|}|jddd td}|jdtjdd ||j	d d d < W 5 Q R X t }d|f|d< d	D ]0}| j
||d
}t|d |d  W 5 Q R X qtt t|dd
 W 5 Q R X tjtdd t|dd
 W 5 Q R X W 5 Q R X d S )Nr   r   timer\   sizerg   r  
dimensions)r   z/foozfoo/z/foo/groupr  zmust be a stringr   )ro   rp   r  )r   nc4r   createGroupcreateDimensionri   rl  createVariableint32r   r   r%   r   r   r  r   r   )	r   r  rootgrpfoogrpr   rg   r   r&  r   rU   rU   rV   test_open_group  s"    

zNetCDF4Base.test_open_groupc           
      C  s   t  }t|d}|d}|d}|}|jddd td}|jdtjdd	 ||j	d d d < |
  t }d|f|d< d
D ]0}| j||d}	t|	d |d  W 5 Q R X qW 5 Q R X d S )Nr   r   r  r  r\   r   rg   r"  r#  )zfoo/barz/foo/barzfoo/bar/z	/foo/bar/r%  )r   r'  r   r(  r)  ri   rl  r*  r+  r   r	  r   r%   )
r   r  r,  r-  Zbargrpr   rg   r   r&  r   rU   rU   rV   test_open_subgroup)  s    


zNetCDF4Base.test_open_subgroupc              
   C  s   t  }|d }t p}| j||dd | j||ddd | j|dd}t|| W 5 Q R X | j|dd}t|| W 5 Q R X W 5 Q R X d S )Nrp   zdata/1r%  zdata/2r   )r&  r   r  )r   data1data2r  actual1actual2rU   rU   rV   test_write_groups?  s    zNetCDF4Base.test_write_groupsc              
   C  s   dddgdddgfD ]n}t d|i}t ddddgi}tddtiid	}| j||d
&}|d jd tksntt|| W 5 Q R X qd S )Nr  r  r  r   r  r  rg   r`   r  r7  )r   r  r   r   rm   r   r&   )r   Zinput_stringsr,  r   rT   r   rU   rU   rV   test_encoding_kwarg_vlen_stringJ  s    z+NetCDF4Base.test_encoding_kwarg_vlen_stringc              
   C  s   t jddt jgtd}tdd|fi}tdd|i ddifi}tt& | |}t	|| W 5 Q R X W 5 Q R X tdd|i ddifi}tt& | |}t	|| W 5 Q R X W 5 Q R X d S )	Nr  r  r_   rg   rh   rd   ZXXXr)  r  )r   r   r   r,  r   rU   rU   rV   *test_roundtrip_string_with_fill_value_vlenS  s    z6NetCDF4Base.test_roundtrip_string_with_fill_value_vlenc                 C  s   t  }tjdddgdddggdd}tj|d	d
>}|dd |dd |dtdd}||d d < W 5 Q R X tjddgdd}tdd|fi}t|0}t	|| | 
|}t	|| W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr   r  r  der  r   r_   r   r  rg   rp   string3r  r/  )rg   r9  abcdef)r   ri   rj   r'  r   r)  r*  r`   r   r&   r   )r   r  r   ncr   r   r   r  rU   rU   rV   test_roundtrip_character_arraye  s    

z*NetCDF4Base.test_roundtrip_character_arrayc              	   C  sV   t dtjddgddi}| |(}t|| |d jtdksHtW 5 Q R X d S )Nrg   r   Zzzzzr   r_   ZS4)r   ri   rj   r   r&   r`   r   r  rU   rU   rV   test_default_to_char_arraysw  s    
z'NetCDF4Base.test_default_to_char_arraysc              
     s  t  }t|dX}|jddd |jdtjdd d}|jd d| t	dd	 |jd d d < W 5 Q R X t  t
jd
dd}|tdd}d|i |f d< t|F}t|d  d   fdd|d j D }| d jkstW 5 Q R X W 5 Q R X d S )Nr   r  r\   r   r"  r#  days since 1999-01-01r   rX  z
1999-01-05r  r+  )r   r`   c                   s$   i | ]\}}| d  j kr||qS r"  r  rX   r   r   r   rU   rV   
<dictcomp>  s    z3NetCDF4Base.test_open_encodings.<locals>.<dictcomp>)r   r'  r   r)  r*  ri   r+  r   	setncattrrl  r8  r  r`   r   r%   rm   r   r   )r   r  r   r   r  rm   r   actual_encodingrU   rA  rV   test_open_encodings}  s"    &

zNetCDF4Base.test_open_encodingsc              	   C  sV   t ddtdfi}tdddiid}| j||d}|jjd sHtW 5 Q R X d S )Nrg   r  rz   zlibTr  r7  )r   ri   rl  r  r   rg   rm   r   r  rU   rU   rV   test_dump_encodings  s    zNetCDF4Base.test_dump_encodingsc                 C  s   t  }t|dX}|jddd |jdtjdd d}|jd d| t	dd	 |jd d d < W 5 Q R X t
|l}t  Z}|| t|d
8}|jd d|kstt|jd t	dd	  W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr   r  r\   r   r"  r#  r?  r   rX  r)r   r'  r   r)  r*  ri   r+  r   rC  rl  r   r   Z	getncattrr   r$   )r   r  r   r   Zxarray_datasetZ	tmp_file2rU   rU   rV   test_dump_and_open_encodings  s    &

z(NetCDF4Base.test_dump_and_open_encodingsc              	   C  s   t  }|d jdddd|jjd | |4}|d j D ]\}}||d j| ks@tq@W 5 Q R X |jdd}| |}t	|| W 5 Q R X d S )Nr  Tr  r  )rF  
chunksizes
fletcher32shuffleoriginal_shaper   r  )
rB   rm   r  r  shaper   r   r   rm  r%   )r   rL   r   r   r   r   rU   rU   rV   test_compression_encoding  s    
	"z%NetCDF4Base.test_compression_encodingc              	   C  s   t dtdi}tddddddd}tt|dd	}| j||d
|}t|| |jjd dksdt|jjd stt|jjd dkst|jjd st|jjd dkst|jjd stW 5 Q R X |jji kstd S )Nrg   rz   r  T	   r  )r`   rF  	complevelrL  rK  rM  r  r  r7  r`   rF  rS  rL  rK  rM  )	r   ri   rl  r  r   r%   rg   rm   r   )r   r   rm   rT   r   rU   rU   rV   test_encoding_kwarg_compression  s&    
z+NetCDF4Base.test_encoding_kwarg_compressionc              	   C  sh   t ddddgi}d}d|i|jd _| |.}t|| t|d jd |d jd  W 5 Q R X d S )Nrg   ro   rp   r  rp   rK  )r   r   rm   r   r&   r$   )r   r   rK  r   rU   rU   rV   )test_keep_chunksizes_if_no_original_shape  s    
 z5NetCDF4Base.test_keep_chunksizes_if_no_original_shapec              	   C  s^   t dddgddddgfd}dddddd	d
d|jd _| |}t|| W 5 Q R X d S )Nro   rp   r  rg   rX  r  Fr   )i   r  )rF  rM  rS  rL  
contiguousrK  rN  )r   r   rm   r   r%   r  rU   rU   rV   "test_encoding_chunksizes_unlimited  s    	z.NetCDF4Base.test_encoding_chunksizes_unlimitedc              
   C  s  t  }tj|dd`}|dd |jddddd	 |jd }|d
 d|_d|_t	
dddddg|d d < W 5 Q R X tj|ddF}t	jj
dddddgddd
d
d
gd}|jd d d  }t|| W 5 Q R X t|}t }t|| W 5 Q R X W 5 Q R X d S )Nr   r  rh   r  rg   rq   rh   ra   )
fill_valueFr\   rb   r   ro   rp   rH  r]   r^   T)mask)r   r'  r   r)  r*  r   Zset_auto_maskandscalere   rf   ri   rj   mar$   r   rn   r&   )r   r  r<  r   r   r   r   rU   rU   rV   test_mask_and_scale  s&    

& 
zNetCDF4Base.test_mask_and_scalec              
   C  sn   t  ^}tj|dd}|dd}d|d< W 5 Q R X t|}tddi}t|| W 5 Q R X W 5 Q R X d S )Nr   r  rg   rq   {   .)rU   r_  )r   r'  r   r*  r   r&   )r   r  r<  r   r   r   rU   rU   rV   test_0dimensional_variable  s    
z&NetCDF4Base.test_0dimensional_variablec                 C  s   t  }tjdddgtd}tj|dd,}|dd |dtd	}||d d < W 5 Q R X tdd|fi}i d
difD ],}t	|ft
t|}t|| W 5 Q R X qxW 5 Q R X d S )Nr   r  r  r_   r   r  rg   r  r  r   T)r   ri   rj   r*  r'  r   r)  r*  r   r   r
   r  r&   )r   r  r   r<  r   r   rT   r   rU   rU   rV   test_read_variable_len_strings  s    z*NetCDF4Base.test_read_variable_len_stringsc              	   C  s   t ddtdfi}| j|tdgdd&}|jd tdksDtt|| W 5 Q R X ddgi|_| |&}|jd tdkstt|| W 5 Q R X d S Nrg   r  rz   unlimited_dimsr7  rd  	r   ri   rl  r   r  rm   setr   r%   r  rU   rU   rV   test_encoding_unlimited_dims*  s    z(NetCDF4Base.test_encoding_unlimited_dimsN)r   r   r   r  r   r   r.  r/  r4  r5  r6  r=  r>  rE  rG  rI  rP  rT  rV  rY  r^  r`  ra  rg  rU   rU   rU   rV   r    s(   
	r  c                      sh   e Zd Zejdd ZddddZddddZddd	d
Ze	j
jdddd fddZ  ZS )TestNetCDF4Datac              
   c  s8   t  (}tjj|dd}|V  W 5 Q R X W 5 Q R X d S Nr   r  r   r   NetCDF4DataStorer   r   r  r   rU   rU   rV   r   7  s    zTestNetCDF4Data.create_storer   rJ   c              	   C  sZ   t  }d|d< d|d< d|d< d|jd< | |}t|jt|jksLtW 5 Q R X d S )	Nro   r   rp   rZ  r  r  rX  r  )r   rf  r   listr   r   r  rU   rU   rV   test_variable_order=  s    
z#TestNetCDF4Data.test_variable_orderc           
      C  s   t jjdd}ddddg}ddddddg}tj|d	||d	d
d}| }| |\}t |}|j|d}z|jj	 W n2 t
k
r }	 zdt|	kstW 5 d }	~	X Y nX W 5 Q R X d S )N)rX  r  r   r   ro   rp   r  r  rX  )dim0r   randovar)rL   r   rf  rR   r  zfirst by calling .load)ri   r  r   r   r  r   Zargsortrm  rp  r   
IndexErrorr   r   )
r   Zrandom_dataro  r   r  r   ZondiskZindsds2errrU   rU   rV   test_unsorted_index_raisesH  s"    
z*TestNetCDF4Data.test_unsorted_index_raisesc              	   C  s   dddg}dg}d}|||d}t ddd	d
dg|fi|d}| |J}||d fD ]6}t||jd  t||jd  ||jd ksTtqTW 5 Q R X d S )Nrm  Zofr#  zone elementz
one string)r   r  r  rg   r  ro   rp   r  r_  r   r  r  )r   r   r$   r_  r   )r   Zlist_of_stringsZone_element_list_of_stringsZ
one_stringr_  r   r   ZtotestrU   rU   rV   test_setncattr_string_  s    
z%TestNetCDF4Data.test_setncattr_stringz5https://github.com/Unidata/netcdf4-python/issues/1195r  c                   s   t    d S r   )superr
  r   	__class__rU   rV   r
  p  s    z&TestNetCDF4Data.test_refresh_from_disk)r   r   r   r   r   r   rn  rt  rv  r   r  skipr
  __classcell__rU   rU   rx  rV   rh  5  s   
rh  c                   @  s6   e Zd ZddddZddddZddddZd	S )
TestNetCDF4AlreadyOpenr   rJ   c              
   C  s   t  v}tj|dd}|dd}d|d< W 5 Q R X tj|dd}t|}t|}tddi}t|| W 5 Q R X W 5 Q R X d S )	Nr   r  rg   r  r   .rH  rU   r   )r   r'  r   r*  r   rk  r   r&   )r   r  r<  r   r   r   r   rU   rU   rV   test_base_casew  s    

z%TestNetCDF4AlreadyOpen.test_base_casec                 C  s&  t  }tj|dd$}|d}|dd}d|d< W 5 Q R X tj|dd}t|jd }t|}tdd	i}t	|| W 5 Q R X tj|dd}tj|dd
}t|}tdd	i}t	|| W 5 Q R X tj|dd4}t
jtdd tj|jd dd
 W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr   r  r  rg   r  r   .rH  r}  r%  zmust supply a rootr   )r   r'  r   r(  r*  r   rk  groupsr   r&   r   r   r   )r   r  r<  r&  r   r   r   r   rU   rU   rV   
test_group  s$    



z!TestNetCDF4AlreadyOpen.test_groupc           	   
   C  s   t  }tj|dd4}|dd |dtjd}td|d d < W 5 Q R X tj|dd}t	|}t
|2}|jdd	}tddtdfi}t|| W 5 Q R X W 5 Q R X d S )
Nr   r  rg   r\   r  r  rH  Tr&  )r   r'  r   r)  r*  ri   r+  rl  r   rk  r   r+  r&   )	r   r  r<  r   h5r   r   copiedr   rU   rU   rV   test_deepcopy  s    

z$TestNetCDF4AlreadyOpen.test_deepcopyN)r   r   r   r~  r  r  rU   rU   rU   rV   r|  u  s   r|  r  c                   @  sF   e Zd ZejdddZddddZddd	d
ZddddZdS )TestNetCDF4ViaDaskDataNFc              	   c  sL   |d kri }|d kri }| dd t| ||||}|V  W 5 Q R X d S Nr  ra   )
setdefaultrh  r   r   rL   r   r   r   r   rU   rU   rV   r     s        z TestNetCDF4ViaDaskData.roundtripr   rJ   c                 C  s   d S r   rU   r   rU   rU   rV   rt    s    z1TestNetCDF4ViaDaskData.test_unsorted_index_raisesc                 C  s   d S r   rU   r   rU   rU   rV   r    s    z+TestNetCDF4ViaDaskData.test_dataset_cachingc              	   C  s   t jdddd}t|ddd}d|jd< d|jd	< t jddd
d}t|ddd}d
|jd< d|jd	< t||d}| |2}|d jd dkst|d jd d
kstW 5 Q R X d S N)r  r  r  )2   r  )r`   r  r  rg   )rL   r   rR   rK  rN  )r  r  r  r  r  zerosr   rm   onesr   r   r   r   rg   r  r   r   rU   rU   rV   test_write_inconsistent_chunks  s    



z5TestNetCDF4ViaDaskData.test_write_inconsistent_chunks)NNF)	r   r   r   r   r   r   rt  r  r  rU   rU   rU   rV   r    s        r  c                      s  e Zd ZU dZdZi Zded< dd Zej	dd Z
d	d
 Zej	dd Zej	dzddZejddddgddddZddddZddddZddddZeddddZeejdddd d!Zeddd"d#Zedd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ejd.dd/gddd0d1Zddd2d3Z ddd4d5Z!ddd6d7Z"ejj#d8d9dd fd:d;Z$dd fd<d=Z%ddd>d?Z&ddd@dAZ'dddBdCZ(dddDdEZ)dddFdGZ*dddHdIZ+dddJdKZ,ejdLdMdNgdddOdPZ-dddQdRZ.dddSdTZ/edddUdVZ0edddWdXZ1ejdYddgdddZd[Z2eddd\d]Z3ejddddgejd^ddgejd_ddgddd`daZ4ejdbddcddgdddedfZ5edddgdhZ6dddidjZ7edddkdlZ8edddmdnZ9edddodpZ:e;dddqdrZ<dddsdtZ=ejdue> e?dvdwgdddxdyZ@  ZAS ){ZarrBaseZ_ARRAY_DIMENSIONSrp   zdict[str, Any]version_kwargsc                 C  s   t d S r   r   r   rU   rU   rV   create_zarr_target  s    zZarrBase.create_zarr_targetc              	   c  s4   |   "}tjj|fddi| jV  W 5 Q R X d S )Nr   r   )r  r   	ZarrStore
open_groupr  r   store_targetrU   rU   rV   r     s    
zZarrBase.create_storec                 K  s   |j f d|i|| jS )Nr   )to_zarrr  )r   r   r  rT   rU   rU   rV   r     s    zZarrBase.savec              	   k  s0   t j|fddi|| j}|V  W 5 Q R X d S )Nr   zarr)r   r   r  )r   r  rT   r   rU   rU   rV   r     s     zZarrBase.openNFc              
   c  s`   |d kri }|d kri }|   6}| j||f| | j|f|}|V  W 5 Q R X W 5 Q R X d S r   )r  r   r   )r   rL   r   r   r   r  r   rU   rU   rV   r     s    
zZarrBase.roundtripconsolidatedTr   rJ   c              	   C  s`   |r| j dkrtd t }| j|d|idd|iid}| || t|| W 5 Q R X d S )Nrp   6consolidated metadata is not supported for zarr v3 yetr  backend_kwargsr   r   )zarr_versionr   r   rB   r   r   r&   )r   r  r   r   rU   rU   rV   test_roundtrip_consolidated  s    

z$ZarrBase.test_roundtrip_consolidatedc                 C  s   | j dkrtd t }|  ^}|j|fddi| j tjtdd, t	j
|f| j}t|| W 5 Q R X W 5 Q R X W 5 Q R X d S )Nrp   r  r  Fz+Failed to open Zarr store with consolidatedr   )r  r   r   rB   r  r  r  r`  RuntimeWarningr   	open_zarrr&   )r   r   r   r   rU   rU   rV   "test_read_non_consolidated_warning  s    


z+ZarrBase.test_read_non_consolidated_warningc              	   C  s.   t jtdd tt   W 5 Q R X d S )NzNo such file or directory:r   )r   r   FileNotFoundErrorr   r  uuidZuuid4r   rU   rU   rV   test_non_existent_store  s    z ZarrBase.test_non_existent_storec                 C  sz   t  }|  b}|  N}d|i}| j||f| dd|ii}| j|f|}t|| W 5 Q R X W 5 Q R X W 5 Q R X d S )Nchunk_storer  )rB   r  r   r   r%   )r   r   r  r  r   r   r   rU   rU   rV   test_with_chunkstore  s    zZarrBase.test_with_chunkstorec              	   C  s   t   }| j|dd id<}|j D ]*\}}|j||jkksDt|jd ks(tq(W 5 Q R X | j|di idB}|j D ]0\}}|j||jkkst|j|| jks|tq|W 5 Q R X d S )Nr  r  )	rB   chunkr   r   r   r   r   r   r  r   r,  r   r   r   rU   rU   rV   test_auto_chunk(  s    
zZarrBase.test_auto_chunk)ignore:The specified Dask chunks separatec           
   
   C  s  t  dddd}dd i}| j||d<}|j D ]*\}}|j||jkksRt|jd ks6tq6W 5 Q R X t	ddD ]n}|j|d}d|i}| j||dB}|j D ]0\}}|j||jkkst|j|| jkstqW 5 Q R X qvddd	d}|j|d}|d
did}| j||d}|j D ] \}}|j|| jks&tq&| |N}	|j D ] \}}|j|| jks^tq^t
||	 t
| |	  W 5 Q R X W 5 Q R X d S )Nr  rX  rj  r  r  rp   r  r  r  Zoverwrite_encoded_chunksT)r  r  )rB   r  r   r   r   r   r   r   r  r  r&   r   )
r   r,  r   r   r   r   r   Z	rechunkedr  autorU   rU   rV   test_manual_chunk:  s4    "
zZarrBase.test_manual_chunkc           	      C  s  t  dddd}dddif}|D ]d}d|i}ttH | j||d.}|j D ]\}}|j||j	kksVt
qVW 5 Q R X W 5 Q R X q$ddid	d
ii f}|D ]`}d|i}t H | j||d.}|j D ]\}}|j||j	kkst
qW 5 Q R X W 5 Q R X qd S )NrX  r  rj  rp   r   )r  r  rp   ro   r  r  rk  )r  rX  )rB   r  r   r`  r  r   r   r   r   r   r   r'   )	r   r,  Z
bad_chunksr  rT   r   r   r   Zgood_chunksrU   rU   rV   test_warning_on_bad_chunksf  s    ,z#ZarrBase.test_warning_on_bad_chunksc              
   C  s   t   }tt` | j|ddidB}|j D ]0\}}|j||j	kksPt
|j|| jks4t
q4W 5 Q R X W 5 Q R X ttZ | j|ddid<}|j D ]*\}}|j||j	kkst
|jd kst
qW 5 Q R X W 5 Q R X d S )NZ
auto_chunkTr  F)rB   r  r   r   r  r   r   r   r   r   r   r  r  rU   rU   rV   test_deprecate_auto_chunk|  s    
*z"ZarrBase.test_deprecate_auto_chunkc              	   C  sf   t  dddd}| j|di id6}|j D ]$\}}t| |j|| jks2tq2W 5 Q R X d S )Nr  rX  rj  r  r  )rB   r  r   	data_varsr   printr  r   r  rU   rU   rV   test_write_uneven_dask_chunks  s
    z&ZarrBase.test_write_uneven_dask_chunksc              
   C  s   t  }d}|d jd|i | |}||d jd ks@tW 5 Q R X |d jddi tt | |}W 5 Q R X W 5 Q R X d S )NrJ  r  r  )r  g      @)rB   rm   r  r   r   r   r   r  )r   rL   r  r   rU   rU   rV   test_chunk_encoding  s     zZarrBase.test_chunk_encodingc           	   
   C  s  t jtdddd }|ddi}| |}d|d jd ksJtW 5 Q R X |ddi}t	j
td	d
 | |}W 5 Q R X W 5 Q R X |ddi}d|jjd< t	j
tdd
 | |}W 5 Q R X W 5 Q R X | j|ddid}W 5 Q R X |ddi}d|jjd< | |}W 5 Q R X |ddi}d|jjd< | |}W 5 Q R X |ddi}d|jjd< | |}W 5 Q R X |ddi}| |}d|d jd kstW 5 Q R X | |&}| |}t|| W 5 Q R X W 5 Q R X |ddi}d|jjd< t	j
tdd
 | |}W 5 Q R X W 5 Q R X dD ]H}|d jd|i | |}d|d jd kstW 5 Q R X qJ|d jddi t	j
tdd
 | |}W 5 Q R X W 5 Q R X | j|ddid}W 5 Q R X d S )N   rg   r   r   rR   rX  rX  r  )r  rX  r  zuniform chunk sizes.r   )r  znamed 'var1' would overlapZsafe_chunksFr7  rU  )r  r  r  rW  )r  r  r  )r  r  rp   rR  )r  r  r  ro   z"would overlap multiple dask chunks)rX  r  r  )r   r   ri   rl  r  r  r   rm   r   r   r   r   r   r   r&   r  )	r   r   Z	ds_chunk4r   Zds_chunk_irregZbadencZgoodencr,  Z	chunk_encrU   rU   rV   test_chunk_encoding_with_dask  sf     



" &z&ZarrBase.test_chunk_encoding_with_daskc                 C  s   t  }|  }|| |j}|j D ]*}|| j| j }|t|| j	ks*t
q*t|* |j D ]}| j|| jkslt
qlW 5 Q R X |jj| j= tt t| W 5 Q R X W 5 Q R X W 5 Q R X d S r   )rB   r   r   r   r   keysr_  DIMENSION_KEYrm  r   r   r   r   r  r   r   r  )r   r   r   
zarr_groupvarr   rU   rU   rV   test_hidden_zarr_keys  s    

 zZarrBase.test_hidden_zarr_keysr&  Zgroup1c           	      C  s  t  }| j|d|dd|id}t|| W 5 Q R X | j|d|dd|id}t|| W 5 Q R X |  n}| || | j||d|d | j||d6}t|| tt | j||dd W 5 Q R X W 5 Q R X W 5 Q R X | j|d|dd|id}t|| W 5 Q R X t	 \}}}|  p}|j
|fd|d| j |j
|fd	|d
| j tj||gd	d}tj|f|dd| j}t|| W 5 Q R X d S )Nr   )r   r&  r&  r  zw-r%  r  r   r  )
append_dimr&  r  r  )r&  r   )rB   r   r&   r  r   r   r   r   r   rA   r  r  r   concatr   )	r   r&  r,  r   r   r   ds_to_appendra  r  rU   rU   rV   test_write_persistence_modes  sd    

.
  z%ZarrBase.test_write_persistence_modesc              	   C  sp   t  }dd l}|jdddd}tdd|iid}| j||d	(}|d jd }| | ksbtW 5 Q R X d S )
Nr   Zzstdr  rp   )cnameZclevelrM  r   
compressorr  r7  )rB   r  Bloscr  r   rm   
get_configr   )r   r,  r  Z
blosc_compr   r   r   rU   rU   rV   test_compressor_encodingF  s    z!ZarrBase.test_compressor_encodingc              	   C  s<   t  }d}| j|d|id|id}t|| W 5 Q R X d S )Nzsome/random/pathr&  r  r   )r   r,  r&  r   rU   rU   rV   r  R  s      zZarrBase.test_groupc                 C  s   d S r   rU   r   rU   rU   rV   r  Z  s    z/ZarrBase.test_encoding_kwarg_fixed_width_stringzZarr caching not implementedr  c                   s   t    d S r   )rw  r  r   rx  rU   rV   r  `  s    zZarrBase.test_dataset_cachingc                   s   t    d S r   )rw  r  r   rx  rU   rV   r  d  s    zZarrBase.test_append_writec              
   C  s   t dddgfi}t dddgfi}|  N}|j|f| j |j|fddi| j | |}t|| W 5 Q R X W 5 Q R X d S )Nr   rg   ro   rp   r   r+)r   r  r  r  r   r&   )r   r,  r  r   r   rU   rU   rV   #test_append_with_mode_rplus_successg  s    
z,ZarrBase.test_append_with_mode_rplus_successc              
   C  s~   t dddgfi}t dddgfi}|  H}|j|f| j tjtdd |j|fdd	i| j W 5 Q R X W 5 Q R X d S )
Nr   rg   ro   r  rp   z+dataset contains non-pre-existing variablesr   r   r  )r   r  r  r  r   r   r   )r   r,  r  r   rU   rU   rV   !test_append_with_mode_rplus_failsp  s    
 z*ZarrBase.test_append_with_mode_rplus_failsc              
   C  sn   t  \}}}|  P}|j|fddi| j tjtdd |j|fddi| j W 5 Q R X W 5 Q R X d S )Nr   r   z.does not match any existing dataset dimensionsr   r  ZnotvalidrA   r  r  r  r   r   r   r   r   r  ra  r  rU   rU   rV   r  z  s    
 z,ZarrBase.test_append_with_invalid_dim_raisesc              
   C  s~   |   l}tdddgfij|fddi| j tjtdd, tddd	gfij|fdd
i| j W 5 Q R X W 5 Q R X d S )Nr   rg   ro   r   r   zdifferent dimension namesr   r  rp   r   )r  r   r  r  r   r   r   r  rU   rU   rV   test_append_with_no_dims_raises  s     
z(ZarrBase.test_append_with_no_dims_raisesc              
   C  sn   t  \}}}|  P}|j|fddi| j tjtdd |j|fddi| j W 5 Q R X W 5 Q R X d S )Nr   r   zdifferent dimension sizesr   r   r  r  rU   rU   rV   *test_append_with_append_dim_not_set_raises  s
    
z3ZarrBase.test_append_with_append_dim_not_set_raisesc              
   C  sp   t  \}}}|  R}|j|fddi| j tjtdd  |j|fddd| j W 5 Q R X W 5 Q R X d S )Nr   r   zcannot set append_dim unlessr   r  )r   r  r  r  rU   rU   rV   "test_append_with_mode_not_a_raises  s    
 z+ZarrBase.test_append_with_mode_not_a_raisesc              
   C  sx   t  \}}}|  Z}|j|fddi| j tjtdd( |j|fdddd iid| j W 5 Q R X W 5 Q R X d S )	Nr   r   zbut encoding was providedr   r  r  r  )r  rm   r  r  rU   rU   rV   )test_append_with_existing_encoding_raises  s    

z2ZarrBase.test_append_with_existing_encoding_raisesr`   r   r   c              
   C  sn   t |\}}|  P}|j|fddi| j tjtdd |j|fddi| j W 5 Q R X W 5 Q R X d S )Nr   r   zMismatched dtypes for variabler   r  r  )r@   r  r  r  r   r   r   )r   r`   r   r  r  rU   rU   rV   )test_append_string_length_mismatch_raises  s    
z2ZarrBase.test_append_string_length_mismatch_raisesc           
   	   C  s   t  \}}}|  }dd l}| }dd|ii}|j|fd|d| j |j|fddi| j tj|fdd	i| j}|d jd }	|		 |	 kst
ttj|fdd	i| j tj||gdd
 W 5 Q R X d S )Nr   r  r  r   )r   rm   r  r  r   r  r  )rA   r  r  r  r  r  r   r   rm   r  r   r&   r   r  )
r   r   r  ra  r  r  r  rm   Z	actual_dsrD  rU   rU   rV   .test_check_encoding_is_consistent_after_append  s4    
z7ZarrBase.test_check_encoding_is_consistent_after_appendc              	   C  s   t  \}}}|  }tj||gddj|fddi| j |j|fddi| j tj||gdd}|d |d< t|tj|fddi| j W 5 Q R X d S )	Nr  r  r   r   r   Znew_varr   r  )rA   r  r   r  r  r  r&   r   )r   r   r  Zds_with_new_varr  ZcombinedrU   rU   rV   test_append_with_new_variable  s     
z&ZarrBase.test_append_with_new_variablec                 C  s   ddl m} t  }|  }| j||dd}t||s>tt	t& | 
|}t|| W 5 Q R X W 5 Q R X |  | 
|}t|| W 5 Q R X W 5 Q R X d S )Nr   DelayedF)r   )dask.delayedr  rB   r  r  r   r   r   r   r   r   r&   r   )r   r  r,  r   delayed_objr   rU   rU   rV   $test_to_zarr_compute_false_roundtrip  s    

z-ZarrBase.test_to_zarr_compute_false_roundtripc                 C  st  ddl m} t \}}}| |  }}tt4 |  }| j||ddd}t	||sdt
tt
& | |}t|| W 5 Q R X W 5 Q R X |  | |}t|| W 5 Q R X | j||ddd}t	||st
tt
4 | |}ttj||gdd| W 5 Q R X W 5 Q R X |  | |}ttj||gdd| W 5 Q R X W 5 Q R X W 5 Q R X d S )	Nr   r  Fr   )r   r   r  )r   r  r  )r  r  rA   r  r   r`  r   r  r   r   r   r   r   r&   r   r   r  )r   r  r   r  ra  r   r  r   rU   rU   rV   +test_to_zarr_append_compute_false_roundtrip  s:        z4ZarrBase.test_to_zarr_append_compute_false_roundtripr  c              	   C  sj   |rt std tdtdfdddddd	gfd
}|rF|i }| |}t|| W 5 Q R X d S )Nrequires daskr{  r  r   r   ro   rp   r  r  rQ  r  )	r(   r   rz  r   ri   emptyr  r   r&   )r   r  r   	ds_reloadrU   rU   rV   test_save_emptydim	  s    
&
zZarrBase.test_save_emptydimc              
   C  sd   t ddtdfiddi}t 4 | j|tddidd}t|| W 5 Q R X W 5 Q R X d S )Nrg   r{  r  r   ro   r  r  )r   ri   r  r  r'   r   r  r&   )r   r   r  rU   rU   rV   .test_no_warning_from_open_emptydim_with_chunks!	  s     z7ZarrBase.test_no_warning_from_open_emptydim_with_chunksr   use_daskc           
   
   C  sV  |s|st std |r.| jdkr.td tddtdfi}tddtddfi}|rt|	d}|	d}| 
 }|j|f||dtdd	id
| j |rtj|fd|i| j}t|| W 5 Q R X tdddD ]6}dt||d i}	||	j|f|	|d| j qtj|fd|i| j}t|| W 5 Q R X W 5 Q R X d S )Nr  rp   r  ur  r\   ro      r  )r  r   rm   r  r   rg   )regionr  )r(   r   rz  r  r   r   ri   r  rl  r  r  r  r  r  r   r  r&   r  r|  rm  )
r   r  r   r  r  nonzerosr   r   r   r  rU   rU   rV   test_write_region(	  s`    





zZarrBase.test_write_regionr   r  r   c              
   C  s   t ddtdfi}t ddtddfi}|  |}|j|f| j dtdidtddifD ]$}||j|f||d| j qbt	j
|f| j}t|| W 5 Q R X W 5 Q R X d S )	Nr  r  r\   ro   r  rg   r  r  r   )r   ri   r  rl  r  r  r  r|  rm  r   r  r&   )r   r   r  r  r   r  r   rU   rU   rV   test_write_region_modeR	  s    

 zZarrBase.test_write_region_modec              
   C  s  t ddtdddifiddid}t ddtdddifiddid}t ddtdddifiddid}t ddtdddifiddid}|  V}|j|fd	d
i| j |j|fddi| j | |}t|| W 5 Q R X W 5 Q R X |  V}|j|fd	d
i| j |j|fddi| j | |}t|| W 5 Q R X W 5 Q R X |  ^}|j|fd	d
i| j |j|fddt	dii| j | |}t|| W 5 Q R X W 5 Q R X dS )z?Metadata should be overridden if mode="a" but not in mode="r+".r  r  r\   r  r,  globalru  r  r   Fr   r   r  r  rg   N)
r   ri   r  r  r  r  r  r   r&   r|  )r   r,  Zboth_modifiedZglobal_modifiedZonly_new_datar   r   rU   rU   rV   (test_write_preexisting_override_metadata_	  sJ    



z1ZarrBase.test_write_preexisting_override_metadatac              
     s  t ddtdfi t ddtddgfi}tj f fdd	}t ddtdddd	d
gfi}||&}|j|fddtdiij W 5 Q R X | H}t	j
ttdd(  j|fdtd iddj W 5 Q R X W 5 Q R X | <}t	j
tdd"  j|fdtd ij W 5 Q R X W 5 Q R X | @}t	j
tdd& |j|fddddgiij W 5 Q R X W 5 Q R X | D}t	j
tdd* |j|fddtd d diij W 5 Q R X W 5 Q R X | @}t	j
tdd&  j|fddtd iij W 5 Q R X W 5 Q R X | H}t	j
tdd. |jddj|fddtdiij W 5 Q R X W 5 Q R X | B}t	j
tdd(  j|fdtd iddj W 5 Q R X W 5 Q R X | @}t	j
tdd& |j|fddtd	iij W 5 Q R X W 5 Q R X d S )Nr  r  r  r\   r  c              
   3  sN     <} j|fj |V  |}t||  W 5 Q R X W 5 Q R X d S r   )r  r  r  r   r&   )r   r   r   rL   r   rU   rV   setup_and_verify_store	  s
    
zAZarrBase.test_write_region_errors.<locals>.setup_and_verify_storerp   r  rX  r  rg   z9cannot set region unless mode='a', mode='r+' or mode=Noner   r   r  zmust be a dictzmust be slice objectsr   ro   zstep on all slicesz4all keys in ``region`` are not in Dataset dimensionsr  zPall variables in the dataset to write must have at least one dimension in common)r   z&cannot list the same dimension in both)r  r  z:variable 'u' already exists with different dimension sizes)r   ri   rl  rj   r   r   r  r|  r  r   r   r   reescaper  Zassign)r   r1  r  r   r   rU   r  rV   test_write_region_errors	  s     
*
 044
 
z!ZarrBase.test_write_region_errorsc              
   C  s   d\}}}t ji t|t|t|dd}t dt|||f|d< |dddd}| |@}t|| | |j	dd	}t||j	dd	 W 5 Q R X W 5 Q R X d S )
N)rX  rX  r  )rg   r  rh   re  r   ro   rp   )rh   rg   r  r   rZ  )
r   r   ri   rl  Variabler  r  r   r%   rm  )r   nxnyntr,  ds1rr  rU   rU   rV   test_encoding_chunksizes	  s    
 
z!ZarrBase.test_encoding_chunksizesc              	   C  sd   t dt jtjjddddiddi}| j|ddd	dd
giiid}t|| W 5 Q R X d S )Nrg   )r  r  r   r{  rs  r   r  rm   r  rp   r7  )r   r   r   ri   r  r  r   r%   r   r,  r  rU   rU   rV   ,test_chunk_encoding_with_partial_dask_chunks	  s     z5ZarrBase.test_chunk_encoding_with_partial_dask_chunksc              	   C  sZ   t ddddddgfiddi}| j|ddddgiiid	}t|| W 5 Q R X d S )
Nr   rg   ro   rp   r  rX  rm   r  r7  )r   r   r  r   r%   r  rU   rU   rV   +test_chunk_encoding_with_larger_dask_chunks	  s    $ z4ZarrBase.test_chunk_encoding_with_larger_dask_chunksc              	   C  st   t  }|  \}|j|f| j tj|f| j}t|| tj|fddi| j}tjj	|j
sftW 5 Q R X d S )N
use_cftimeT)rB   r  r  r  r   r  r&   Zcodingr:  Zcontains_cftime_datetimesr  r   )r   r   r  ds_aZds_brU   rU   rV   test_open_zarr_use_cftime	  s    

z"ZarrBase.test_open_zarr_use_cftimec              	   C  s   t  }|  .}|j|fddi| j tj|f| j}W 5 Q R X |j|jd dkddd}|  }|j|fddi| j W 5 Q R X d S )Nr   r   rk  r   T)drop)	rB   r  r  r  r   r  whererf  Zsqueeze)r   r   Zinitial_storer  Zds_selZfinal_storerU   rU   rV   test_write_read_select_write
  s    

z%ZarrBase.test_write_read_select_writer  r   rR   c              
   C  s   |  }ddi|jd< t|tr$|n| }|  ,}|j|f| j t|t	j
|f| j W 5 Q R X t |jd< t|tr|n| }|  0}tjtdd |j|f| j W 5 Q R X W 5 Q R X d S )Nr   valueZgoodbadz#Invalid attribute in Dataset.attrs.r   )r+  r_  r   r   r  r  r  r  r&   r   r  r   r   r   r  )r   r  r   r  rU   rU   rV   test_attributes
  s    
 
zZarrBase.test_attributes)NNF)Br   r   r   r  r  r  r   r  r   r   r   r   r   r   r   r  r  r  r  r  r  r0   r  rF  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{  rU   rU   rx  rV   r    s   


     	
*R2	

		$	'+L
	r  c                   @  s   e Zd Zejdd ZdS )TestZarrDictStorec                 c  s   t rti V  ni V  d S r   )have_zarr_kvstorerC   r   rU   rU   rV   r  &
  s    z$TestZarrDictStore.create_zarr_targetNr   r   r   r   r   r  rU   rU   rU   rV   r  $
  s   r  c                   @  s(   e Zd Zejdd Zejdd ZdS )TestZarrDirectoryStorec              	   c  s    t dd}|V  W 5 Q R X d S )N.zarrr  r   r   tmprU   rU   rV   r  0
  s    z)TestZarrDirectoryStore.create_zarr_targetc              	   c  sD   |   2}tjj|dd}tr0|jjjdks0t|V  W 5 Q R X d S )Nr   r  rp   )	r  r   r  r  have_zarr_v3r  r   Z_store_versionr   )r   r  r&  rU   rU   rV   r   5
  s
    
z#TestZarrDirectoryStore.create_storeN)r   r   r   r   r   r  r   rU   rU   rU   rV   r  .
  s   
r  c                   @  s   e Zd ZdZdd ZdS )
ZarrBaseV3r  c                 C  sV   t dddd}tt2 tt | | W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr   ro   rc  re  )r   r   r`  r   r   r   r   )r   r,  rU   rU   rV   rg  C
  s
    z0ZarrBaseV3.test_roundtrip_coordinates_with_spaceN)r   r   r   r  rg  rU   rU   rU   rV   r	  @
  s   r	  zrequires zarr version 3r  c                   @  s   e Zd Zejdd ZdS )TestZarrKVStoreV3c                 c  s   t i V  d S r   )rE   r   rU   rU   rV   r  N
  s    z$TestZarrKVStoreV3.create_zarr_targetNr  rU   rU   rU   rV   r
  L
  s   r
  c                   @  s   e Zd Zejdd ZdS )TestZarrDirectoryStoreV3c              	   c  s$   t dd}t|V  W 5 Q R X d S Nz.zr3r  )r   rD   r  rU   rU   rV   r  U
  s    z+TestZarrDirectoryStoreV3.create_zarr_targetNr  rU   rU   rU   rV   r  S
  s   r  c                   @  s"   e Zd ZddiZejdd ZdS ) TestZarrDirectoryStoreV3FromPathr  r  c              	   c  s    t dd}|V  W 5 Q R X d S r  r  r  rU   rU   rV   r  a
  s    z3TestZarrDirectoryStoreV3FromPath.create_zarr_targetN)r   r   r   r  r   r   r  rU   rU   rU   rV   r  [
  s   r  r   c                  C  sF   t d t } d}| j|ddid tj|ddid}t| | d S )Naiobotocorezmemory://test.zarrtestZ
zarr_write)Zstorage_optionsZ	zarr_read)r   importorskiprB   r  r   r  r&   )r   r  r  rU   rU   rV   test_zarr_storage_optionsg
  s    
r  c                   @  sD   e Zd ZU dZded< ejdd Zdddd	Zddd
dZ	dS )TestScipyInMemoryDatascipyrH   r   c                 c  s   t  }t|dV  d S Nr   r   r   ScipyDataStorer   fobjrU   rU   rV   r   v
  s    z"TestScipyInMemoryData.create_storer   rJ   c                 C  s   t ddijdd d S )Nr   r   r  r  )r   r   r   rU   rU   rV   test_to_netcdf_explicit_engine{
  s    z4TestScipyInMemoryData.test_to_netcdf_explicit_enginec              	   C  sR   t dddddgfi}| }| | }tt|}t|| W 5 Q R X d S )Nr   rg   ro   rp   r  )r   r   r   r   r   r   r&   )r   rL   r  r   r  rU   rU   rV   test_bytes_pickle
  s
    z'TestScipyInMemoryData.test_bytes_pickleN)
r   r   r   r   r   r   r   r   r  r  rU   rU   rU   rV   r  r
  s
   

r  c                   @  sp   e Zd ZU dZded< ejdd Zejddd	Ze	j
jd
dddddZe	j
jd
dddddZdS )TestScipyFileObjectr  rH   r   c                 c  s   t  }t|dV  d S r  r  r  rU   rU   rV   r   
  s    z TestScipyFileObject.create_storeNFc                 c  s   |d kri }|d kri }t  b}t|d}| j||f| W 5 Q R X t|d&}| j|f|}|V  W 5 Q R X W 5 Q R X W 5 Q R X d S )Nwbrb)r   r   r   )r   rL   r   r   r   r  r  r   rU   rU   rV   r   
  s    zTestScipyFileObject.roundtripzcannot pickle file objectsr  r   rJ   c                 C  s   d S r   rU   r   rU   rU   rV   r  
  s    zTestScipyFileObject.test_picklec                 C  s   d S r   rU   r   rU   rU   rV   r  
  s    z)TestScipyFileObject.test_pickle_dataarray)NNF)r   r   r   r   r   r   r   r   r   r   r  rz  r  r  rU   rU   rU   rV   r  
  s   

     r  c                   @  sd   e Zd ZU dZded< ejdd Zdddd	Zddd
dZ	ddddZ
eddddZdS )TestScipyFilePathr  rH   r   c              
   c  s6   t  &}tj|dd}|V  W 5 Q R X W 5 Q R X d S ri  )r   r   r  rl  rU   rU   rV   r   
  s    zTestScipyFilePath.create_storer   rJ   c              
   C  sN   t dddgddggid}tjtdd | | W 5 Q R X W 5 Q R X d S )	Nr   ro   rp   r  rX  ru  zmust be 1-dimensionalr   )r   r   r   r   r   r   rU   rU   rV   test_array_attrs
  s    z"TestScipyFilePath.test_array_attrsc              
   C  s6   t d$}t d}t|| W 5 Q R X W 5 Q R X d S )Nzexample_1.nc.gzrV  )rW   r&   r   rU   rU   rV   "test_roundtrip_example_1_netcdf_gz
  s    

z4TestScipyFilePath.test_roundtrip_example_1_netcdf_gzc              	   C  s8   t ddd"}|j D ]}|jjstqW 5 Q R X d S )Nbears.ncr  r  )rW   r   r   r`   Zisnativer   )r   r   r  rU   rU   rV   test_netcdf3_endianness
  s    z)TestScipyFilePath.test_netcdf3_endiannessc              
   C  sf   t ddR}tj|ddd}|d W 5 Q R X tjtdd t|d	d
 W 5 Q R X W 5 Q R X d S )NTr   r   ZNETCDF4r   r   zpip install netcdf4r   r  r  )r   r'  r   r(  r   r   r  r   )r   r  r,  rU   rU   rV   test_nc4_scipy
  s
    z TestScipyFilePath.test_nc4_scipyN)r   r   r   r   r   r   r   r   r  r   r"  r5   r#  rU   rU   rU   rV   r  
  s   

r  c                   @  sB   e Zd ZU dZded< dZded< ejdd Zd	d
ddZ	dS )TestNetCDF3ViaNetCDF4Datar  rH   r   r   rI   r   c              
   c  s:   t  *}tjj|ddd}|V  W 5 Q R X W 5 Q R X d S )Nr   r   r   r   rj  rl  rU   rU   rV   r   
  s      z&TestNetCDF3ViaNetCDF4Data.create_storer   rJ   c              
   C  s\   t ddddgi}tddtiid}tjtdd  | j||d	 W 5 Q R X W 5 Q R X d S )
Nrg   r   r  r  r`   r  zencoding dtype=str for vlenr   r7  )r   r  r   r   r   r   r   )r   r,  rT   rU   rU   rV   r5  
  s
    z9TestNetCDF3ViaNetCDF4Data.test_encoding_kwarg_vlen_stringN)
r   r   r   r   r   r   r   r   r   r5  rU   rU   rU   rV   r$  
  s
   

r$  c                   @  s4   e Zd ZU dZded< dZded< ejdd Zd	S )
 TestNetCDF4ClassicViaNetCDF4Datar  rH   r   NETCDF4_CLASSICrI   r   c              
   c  s:   t  *}tjj|ddd}|V  W 5 Q R X W 5 Q R X d S )Nr   r'  r%  rj  rl  rU   rU   rV   r   
  s      z-TestNetCDF4ClassicViaNetCDF4Data.create_storeN)	r   r   r   r   r   r   r   r   r   rU   rU   rU   rV   r&  
  s   
r&  c                   @  sV   e Zd ZU dZded< ddddZedddd	Zddd
dZddddZ	dS )TestGenericNetCDFDatar   rI   r   r   rJ   c                 C  s   d S r   rU   r   rU   rU   rV   r   
  s    z&TestGenericNetCDFData.test_write_storec              
   C  s   t  }tjtdd |jddd W 5 Q R X tjtdd |jdd W 5 Q R X t 6}|| tjtdd t|dd W 5 Q R X W 5 Q R X | }tjtdd tt|dd W 5 Q R X d S )Nzunrecognized enginer   foo.ncr   r  zinvalid enginer  )rB   r   r   r   r   r   r   r   )r   rL   r  Znetcdf_bytesrU   rU   rV   test_engine
  s    
 z!TestGenericNetCDFData.test_enginec                   s   t  t }tr|d tr(|d |D ]j}| jD ]^}t N}j|||d |D ]2}t||d  fddj	D  W 5 Q R X qVW 5 Q R X q6q,d S )Nr  r  )r   r   r  c                   s"   g | ]}t | j | jqS rU   )r#   r  )rX   r   r   rL   rU   rV   rY     s   zNTestGenericNetCDFData.test_cross_engine_read_write_netcdf3.<locals>.<listcomp>)
rB   rf  r*   addr+   r   r   r   r   r   )r   valid_engineswrite_enginer   r  read_enginerU   r+  rV   $test_cross_engine_read_write_netcdf3  s    


z:TestGenericNetCDFData.test_cross_engine_read_write_netcdf3c              	   C  s   t ddtdfi}| j|tdgdd&}|jd tdksDtt|| W 5 Q R X | j|tddd&}|jd tdkstt|| W 5 Q R X ddgi|_| |&}|jd tdkstt|| W 5 Q R X ddi|_| |(}|jd tdkstt|| W 5 Q R X d S rb  re  r  rU   rU   rV   rg  "  s    
z2TestGenericNetCDFData.test_encoding_unlimited_dimsN)
r   r   r   r   r   r   r:   r*  r0  rg  rU   rU   rU   rV   r(  
  s   
r(  z#ignore:use make_scale(name) insteadc                   @  s  e Zd ZU dZded< ejdd Zej	
dejdedej	jed	d
dejdedej	jed	d
ddgddddZeej	
dddgddddZej	dddddZddddZddddZddddZddddZddd d!Zddd"d#ZdS )$TestH5NetCDFDatah5netcdfrH   r   c              	   c  s&   t  }tj|dV  W 5 Q R X d S r  )r   r   H5NetCDFStorer   )r   r  rU   rU   rV   r   ?  s    zTestH5NetCDFData.create_storez#invalid_netcdf, warntype, num_warnsNro   r   r  r  F)TNr   r   rJ   c           
   
   C  s   t ddtddtd  fi}d|i}tjdd*}| j||d}t|| W 5 Q R X W 5 Q R X d	}|r|D ]&}	t|	j|rtd
t	|	j
krt|d7 }qt||kstd S )Nrg   r  r                ?invalid_netcdfTrecordr7  r   zcomplex dtypesro   )r   ri   r  rD  rE  r   r%   
issubclasscategoryr   messager   )
r   r5  ZwarntypeZ	num_warnsr   r   r7  r   Zrecorded_num_warnswarningrU   rU   rV   test_complexD  s    $
zTestH5NetCDFData.test_complexr5  c              
   C  sx   dd l }tddtddtd  fi}d|i}tj|jdd* | j||d	}t|| W 5 Q R X W 5 Q R X d S )
Nr   rg   r  r  r4  r5  z"are not a supported NetCDF featurer   r7  )	r2  r   ri   r  r   r   ZCompatibilityErrorr   r%   )r   r5  r2  r   r   r   rU   rU   rV   test_complex_errorg  s    $ z#TestH5NetCDFData.test_complex_errorz.ignore:You are writing invalid netcdf featuresc              	   C  sR   t ddtddtdifi}ddi}| j||d}t|| W 5 Q R X d S )Nrg   r  r  Z
numpy_boolTr5  r7  )r   ri   r  Zbool_r   r&   )r   r   r   r   rU   rU   rV   test_numpy_bool_u  s    "z!TestH5NetCDFData.test_numpy_bool_c                 C  sx   t  d}d|jd< ddg}|D ]P}t @}|j||d |D ]&}t||d}t|| W 5 Q R X q@W 5 Q R X q"d S )Nrk  r  r   r  r2  r  )rB   r  r_  r   r   r   r&   )r   rL   r-  r.  r  r/  r   rU   rU   rV   $test_cross_engine_read_write_netcdf4~  s    
z5TestH5NetCDFData.test_cross_engine_read_write_netcdf4c              
   C  s`   t  P}t|d}d|_W 5 Q R X t|}tddid}t|| W 5 Q R X W 5 Q R X d S )Nr   r  r   r  ru  )r   r'  r   r   r   r&   )r   r  r<  r   r   rU   rU   rV   test_read_byte_attrs_as_unicode  s    
z0TestH5NetCDFData.test_read_byte_attrs_as_unicodec              	   C  s   t ddtdfi}| j|tdgdd&}|jd tdksDtt|| W 5 Q R X ddgi|_| |&}|jd tdkstt|| W 5 Q R X d S rb  re  r  rU   rU   rV   rg    s    z-TestH5NetCDFData.test_encoding_unlimited_dimsc           	   
   C  s   ddddddfdd ddd dfdd ddddd dff}|D ]\}}t  }ddd|jjd	}|d
 j| |d
 j| || dtdgf|d< |d d |d< | |.}| D ]\}}||d
 j| kst	qW 5 Q R X qBd S )NgziprQ  compressioncompression_optsT)rF  rS  lzf)rC  rD  rF  rS  rJ  )rK  rL  rM  rN  r  Z
scalar_dimr  Zscalarr   )
rB   r  rO  rm   r  ri   rj   r   r   r   )	r   Z	ENCODINGSZcompr_inZ	compr_outrL   Zcompr_commonr   r   r   rU   rU   rV   test_compression_encoding_h5py  s:    
z/TestH5NetCDFData.test_compression_encoding_h5pyc              
   C  s  t ddtdfi}t d}|j|dddddddid	 t|dd
.}|jjd dks^t|jjd dksrtW 5 Q R X W 5 Q R X t :}t	j
tdd  |j|dddddid	 W 5 Q R X W 5 Q R X t <}t	j
tdd" |j|ddddddid	 W 5 Q R X W 5 Q R X dS )zWhen mismatched h5py and NetCDF4-Python encodings are expressed
        in to_netcdf(encoding=...), must raise ValueError
        rg   r  rz   r2  rA  Tr  )rC  rF  rD  rS  )r   rm   r  rF  rS  z+'zlib' and 'compression' encodings mismatchr   rE  )rC  rF  z5'complevel' and 'compression_opts' encodings mismatchr  )rC  rD  rS  N)r   ri   rl  r   r   r   rg   rm   r   r   r   r   r  rU   rU   rV   $test_compression_check_encoding_h5py  sR    ( z5TestH5NetCDFData.test_compression_check_encoding_h5pyc              	   C  s   t ddtdfi}dddddii}| j||d*}|jjd	 sHt|jjd
 dks\tW 5 Q R X dddd dii}| j||d.}|jjd dkst|jjd d kstW 5 Q R X d S )Nrg   r  rz   rm   rA  rQ  rB  r7  rF  rS  rE  rC  rD  )r   ri   rl  r   rg   rm   r   r  rU   rU   rV   test_dump_encodings_h5py  s    z)TestH5NetCDFData.test_dump_encodings_h5py)r   r   r   r   r   r   r   r   r   r  r  r  FutureWarningr  r)   r<  r3   r=  rF  r>  r?  r@  rg  rF  rG  rH  rU   rU   rU   rV   r1  9  s@   



+3r1  c                   @  s(   e Zd ZddddZddddZdS )TestH5NetCDFAlreadyOpenr   rJ   c              
   C  s*  dd l }t }tj|dd$}|d}|dd}d|d< W 5 Q R X i }t|jtd	krt|jj	jtd
krt
dd}|j|fddi|}t|d }t|}	tddi}
t|
|	 W 5 Q R X |j|fddi|}tj|dd}t|}	tddi}
t|
|	 W 5 Q R X W 5 Q R X d S )Nr   r   r  r  rg   r  r   .0.10.03.0.0TZdecode_vlen_stringsr   rH  r}  r%  )r2  r   r'  r   r(  r*  r   __version__coreh5pyr  Filer   r3  r   r&   )r   r2  r  r<  r&  r   rT   r  r   r   r   rU   rU   rV   test_open_dataset_group  s.    




z/TestH5NetCDFAlreadyOpen.test_open_dataset_groupc              
   C  s   dd l }t }tj|dd4}|dd |dtjd}td|d d < W 5 Q R X i }t	|j
t	dkrt	|jjj
t	d	krtd
d}|j|fddi|}t|}t|2}|jd
d}	tddtdfi}
t|
|	 W 5 Q R X W 5 Q R X d S )Nr   r   r  rg   r\   r  r  rK  rL  TrM  r   rH  r&  )r2  r   r'  r   r)  r*  ri   r+  rl  r   rN  rO  rP  r  rQ  r   r3  r   r+  r&   )r   r2  r  r<  r   rT   r  r   r   r  r   rU   rU   rV   r  )  s&    


z%TestH5NetCDFAlreadyOpen.test_deepcopyN)r   r   r   rR  r  rU   rU   rU   rV   rJ    s   rJ  c                   @  sH   e Zd ZU dZded< ddddZdddd	Zeddd
dZdS )TestH5NetCDFFileObjectr2  rH   r   r   rJ   c              
   C  s   t jtdd tddd W 5 Q R X W 5 Q R X t jtdd td W 5 Q R X W 5 Q R X t jtdd tdd	d W 5 Q R X W 5 Q R X t jtd
d" ttddd W 5 Q R X W 5 Q R X d S )NzHDF5 as bytesr   s   HDF

r2  r  z/match in any of xarray's currently installed IOs   garbagezcan only read bytesr  z)not the signature of a valid netCDF4 file)r   r   r   r   r   r   rU   rU   rV   test_open_badbytesD  s$     
 z)TestH5NetCDFFileObject.test_open_badbytesc                 C  sz   t  }d|jd< t Z}|j|dd t|d6}t|dd t|dd W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr  r   r2  r  r  )rB   r_  r   r   r   r   )r   r   r  r  rU   rU   rV   test_open_twiceV  s    
z&TestH5NetCDFFileObject.test_open_twicec                 C  s8  t  d}d|jd< t }|j|dd t|d}t|dd}t|| W 5 Q R X |d t|}t|| W 5 Q R X |d t	|
 (}t|dd}t|| W 5 Q R X W 5 Q R X |d tjtdd	 t|d
d W 5 Q R X W 5 Q R X t|d}|d t| W 5 Q R X W 5 Q R X d S )Nrk  r  r   r2  r  r  r   znot a valid NetCDF 3r   r  r  )rB   r  r_  r   r   r   r   r&   seekr   readr   r   r  )r   r   r  r  r   ZbiorU   rU   rV   test_open_fileobj`  s(    





 
z(TestH5NetCDFFileObject.test_open_fileobjN)	r   r   r   r   r   rT  rU  r:   rX  rU   rU   rU   rV   rS  @  s
   

rS  c                   @  s8   e Zd ZejdddZddddZddd	d
ZdS )TestH5NetCDFViaDaskDataNFc              	   c  sL   |d kri }|d kri }| dd t| ||||}|V  W 5 Q R X d S r  )r  r1  r   r  rU   rU   rV   r     s        z!TestH5NetCDFViaDaskData.roundtripr   rJ   c                 C  s   d S r   rU   r   rU   rU   rV   r    s    z,TestH5NetCDFViaDaskData.test_dataset_cachingc              	   C  s   t jdddd}t|ddd}d|jd< d|jd	< t jddd
d}t|ddd}d
|jd< d|jd	< t||d}| |2}|d jd dkst|d jd d
kstW 5 Q R X d S r  r  r  rU   rU   rV   r    s    



z6TestH5NetCDFViaDaskData.test_write_inconsistent_chunks)NNF)r   r   r   r   r   r   r  r  rU   rU   rU   rV   rY    s        rY  r  r  r2  pynior  )paramsc                 C  s   | j S r   r  requestrU   rU   rV   
readengine  s    r_  ro   r  c                 C  s   | j S r   r\  r]  rU   rU   rV   r    s    r  r  c              	   c  s6   | j }|d k	r,t|d |V  W 5 Q R X n|V  d S )N)file_cache_maxsize)r  r    )r^  maxsizerU   rU   rV   r`    s
    r`  c                 C  s   | j S r   r\  r]  rU   rU   rV   parallel  s    rb  c                 C  s   | j S r   r\  r]  rU   rU   rV   r    s    r  c                 C  s6   | dkrt d n| dkr(t d n
t |  d S )Nr  netCDF4rZ  ZNio)r   r  r  rU   rU   rV   skip_if_not_engine  s
    rd  c              
   C  s   t |  trtd tj|}tdd|fi}t|}| dkrH| nd}|j	j
D ]F}	|jt|	|	d d}
|dkr|
j||	 |d	 qT|
j||	 d
 qTt|dd| ||s| dkr|ndd$}t|d jtstt|| W 5 Q R X W 5 Q R X d S )NzSkipping on Windowsr   rg   rZ  r  ro   r  r  r  )r   nestedr  )combine
concat_dimr   rb  r  )rd  r   r   rz  ri   r  r  r   r  rg   r   rm  r|  r   r  r   r   rL   r  r   r&   )r_  r  rb  r  r`  Zranddatar,  ZtmpfilesZwriteengineiiZsubdsr   rU   rU   rV   test_open_mfdataset_manyfiles  s.    

ri  c               	   C  sB   t jt jtdd} tt| }t|ts4t	W 5 Q R X d S )NrL   rV  )
rM   rN   rO   rP   rQ   r   r   r   r   r   )r   r   rU   rU   rV   )test_open_mfdataset_can_open_path_objects  s    rj  c            	      C  s  ddl m}  td}tdD ]b}| || dJ}|dd |dtjd}d| d	| g|_t	d|d
d
< W 5 Q R X qt
|d b}t
|d J}tj||gdd}tj|d |d gddd}t|| W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d
S )zO
    Case when an attribute of type list differs across the multiple files
    r   r   rp   r   rg   r  Ztest_varz	string a z	string b Nro   r  re  rf  rg  )rc  r   r  r  r)  r*  ri   r+  Z	test_attrrl  r   r   r  r   r&   )	r   r  r   r  Zvlvarr  rr  r,  r   rU   rU   rV   test_open_mfdataset_list_attr  s$    
  rl  c                   @  s  e Zd ZdZdZejd;ddZdd Ze	j
dd	d
ge	j
ddddge	j
dddddgddddZe	j
ddddge	jdddiddigi d dd!e	jd"ddiddigddid d"d!e	jd#ddiddigd$d%d#d!e	jd&ddd'dd(d)gd$d%d&d!e	jd*ddd'd+d(d,gdd(d)d d*d!fd-d. Zddd/d0Zddd1d2Ze	j
dd	d
ge	j
ddddgddd3d4Zddd5d6Zddd7d8Zddd9d:Zd$S )<(TestOpenMFDatasetWithDataVarsAndCoordsKwr  v1r   c              
   c  sh   |   \}}|j| |d< t >}t ,}|| || ||g||gfV  W 5 Q R X W 5 Q R X d S )Nrg   )'gen_datasets_with_common_coord_and_timerg   r   r   )r   fuzzr  rr  Ztmpfile1Ztmpfile2rU   rU   rV   setup_files_and_datasets"  s    

zATestOpenMFDatasetWithDataVarsAndCoordsKw.setup_files_and_datasetsc           
      C  s   d}d}t |}t |}t |d| d}t j||}t j||}t| jddg|f| jdd| fidg|fdg|fdd}t| jddg|f| jdd| fidg|fdg|fdd}	||	fS )Nr\   rp   ro   rh   rg   )rh   rg   )r  rf  )ri   rl  r  r  r   var_name
coord_name)
r   r  r  rg   t1t2rn  Zv2r  rr  rU   rU   rV   ro  2  s     

zPTestOpenMFDatasetWithDataVarsAndCoordsKw.gen_datasets_with_common_coord_and_timezcombine, concat_dim)re  rh   )	by_coordsNoptrI  minimalZ	differentrO   outerinnerleftrightr   rJ   c           
   
   C  sn   |   \\}\}}|dkr"|  t|||||d&}tj||g|d|d}	t||	 W 5 Q R X W 5 Q R X d S )Nrv  r  rf  rg  rO   rh   )r  r  rO   )rq  reverser   r   r  r&   )
r   rf  rg  rw  rO   r  r  rr  r   Z	ds_expectrU   rU   rV   'test_open_mfdataset_does_same_as_concatI  s        zPTestOpenMFDatasetWithDataVarsAndCoordsKw.test_open_mfdataset_does_same_as_concatcombine_attrsr_  r   expect_errorr  r   ro   rp   F)idoverrideZno_conflictsNTZ	identicalr{  r  )r   r  Zdrop_conflictsra   )r  r  c              
   C  s   |   \}\}}t|D ]0\}}	t|	 }
|| |
_|
  |
|	 q|r|tt	j
 t	j|dd|d W 5 Q R X n,t	j|dd|d}
|
j|kstW 5 Q R X W 5 Q R X d S )Nre  rh   )rf  rg  r  )rq  r   r   r   r_  r	  r   r   r   r   Z
MergeErrorr   r   )r   r  r_  r   r  r  r  rr  r   r  r   rU   rU   rV   )test_open_mfdataset_dataset_combine_attrsZ  s,    
zRTestOpenMFDatasetWithDataVarsAndCoordsKw.test_open_mfdataset_dataset_combine_attrsc              
   C  s   |   v\}\}}t|D ]4\}}t| }d| |jd< |  || qtj|ddd}|j	dkspt
W 5 Q R X W 5 Q R X dS )zJ
        Case when an attribute differs across the multiple files
        r\   test_dataset_attrre  rh   rk  N)rq  r   r   r   r_  r	  r   r   r   r  r   r   r  r  rr  r   r  r   rU   rU   rV   *test_open_mfdataset_dataset_attr_by_coords  s    zSTestOpenMFDatasetWithDataVarsAndCoordsKw.test_open_mfdataset_dataset_attr_by_coordsc              
   C  s   |   z\}\}}t|D ]4\}}t| }||d jd< |  || qtj|ddd}|d j	dkstt
W 5 Q R X W 5 Q R X dS )z`
        Case when an attribute of a member DataArray differs across the multiple files
        rn  test_dataarray_attrre  rh   rk  r   N)rq  r   r   r   r_  r	  r   r   r   r  r   r  rU   rU   rV   ,test_open_mfdataset_dataarray_attr_by_coords  s    zUTestOpenMFDatasetWithDataVarsAndCoordsKw.test_open_mfdataset_dataarray_attr_by_coordsc              
   C  s`   | j ddJ\}\}}|dkr&|  tjtdd t||||dd W 5 Q R X W 5 Q R X d S )Nrb   )rp  rv  z#cannot align objects.*join.*exact.*r   exactr}  )rq  r~  r   r   r   r   )r   rf  rg  rw  r  r  rr  rU   rU   rV   +test_open_mfdataset_exact_join_raises_error  s     zTTestOpenMFDatasetWithDataVarsAndCoordsKw.test_open_mfdataset_exact_join_raises_errorc           
   
   C  s   d}|   ~\}\}}t||dddZ}|| j j}|| j j}|| j j}|| j j}	|	|ksdt||kspt||ks|tW 5 Q R X W 5 Q R X d S )NrI  re  rh   r  rf  rg  rq  r   rs  rO  rr  r   
r   rw  r  r  rr  r   Zcoord_shapeZcoord_shape1Zcoord_shape2Z	var_shaperU   rU   rV   #test_common_coord_when_datavars_all  s        zLTestOpenMFDatasetWithDataVarsAndCoordsKw.test_common_coord_when_datavars_allc           
   
   C  s   d}|   ~\}\}}t||dddZ}|| j j}|| j j}|| j j}|| j j}	|	|ksdt||kspt||ks|tW 5 Q R X W 5 Q R X d S )Nrx  re  rh   r  r  r  rU   rU   rV   'test_common_coord_when_datavars_minimal  s        zPTestOpenMFDatasetWithDataVarsAndCoordsKw.test_common_coord_when_datavars_minimalc                 C  s|   |   j\}}tt  t|ddd W 5 Q R X W 5 Q R X tt  t|ddd W 5 Q R X W 5 Q R X W 5 Q R X d S )NZminimumrv  )r  rf  )rf  rf  )rq  r   r   r   r   )r   r  ra  rU   rU   rV   (test_invalid_data_vars_value_should_fail  s    zQTestOpenMFDatasetWithDataVarsAndCoordsKw.test_invalid_data_vars_value_should_fail)r   )r   r   r   rs  rr  r   r   rq  ro  r   r  r  r  r  r  r  r  r  r  r  r  rU   rU   rU   rV   rm    sr    
        
 rm  c                   @  sZ  e Zd Zejdd ZejdVddZddd	d
ZddddZddddZ	ddddZ
ddddZddddZddddZeddddZddddZddddZddddZdddd Zddd!d"Zddd#d$Zddd%d&Zddd'd(Zddd)d*Zejjd+d,ddd-d.Zddd/d0Zddd1d2Zddd3d4Zddd5d6Z ddd7d8Z!ddd9d:Z"ddd;d<Z#ddd=d>Z$ddd?d@Z%dddAdBZ&dddCdDZ'dddEdFZ(dddGdHZ)dddIdJZ*dddKdLZ+ejjdddMdNZ,dddOdPZ-dddQdRZ.ejj/e0dSd,dddTdUZ1dS )WTestDaskc                 c  s   t  V  d S r   r   r   rU   rU   rV   r     s    zTestDask.create_storeNFc                 c  s   |  V  d S r   )r  )r   rL   r   r   r   rU   rU   rV   r     s    zTestDask.roundtripr   rJ   c                 C  s   d S r   rU   r   rU   rU   rV   r1    s    z1TestDask.test_roundtrip_string_encoded_charactersc                 C  s   d S r   rU   r   rU   rU   rV   rg    s    z.TestDask.test_roundtrip_coordinates_with_spacec              	   C  sJ   t dddg}td|f|d d}| |}t|| W 5 Q R X d S )Nr2  r3  r4  rh   r   r5  )r8  r9  r   r   r&   )r   r:  r   r   rU   rU   rV   r;    s    z+TestDask.test_roundtrip_numpy_datetime_datac           
   
   C  s   ddl m} | }| D ]}|ddd|dddg}td|f|d d}t|}t|dddg}| |V}t|jj| }	|	t	ddk
 stt|jj| }	|	t	ddk
 stW 5 Q R X qd S )Nr   r<  ro   rp   rh   r5  rA  )rC  r=  r   r   ri   rj   r   rG  rh   rH  rI  r   r6  )
r   r=  rJ  rK  r:  r   rL  rM  r   rN  rU   rU   rV   rO    s    
z,TestDask.test_roundtrip_cftime_datetime_datac                 C  s   d S r   rU   r   rU   rU   rV   r   &  s    zTestDask.test_write_storec              	   C  sT   t dddddgfi}| |*}|jjjr0t|jj |jjjrFtW 5 Q R X d S )Nr   rg   r  r  r	  )r   r   r   r  r   r   r   r   rU   rU   rV   r  *  s
    zTestDask.test_dataset_cachingc                 C  s<  t ddtjdfi}t }t }|jtdd| |jtddd| t||gddd:}t	|j
jjtjst|j
jjjdkstt|| W 5 Q R X t||gdddd	id
}|j
jjjdkstW 5 Q R X W 5 Q R X W 5 Q R X tjtdd td W 5 Q R X tjtdd td W 5 Q R X d S )Nr   rg   r\   r  r  re  rg  rf  rJ  r  )rg  rf  r  )r  rp   r  rp   zno files to openr   zfoo-bar-baz-*.ncz	wild-cardhttp://some/remote/uri)r   ri   r  r  r   rm  r|  r   r   r   r   r  rL   r  Arrayr   r  r&   r   r   r  r   r   r,  tmp1tmp2r   rU   rU   rV   test_open_mfdataset1  s4         2zTestDask.test_open_mfdatasetc              	   C  s4   t d t jtdd tddd W 5 Q R X d S )Nr  zno filesr   r  r  r  )r   r  r   r  r   r   rU   rU   rV   test_open_mfdataset_no_filesG  s    
z%TestDask.test_open_mfdataset_no_filesc                 C  s  t dddgtjddfi}t b}t N}t :}t &}|jtdtdd| |jtddtdd| |jtdtddd| |jtddtddd| t||g||ggd	ddgd
<}t	|j
jjtjst|j
jjjdks
tt|| W 5 Q R X t||g||ggd	ddgdddd}|j
jjjdks\tW 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr   rg   r  r\   r  r  rX  r  re  rk  )rJ  )rX  rX  r  rp   )rf  rg  r  )r  )rp   rp   rp   rp   )r   ri   r  r  r   rm  r|  r   r   r   r   r  rL   r  r  r   r  r&   )r   r,  r  r  tmp3tmp4r   rU   rU   rV   test_open_mfdataset_2dO  s4    



 zTestDask.test_open_mfdataset_2dc                 C  s   t ddtjdfi}t ~}t l}t|}t|}|jtdd| |jtddd| t	||gddd}t
|| W 5 Q R X W 5 Q R X W 5 Q R X d S Nr   rg   r\   r  r  re  r  r   ri   r  r  r   r   rm  r|  r   r   r&   )r   r,  tmps1tmps2r  r  r   rU   rU   rV   test_open_mfdataset_pathlibl  s      z$TestDask.test_open_mfdataset_pathlibc                 C  s8  t dddgtjddfi}t }t }t }t }t|}t|}t|}t|}	|jtdtdd| |jtddtdd| |jtdtddd| |jtddtddd|	 t	||g||	ggd	ddgd
}
t
||
 W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr   rg   r  r\   r  r  rX  r  re  rk  r  )r   r,  r  r  Ztmps3Ztmps4r  r  r  r  r   rU   rU   rV   test_open_mfdataset_2d_pathliby  s(    
 z'TestDask.test_open_mfdataset_2d_pathlibc                 C  s   t ddtjdfi}t n}t \}|jtdd| |jtddd| t||gddd}t	|| W 5 Q R X W 5 Q R X W 5 Q R X d S r  )
r   ri   r  r  r   rm  r|  r   r   r&   r  rU   rU   rV   test_open_mfdataset_2  s      zTestDask.test_open_mfdataset_2c                 C  s   t ddtjdfi}t }t }|jtdd}|jtddd}d|jd< d|jd< || || t	||gdd	d
6}|j
|j
ksttjtdd |j W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr   rg   r\   r  r  test1r  test2re  r  zno attributer   )r   ri   r  r  r   rm  r|  r_  r   r   r  r   r   r   AttributeErrorr  r   r,  r  r  r  rr  r   rU   rU   rV   test_attrs_mfdataset  s$    



  zTestDask.test_attrs_mfdatasetc              
   C  s   t ddtjdfi}td\}}|jtdd}|jtddd}d|jd< d|jd	< || || t	||gdd
|d,}|jd	 |jd	 kst
d|jkst
W 5 Q R X W 5 Q R X d S Nr   rg   r\   rp   r  r  r  r  r  re  )rg  rf  Z
attrs_file)r   ri   r  r  r  rm  r|  r_  r   r   r   r  rU   rU   rV   test_open_mfdataset_attrs_file  s"    



   z'TestDask.test_open_mfdataset_attrs_filec           	   
   C  s   t ddtjdfi}td\}}t|}t|}|jtdd}|jtddd}d|jd< d|jd	< |	| |	| t
||gdd
|d,}|jd	 |jd	 kstd|jkstW 5 Q R X W 5 Q R X d S r  )r   ri   r  r  r  r   rm  r|  r_  r   r   r   )	r   r,  r  r  r  r  r  rr  r   rU   rU   rV   #test_open_mfdataset_attrs_file_path  s&    



   z,TestDask.test_open_mfdataset_attrs_file_pathc                 C  s   t dtjdftdd}t l}t Z}|jtdd| |jtddd| t	||gdd}t
|| W 5 Q R X W 5 Q R X W 5 Q R X d S )Nrg   r\   r   rg   r  r  rv  rf  )r   ri   r  r  rl  r   rm  r|  r   r   r&   r  rU   rU   rV    test_open_mfdataset_auto_combine  s     z)TestDask.test_open_mfdataset_auto_combinec                 C  s   t dtjdftdd}t p}t ^}|jtdd| |jtddd| t	j
tdd t||gdd W 5 Q R X W 5 Q R X W 5 Q R X d S )	Nrg   r\   r  r  r  z`concat_dim` has no effectr   )rg  )r   ri   r  r  rl  r   rm  r|  r   r   r   r   r   )r   r,  r  r  rU   rU   rV   -test_open_mfdataset_raise_on_bad_combine_args  s     z6TestDask.test_open_mfdataset_raise_on_bad_combine_argsz#mfdataset loses encoding currently.r  c                 C  s  t dtjdfdtjddddfd}d|jjd< t }t }|j	t
d	d
}|j	t
d	dd
}d|jjd< d|jjd< || || t||gddZ}|jjd |jjd kst|jjd |jjd kst|jjd |jjd kstW 5 Q R X W 5 Q R X W 5 Q R X d S )Nrh   r\   z
2010-01-01Z1D)startr  freq)r   rh   zdays since 2010-01-01r   r  rZ  days since 2000-01-01re  r  )r   ri   r  r  r8  r  rh   rm   r   rm  r|  r   r   r   r  rU   rU   rV   test_encoding_mfdataset  s$    

z TestDask.test_encoding_mfdatasetc              
   C  sl   t ddtjdfi}t D}|| dd }||}t||dd}t|| W 5 Q R X W 5 Q R X d S )Nr   rg   r\   c                 S  s   | j ddS )Nr   )rZ  )Zassign_coordsr   rU   rU   rV   
preprocess  s    z6TestDask.test_preprocess_mfdataset.<locals>.preprocessrv  )r  rf  )r   ri   r  r  r   r   r   r&   )r   r,  r  r  r   r   rU   rU   rV   test_preprocess_mfdataset  s    
  z"TestDask.test_preprocess_mfdatasetc                 C  s   t ddtjdfi}|jtdd|jtdddg}t N}t <}t|||g t||gddd}t	|| W 5 Q R X W 5 Q R X W 5 Q R X d S r  )
r   ri   r  r  rm  r|  r   r   r   r&   )r   r,  datasetsr  r  r   rU   rU   rV   test_save_mfdataset_roundtrip  s    "  z&TestDask.test_save_mfdataset_roundtripc              	   C  s`   t  }tjtdd t||gddg W 5 Q R X tjtdd t||gdg W 5 Q R X d S )Nzcannot use moder   Zsamezsame lengthzonly one path)r   r   r   r   r   r   rU   rU   rV   test_save_mfdataset_invalid  s
    z$TestDask.test_save_mfdataset_invalidc              	   C  s8   t ddg}tjtdd t|gdg W 5 Q R X d S )Nro   rp   zsupports writing Datasetr   Z	dataarray)r   r   r   r  r   )r   r  rU   rU   rV   %test_save_mfdataset_invalid_dataarray  s    z.TestDask.test_save_mfdataset_invalid_dataarrayc                 C  s   t ddtjdfi}|jtdd|jtdddg}t ^}t L}t|}t|}t|||g t	||gddd}t
|| W 5 Q R X W 5 Q R X W 5 Q R X d S r  )r   ri   r  r  rm  r|  r   r   r   r   r&   )r   r,  r  r  r  r  r  r   rU   rU   rV   %test_save_mfdataset_pathlib_roundtrip#  s    "  z.TestDask.test_save_mfdataset_pathlib_roundtripc                 C  sZ   ddg}t j|dd}t  }||d< ttddd}dg}d}t j|g|g||d	 d S )
Nr   ro   r"  rs  r  doubler_   test.nc)rm   rd  )r   r   r   r  r   )r   r:  r  Ztest_dsrm   rd  Zoutput_pathrU   rU   rV   test_save_mfdataset_pass_kwargs0  s       z(TestDask.test_save_mfdataset_pass_kwargsc              
   C  sf   t ddtjdfi}t >}|| t|dd}d| }t||dd W 5 Q R X W 5 Q R X d S )	Nr   rg   r\   rv  r  r  Fr  )r   ri   r  r  r   r   r   r#   )r   r,  r  r   r   rU   rU   rV   test_open_and_do_mathG  s    
zTestDask.test_open_and_do_mathc                 C  sz   t  j}t  X}tddi}|| tdtji| t||gd dd}t|| W 5 Q R X W 5 Q R X W 5 Q R X d S )Nrg   r   re  r  r   r   r   ri   rk   r   r&   r   r  r  rL   r   rU   rU   rV   #test_open_mfdataset_concat_dim_noneO  s    
  z,TestDask.test_open_mfdataset_concat_dim_nonec                 C  sx   t  h}t  V}tddi}|| tdtji| t||gdd}t|| W 5 Q R X W 5 Q R X W 5 Q R X d S )Nrg   r   re  r  r  r  rU   rU   rV   +test_open_mfdataset_concat_dim_default_noneZ  s    
z4TestDask.test_open_mfdataset_concat_dim_default_nonec              
   C  s   t ddtjdfi}t }|| t|ddid:}t|jj	j
tjsRt|jj	j
jdksftt|| W 5 Q R X t|dd}t|| W 5 Q R X t|&}t|jj	j
tjstt|| W 5 Q R X W 5 Q R X d S )Nr   rg   r\   r  r  r  )r   ri   r  r  r   r   r   r   r   r  rL   r  r  r   r  r&   r  )r   r,  r  r   rU   rU   rV   test_open_datasetc  s    

zTestDask.test_open_datasetc              
   C  s   t jd}tdd|fi}tdgddd}tdd|t jd d f fiddgi}t 6}|| t|g|dd	}t	|| W 5 Q R X W 5 Q R X d S )
Nr\   r   rg   r  r  rR   r   r  rg   re  r  )
ri   r  r  r   r   newaxisr   r   r   r&   )r   rnddatar,  r  r   r  r   rU   rU   rV   test_open_single_datasetq  s     
z!TestDask.test_open_single_datasetc                 C  s   t jd}tdd|fi}tddgddd}tddt |t jd d f d	fidddgi}t T}t B}|| || t	||g|d
d}t
|| W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr\   r   rg   r     r  r  r  rp   ro   re  r  )ri   r  r  r   r   Ztiler  r   r   r   r&   )r   r  r,  r  r   r  r  r   rU   rU   rV   test_open_multi_dataset  s"    
 


  z TestDask.test_open_multi_datasetc                 C  s   t  }t }|| ddddd}t||dJ}t|| t  .}|| t|}t|| W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S )NrX  r\   )r   r   rk  r  r  )r   rB   r   r   r&   )r   r  rL   r  Zdask_dsr  rp  rU   rU   rV   test_dask_roundtrip  s    



zTestDask.test_dask_roundtripc              
   C  s   t  }t }|| t|dd}dd |j D }W 5 Q R X t|dd}dd |j D }W 5 Q R X | D ](\}}||kst|d d dksxtqx||kstW 5 Q R X d S )Nrv  r  c                 S  s   i | ]\}}||j jqS rU   rL   rR   r@  rU   rU   rV   rB    s      z5TestDask.test_deterministic_names.<locals>.<dictcomp>c                 S  s   i | ]\}}||j jqS rU   r  r@  rU   rU   rV   rB    s         zopen_dataset-)r   rB   r   r   r  r   r   )r   r  rL   r   original_namesZrepeat_namesrr  Z	dask_namerU   rU   rV   test_deterministic_names  s    
z!TestDask.test_deterministic_namesc                 C  s>   t ddg }| }|jr"t|js,tt||dd d S )Nro   rp   Fr  )r   r  r   r   r   r#   )r   r   r   rU   rU   rV   test_dataarray_compute  s
    

zTestDask.test_dataarray_computec                 C  s   ddl m} tddtjdfi }|jtdd|jtdddg}t	t
dp}t	t
dZ}t|||g| jd	d
}t||st|  t||gddd}t|| W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr   r  r   rg   r\   r  r  r   F)r   r   re  rk  )r  r  r   ri   r  r  r  rm  r|  r   r   r   r   r   r   r   r   r&   )r   r  r,  r  r  r  r  r   rU   rU   rV   +test_save_mfdataset_compute_false_roundtrip  s(    "     z4TestDask.test_save_mfdataset_compute_false_roundtripc              	   C  sJ   t  :}tddtjdfi}|| t|}|| W 5 Q R X d S Nr   rg   r\   )r   r   ri   r  r  r   r   r   r  r,  r   rU   rU   rV   test_load_dataset  s
    
zTestDask.test_load_datasetc              	   C  sJ   t  :}tddtjdfi}|| t|}|| W 5 Q R X d S r  )r   r   ri   r  r  r   r   r  rU   rU   rV   test_load_dataarray  s
    
zTestDask.test_load_dataarrayzBcounting number of tasks in graph fails on windows for some reasonc           	   	   C  s   t  }tddtjdfi}|| ddi}dd }t|d|d}t|d	|d}||||k sjtt|d|d}t|d	|d}||||k stW 5 Q R X d S )
Nr   rg   r\   r  c                 S  s   t |  S r   )lenZ__dask_graph__r  rU   rU   rV   num_graph_nodes  s    z3TestDask.test_inline_array.<locals>.num_graph_nodesF)Zinline_arrayr  T)	r   r   ri   r  r  r   r   r   r   )	r   r  r,  r  r  Znot_inlined_dsZ
inlined_dsZnot_inlined_daZ
inlined_darU   rU   rV   test_inline_array  s    
zTestDask.test_inline_array)NNF)2r   r   r   r   r   r   r   r1  rg  r;  rO  r   r  r  r1   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  rU   rU   rU   rV   r    sf   
     

	
	r  z2ignore:The binary mode of fromstring is deprecatedc                   @  sP   e Zd Zdd Zejdd ZddddZddd	d
Ze	ddddZ
dS )	TestPydapc           
      C  s   ddl m}m}m} |d|j}|j D ]X\}}||}|||jfd|ji|j||< |jD ]}	||	||	 j||	< q`|||< q*|j	D ],}	||	||	 jfd|	fi||	 j||	< q|S )Nr   )BaseTypeDatasetTypeGridTypebearsr$  )r  )
Zpydap.modelr  r  r  r_  r  r   r   r   rf  )
r   r,  r  r  r  r   r   r  r   r7  rU   rU   rV   convert_to_pydap_dataset  s$     


 z"TestPydap.convert_to_pydap_datasetc              	   k  sJ   t d8}| |}tt|}|d t|d< ||fV  W 5 Q R X d S )Nr!  r  )rW   r  r   r   astyper   )r   rT   r   Zpydap_dsr   rU   rU   rV   create_datasets	  s
    

zTestPydap.create_datasetsr   rJ   c              	   C  s  |   H\}}t|| d|jks&td|jks4t|j |j ksLtW 5 Q R X |   $\}}t|ddi |ddi  W 5 Q R X |   (\}}t|jddd|jddd W 5 Q R X |   0\}}t|jtddd	|jtddd	 W 5 Q R X |   <\}}dddgddddgd}t|jf ||jf | W 5 Q R X |   J\}}tdddgd
dtdddgd
dd}t|jf ||jf | W 5 Q R X d S )NZ	NC_GLOBALhistorylrp   r   ra   )r   jro   )r  r   rs  )r  r%   r_  r   r  rm  r|  r   )r   r   r   rq  r}  rU   rU   rV   test_cmp_local_file  s&    
"$(0$zTestPydap.test_cmp_local_filec                 C  sh   |   V\}}t @}|| t|"}|d t|d< t|| W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr  )r  r   r   r   r  r   r%   )r   r   r   r  r3  rU   rU   rV   test_compatible_to_netcdf4  s    

z#TestPydap.test_compatible_to_netcdfc              	   C  s.   | j ddid\}}t|| W 5 Q R X d S )Nr  rp   r  )r  r%   )r   r   r   rU   rU   rV   	test_dask=  s    zTestPydap.test_daskN)r   r   r   r  r   r   r  r  r  r0   r  rU   rU   rU   rV   r    s   
	!	r  c                   @  s(   e Zd Zejdd ZddddZdS )TestPydapOnlinec              	   k  sL   d}t |fddi|}td"}|d t|d< ||fV  W 5 Q R X d S )Nz6http://test.opendap.org/opendap/hyrax/data/nc/bears.ncr   Zpydapr!  r  )r   rW   r  r   )r   rT   urlr   r   rU   rU   rV   r  G  s
    
zTestPydapOnline.create_datasetsr   rJ   c              	   C  sV   ddl m} |dd}td}tjjjd|d W 5 Q R X |jdd |dd	d
 d S )Nr   )setup_sessionZXarrayTestUserZ
Xarray2017zpydap.client.open_urlzhttp://test.url)sessionTx   )r  Zapplicationr  Zoutput_gridtimeout)	Zpydap.cas.ursr  r,   patchr   r   r   r   Zassert_called_with)r   r  r  Z	mock_funcrU   rU   rV   test_sessionP  s    
zTestPydapOnline.test_sessionN)r   r   r   r   r   r  r  rU   rU   rU   rV   r  C  s   
r  c                   @  sL   e Zd ZddddZejdd ZddddZd	d
 ZddddZ	dS )	TestPyNior   rJ   c                 C  s   d S r   rU   r   rU   rU   rV   r   b  s    zTestPyNio.test_write_storec              	   k  s*   t |fddi|}|V  W 5 Q R X d S )Nr   rZ  r   r   rU   rU   rV   r   f  s    zTestPyNio.openc              	   C  sR   ddi}t jt jtdd}tj|f|}|jjd dksDt	W 5 Q R X d S )Nr   ZgribrL   example)
rM   rN   rO   rP   rQ   r   ZNioDataStore_manager_kwargsr   )r   rT   rN   r   rU   rU   rV   test_kwargsk  s    zTestPyNio.test_kwargsc                 K  s   |j |fddi|S )Nr   r  )r   r   rU   rU   rV   r   q  s    zTestPyNio.savec              	   C  sr   t ddtdfi}|ddd}t <}|j|dd t|d	d}|ddd}~t|| W 5 Q R X d S )
Nr   rg         @r  r  r  r  r  rZ  )r   ri   rl  renamer   r   r   r&   )r   r  r   r  rp  r   rU   rU   rV   test_weakrefst  s    zTestPyNio.test_weakrefsN)
r   r   r   r   r   r   r   r  r   r  rU   rU   rU   rV   r  _  s   
r  c                   @  s6   e Zd ZddddZddddZddddZd	S )

TestCfGribr   rJ   c              	   C  sd   dddddd}t ddd>}|j|ks,tt|jdd	gksBt|d  d
ksVtW 5 Q R X d S )Nrp   r  rX  numberr  ZisobaricInhPar  r  example.gribcfgribr  rZ  rh   g     @rW   r   r   rm  r  min)r   r   r   rU   rU   rV   	test_read  s    zTestCfGrib.test_readc              	   C  sp   dddii}dddddd}t dd	|d
<}|j|ks:tt|jdgksNt|d  dksbtW 5 Q R X d S )NZfilter_by_keysZ	shortNamerh   rp   r  rX  r  r   r  r   r       l@r  )r   rT   r   r   rU   rU   rV   test_read_filter_by_keys  s       z#TestCfGrib.test_read_filter_by_keysc              	   C  sf   dddddd}t ddd@}|jddgdddgd	}|j|ksDt|d
  dksXtW 5 Q R X d S )Nrp   r  r  r   r  r  r   ro   r  rh   r  )rW   rm  r   r   r  )r   r   r   resrU   rU   rV   test_read_outer  s    zTestCfGrib.test_read_outerN)r   r   r   r  r  r	  rU   rU   rU   rV   r    s   r  z*ignore:IOAPI_ISPH is assumed to be 6370000c                   @  s   e Zd Zdd ZejdddZddd	d
ZddddZddddZ	e
ddddZejjddddddZdd ZdS )TestPseudoNetCDFFormatc                 K  s   t |fddi|S )Nr   pseudonetcdfr  )r   rN   rT   rU   rU   rV   r     s    zTestPseudoNetCDFFormat.openNFc              
   c  sb   |d kri }|d kri }t |d6}| j||f| | j|f|}|V  W 5 Q R X W 5 Q R X d S r   r   r   rU   rU   rV   r     s    z TestPseudoNetCDFFormat.roundtripr   rJ   c                   s4  dddddddd  fdd	}i d
dddddddddddddddddddddddiddddgd |ddd!d"d#d$d$d$gd |d%d&d!d"d'd(d)d*gd |d+d,d!d"d-d.d/d0gd |d1d2d!d"d3d4d5d6gd |d7d8d!d"d9dd:d;gd |d7d<d=d>d"d?d@}t |}tdAdBdCdDidE}t|| W 5 Q R X dFS )G:
        Open a CAMx file and test data variables
        g    iro   iHzN/Ai)r[  Zmissing_valueZscaleZ	llod_flag
llod_valueZ	ulod_flagZ
ulod_valuec                    s      }||  |S r   )r+  r  )r_  ZoutattrZstdattrrU   rV   myatts  s    
z6TestPseudoNetCDFFormat.test_ict_format.<locals>.myattsZ1001   zHenderson, BarronzU.S. EPAz!Example file with artificial dataZJUST_A_TESTz1, 1z2018, 04, 270	Start_UTCz-7777z-8888zN/A, N/A, N/A, N/A, 0.025z7www-air.larc.nasa.gov/missions/etc/IcarttDataFormat.htmR0zNo comments for this revision.)fmtZn_header_linesZPI_NAMEZORGANIZATION_NAMEZSOURCE_DESCRIPTIONZMISSION_NAMEZVOLUME_INFOZSDATEZWDATEZTIME_INTERVALZINDEPENDENT_VARIABLE_DEFINITIONZINDEPENDENT_VARIABLEZINDEPENDENT_VARIABLE_UNITSZ	ULOD_FLAGZ
ULOD_VALUEZ	LLOD_FLAGZ
LLOD_VALUEZOTHER_COMMENTSZREVISIONr  TFLAGPOINTSrX  g     @g     @g     @)r  )r   r  )rL   r   r_  g     D@g      E@r  r  g     Qg      Rg     @Rg     Rr  r  r  g      .@g      4@g      9@Zmeterselevgn?g@ge`TR@gڬ\mE@Zppbv	TEST_ppbvg(\@g     ag     \
TESTM_ppbvg?)r   r  r  )r  r  r  r  r  r  )rf  r_  r   r  example.ictr  r   ffi1001r  N)r   	from_dictrW   r&   )r   r  inputZchkfileZictfilerU   r  rV   test_ict_format  s    











  ?
  z&TestPseudoNetCDFFormat.test_ict_formatc              
   C  sP   ddi}t dd|d0}| j||d|id}t|| W 5 Q R X W 5 Q R X d S )Nr   r  r  r  r  r  r  )rW   r   r&   r   Zfmtkwr   r   rU   rU   rV   test_ict_format_write  s        z,TestPseudoNetCDFFormat.test_ict_format_writec              
   C  s   t ddddid}tjdddd	d	d
d}td|tdddddd}|jd }t	|| tj
ddgggdd}td|tddddddd}|jd }t	|| |  dS )r  example.uamivr  r   uamivr  r  r  r_   ro   rX  r  TSTEPZLAYZROWZCOLppmO3   P   r   	long_namevar_desc r   r   r$  ZVAR	DATE-TIMEr  r.  r*  r+  r   N)rW   ri   rl  r  r   r  r  ljustr   r#   rj   r	  )r   camxfilerL   r   r   rU   rU   rV   test_uamiv_format_read"  s4      

	

z-TestPseudoNetCDFFormat.test_uamiv_format_readc              
   C  s   t ddgdddddid}tjdd	d
dddd}tj|gd dd}td|tdddddd}|j	d }t
|| tjddgggdd
dd}tddddddd}d}t|||}|j	d }t
|| |  dS )r  r!  r  r$  re  r   r"  )r   rg  rf  r  r  r  r_   ro   rX  r  rp   r   )Zaxisr#  r%  r&  r'  r(  r)  r,  r   r  r.  r/  r-  N)r[   ri   rl  r  Zconcatenater   r  r  r0  r   r#   rj   repeatr	  )r   r1  r0  rL   r   r   r_  r   rU   rU   rV   test_uamiv_format_mfreadA  s6    



z/TestPseudoNetCDFFormat.test_uamiv_format_mfreadzFlaky; see GH3711r  c              	   C  sN   ddi}t dd|d}| j||d|idd}t|| W 5 Q R X |  d S )	Nr   r"  r!  r  r  r  T)r   r   r   )rW   r   r&   r	  r  rU   rU   rV   test_uamiv_format_writee  s      z.TestPseudoNetCDFFormat.test_uamiv_format_writec                   s|   dd l     fdd|j D _ fdd|j D _|j D ]\}}t|| qR j|f| d S )Nr   c                   s    i | ]\}}|  ||qS rU   )ZPseudoNetCDFDimensionr@  ZpncZpncfrU   rV   rB  z  s     z/TestPseudoNetCDFFormat.save.<locals>.<dictcomp>c                   s<   i | ]4\}}| j ||jj|jfd |jd i|jqS )r   .)ZPseudoNetCDFVariabler`   charr   rL   r_  r@  r6  rU   rV   rB  }  s       )	ZPseudoNetCDFZPseudoNetCDFFiler   r   r$  r   r_  setattrZpncwrite)r   r   rN   r   pkpvrU   r6  rV   r   v  s    zTestPseudoNetCDFFormat.save)NNF)r   r   r   r   r   r   r   r  r   r2  r0   r4  r   r  r   r5  r   rU   rU   rU   rV   r
    s        X
#r
  rX  r  c                 c  s  |t krddddg}|t kr,ddddd	d
}dd l}ddlm}	 |d krLi }tdtd}
|dkrv|| f}ddi}n||| f}i }tj|| |  |jdj	| }|d kr|	| }|d krt
dd t|D t
dd t|D d}|j|
dfd|| ||||jd|L}| D ]\}}t||| q|j|f| |jd |jd   }}W 5 Q R X |\}}}}|dkr|tjdf n|}t|dt|d t| | | |d  t| | | |d  dd}|
|fV  W 5 Q R X d S )N  8        @@mTWGS84utm   r   Zno_defsZellpsZprojzoner   from_origin.tif)r  r   ro   Zindexesr_   c                 s  s   | ]}d |d  V  qdS )r7  ro   NrU   rX   nrU   rU   rV   	<genexpr>  s     z%create_tmp_geotiff.<locals>.<genexpr>c                 s  s   | ]}d |d  V  qdS )r  ro   NrU   rH  rU   rU   rV   rJ    s     )descriptionsr   r   GTiffdriverheightwidthcountcrs	transformr`   .bandr  rg   rp   r   rf  )default_valuerasteriorasterio.transformrF  r   r   ri   rl  rl   r  tupler  r   r   r8  writer  r  r   )r  r  nzrS  transform_argsrR  r   additional_attrsrX  rF  r  Z
data_shapeZwrite_kwargsrL   rA  attrvaldxdyr   r  r  r7  r   rU   rU   rV   create_tmp_geotiff  sp    


"	rc  c                   @  sB  e Zd ZeddddZddddZddddZddd	d
Zej	
dddddZddddZddddZeddddZej	je ddddddZddddZddddZeddddZeddddZddd d!Zej	jd"dddd#d$Zej	
d%ddd&d'Zddd(d)Zd*S )+TestRasterior   rJ   c                 C  s   t i dv\}}tt\ t|F}tdd0}|| t|}t	|| W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S )N)r^  r  r  )
rc  r   r`  DeprecationWarningr   open_rasterior   r   r   r&   )r   r  r   riodaZtmp_nc_fileZncdsrU   rU   rV   test_serialization  s    
zTestRasterio.test_serializationc                 C  sr  t  `\}}tt t|}t|| |jd dksBt|jd dksTt|jd dksft|jd dksxtt	|jd	 t
stt	|jd
 tstt	|jd tjstt	|jd tstt|jd dksttj|jd tjtjtjg W 5 Q R X W 5 Q R X tt@ tj|dd&}d|jks@td|jksPtW 5 Q R X W 5 Q R X W 5 Q R X d S )Nscalesr  r  r  offsetsr  r  r  rK  d1Zd2Zd3r   u1u2u3rR  r  is_tiledrS  r  
nodatavalsFZparse_coordinatesrg   r  )rc  r   r`  re  r   rf  r#   r_  r   r   r   rZ  ri   uint8r  testingr$   r  rf  r   r  r   rg  rU   rU   rV   test_utm  s.    
  zTestRasterio.test_utmc                 C  s  ddl m} t|dddddd dR\}}tt t|}d|j	ksVt
d|j	ksdt
d	|jksrt
|jd
 dkst
|jd dkst
|jd dkst
|jd dkst
t|jd tst
t|jd tjst
t|jd tst
t|jd dkst
W 5 Q R X W 5 Q R X tjtdd@ tj|dd&}d|j	ksTt
d|j	ksdt
W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr   rE  r  ro   -   )rS  rR  rg   r  rR  ri  rj  rk  rl  rK  rm  r   ro  r  rs  rS  r  z transformation isn't rectilinearr   Tru  )rY  rF  rc  Zrotationr   r`  re  r   rf  rf  r   r_  r   rZ  ri   rv  r  Warning)r   rF  r  ra  rg  rU   rU   rV   test_non_rectilinear  s,     ,z!TestRasterio.test_non_rectilinearc                 C  s6  t dddddddgddd	id

\}}tt t|}t|| |jd dks\t|jd dksntt	|jd t
stt	|jd t
stt	|jd tstt	|jd t
stt	|jd tjstt	|jd t
stt|jd dksttj|jd dg W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr  r\   ro   rp   r  r  +proj=latlongZnodatai)r]  rR  r   ri  )r  rk  )r  rK  r   rR  r  rs  rS  r  rt  g    )rc  r   r`  re  r   rf  r#   r_  r   r   rZ  r   ri   rv  r  rw  r$   rx  rU   rU   rV   test_platecarree  s*    

zTestRasterio.test_platecarreez"ignore:Dataset has no geotransformc           
      C  s  dd l }tddv}d\}}}tj|| | |jd|||}|j|dd||||jd}d	|_d
|_|	| W 5 Q R X t
|ddddgdddgddddgdd}tt t|}	t|	| |	jd dkst|	jd dkst|	jd d	kst|	jd d
kstt|	jd ts,tt|	jd tjsDtt|	jd tsZtt|	jd dksrtW 5 Q R X W 5 Q R X W 5 Q R X d S )Nr   rG  r  rX  r  r  r_   r   rL  )rN  rO  rP  rQ  r`   )r  r  r\  )cmr?  kmrT  ro   rp   r  r  g      ?      @g      @rV  ri  rj  rk  rl  rK  r   r  rs  rS  r  )rX  r   ri   rl  rl   r  r   rK  r   r[  r   r   r`  re  r   rf  r#   r_  r   r   rZ  rv  r  )
r   rX  r  r  r  r\  rL   rA  r   rg  rU   rU   rV   test_notransform+  sF    
"
	
zTestRasterio.test_notransformc                 C  s  t dddddddgdd	z\}}tt^ tj|d
dB}t|| |jjrXt	t
ddt
ddd}t|jf ||jf | |jjrt	t
ddt
ddt
ddd}t|jf ||jf | |jjrt	t
ddt
dddd}t|jf ||jf | |jjrt	tdddgtddgtddgd}t|jf ||jf | |jjrlt	tdddgtddgdd}t|jf ||jf | |jjrt	dtddgtdddgd}	t|jf |	|jf |	 |jjr t	tdddgt
dd ddd}
t|jf |
|jf |
 |jjrHt	tdddgdt
dddd}t|jf ||jf | |jjrt	tdddgdt
dddd}t|jf ||jf | |jjrt	t
ddddd}t|jf ||jf | |jjrt	tdddgddtdddgddtddgd}t|jf ||jf | |jjrlt	tdddgdddggddgdtdddgdddggddgddd}t|jf ||jf | |jjrt	|jddgd}|jddgd}t|| |jddgd}|jddgd}t|| |jdd}|jdd}t|| |jddd}|jddd}t|| |jdddd}|jdddd}t|| |jt
dt
dd}|jddgddgd}t|| |jddt
ddd}|jddt
ddd}t|| |jdt
dddd}|jdt
dddd}t|| |jdgt
dddgd}|jdgt
dddgd}t|| W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr  r\   r  ro   rp   r  r  r}  r]  rR  F)r
  r  r	  r  )rU  rg   r  r   ra   r  r   rs  r  rU  )rc  r   r`  re  r   rf  r#   r  r   r   r|  rm  ri   rj   r   )r   r  r   r   rw  Zind2Zind3Zind4Zind5Zind6Zind7Zind8Zind9Zind10Zind11Zind12exacrU   rU   rV   test_indexingX  s       
  
""   







zTestRasterio.test_indexingc                 C  s   t dddddddgdd	j\}}ttP t|:}t|| |jdd
gd}|jdd
gd}t|| W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr  r\   r  ro   rp   r  r  r}  r  rX  r  )rc  r   r`  re  r   rf  r#   rm  )r   r  r   r   r  r  rU   rU   rV   test_caching  s       
 
zTestRasterio.test_cachingc                 C  s   t dddddddgdd	\}}tt tj|d
d}dd lm} t|j	|j
sZtd|j	jksjt| }| }t|| |jddjdd}|jddjdd}t|| W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr  r\   r  ro   rp   r  r  r}  r  ro   rp   rp   r  r   rf  r  rg   r  )rc  r   r`  re  r   rf  
dask.arrayrj   r   rL   r  r   rR   Zmeanr#   sel)r   r  r   r   r  r  r  rU   rU   rV   test_chunks  s,       
  
zTestRasterio.test_chunksz-without dask, a non-serializable lock is usedr  c                 C  sp   t  `\}}ttF t|0}t|}t|}t	|| W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S r   )
rc  r   r`  re  r   rf  r   r   r   r%   )r   r  r   rg  r  r   rU   rU   rV   test_pickle_rasterio  s
    
z!TestRasterio.test_pickle_rasterioc                 C  s6  t jddd}ddlm} tdd}d\}}}tj|| | |jd	|||}|d
ddd}|j	|dd|||dddddd||jd	:}	|	j
ddddd |	| |	jd |	jd   }
}W 5 Q R X dddgt| d d |d  t|d d
 |
d  dtd d!d"gfdtdd#d$gfd%}t|d&|d'}t t t|}t|| t|jd( tsvtt|jd) tstt|jd* tjstt|jd+ tstt|jd+ d,kstt|jd- tstt|jd. tstt|jd/ tstW 5 Q R X W 5 Q R X W 5 Q R X d S )0NrX  z1.0aZ
minversionr   rE  z.datr  r  r_   r;  r<  r=  r>  r   ZENVIr?  Tr@  rA  rB  rC  rM  z{Tagged file}z${123.000000, 234.234000, 345.345678}z{1.000000, 0.234000, 0.000345})nsdescription
wavelengthfwhmro   rp   r    rU  r_  gsh|Gm@g&凕u@gʡE?g#-#6?)rU  r  rg   r  r  rT  rV  rR  r  rs  rS  r  r  Zmap_infoZsamples)r   r  rY  rF  r   ri   rl  rl   r  r   Zupdate_tagsr[  r  rj   r   r`  re  r   rf  r#   r   r_  r   r   rZ  rv  r  )r   rX  rF  r  r  r  r\  rL   rS  rA  ra  rb  rf  r   rg  rU   rU   rV   test_ENVI_tags  s`    
"
"
zTestRasterio.test_ENVI_tagsc                 C  sZ   t  J\}}tt0 t|}t|jd ts8t	W 5 Q R X W 5 Q R X W 5 Q R X d S )NZAREA_OR_POINT)
rc  r   r`  re  r   rf  r   r_  r   r   )r   r  ra  rg  rU   rU   rV   test_geotiff_tags:  s    zTestRasterio.test_geotiff_tagsc                 C  s   t dddddddgdd	|\}}tjd
td^ ttH tj|dd.}dd l	m
} t|j|jsjtt|| W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr  r\   r  ro   rp   r  r  r}  r  zos.path.getmtime)Zside_effectr  r  r   )rc  r,   r  r  r   r`  re  r   rf  r  rj   r   rL   r  r   r#   )r   r  r   r   r  rU   rU   rV   test_no_mftime@  s"       
  zTestRasterio.test_no_mftimec              
   C  s   d}t t* t|}|jdks*tW 5 Q R X W 5 Q R X t t> tj|dd$}dd lm} t	|j
|jsxtW 5 Q R X W 5 Q R X d S )Nz>http://download.osgeo.org/geotiff/samples/made_up/ntf_nord.tif)ro      r  )ro      r  r  r   )r   r`  re  r   rf  rO  r   r  rj   r   rL   r  )r   r  r   r  rU   rU   rV   test_http_urlT  s    " zTestRasterio.test_http_urlc                 C  s   dd l }t n\}}ttT |jdd< tt& t	|}t
|| W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr   rL  )Z	GDAL_SKIP)rX  rc  r   r   r   ZEnvr`  re  r   rf  r#   )r   rX  r  r   r   rU   rU   rV   test_rasterio_environmentc  s    z&TestRasterio.test_rasterio_environmentz rasterio 1.1.1 is broken. GH3573c                 C  s>  dd l }t $\}}||}|jj|dd}|j|jf}|j}|j}|	|jd |jd \}	}
t
||	|
fg}tt t|x}|jd |jd f}|j}|j}|jt|	|
ddd	j}||kst||kst||kst| | kstW 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S )
Nr   z	epsg:4326rR  rp   rg   r  r  Znearest)method)rX  rc  r   vrt	WarpedVRTrP  rO  rR  r  Zxyr  sampler   r`  re  r   rf  sizesr  r  rL   r   rI  )r   rX  r  r   srcr  expected_shapeZexpected_crsexpected_resr  r  Zexpected_valr  actual_shapeZ
actual_crs
actual_resZ
actual_valrU   rU   rV   test_rasterio_vrto  s$    zTestRasterio.test_rasterio_vrtz9ignore:open_rasterio is Deprecated in favor of rioxarray.c                 C  s  t jddd}ddlm} ddlm} t \}}||}||j|j|j	|j
f|jddi\}}}	|jj||||	d	|}
|
j	|
j
f}|
j}|
j}t|
N}|jd
 |jd f}|j}||j }||kst||kst||kstW 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S )NrX  1.0.28r  r   )Affine)calculate_default_transform
resolution  )rS  rP  rO  rg   r  )r   r  Zaffiner  Zrasterio.warpr  rc  r   rR  rP  rO  r  r  r  r  rS  r   rf  r  r   )r   rX  r  r  r  r   r  Ztransr   hr  r  r  Zexpected_transformr  r  r  Zactual_transformrU   rU   rV   )test_rasterio_vrt_with_transform_and_size  s@          
z6TestRasterio.test_rasterio_vrt_with_transform_and_sizec                 C  s   t jddd}td d\}}|jddi}||j}|jd ksHt|jj||d@}t 	t
* t|}|j|kstW 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S )NrX  r  r  r  initz
epsg:32618)src_crs)r   r  rc  rR  ZCRSr   r   r  r  r`  re  r   rf  )r   rX  r  r   r  r  r  r  rU   rU   rV   test_rasterio_vrt_with_src_crs  s    z+TestRasterio.test_rasterio_vrt_with_src_crsN)r   r   r   r;   rh  ry  r|  r~  r   r  rF  r  r  r  r0   r  r   r(   r  r  r  r  r-   r  r  r  r  r  rU   rU   rU   rV   rd    s<   	
,u ;rd  c                   @  s4   e Zd ZddddZedd ZddddZd	S )
TestEncodingInvalidr   rJ   c              	   C  s   t ddddgi ddi}tjtdd t|d	d
 W 5 Q R X t ddddgi ddi}t|}i |ksntt ddddgi dd	i}t|d	d
}dd	i|kstt ddddgi dd	i}t|dd}i |kstd S )Nr  ro   rp   r  r   r  r  r   Traise_on_invalidZchunkingr  rM  rX  rc  )r   r  r   r   r   r   r   )r   r  rm   rU   rU   rV   "test_extract_nc4_variable_encoding  s    z6TestEncodingInvalid.test_extract_nc4_variable_encodingc                 C  s,   t ddddgi ddi}t|ddd	 d S )
Nr  ro   rp   r  rC  Zszlibrc  T)backendr  )r   r  r   )r   Zmonkeypatchr  rU   rU   rV   *test_extract_nc4_variable_encoding_netcdf4  s    z>TestEncodingInvalid.test_extract_nc4_variable_encoding_netcdf4c              	   C  sD   t ddddgi ddi}tjtdd t|dd	 W 5 Q R X d S )
Nr  ro   rp   r  Zleast_sigificant_digitr  r   Tr  )r   r  r   r   r   r   )r   r  rU   rU   rV   test_extract_h5nc_encoding  s    z.TestEncodingInvalid.test_extract_h5nc_encodingN)r   r   r   r  r5   r  r  rU   rU   rU   rV   r    s   
r  c                   @  s   e Zd ZdS )
MiscObjectNr   rU   rU   rU   rV   r    s   r  c                   @  s   e Zd ZddddZdS )TestValidateAttrsr   rJ   c              
     s  dd   fdd} fdd} fdd}|||fD ]}| \}}d	|d
< t jtdd |d W 5 Q R X | \}}d	|t < t jtdd |d W 5 Q R X | \}}d	|d< t jtdd |d W 5 Q R X | \}}d	|d	< t }|| W 5 Q R X | \}}ddi|d	< t jtdd |d W 5 Q R X | \}}t |d	< t jtdd |d W 5 Q R X | \}}d|d	< t }|| W 5 Q R X | \}}d|d	< t }|| W 5 Q R X | \}}ddddg|d	< t }|| W 5 Q R X | \}}d|d	< t }|| W 5 Q R X | \}}td|d	< t }|| W 5 Q R X | \}}d|d	< t }|| W 5 Q R X | \}}d|d	< t }|| W 5 Q R X q6d S )Nc                   S  s"   t ddtdfidtdiS )NrL   r  rz   r\   )r   ri   rl  rU   rU   rU   rV   new_dataset  s    z<TestValidateAttrs.test_validating_attrs.<locals>.new_datasetc                    s     } | | j fS r   ru  r  r  rU   rV   new_dataset_and_dataset_attrs  s    zNTestValidateAttrs.test_validating_attrs.<locals>.new_dataset_and_dataset_attrsc                    s     } | | j jfS r   )rL   r_  r  r  rU   rV   new_dataset_and_data_attrs  s    zKTestValidateAttrs.test_validating_attrs.<locals>.new_dataset_and_data_attrsc                    s     } | | j d jfS )Nr  )rf  r_  r  r  rU   rV   new_dataset_and_coord_attrs  s    zLTestValidateAttrs.test_validating_attrs.<locals>.new_dataset_and_coord_attrsr  r_  zInvalid name for attr: 123r   r  zInvalid name for attr: r)  zInvalid name for attr '':r   r  zInvalid value for attr 'test'gQ	@ro   rp   r  rX  )gffffff?r  zThis is a string)	r   r   r  r   r  r   r   ri   rl  )r   r  r  r  Znew_dataset_and_attrsr   r_  r  rU   r  rV   test_validating_attrs  sx    















z'TestValidateAttrs.test_validating_attrsN)r   r   r   r  rU   rU   rU   rV   r    s   r  c                   @  sd   e Zd ZddddZddddZddddZddd	d
ZeddddZddddZ	dS )TestDataArrayToNetCDFr   rJ   c              
   C  sR   t tdd}t .}|| t|}t|| W 5 Q R X W 5 Q R X d S Nr  r  rX  r   ri   rl  r  r   r   r   r&   r   original_dar  	loaded_darU   rU   rV    test_dataarray_to_netcdf_no_name<  s
    

z6TestDataArrayToNetCDF.test_dataarray_to_netcdf_no_namec              
   C  sV   t tdddd}t .}|| t|}t|| W 5 Q R X W 5 Q R X d S )Nr  r  r  r  r  r  rU   rU   rV   "test_dataarray_to_netcdf_with_nameE  s
    

z8TestDataArrayToNetCDF.test_dataarray_to_netcdf_with_namec              
   C  s\   t tddddgdd}t .}|| t|}t|| W 5 Q R X W 5 Q R X d S )Nr  r  rg   r  r  r  r  rU   rU   rV   )test_dataarray_to_netcdf_coord_name_clashN  s      

z?TestDataArrayToNetCDF.test_dataarray_to_netcdf_coord_name_clashc              
   C  sp   t tdddtdfidgd}t >}|| |d}t|dgd}t|| W 5 Q R X W 5 Q R X d S )Nr  r  rg   )rf  r   )Zdrop_variables)	r   ri   rl  r  r   r   r  r   r&   )r   rL   r  r   ZloadedrU   rU   rV   test_open_dataarray_optionsY  s    "

z1TestDataArrayToNetCDF.test_open_dataarray_optionsc                 C  s*   t dddg}| }t|ts&td S )Nro   rp   r  )r   r   r   r   r!  r   )r   rL   outputrU   rU   rV   %test_dataarray_to_netcdf_return_bytesc  s    z;TestDataArrayToNetCDF.test_dataarray_to_netcdf_return_bytesc              
   C  sZ   t tdd}t 6}t|}|| t|}t|| W 5 Q R X W 5 Q R X d S r  )	r   ri   rl  r  r   r   r   r   r&   )r   r  Ztmpsr  r  rU   rU   rV   (test_dataarray_to_netcdf_no_name_pathlibj  s    

z>TestDataArrayToNetCDF.test_dataarray_to_netcdf_no_name_pathlibN)
r   r   r   r  r  r  r  r:   r  r  rU   rU   rU   rV   r  :  s   		
r  c               
   C  s8   t  (} t  t }||  W 5 Q R X W 5 Q R X d S r   )r   r'   r   r   )Ztmpfiler   rU   rU   rV   'test_no_warning_from_dask_effective_getu  s    r  c               
   C  sb   t jd} tdd| fi}t 6}|| t|}|jd |ksJtW 5 Q R X W 5 Q R X d S Nr\   r   rg   source)	ri   r  r  r   r   r   r   rm   r   r  r,  r  r   rU   rU   rV   #test_source_encoding_always_present}  s    

r  c               
   C  sf   t jd} tdd| fi}t :}|| tt|}|jd |ksNt	W 5 Q R X W 5 Q R X d S r  )
ri   r  r  r   r   r   r   r   rm   r   r  rU   rU   rV   0test_source_encoding_always_present_with_pathlib  s    
r  c                 C  s$   d}| D ]}|t |jkstqd S )Nzdates out of range)r   r:  r   )r7  Zundesired_messager;  rU   rU   rV   %_assert_no_dates_out_of_range_warning  s    r  rB  c                 C  s*  ddg}ddg}d}d}t |d|fgdd }d	D ] }||| jd
< | || jd< q4t|d}t|d}t|d| }	t|d| }
t |	d|
fgdd}t |
d|
fgdd}t \}|| t	j
dd:}t|}t||j t||j W 5 Q R X t| W 5 Q R X W 5 Q R X d S )Nr   ro     r2  r  r  rg   r  rg   r  r   rB  timedelta64[D]r  Tr6  r   r  r_  ri   rj   r  Z
datetime64r   r   rD  rE  r   r&   rg   r  r  rB  rg   r  Z
units_dater   r,  r   Zx_timedeltasZtime_timedeltas	decoded_xdecoded_time
expected_xexpected_timer  r7  r   rU   rU   rV   2test_use_cftime_standard_calendar_default_in_range  s*    

r  
units_yeari  i	  c                 C  s  dd l }ddg}ddg}d| d}t|d|fgdd }d	D ] }||| jd
< | || jd< q@|j||| dd}|j||| dd}	t|d|	fgdd}
t|	d|	fgdd}t R}|| tt	2 t
|}t|
|j t||j W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr   ro   r  days since -01-01r  rg   r  r  r   rB  TZonly_use_cftime_datetimes)cftimer   r  r_  num2dater   r   r   r`  r   r   r&   rg   r  )rB  r  r  rg   r  r   r,  r   r  r  r  r  r  r   rU   rU   rV   6test_use_cftime_standard_calendar_default_out_of_range  s.       

r  r  c                 C  s  dd l }ddg}ddg}d| d}t|d|fgdd }d	D ] }||| jd
< | || jd< q@|j||| dd}|j||| dd}	t|d|	fgdd}
t|	d|	fgdd}t `}|| tjdd>}t	|dd}t
|
|j t
||j W 5 Q R X t| W 5 Q R X W 5 Q R X d S )Nr   ro   r  r  r  r  rg   r  r  r   rB  Tr  r6  r  )r  r   r  r_  r  r   r   rD  rE  r   r&   rg   r  r  )rB  r  r  rg   r  r   r,  r   r  r  r  r  r  r7  r   rU   rU   rV   test_use_cftime_true  s0       
r  c                 C  s.  ddg}ddg}d}d}t |d|fgdd }d	D ] }||| jd
< | || jd< q4t|d}t|d}t|d| }	t|d| }
t |	d|
fgdd}t |
d|
fgdd}t `}|| t	j
dd>}t|dd}t||j t||j W 5 Q R X t| W 5 Q R X W 5 Q R X d S )Nr   ro   r  r2  r  r  rg   r  r  r   rB  r  r  Tr6  Fr  r  r  rU   rU   rV   0test_use_cftime_false_standard_calendar_in_range  s*    
r  c              
   C  s   ddg}ddg}d| d}t |d|fgdd }d	D ] }||| jd
< | || jd< q8t 6}|| tttf t	|dd W 5 Q R X W 5 Q R X d S )Nr   ro   r  r  r  r  rg   r  r  r   rB  Fr  
r   r  r_  r   r   r   r   r   r   r   rB  r  rg   r  r   r,  r   r  rU   rU   rV   4test_use_cftime_false_standard_calendar_out_of_range  s    
r  c              
   C  s   ddg}ddg}d| }t |d|fgdd }dD ] }||| jd	< | || jd
< q6t 6}|| tttf t	|dd W 5 Q R X W 5 Q R X d S )Nr   ro   r  r  r  rg   r  r  r   rB  Fr  r  r  rU   rU   rV   *test_use_cftime_false_nonstandard_calendar"  s    

r  r   c              	   C  s4   t  }tjtdd |jd| dd W 5 Q R X d S )Nz$unrecognized option 'invalid_netcdf'r   r)  T)r   r5  )rB   r   r   r   r   )r   rL   rU   rU   rV   test_invalid_netcdf_raises4  s    r  c                  C  s   t dddg} dddg}tj| }t|ts4t||ks@tt dd }d}tj|}t|tslt||ksxtd}tj|}t|t	st||kstd S )Nro   rp   r  rU   r   )
ri   rj   r   r  Zencode_zarr_attr_valuer   rm  r   r  r   )ZarrZ	expected1r2  ZsarrZ	expected2r3  Z	expected3Zactual3rU   rU   rV   test_encode_zarr_attr_value;  s    
r  c               	   C  s   t dddg} tj| }d|ks(t|d d ks8tt jdddgddid} tj| }|d dksltt jdddgddid} tj| }t jdddgddid} tjtdd	 tjj| d
d}W 5 Q R X d S )Nrg   ro   rp   r  )ro   r  r   zunexpected encoding parametersr   Tr  )	r   r  r   r  Zextract_zarr_variable_encodingr   r   r   r   )r  r   rU   rU   rV   #test_extract_zarr_variable_encodingR  s     r  c                  C  s6  dd l } dd l}t|jdr*t|jjds4td ttj	
tj	tdd}| d}|d}|| | }|jtd	 |d
< |d}|| d}t|dd}tj|| d}t|dd}tj|| d}t|dd}tjtj||gd
d| d}t|dd}tjtj||gd
d| d S )Nr   FSStoreZgetitemszzarr too oldrL   rV  Zmemoryz	out1.zarrz1 dayr  z	out2.zarrzmemory://out2.zarrr  r  zsimplecache::memory://out2.zarrzmemory://out*.zarrr  zsimplecache::memory://out*.zarr)fsspecr  r  Zstorager  r   rz  r   rM   rN   rO   rP   rQ   
filesystemZ
get_mapperr  r+  r  r8  rQ  r   rw  r%   r   r  )r  r  r   r?  mmZds0r  rr  rU   rU   rV   test_open_fsspecj  s6     





r  r   )tmp_pathrK   c              	   C  sh   t dt jtdgdddddi}|| d  t j| d dd	}|d d   W 5 Q R X d
S )ay  Test that numeric single-element vector attributes are handled fine.

    At present (h5netcdf v0.8.1), the h5netcdf exposes single-valued numeric variable
    attributes as arrays of length 1, as opposed to scalars for the NetCDF4
    backend.  This was leading to a ValueError upon loading a single value from
    a file, see #4471.  Test that loading causes no failure.
    r  r   r  ro   )rf   re   )r   r_  r  r2  r  N)r   r   r   ri   rj   r   r   r   )r  r   rr  rU   rU   rV   test_load_single_value_h5netcdf  s    
 
  r  r  ra   rg   r  c              
   C  s   d}t jtjddd|d}tdtj|ddi}||d jd	< ||d
  t	j
ddi< || }t|d
 d| d}tj|| W 5 Q R X W 5 Q R X d S )Nr  r  r  rS  r_   r  r  r  rs  r  	test.zarrarray.chunk-size1MiBr  r   r  )r  
from_arrayri   r  r   r   r   rm   r  rG   configrf  r  r   rw  assert_chunks_equalr  r  Zencoded_chunksZdask_arrr   r   r   rU   rU   rV   test_open_dataset_chunking_zarr  s0      
  r  r  c              
   C  s   i }t jtjddd|d}tdtj|ddi}||d jd< ||d	  |	|d
  t
jddij || }tj|d	 d| d}tj|| W 5 Q R X tj|d
 | d}tj|| W 5 Q R X W 5 Q R X d S )Nr  rS  r_   r  r  r  rs  r  r  r  r  r  r  r  )r  r  ri   r  r   r   r   rm   r  r   rG   r  rf  r  r   rw  r  r   rU   rU   rV   test_chunking_consintency  s6      
  r  c              	   C  s4   |  |stt||d}t|| W 5 Q R X d S )Nr  )guess_can_openr   r   r&   )
entrypointr  r   r   r   rU   rU   rV   _check_guess_can_open_and_open  s    r  c              	   C  s   t  }t }| d }|j|dd t||d|d t|t|d|d | d }|j|dd t||d|d t|t|d|d |dst|d	st|d
st|dst|drt| d }t|d}|d W 5 Q R X ||rtd S )Nr   r   r   r  r   r   r  r'  zhttp://something/remotesomething-local.ncsomething-local.nc4something-local.cdfnot-found-and-no-extensionr  r     not-a-netcdf-file)	r   rB   r   r  r   r  r   r   r[  r  r  r   rN   r  rU   rU   rV   test_netcdf4_entrypoint  s&    r  c              	   C  s.  t  }t }| d }|j|dd t||d|d t|t|d|d t|d}t||d|d W 5 Q R X |jdd}t||d|d t|t|d|d | d }tj|dd}|| W 5 Q R X t||d|d t|t|d|d |	d	st
|	d
s
t
|	drt
|	dr*t
d S )Nr   r  r  r  r  z	foo.nc.gzr  r  r  zsomething-local.nc.gzr
  r  )r   rB   r   r  r   r   r   rA  r[  r  r   )r  r  r   rN   r  contentsrU   rU   rV   test_scipy_entrypoint  s2       r  c              	   C  s   t  }t }| d }|j|dd t||d|d t|t|d|d t|d}t||d|d W 5 Q R X |dszt|dst|dst|d	rtd S )
Nr   r2  r  r  r  r  r  r	  r
  )r   rB   r   r  r   r   r  r   r  rU   rU   rV   test_h5netcdf_entrypoint)  s"       r  str_typec                   sz    fdddD }t dd}tjtjt|t|f||d}d|j_d|j_|	 }d	|_|
 }||d
 d S )Nc                   s   g | ]} |qS rU   rU   )rX   r   r  rU   rV   rY   A  s     z/test_write_file_from_np_str.<locals>.<listcomp>)Z
scenario_aZ
scenario_bZ
scenario_ci  i5  )rL   columnsindexZscenarioyearZtasr  )r  r8  Z	DataFrameri   r  r  r  rR   r  r  Z	to_xarrayr   rO   )r  ZtmpdirZ	scenariosZyearsZtdfZtxrrU   r  rV   test_write_file_from_np_str=  s    
r  c                   @  s`   e Zd Zedd ZddddZddddZej	d	d
dgej
dddddZdS )
TestNCZarrc                 C  s   t t  d }|t dk r*td t dkrL|t dkrLtd t }|	d}|t dkrldnd}|
d	|  d
|  |S )Nr   z4.8.1zrequires netcdf-c>=4.8.1Windowsz%netcdf-c==4.8.1 has issues on Windowsrk  Znczarrznczarr,noxarrayzfile://z#mode=)r   r'  Zgetlibversionsplitr   rz  platformsystemrB   r  r   )filenameZnetcdfc_versionr   r   rU   rU   rV   _create_nczarrU  s    


zTestNCZarr._create_nczarrr   rJ   c              	   C  s<   t dd(}| |}tj|dd}t|| W 5 Q R X d S )Nr  r  Fr  )r   r  r   r  r&   )r   r  r   r   rU   rU   rV   test_open_nczarri  s    
zTestNCZarr.test_open_nczarrc              	   C  sT   t dd@}| |}|dg }|j|dd tj|dd}t|| W 5 Q R X d S )Nr  r  r   r   r  Fr  )r   r  r  r   r  r&   )r   r  r   r   r   rU   rU   rV   test_overwriting_nczarro  s    

z"TestNCZarr.test_overwriting_nczarrr   r   r  z$ignore:.*non-consolidated metadata.*c              
   C  sL   t dd8}| |}tjtdd |j||d W 5 Q R X W 5 Q R X d S )Nr  r  z*missing the attribute `_ARRAY_DIMENSIONS`,r   r  )r   r  r   r   r  r  )r   r   r  r   rU   rU   rV   test_raise_writing_to_nczarrw  s    
 z'TestNCZarr.test_raise_writing_to_nczarrN)r   r   r   r  r  r  r   r   r  r  rF  r!  rU   rU   rU   rV   r  R  s   

r  c                  C  s$   t dg} t| tt|  d S )Nr!  )r[   r&   r   r   r   r  rU   rU   rV   "test_pickle_open_mfdataset_dataset  s    
r"  )r  F)r  F)
__future__r   r   rA  r   r  os.pathrM   r   r  r  r  sysr  r  rD  r   ior   pathlibr   typingr   r   r   r	   r
   Znumpyri   Zpandasr8  r   Zpackaging.versionr   Zpandas.errorsr   Zxarrayr   r   r   r   r   r   r   r   r   r   Zxarray.backends.commonr   Zxarray.backends.h5netcdf_r   Zxarray.backends.netcdf3r   Zxarray.backends.netCDF4_r   r   Zxarray.backends.pydap_r   Zxarray.backends.scipy_r   Zxarray.coding.variablesr   Zxarray.conventionsr   Zxarray.corer   Zxarray.core.optionsr    Zxarray.core.pycompatr!   Zxarray.testsr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   rC  r=   r>   r?   Zxarray.tests.test_datasetr@   rA   rB   rc  r'  ImportErrorrG   r  rj   r  r   Zzarr.storagerC   r  r  rD   rE   r   r*  rW  r  Zxarray.backends.apirH   rI   rW   r[   rn   rt   r   r   r   r   r   r   r   r   r   r   r  r  rQ  r  r   r   r  r  rh  r|  r  rF  r  r  r  r  r	  r  r
  r  r  r  r  r  r  r$  r&  r(  r1  rJ  rS  rY  Zfixturer_  r  r`  rb  r  rd  ri  rj  rl  rm  r  r  r  r  r  r
  rc  rd  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   Zstr_r  r  r"  rU   rU   rU   rV   <module>   sX  ,t


       !        ,?4
*      R		 $H
 P3@
%


	

	
' Y   ~
L,
 [J   g!Z:


(  
.