a
    İa                     @   s   d dl ZddlmZ ddl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mZmZmZmZ dd
lmZ zd dlZdZW n ey   dZY n0 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 )    N   )indexing)Frozen
FrozenDictclose_on_error)Variable   )BACKEND_ENTRYPOINTSAbstractDataStoreBackendArrayBackendEntrypoint_normalize_path)CachingFileManager)	HDF5_LOCKNETCDFC_LOCKSerializableLockcombine_locksensure_lock)StoreBackendEntrypointTFc                   @   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   5lib/python3.9/site-packages/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   sh   | j jL | jdd}|dkr>| jdkr>| W  d    S || W  d    S 1 sZ0    Y  d S )NF)r%   r   r   )r   lockr   ndimZ	get_value)r   r(   r   r   r   r    r'   0   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   s>   |d u rt }t|| _ttj||||d| _| jdd d S )N)r*   modekwargsZMaskedArrayModeZMaskedNever)	
PYNIO_LOCKr   r*   r   NioZ	open_filer"   r&   Z
set_option)r   filenamer1   r*   r2   r   r   r    r!   =   s    
zNioDataStore.__init__c                 C   s
   | j  S r   )r"   r#   r   r   r   r    r&   I   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_variableM   s    z NioDataStore.open_store_variablec                    s   t  fdd jj D S )Nc                 3   s"   | ]\}}|  ||fV  qd S r   )r<   ).0kvr6   r   r    	<genexpr>R   s   z-NioDataStore.get_variables.<locals>.<genexpr>)r   r&   r$   itemsr6   r   r6   r    get_variablesQ   s    
zNioDataStore.get_variablesc                 C   s   t | jjS r   )r   r&   r8   r6   r   r   r    	get_attrsV   s    zNioDataStore.get_attrsc                 C   s   t | jjS r   )r   r&   r7   r6   r   r   r    get_dimensionsY   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)r=   r>   r6   r   r    	<setcomp>^       z,NioDataStore.get_encoding.<locals>.<setcomp>)r&   r7   r6   r   r6   r    get_encoding\   s    zNioDataStore.get_encodingc                 C   s   | j   d S r   )r"   closer6   r   r   r    rH   a   s    zNioDataStore.close)r0   N)r,   r-   r.   __doc__r!   propertyr&   r<   rB   rC   rD   rG   rH   r   r   r   r    r/   :   s   

r/   c                	   @   s   e Zd ZeZdddZdS )PynioBackendEntrypointTNr0   c                 C   sb   t |}t||	|
d}t }t|* |j||||||||d}W d    n1 sT0    Y  |S )N)r1   r*   )mask_and_scaledecode_timesconcat_charactersdecode_coordsdrop_variables
use_cftimedecode_timedelta)r   r/   r   r   open_dataset)r   Zfilename_or_objrL   rM   rN   rO   rP   rQ   rR   r1   r*   storeZstore_entrypointr&   r   r   r    rS   h   s&    
$
z#PynioBackendEntrypoint.open_dataset)	TTTTNNNr0   N)r,   r-   r.   	has_pynioZ	availablerS   r   r   r   r    rK   e   s            rK   Zpynio)"Znumpyr   corer   Z
core.utilsr   r   r   Zcore.variabler   commonr	   r
   r   r   r   Zfile_managerr   locksr   r   r   r   r   rT   r   r4   rU   ModuleNotFoundErrorZNCL_LOCKr3   r   r/   rK   r   r   r   r    <module>   s$   
+&