
    dy(                       d dl mZ d dlZd dlmZ ej        dk    rd dlmZ nee         Zd dlm	Z	 d dl
Z
d dlmZmZ d dlmZmZmZmZmZmZmZ d	Z G d
 dej                  Z G d dej                  Z G d dej                  Z G d dej                  Ze
j        d             Ze
j                            d          d'd            Z d'dZ!d'dZ" e	j#        e d e	j$        d                    d'd            Z%d'dZ&d'dZ' e	j#        e d e	j$        e                    d'd            Z( e	j#        e d e	j$        e                    d'd            Z) e	j#        d  e	j$        d! e            i                    d'd"            Z* e	j#        d  e	j$        i                     d'd#            Z+d'd$Z,d'd%Z-d'd&Z.dS )(    )annotationsN
EntryPoint   
   )EntryPoints)mock)commonplugins)has_h5netcdfhas_netCDF4has_pseudonetcdf	has_pydap	has_pynio	has_scipyhas_zarrzimportlib.metadatac                      e Zd Zd ZdS )DummyBackendEntrypointArgsc                    d S N )filename_or_objargss     9lib/python3.11/site-packages/xarray/tests/test_plugins.pyopen_datasetz'DummyBackendEntrypointArgs.open_dataset           N__name__
__module____qualname__r   r   r   r   r   r      #            r   r   c                      e Zd Zd ZdS )DummyBackendEntrypointKwargsc                    d S r   r   )r   kwargss     r   r   z)DummyBackendEntrypointKwargs.open_dataset$   r   r   Nr   r   r   r   r%   r%   #   r#   r   r%   c                      e Zd Zd ZdS )DummyBackendEntrypoint1c                   d S r   r   selfr   decoders      r   r   z$DummyBackendEntrypoint1.open_dataset)   r   r   Nr   r   r   r   r)   r)   (   r#   r   r)   c                      e Zd Zd ZdS )DummyBackendEntrypoint2c                   d S r   r   r+   s      r   r   z$DummyBackendEntrypoint2.open_dataset.   r   r   Nr   r   r   r   r/   r/   -   r#   r   r/   c                 :    g dg dg dg dg} d | D             }|S )Nengine1#xarray.tests.test_plugins:backend_1xarray.backends)r3   #xarray.tests.test_plugins:backend_2r5   )engine2r4   r5   r7   r6   r5   c                8    g | ]\  }}}t          |||          S r   r   .0namevaluegroups       r   
<listcomp>z0dummy_duplicated_entrypoints.<locals>.<listcomp>:   s+    
J
J
J.@dE5:dE5))
J
J
Jr   r   )specsepss     r   dummy_duplicated_entrypointsrB   2   sK     	NMMMMMMMMMMM	E K
JE
J
J
JCJr   zignore:FoundreturnNonec                    t          j        t                    5  t          j        |           }d d d            n# 1 swxY w Y   t          |          dk    sJ d S )N   )pytestwarnsRuntimeWarningr   remove_duplicateslen)rB   entrypointss     r   test_remove_duplicatesrM   >   s    	n	%	% N N/0LMMN N N N N N N N N N N N N N N{q         ;??c                 8   t          ddd          } t          j        t                    5 }t	          j        t          | g                    }d d d            n# 1 swxY w Y   t          |          dk    sJ t          |d         j	                  }d|v sJ d S )Nbroken_backendr4   r5      r   zEngine 'broken_backend')
r   rG   rH   rI   r   build_enginesr	   rK   strmessage)rP   record_rT   s       r   test_broken_pluginrW   E   s    - N
 
