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 dd
lmZ zd dlmZ dZW n ey   dZY n0 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combine_locksensure_lock)StoreBackendEntrypoint)pncopenTFc                   @   s.   e Zd Zdd ZdddZdd Zdd	 Zd
S )PncArrayWrapperc                 C   s.   || _ || _|  }|j| _t|j| _d S N)	datastorevariable_name	get_arrayshapenpZdtype)selfr   r   array r   <lib/python3.9/site-packages/xarray/backends/pseudonetcdf_.py__init__   s
    zPncArrayWrapper.__init__Tc                 C   s   | j j|}|j| j S r   )r   _manageracquire	variablesr   )r   
needs_lockdsr   r   r   r   %   s    zPncArrayWrapper.get_arrayc                 C   s   t || jt jj| jS r   )r   Zexplicit_indexing_adapterr   ZIndexingSupportZOUTER_1VECTOR_getitem)r   keyr   r   r   __getitem__)   s    zPncArrayWrapper.__getitem__c                 C   s@   | j j$ | jdd}|| W  d    S 1 s20    Y  d S )NF)r$   )r   lockr   )r   r'   r   r   r   r   r&   .   s    
zPncArrayWrapper._getitemN)T)__name__
__module____qualname__r    r   r(   r&   r   r   r   r   r      s   
r   c                   @   sd   e Zd ZdZedd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 )PseudoNetCDFDataStorez-Store for accessing datasets via PseudoNetCDFNc                 K   sD   d|i}|d ur||d< |d u r$t }tt|fd|i|}| ||S )Nkwargsmoder)   )PNETCDF_LOCKr   r   )clsfilenamer)   r/   format_kwargskeywordsmanagerr   r   r   open7   s    zPseudoNetCDFDataStore.openc                 C   s   || _ t|| _d S r   )r!   r   r)   )r   r5   r)   r   r   r   r    E   s    zPseudoNetCDFDataStore.__init__c                 C   s
   | j  S r   )r!   r"   r   r   r   r   r%   I   s    zPseudoNetCDFDataStore.dsc                    s4   t t|| } fdd  D }t j||S )Nc                    s   i | ]}|t  |qS r   )getattr.0kvarr   r   
<dictcomp>O       z=PseudoNetCDFDataStore.open_store_variable.<locals>.<dictcomp>)r   ZLazilyIndexedArrayr   ncattrsr   
dimensions)r   namer=   dataattrsr   r<   r   open_store_variableM   s    z)PseudoNetCDFDataStore.open_store_variablec                    s   t  fdd jj D S )Nc                 3   s"   | ]\}}|  ||fV  qd S r   )rE   )r:   r;   vr7   r   r   	<genexpr>S   s   z6PseudoNetCDFDataStore.get_variables.<locals>.<genexpr>)r   r%   r#   itemsr7   r   r7   r   get_variablesR   s    
z#PseudoNetCDFDataStore.get_variablesc                    s   t  fdd j D S )Nc                    s   i | ]}|t  j|qS r   )r8   r%   r9   r7   r   r   r>   X   r?   z3PseudoNetCDFDataStore.get_attrs.<locals>.<dictcomp>)r   r%   r@   r7   r   r7   r   	get_attrsW   s    zPseudoNetCDFDataStore.get_attrsc                 C   s   t | jjS r   )r   r%   rA   r7   r   r   r   get_dimensionsZ   s    z$PseudoNetCDFDataStore.get_dimensionsc                    s   d fdd j jD iS )NZunlimited_dimsc                    s    h | ]} j j|  r|qS r   )r%   rA   Zisunlimitedr9   r7   r   r   	<setcomp>_   s   z5PseudoNetCDFDataStore.get_encoding.<locals>.<setcomp>)r%   rA   r7   r   r7   r   get_encoding]   s    z"PseudoNetCDFDataStore.get_encodingc                 C   s   | j   d S r   )r!   closer7   r   r   r   rN   d   s    zPseudoNetCDFDataStore.close)NN)N)r*   r+   r,   __doc__classmethodr6   r    propertyr%   rE   rI   rJ   rK   rM   rN   r   r   r   r   r-   4   s   

r-   c                	   @   s   e Zd ZeZdZdddZdS )PseudoNetCDFBackendEntrypoint)
filename_or_objmask_and_scaledecode_timesconcat_charactersdecode_coordsdrop_variables
use_cftimedecode_timedeltar/   r)   FTNc                 K   sl   t |}tj|f|
|	d|}t }t|* |j||||||||d}W d    n1 s^0    Y  |S )N)r)   r/   )rT   rU   rV   rW   rX   rY   rZ   )r   r-   r6   r   r   open_dataset)r   rS   rT   rU   rV   rW   rX   rY   rZ   r/   r)   r3   storeZstore_entrypointr%   r   r   r   r[   z   s*    
$
z*PseudoNetCDFBackendEntrypoint.open_dataset)	FTTTNNNNN)r*   r+   r,   has_pseudonetcdfZ	availableZopen_dataset_parametersr[   r   r   r   r   rR   h   s            rR   Zpseudonetcdf)!Znumpyr   corer   Z
core.utilsr   r   r   Zcore.variabler   commonr	   r
   r   r   r   Zfile_managerr   locksr   r   r   r   r\   r   ZPseudoNetCDFr   r]   ModuleNotFoundErrorr0   r   r-   rR   r   r   r   r   <module>   s"   
45