
    dU"                       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" 	 d dl#Z$ e$j%        d           n# e&$ r Y nw xY w ej'        dd            ej'        dd            ej'        dd           ej(        )                     ej*                    dk    pd ej*                    v d          Z+	 dTdUdZ, e,d          \  Z-Z. e,d          \  Z/Z0 e,d           \  Z1Z2 e,d!          \  Z3Z4 e,d"          \  Z5Z6 e,d#          \  Z7Z8 e,d$          \  Z9Z: e,d%          \  Z;Z< e,d&          \  Z=Z> e,d'          \  Z?Z@ e,d(          \  ZAZB e,d)          \  ZCZD e,d*          \  ZEZF e,d+          \  ZGZH e,d,          \  ZIZJ e,d-          \  ZKZL e,d.          \  ZMZN e,d/          \  ZOZP e,d0          \  ZQZR e,d1          \  ZSZT e,d2          \  ZUZV e,d3          \  ZWZXe/pe3ZYej(        Z                    eY d4          Z[ eej\                  j]        d5k    Z^ej(        Z                    e^ d6          Z_ ed78           e=rd dl`Z` G d9 d:          ZadVd;Zbej(        jc        Zcej(        jd        Zd G d< d=ee          Zf G d> d?ejg        e          Zh G d@ dAeh          Zi G dB dCejg                  Zj G dD dE          Zk G dF dG          ZldH ZmedI             ZndWdJZodWdKZpdWdLZqdXdYdRZrg dSZsdS )Z    )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_equalAggignorez0'urllib3.contrib.pyopenssl' module is deprecatedz3Deprecated call to `pkg_resources.declare_namespacez%pkg_resources is deprecated as an APIaarch64armzexpected failure on ARMreasonmodnamestr