n	%	% A!+~.>"?"?@@A A A A A A A A A A A A A A Av;;!&)#$$G$//////s   #AA!Ac                :   t          j        t                    5 }t          j        |           }d d d            n# 1 swxY w Y   t          |          dk    sJ t          |d         j                  }t          |d         j                  }d|v sJ d|v sJ d S )NrF   r   rQ   rL   )rG   rH   rI   r   rJ   rK   rS   rT   )rB   rU   rV   message0message1s        r   test_remove_duplicates_warningsr[   R   s    	n	%	% D%&BCCD D D D D D D D D D D D D D D v;;!6!9$%%H6!9$%%HH$$$$H$$$$$$rN   z.EntryPoint.loadreturn_valuec                     g dg dg} d | D             }t          j        |          }t          |          dk    sJ |                                ddhk    sJ d S )Nr2   r8   c                8    g | ]\  }}}t          |||          S r   r   r:   s       r   r?   z/test_backends_dict_from_pkg.<locals>.<listcomp>e   s+    RRR6HdE5:dE511RRRr   rF   r3   r7   )r   backends_dict_from_pkgrK   keys)r@   rL   enginess      r   test_backends_dict_from_pkgrc   ]   s    
 	NMMMMME SRERRRK,[99Gw<<1<<>>i3333333r   c                    t           } t          }d|_        | |d}t          j        |           t          |          dk    sJ | j        dk    sJ |j        dk    sJ t          }d|_        t          j        d|i           |j        dk    sJ t          }d|_        t          j        d|i           |j        dk    sJ d | _        d | _        d |_        d |_        d S )N)r   )engine_1engine_2rF   r   r-   engine)r)   r/   open_dataset_parametersr   set_missing_parametersrK   r%   r   )	backend_1	backend_2rb   backend_kwargsbackend_argss        r   test_set_missing_parametersro   k   s   'I'I(<I%$)<<G"7+++w<<1,0NNNNN,0DDDDD1N-KN*"Hn#=>>>15SSSSS-L+IL("Hl#;<<</3QQQQQ )-I%(,I%-1N*+/L(((r   c                 @   t           } t          j        t                    5  t	          j        d| i           d d d            n# 1 swxY w Y   t          }t          j        t                    5  t	          j        d|i           d d d            d S # 1 swxY w Y   d S )Nrh   )r%   rG   raises	TypeErrorr   rj   r   )backendrn   s     r   'test_set_missing_parameters_raise_errorrt      s'   *G	y	!	! < <&'':;;;< < < < < < < < < < < < < < < .L	y	!	! A A&,'?@@@A A A A A A A A A A A A A A A A A As#   AAA/BBBc                     t          ddd          } t          j        t          | g                    }t	          |d         t
                    sJ |d         j        dk    sJ d S )Ndummyr4   xarray_backendsrg   )r   r   rR   r	   
isinstancer)   ri   )dummy_pkg_entrypointbackend_entrypointss     r   test_build_enginesr{      s    
 &68I  "/=Q<R0S0STT)'24KLLLLLw'? D      r   c                    t          t          ddd          t          ddd          g          } t          t          j        |                     }g }t          j        D ]R}	 |                    |          }|                    |           |                    |           C# t          $ r Y Ow xY wt          |          ddhk     sJ t          |          t          |          k    sJ d S )Ndummy2r4   r5   dummy1r   )r	   r   listr   rR   STANDARD_BACKENDS_ORDERindexpopappend
ValueErrorsetsorted)dummy_pkg_entrypointsrz   indicesber   s        r   test_build_engines_sortedr      s!   
 (?AR  ?AR 		
	 	 w45JKKLLG-  	'--b11E##E***NN5!!!! 	 	 	D	 w<<1b'!!!!#$$/B(C(CCCCCCCs   "?B""
B/.B/z$xarray.backends.plugins.list_enginesrv   c                 $   t          j        t          d          5  t          j        d           d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        d           d d d            d S # 1 swxY w Y   d S )Nzdid not find a match in anymatch	not-valid*found the following matches with the inputfoo.ncrG   rq   r   r   guess_enginer   r   r   test_no_matching_engine_foundr      s   
 
z)G	H	H	H * *[)))* * * * * * * * * * * * * * * 
z)V	W	W	W ' 'X&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '!   =AA#BB	B	c                 $   t          j        t          d          5  t          j        d           d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        d           d d d            d S # 1 swxY w Y   d S )Nzxarray is unable to openr   r   r   r   r   r   r   r   test_engines_not_installedr      s   
 
