U
    Cvf                     @  s  d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	 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Zd dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlm Z m!Z!m"Z" zd dl#Z$e$%d W n e&k
r   Y nX e'dd ej(j)e* dkp*de* kddZ+d_ddddddZ,e,d\Z-Z.e,d\Z/Z0e,d\Z1Z2e,d\Z3Z4e,d\Z5Z6e,dd d!\Z7Z8e,d"\Z9Z:e,d#\Z;Z<e,d$\Z=Z>e,d%\Z?Z@e,d&\ZAZBe,d'\ZCZDe,d(\ZEZFe,d)\ZGZHe,d*\ZIZJe,d+\ZKZLe,d,\ZMZNe,d-\ZOZPe,d.\ZQZRe,d/\ZSZTe,d0\ZUZVe,d1\ZWZXe,d2\ZYZZe,d3\Z[Z\e/pre3Z]ej(j^e] d4dZ_eej`jad5kZbej(j^eb d6dZced7d8 e?rd dldZdedjejfd9d: G d;d< d<Zgd`d=d>Zhej(jiZiej(jjZjG d?d@ d@ekZlG dAdB dBejmeZnG dCdD dDZoG dEdF dFZpdGdH ZqedIdJ ZrdadKdLZsdbdMdNZtdcdOdPZudddQdRdSdTdUdVZvdWdXdYdZd[d\d]d^gZwdS )e    )annotationsN)contextmanagernullcontext)mock)assert_array_equal)Version)assert_frame_equal)Dataset)utils)allclose_or_equiv)ExplicitlyIndexed)set_options)assert_chunks_equalassert_duckarray_allcloseassert_duckarray_equalZAggignorez0'urllib3.contrib.pyopenssl' module is deprecatedaarch64armzexpected failure on ARMreasonstrz
str | Nonez!tuple[bool, pytest.MarkDecorator])modname
minversionreturnc                 C  sn   z4t | }d}|d k	r2t|jt|k r2tdW n tk
rL   d}Y nX tjj| d|  d}||fS )NTzMinimum version not satisfiedFz	requires r   )	importlibimport_moduler   __version__ImportErrorpytestmarkskipif)r   r   modZhasfunc r#   9/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/__init__.py_importorskip/   s    

r%   
matplotlibZscipyzpydap.clientZnetCDF4Zh5netcdfz0.12)r   ZNioZPseudoNetCDFZcftimedaskZ
bottleneckZrasterioZzarrZfsspecZirisZcfgribZnumbaggZseabornsparseZcupyZcartopyZpintZnumexprZfloxzrequires scipy or netCDF4   zrequires pandas 2.0.0T)Zwarn_for_unclosed_fileszsingle-threaded	schedulerc                   @  s"   e Zd ZdZdddZdd ZdS )	CountingSchedulerztSimple dask scheduler counting the number of computes.

    Reference: https://stackoverflow.com/questions/53289286/r   c                 C  s   d| _ || _d S )Nr   )total_computesmax_computes)selfr.   r#   r#   r$   __init__q   s    zCountingScheduler.__init__c                 K  s>   |  j d7  _ | j | jkr.td| j | jf tj||f|S )N   z'Too many computes. Total: %d > max: %d.)r-   r.   RuntimeErrorr'   get)r/   Zdskkeyskwargsr#   r#   r$   __call__u   s    
zCountingScheduler.__call__N)r   )__name__
__module____qualname____doc__r0   r6   r#   r#   r#   r$   r,   l   s   
r,   c                 C  s    t s
t S t| }tjj|dS )Nr*   )has_daskr   r,   r'   configset)r.   r+   r#   r#   r$   raise_if_dask_computes   s    r>   c                   @  s   e Zd ZdS )UnexpectedDataAccessN)r7   r8   r9   r#   r#   r#   r$   r?      s   r?   c                   @  s   e Zd Zdd Zdd ZdS )InaccessibleArrayc                 C  s
   || _ d S N)array)r/   rB   r#   r#   r$   r0      s    zInaccessibleArray.__init__c                 C  s   t dd S )NzTried accessing data)r?   r/   keyr#   r#   r$   __getitem__   s    zInaccessibleArray.__getitem__Nr7   r8   r9   r0   rE   r#   r#   r#   r$   r@      s   r@   c                   @  s   e Zd Zdd ZdS )
ReturnItemc                 C  s   |S rA   r#   rC   r#   r#   r$   rE      s    zReturnItem.__getitem__N)r7   r8   r9   rE   r#   r#   r#   r$   rG      s   rG   c                   @  s   e Zd Zdd Zdd ZdS )IndexerMakerc                 C  s
   || _ d S rA   )_indexer_cls)r/   Zindexer_clsr#   r#   r$   r0      s    zIndexerMaker.__init__c                 C  s   t |ts|f}| |S rA   )