minversion
str | Nonereturn!tuple[bool, pytest.MarkDecorator]c                   	 t          j        |           }d}|4t          |j                  t          |          k     rt	          d          n# t          $ r d}Y nw xY wt
          j                            | d|            }||fS )NTzMinimum version not satisfiedFz	requires r   )	importlibimport_moduler   __version__ImportErrorpytestmarkskipif)r   r   modhasfuncs        5lib/python3.11/site-packages/xarray/tests/__init__.py_importorskipr*   1   s    %g..!s'''**=*===!"ABBB   ;#g.C'.C.CDDD9s   AA AA
matplotlibscipyzpydap.clientnetCDF4h5netcdfNioPseudoNetCDFcftimedask
bottleneckrasteriozarrfsspecirisnumbaggseabornsparsecupycartopypintnumexprfloxzrequires scipy or netCDF4   zrequires pandas 2.0.0T)warn_for_unclosed_filesc                       e Zd ZdZddZd ZdS )CountingSchedulerztSimple dask scheduler counting the number of computes.

    Reference: https://stackoverflow.com/questions/53289286/r   c                "    d| _         || _        d S )Nr   )total_computesmax_computes)selfrF   s     r)   __init__zCountingScheduler.__init__o   s    (    c                    | xj         dz  c_         | j         | j        k    rt          d| j         | j        fz            t          j        ||fi |S )N   z'Too many computes. Total: %d > max: %d.)rE   rF   RuntimeErrorr2   get)rG   dskkeyskwargss       r)   __call__zCountingScheduler.__call__s   sk    q !2229&(9:;   xT,,V,,,rI   Nr   )__name__
__module____qualname____doc__rH   rQ    rI   r)   rC   rC   j   sC        @ @) ) ) )- - - - -rI   rC   c                    t           st                      S t          |           }t          j                            |          S )N)	scheduler)has_daskr   rC   r2   configset)rF   rY   s     r)   raise_if_dask_computesr]   }   s7     }}!,//I;??Y?///rI   c                      e Zd ZdS )UnexpectedDataAccessN)rS   rT   rU   rW   rI   r)   r_   r_      s        DrI   r_   c                  .    e Zd ZdZd Zd Zd	d
dZd ZdS )InaccessibleArrayzDisallows any loading.c                    || _         d S NarrayrG   re   s     r)   rH   zInaccessibleArray.__init__       


rI   c                     t          d          NzTried accessing datar_   rG   s    r)   get_duck_arrayz InaccessibleArray.get_duck_array       "#9:::rI   Ndtypenp.typing.DTypeLikec                     t          d          ri   rj   rG   rn   s     r)   	__array__zInaccessibleArray.__array__   rm   rI   c                     t          d          )NzTried accessing data.rj   rG   keys     r)   __getitem__zInaccessibleArray.__getitem__   s    "#:;;;rI   rc   rn   ro   )rS   rT   rU   rV   rH   rl   rr   rv   rW   rI   r)   ra   ra      s`            ; ; ;; ; ; ; ;< < < < <rI   ra   c                      e Zd Zd ZdS )FirstElementAccessibleArrayc                n    |j         }t          |          dk    rt          d          | j        |         S )NrK   z&Tried accessing more than one element.)tuplelenr_   re   )rG   ru   
tuple_idxrs      r)   rv   z'FirstElementAccessibleArray.__getitem__   s6    Y
z??Q&'OPPPz*%%rI   NrS   rT   rU   rv   rW   rI   r)   ry   ry      s#        & & & & &rI   ry   c                  0    e Zd ZdZddZd Zddd	Zd
 ZdS )DuckArrayWrapperzBArray-like that prevents casting to array.
    Modeled after cupy.re   
np.ndarrayc                    || _         d S rc   rd   rf   s     r)   rH   zDuckArrayWrapper.__init__   rg   rI   c                H     t          |           | j        |                   S rc   )typere   rt   s     r)   rv   zDuckArrayWrapper.__getitem__   s    tDzz$*S/***rI   Nrn   ro   c                     t          d          ri   rj   rq   s     r)   rr   zDuckArrayWrapper.__array__   rm   rI   c                    dS )z&Present to satisfy is_duck_array test.NrW   rk   s    r)   __array_namespace__z$DuckArrayWrapper.__array_namespace__   s      rI   )re   r   rc   rw   )rS   rT   rU   rV   rH   rv   rr   r   rW   rI   r)   r   r      si            + + +; ; ; ; ;5 5 5 5 5rI   r   c                      e Zd Zd ZdS )
ReturnItemc                    |S rc   rW   rt   s     r)   rv   zReturnItem.__getitem__   s    
rI   Nr~   rW   rI   r)   r   r      s#            rI   r   c                      e Zd Zd Zd ZdS )IndexerMakerc                    || _         d S rc   )_indexer_cls)rG   indexer_clss     r)   rH   zIndexerMaker.__init__   s    'rI   c                \    t          |t                    s|f}|                     |          S rc   )
isinstancer{   r   rt   s     r)   rv   zIndexerMaker.__getitem__   s/    #u%% 	&C  %%%rI   N)rS   rT   rU   rH   rv   rW   rI   r)   r   r      s2        ( ( (& & & & &rI   r   c                   t          j                    5  t          j        dd           t          j        dd           t          | dt	          j        |           j                  }ddd           n# 1 swxY w Y   || }|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npasarrayr   )re   r   s     r)   source_ndarrayr      s     
	 	"	" > >*>???*?@@@ufbj&7&7&<==> > > > > > > > > > > > > > > |Ks   AA33A7:A7c               #     K   t          j        d          5 } | V  t          |           dk    s
J d            	 d d d            d S # 1 swxY w Y   d S )NTrecordr   zgot unexpected warning(s))r   r   r|   r   s    r)   assert_no_warningsr      s      		 	-	-	- =6{{a!<= = = = = = = = = = = = = = = = = =s   "AAAc                    d}t           j                            | |           t           j                            | |           t           j                            ||           d S NT)xarraytestingassert_equal_assert_internal_invariantsabcheck_default_indexes__tracebackhide__s       r)   r   r      sX    
N1%%%
N..q2GHHH
N..q2GHHHHHrI   c                    d}t           j                            | |           t           j                            | |           t           j                            ||           d S r   )r   r   assert_identicalr   r   s       r)   r   r      sX    
N##Aq)))
N..q2GHHH
N..q2GHHHHHrI   c                    d}t          j        j        | |fi | t           j                            | |           t           j                            ||           d S r   )r   r   assert_allcloser   )r   r   r   rP   r   s        r)   r   r      s]    
N"1a226222
N..q2GHHH
N..q2GHHHHHrI   seed
int | None	add_attrsboolr
   c                   t           j                            |           }ddgddgddgd}ddddt                      }dd	t          j        d                   z  f|d<   dt          d
          f|d<   dt          j        dd          f|d<   t          |	                                          D ]L\  }}|
                    t          fd|D                                 }||f||<   |rddi||         _        Mdt          j        g dd          f|j        d<   ddi|_        t!          d |j                                        D                       sJ |S )Ndim1dim2dim3)var1var2var3   	   
   )r   r   r   g      ?
abcdefghijtimez
2000-01-01   )periodsc              3  (   K   | ]}|         V  d S rc   rW   ).0d_dimss     r)   	<genexpr>z#create_test_data.<locals>.<genexpr>   s'      #;#;E!H#;#;#;#;#;#;rI   )sizefoovariable)
r   rK   r@   r   r   rK   rK   r@   r@      int64)rn   numbersbarc              3  8   K   | ]}|j         j        j        V  d S rc   )dataflags	writeable)r   objs     r)   r   z#create_test_data.<locals>.<genexpr>	  s)      JJCsx~'JJJJJJrI   )r   randomRandomStater
   arangelistpd
date_rangesorteditemsnormalr{   attrsre   coordsencodingall	variablesvalues)	r   r   rs_varsr   vdimsr   r   s	           @r)   create_test_datar      s   			t	$	$B    E
 2..E
))C35=!9!99:CK4--.CK2=rBBBCCK%++--(( / /4yye#;#;#;#;d#;#;#;;;y<<A 	/!:.CFL
///w???CJy 5>CLJJ3=3G3G3I3IJJJJJJJJJrI   )365_day360_dayjulianall_leap366_day	gregorianproleptic_gregorianstandardrc   )r   r   r   r   r   r   rR   )Tr   )r   r   r   r   r   r
   )t
__future__r   r   platformr   
contextlibr   r   unittestr   numpyr   pandasr   r#   numpy.testingr   packaging.versionr   pandas.testingr	   xarray.testingr   r
   xarray.corer   xarray.core.duck_array_opsr   xarray.core.indexingr   xarray.core.optionsr   r   r   r   r+   mpluser"   r   r$   xfailmachine	arm_xfailr*   has_matplotlibrequires_matplotlib	has_scipyrequires_scipy	has_pydaprequires_pydaphas_netCDF4requires_netCDF4has_h5netcdfrequires_h5netcdf	has_pyniorequires_pyniohas_pseudonetcdfrequires_pseudonetcdf
has_cftimerequires_cftimerZ   requires_daskhas_bottleneckrequires_bottleneckhas_rasteriorequires_rasteriohas_zarrrequires_zarr
has_fsspecrequires_fsspechas_irisrequires_irishas_numbaggrequires_numbagghas_seabornrequires_seaborn
has_sparserequires_sparsehas_cupyrequires_cupyhas_cartopyrequires_cartopyhas_pintrequires_pinthas_numexprrequires_numexprhas_floxrequires_floxhas_scipy_or_netCDF4r%   requires_scipy_or_netCDF4r!   majorhas_pandas_version_tworequires_pandas_version_twor2   rC   r]   flakynetwork	Exceptionr_   NDArrayMixinra   ry   r   r   r   r   r   r   r   r   r   _CFTIME_CALENDARSrW   rI   r)   <module>r5     s   " " " " " "       2 2 2 2 2 2 2 2                , , , , , , % % % % % % - - - - - -                 8 8 8 8 8 8 2 2 2 2 2 2 + + + + + +         	 CGENNNN 	 	 	D	  "T U U U  "W X X X  "I J J JKH)#Bu0@0@0B0B'B$   	 ,0     '4mL&A&A ##)M'22 	>)M.99 	> -i 8 8 "/-
";"; )M%00 	>*7-*G*G ' '+mH55 
O'-// -&3mL&A&A ##"/-
";"; '-// -+mH55 
O'-// - -i 8 8  -i 8 8 +mH55 
O'-// - -i 8 8 '-// - -i 8 8 '-// - !/K "K..%@ /    !006!; $k00'> 1   
 D ) ) ) ) KKK- - - - - - - -&0 0 0 0 	
+
	 	 	 	 	9 	 	 	< < < < <*,= < < < & & & & &"3 & & &5 5 5 5 5u) 5 5 5"       
& & & & & & & &
 
 
 = = =I I I II I I II I I I    6	 	 	   s   ,B B	B	