
    d@                    N   d dl mZ d dlmZ d dlmZm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 d dlmZ d d	lmZ d d
lmZmZmZ d dlmZ erd dl Z d dl!m"Z" d dl#m$Z$  eeeg          Z% G d de          Z& G d de          Z' G d de          Z(de(fe
d<   dS )    )annotations)Iterable)TYPE_CHECKINGAnyN)BACKEND_ENTRYPOINTSAbstractDataStoreBackendArrayBackendEntrypoint_normalize_path)CachingFileManager)	HDF5_LOCKNETCDFC_LOCKcombine_locksensure_lock)StoreBackendEntrypoint)indexing)Frozen
FrozenDictclose_on_error)Variable)BufferedIOBase)Datasetc                  (    e Zd Zd ZddZd Zd ZdS )PncArrayWrapperc                    || _         || _        |                                 }|j        | _        t	          j        |j                  | _        d S N)	datastorevariable_name	get_arrayshapenpdtype)selfr   r   arrays       =lib/python3.11/site-packages/xarray/backends/pseudonetcdf_.py__init__zPncArrayWrapper.__init__!   s@    "*  [
Xek**


    Tc                d    | j         j                            |          }|j        | j                 S r   )r   _manageracquire	variablesr   )r#   
needs_lockdss      r%   r   zPncArrayWrapper.get_array(   s*    ^$,,Z88|D.//r'   c                b    t          j        || j        t           j        j        | j                  S r   )r   explicit_indexing_adapterr    IndexingSupportOUTER_1VECTOR_getitem)r#   keys     r%   __getitem__zPncArrayWrapper.__getitem__,   s*    1X5CT]
 
 	
r'   c                    | j         j        5  |                     d          }||         cd d d            S # 1 swxY w Y   d S )NF)r,   )r   lockr   )r#   r3   r$   s      r%   r2   zPncArrayWrapper._getitem1   s    ^  	 	NNeN44E:	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   8<<N)T)__name__
__module____qualname__r&   r   r4   r2    r'   r%   r   r       sU        + + +0 0 0 0
 
 

    r'   r   c                  l    e Zd ZdZedd            ZddZed             Zd Z	d Z
d Zd	 Zd
 Zd ZdS )PseudoNetCDFDataStorez-Store for accessing datasets via PseudoNetCDFNc                n    ddl m} d|i}|||d<   |t          }t          ||fd|i|} | ||          S )Nr   )pncopenkwargsmoder6   )PseudoNetCDFr>   PNETCDF_LOCKr   )clsfilenamer6   r@   format_kwargsr>   keywordsmanagers           r%   openzPseudoNetCDFDataStore.open:   sf    ((((((m,#HV<D$WhNNTNXNNs7D!!!r'   c                <    || _         t          |          | _        d S r   )r)   r   r6   )r#   rG   r6   s      r%   r&   zPseudoNetCDFDataStore.__init__I   s    %%			r'   c                4    | j                                         S r   )r)   r*   r#   s    r%   r-   zPseudoNetCDFDataStore.dsM   s    }$$&&&r'   c                    t          j        t          ||                     }fd                                D             }t	          j        ||          S )Nc                2    i | ]}|t          |          S r:   )getattr).0kvars     r%   
<dictcomp>z=PseudoNetCDFDataStore.open_store_variable.<locals>.<dictcomp>S   s#    ;;;GCOO;;;r'   )r   LazilyIndexedArrayr   ncattrsr   
dimensions)r#   namerQ   dataattrss     `  r%   open_store_variablez)PseudoNetCDFDataStore.open_store_variableQ   sR    *?4+F+FGG;;;;S[[]];;;e444r'   c                r     t           fd j        j                                        D                       S )Nc              3  N   K   | ]\  }}|                     ||          fV   d S r   )rY   )rO   rP   vr#   s      r%   	<genexpr>z6PseudoNetCDFDataStore.get_variables.<locals>.<genexpr>W   sM       
 
48AqQ((A../
 
 
 
 
 
r'   )r   r-   r+   itemsrK   s   `r%   get_variablesz#PseudoNetCDFDataStore.get_variablesV   sL     
 
 
 
<@G<M<S<S<U<U
 
 
 
 
 	
r'   c                h     t           fd j                                        D                       S )Nc                <    i | ]}|t          j        |          S r:   )rN   r-   rO   rP   r#   s     r%   rR   z3PseudoNetCDFDataStore.get_attrs.<locals>.<dictcomp>\   s'    III!q'$'1--IIIr'   )r   r-   rT   rK   s   `r%   	get_attrszPseudoNetCDFDataStore.get_attrs[   s2    IIIItw7H7HIIIJJJr'   c                4    t          | j        j                  S r   )r   r-   rU   rK   s    r%   get_dimensionsz$PseudoNetCDFDataStore.get_dimensions^   s    dg()))r'   c                8     d fd j         j        D             iS )Nunlimited_dimsc                \    h | ](}j         j        |                                         &|)S r:   )r-   rU   isunlimitedrb   s     r%   	<setcomp>z5PseudoNetCDFDataStore.get_encoding.<locals>.<setcomp>c   sD       1CA1F1R1R1T1T  r'   )r-   rU   rK   s   `r%   get_encodingz"PseudoNetCDFDataStore.get_encodinga   s;        7-  
 	
r'   c                8    | j                                          d S r   )r)   closerK   s    r%   rm   zPseudoNetCDFDataStore.closeh   s    r'   )NNr   )r7   r8   r9   __doc__classmethodrH   r&   propertyr-   rY   r_   rc   re   rk   rm   r:   r'   r%   r<   r<   7   s        77" " " ["& & & & ' ' X'5 5 5

 
 

K K K* * *
 
 
    r'   r<   c                  :    e Zd ZdZdZdZdZ	 	 	 	 	 	 	 	 	 dddZdS )PseudoNetCDFBackendEntrypointaj  
    Backend for netCDF-like data formats in the air quality field
    based on the PseudoNetCDF package.

    It can open:
    - CAMx
    - RACM2 box-model outputs
    - Kinetic Pre-Processor outputs
    - ICARTT Data files (ffi1001)
    - CMAQ Files
    - GEOS-Chem Binary Punch/NetCDF files
    - and many more

    This backend is not selected by default for any files, so make
    sure to specify ``engine="pseudonetcdf"`` in ``open_dataset``.

    For more information about the underlying library, visit:
    https://pseudonetcdf.readthedocs.io

    See Also
    --------
    backends.PseudoNetCDFDataStore
    zGOpen many atmospheric science data formats using PseudoNetCDF in Xarrayz^https://docs.xarray.dev/en/stable/generated/xarray.backends.PseudoNetCDFBackendEntrypoint.html)
filename_or_objmask_and_scaledecode_timesconcat_charactersdecode_coordsdrop_variables
use_cftimedecode_timedeltar@   r6   FTNrs   ;str | os.PathLike[Any] | BufferedIOBase | AbstractDataStorerx   str | Iterable[str] | Nonereturnr   c                    t          |          }t          j        |f|
|	d|}t                      }t	          |          5  |                    ||||||||          }d d d            n# 1 swxY w Y   |S )N)r6   r@   )rt   ru   rv   rw   rx   ry   rz   )r   r<   rH   r   r   open_dataset)r#   rs   rt   ru   rv   rw   rx   ry   rz   r@   r6   rE   storestore_entrypointr-   s                  r%   r   z*PseudoNetCDFBackendEntrypoint.open_dataset   s     */::%*
"&T
 
5B
 
 233E"" 
	 
	!..-)"3+-%!1 / 	 	B
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 	s   A,,A03A0)	FTTTNNNNN)rs   r{   rx   r|   r}   r   )r7   r8   r9   rn   descriptionurlopen_dataset_parametersr   r:   r'   r%   rr   rr   l   so         2 	R  kC  59      r'   rr   rA   pseudonetcdf))
__future__r   collections.abcr   typingr   r   numpyr!   xarray.backends.commonr   r   r	   r
   r   xarray.backends.file_managerr   xarray.backends.locksr   r   r   r   xarray.backends.storer   xarray.corer   xarray.core.utilsr   r   r   xarray.core.variabler   osior   xarray.core.datasetr   rB   r   r<   rr   r:   r'   r%   <module>r      s   " " " " " " $ $ $ $ $ $ % % % % % % % %                  < ; ; ; ; ; U U U U U U U U U U U U 8 8 8 8 8 8             @ @ @ @ @ @ @ @ @ @ ) ) ) ) ) ) ,III!!!!!!++++++ }i677    l   .2 2 2 2 2- 2 2 2jL L L L L$5 L L L^ (67T&U N # # #r'   