U
    Cvf                     @  s   d dl mZ d dlZd dlZd dlmZmZmZm	Z	m
Z
 d dlmZ d dlmZmZmZmZmZ d dlmZ d dlmZ d dlmZmZmZmZ d d	lmZ e ZeeeegZG d
d deZ G dd deZ!G dd de	Z"e"ed< dS )    )annotationsN)BACKEND_ENTRYPOINTSAbstractDataStoreBackendArrayBackendEntrypoint_normalize_path)CachingFileManager)	HDF5_LOCKNETCDFC_LOCKSerializableLockcombine_locksensure_lock)StoreBackendEntrypoint)indexing)Frozen
FrozenDictclose_on_errormodule_available)Variablec                   @  s.   e Zd Zdd ZdddZdd Zdd	 Zd
S )NioArrayWrapperc                 C  s0   || _ || _|  }|j| _t| | _d S N)	datastorevariable_name	get_arrayshapenpZdtypetypecode)selfr   r   array r   :/tmp/pip-unpacked-wheel-h316xyqg/xarray/backends/pynio_.py__init__"   s
    zNioArrayWrapper.__init__Tc                 C  s   | j j|}|j| j S r   )r   _manageracquire	variablesr   )r   
needs_lockdsr   r   r    r   )   s    zNioArrayWrapper.get_arrayc                 C  s   t || jt jj| jS r   )r   Zexplicit_indexing_adapterr   ZIndexingSupportZBASIC_getitem)r   keyr   r   r    __getitem__-   s       zNioArrayWrapper.__getitem__c              
   C  sZ   | j jH | jdd}|dkr<| jdkr<| W  5 Q R  S || W  5 Q R  S Q R X d S )NF)r%   r   r   )r   lockr   ndim	get_value)r   r(   r   r   r   r    r'   2   s
    
zNioArrayWrapper._getitemN)T)__name__
__module____qualname__r!   r   r)   r'   r   r   r   r    r   !   s   
r   c                   @  sV   e Zd ZdZdddZedd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd ZdS )NioDataStorez&Store for accessing datasets via PyNIOrNc                 K  sR   dd l }tdt |d kr t}t|| _t|j||||d| _	| j
dd d S )Nr   zThe PyNIO backend is Deprecated and will be removed from Xarray in a future release. See https://github.com/pydata/xarray/issues/4491 for more information)r*   modekwargsZMaskedArrayModeZMaskedNever)NiowarningswarnDeprecationWarning
PYNIO_LOCKr   r*   r   	open_filer"   r&   Z
set_option)r   filenamer2   r*   r3   r4   r   r   r    r!   ?   s     
    zNioDataStore.__init__c                 C  s
   | j  S r   )r"   r#   r   r   r   r    r&   R   s    zNioDataStore.dsc                 C  s    t t|| }t|j||jS r   )r   ZLazilyIndexedArrayr   r   
dimensions
attributes)r   namevardatar   r   r    open_store_variableV   s    z NioDataStore.open_store_variablec                   s   t  fdd jj D S )Nc                 3  s"   | ]\}}|  ||fV  qd S r   )rA   ).0kvr;   r   r    	<genexpr>[   s    z-NioDataStore.get_variables.<locals>.<genexpr>)r   r&   r$   itemsr;   r   r;   r    get_variablesZ   s    
zNioDataStore.get_variablesc                 C  s   t | jjS r   )r   r&   r=   r;   r   r   r    	get_attrs_   s    zNioDataStore.get_attrsc                 C  s   t | jjS r   )r   r&   r<   r;   r   r   r    get_dimensionsb   s    zNioDataStore.get_dimensionsc                   s   d fdd j jD iS )NZunlimited_dimsc                   s   h | ]} j |r|qS r   )r&   Z	unlimited)rB   rC   r;   r   r    	<setcomp>g   s      z,NioDataStore.get_encoding.<locals>.<setcomp>)r&   r<   r;   r   r;   r    get_encodinge   s     zNioDataStore.get_encodingc                 C  s   | j   d S r   )r"   closer;   r   r   r    rL   j   s    zNioDataStore.close)r1   N)r-   r.   r/   __doc__r!   propertyr&   rA   rG   rH   rI   rK   rL   r   r   r   r    r0   <   s   

r0   c                	   @  s"   e Zd ZdZedZdddZdS )	PynioBackendEntrypointz
    PyNIO backend

        .. deprecated:: 0.20.0

        Deprecated as PyNIO is no longer supported. See
        https://github.com/pydata/xarray/issues/4491 for more information
    r4   TNr1   c                 C  sN   t |}t||	|
d}t }t|  |j||||||||d}W 5 Q R X |S )N)r2   r*   )mask_and_scaledecode_timesconcat_charactersdecode_coordsdrop_variables
use_cftimedecode_timedelta)r   r0   r   r   open_dataset)r   Zfilename_or_objrP   rQ   rR   rS   rT   rU   rV   r2   r*   storeZstore_entrypointr&   r   r   r    rW   z   s&    

z#PynioBackendEntrypoint.open_dataset)	TTTTNNNr1   N)r-   r.   r/   rM   r   	availablerW   r   r   r   r    rO   n   s   	         rO   Zpynio)#
__future__r   r5   Znumpyr   Zxarray.backends.commonr   r   r   r   r   Zxarray.backends.file_managerr   Zxarray.backends.locksr	   r
   r   r   r   Zxarray.backends.storer   Zxarray.corer   Zxarray.core.utilsr   r   r   r   Zxarray.core.variabler   ZNCL_LOCKr8   r   r0   rO   r   r   r   r    <module>   s   2/