isinstancetuplerI   rC   r#   r#   r$   rE      s    
zIndexerMaker.__getitem__NrF   r#   r#   r#   r$   rH      s   rH   c              	   C  sP   t  2 t dd t dd t| dt| j}W 5 Q R X |dkrL| }|S )z_Given an ndarray, return the base object which holds its memory, or the
    object itself.
    r   zDatetimeIndex.basezTimedeltaIndex.basebaseN)warningscatch_warningsfilterwarningsgetattrnpZasarrayrL   )rB   rL   r#   r#   r$   source_ndarray   s    
rR   c               	   c  s6   t jdd } | V  t| dks(tdW 5 Q R X d S )NTrecordr   zgot unexpected warning(s))rM   rN   lenAssertionErrorrS   r#   r#   r$   assert_no_warnings   s    rW   c                 C  s2   d}t j| | t j| | t j|| d S NT)xarraytestingassert_equal_assert_internal_invariantsabcheck_default_indexes__tracebackhide__r#   r#   r$   r[      s    r[   c                 C  s2   d}t j| | t j| | t j|| d S rX   )rY   rZ   assert_identicalr\   r]   r#   r#   r$   rb      s    rb   c                 K  s6   d}t jj| |f| t j| | t j|| d S rX   )rY   rZ   assert_allcloser\   )r^   r_   r`   r5   ra   r#   r#   r$   rc      s    rc   z
int | Noneboolr	   )seed	add_attrsr   c                   s   t j| }ddgddgddgd}dddd t }dd	t  d  f|d< dtd
f|d< dtjdddf|d< t|	 D ]D\}}|j
t fdd|D d}||f||< |rddi|| _qdt jddddddddddg
ddf|jd< ddi|_tdd |j D st|S )Ndim1dim2dim3)Zvar1Zvar2Zvar3   	   
   )rg   rh   ri   g      ?Z
abcdefghijtimez
2000-01-01   )Zperiodsc                 3  s   | ]} | V  qd S rA   r#   ).0dZ_dimsr#   r$   	<genexpr>   s     z#create_test_data.<locals>.<genexpr>)sizeZfoovariabler   r1   r)      Zint64)ZdtypeZnumbersbarc                 s  s   | ]}|j jjV  qd S rA   )dataflagsZ	writeable)ro   objr#   r#   r$   rr      s     )rQ   randomZRandomStater	   ZarangelistpdZ
date_rangesorteditemsnormalrK   attrsrB   Zcoordsencodingall	variablesvaluesrV   )re   rf   rsZ_varsry   vZdimsrw   r#   rq   r$   create_test_data   s*     

r   Z365_dayZ360_dayZjulianZall_leapZ366_dayZ	gregorianZproleptic_gregorianstandard)N)r   )T)T)T)NT)x
__future__r   r   platformrM   
contextlibr   r   Zunittestr   ZnumpyrQ   Zpandasr|   r   Znumpy.testingr   Zpackaging.versionr   Zpandas.testingr   Zxarray.testingrY   r	   Zxarray.corer
   Zxarray.core.duck_array_opsr   Zxarray.core.indexingr   Zxarray.core.optionsr   r   r   r   r&   ZmplZuser   rO   r   ZxfailmachineZ	arm_xfailr%   Zhas_matplotlibZrequires_matplotlibZ	has_scipyZrequires_scipyZ	has_pydapZrequires_pydapZhas_netCDF4Zrequires_netCDF4Zhas_h5netcdfZrequires_h5netcdfZhas_h5netcdf_0_12Zrequires_h5netcdf_0_12Z	has_pynioZrequires_pynioZhas_pseudonetcdfZrequires_pseudonetcdfZ
has_cftimeZrequires_cftimer;   Zrequires_daskZhas_bottleneckZrequires_bottleneckZhas_rasterioZrequires_rasterioZhas_zarrZrequires_zarrZ
has_fsspecZrequires_fsspecZhas_irisZrequires_irisZ
has_cfgribZrequires_cfgribZhas_numbaggZrequires_numbaggZhas_seabornZrequires_seabornZ
has_sparseZrequires_sparseZhas_cupyZrequires_cupyZhas_cartopyZrequires_cartopyZhas_pintZrequires_pintZhas_numexprZrequires_numexprZhas_floxZrequires_floxZhas_scipy_or_netCDF4r    Zrequires_scipy_or_netCDF4r   majorZhas_pandas_version_twoZrequires_pandas_version_twor'   r<   r=   r,   r>   Zflakynetwork	Exceptionr?   ZNDArrayMixinr@   rG   rH   rR   rW   r[   rb   rc   r   Z_CFTIME_CALENDARSr#   r#   r#   r$   <module>   s    
  