z)D	E	E	E * *[)))* * * * * * * * * * * * * * * 
z)V	W	W	W ' 'X&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'r   c                    g d} i }t          t          j                                                  D ]D}| dgz   D ];}|                    |          r$t          j        |         ||<   t          j        |=  n<E	 ddl}ddlm}  |             t                      }t          j        D ]3}| D ].}|                    |          r|	                    |            n/4t          |          dk    sJ | d            	 t          j                            |           dS # t          j                            |           w xY w)zTest that some modules are imported in a lazy manner.

    When importing xarray these should not be imported as well.
    Only when running code for the first time that requires them.
    )h5netcdfnetCDF4PseudoNetCDFpydapNioscipyzarr
matplotlibnc_time_axisfloxz
dask.arrayzdask.distributedsparsecupypintcubedxarrayr   Nlist_enginesz& have been imported but should be lazy)r   sysmodulesra   
startswithr   xarray.backendsr   r   addrK   update)blacklistedmodules_backuppkgmodr   r   is_importeds          r   test_lazy_importr      s     K( NCK$$&&''  (+ 	 	C~~c"" &)k#&6s#K$
+000000 ee; 	 	C"  >>#&& OOC(((E !!!AAA "!!!
 	>*****>****s   8BD !D=c                 B   ddl m}   |             }|                                 j        dk    sJ d|v t          k    sJ d|v t
          k    sJ d|v t          k    sJ d|v t          k    sJ d|v t          k    sJ d	|v t          k    sJ d
|v t          k    sJ d|v sJ d S )Nr   r   rQ   r   r   netcdf4pseudonetcdfr   r   pyniostore)r   r   
cache_infocurrsizer   r   r   r   r   r   r   )r   rb   s     r   test_list_enginesr     s    ,,,,,,lnnG""$$-2222w9,,,,'!l2222 [0000g%*:::::w9,,,,g(****w9,,,,gr   c                 "   ddl m} m} t          j                    }d|_        t          |j        _        t          j
        dk    rt          |g          }nd|gi}t          j        d|          5  |                                   |             }d d d            n# 1 swxY w Y   d|v sJ t          |d         t                    sJ t          j                    }d|_        t          |j        _        t          j
        dk    rt          |g          }nd|gi}t          j        d|          5   |              |             }d d d            n# 1 swxY w Y   d|vsJ d|v sJ t          |d         t                    sJ  |             d S )	Nr   )r   refresh_enginestest1r   r5   z$xarray.backends.plugins.entry_pointsr\   test2)r   r   r   r
   	MagicMockr<   r)   loadr]   r   version_infor	   patchcache_clearrx   r/   )r   r   EntryPointMock1r]   rb   EntryPointMock2return_value2s          r   test_refresh_enginesr   !  sE   ========n&&O"O(?O%
7"""O#455)O+<=	:	V	V	V ! !  """,..! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ggg&(?@@@@@n&&O"O(?O%
7""#_$566*_,=>	:	W	W	W ! !,..! ! ! ! ! ! ! ! ! ! ! ! ! ! ! '!!!!ggg&(?@@@@@ Os$   0BB"B0EEE)rC   rD   )/
__future__r   r   importlib.metadatar   r   r	   r   unittestr
   rG   r   r   r   xarray.testsr   r   r   r   r   r   r   importlib_metadata_mockBackendEntrypointr   r%   r)   r/   fixturerB   markfilterwarningsrM   rW   r[   r   r   rc   ro   rt   r{   r   r   r   r   r   r   r   r   r   <module>r      s   " " " " " " 



 ) ) ) ) ) )w.......z"K        + + + + + + + +                  /     !9   
    6#;   
    f6   
    f6   
    N++! ! ! ,+!
0 
0 
0 
0% % % % 000.$.d2S2S2S 4 4 4 40 0 0 08A A A A 000DN 7888 
 
 
	 
 000DN 7888 D D D	 D4 *DN*D*D*F*F GHHH ' ' '	 ' *DN### ' ' '	 '6+ 6+ 6+ 6+r    # # # # # #r   