a
    İa0                     @   s   d dl Z d dlZddl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 G dd deZdd ZG dd deZG dd deZeed< dS )    N   )indexing)integer_types)Frozen
FrozenDictclose_on_erroris_dict_likeis_remote_uri)Variable   )BACKEND_ENTRYPOINTSAbstractDataStoreBackendArrayBackendEntrypointrobust_getitem)StoreBackendEntrypointTFc                   @   s<   e Zd Zdd Zedd Zedd Zdd Zd	d
 ZdS )PydapArrayWrapperc                 C   s
   || _ d S N)array)selfr    r   5lib/python3.9/site-packages/xarray/backends/pydap_.py__init__   s    zPydapArrayWrapper.__init__c                 C   s   | j jS r   )r   shaper   r   r   r   r      s    zPydapArrayWrapper.shapec                 C   s   | j jS r   )r   dtyper   r   r   r   r   "   s    zPydapArrayWrapper.dtypec                 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PydapArrayWrapper.__getitem__c                 C   s\   t | jd| j}t||td}tdd t|D }|jt| |jkrX|rXt	||}|S )Nr   )Zcatchc                 s   s    | ]\}}t |tr|V  qd S r   )
isinstancer   ).0nkr   r   r   	<genexpr>1       z-PydapArrayWrapper._getitem.<locals>.<genexpr>)
getattrr   r   
ValueErrortuple	enumeratendimlennpZsqueeze)r   r   r   resultZaxisr   r   r   r   +   s    zPydapArrayWrapper._getitemN)	__name__
__module____qualname__r   propertyr   r   r   r   r   r   r   r   r      s   

r   c                    st   t | } t| D ]^   dks.  dr@| |   qt|   r|  fdd|   D  q| S )NglobalZ_globalc                    s    i | ]\}}  d | |qS ).r   )r    Zk_childZv_childr"   r   r   
<dictcomp>C   s   z#_fix_attributes.<locals>.<dictcomp>)dictlistlowerendswithupdatepopr   items)
attributesr   r3   r   _fix_attributes8   s    
r=   c                   @   sF   e Zd ZdZdd ZedddZdd Zd	d
 Zdd Z	dd Z
dS )PydapDataStorezStore for accessing OpenDAP datasets with pydap.

    This store provides an alternative way to access OpenDAP datasets that may
    be useful if the netCDF4 library is not available.
    c                 C   s
   || _ dS )zN
        Parameters
        ----------
        ds : pydap DatasetType
        N)ds)r   r?   r   r   r   r   R   s    zPydapDataStore.__init__Nc                 C   s   t jj||d}| |S )Nsession)pydapZclientZopen_url)clsurlrA   r?   r   r   r   openZ   s    zPydapDataStore.openc                 C   s"   t t|}t|j|t|jS r   )r   ZLazilyIndexedArrayr   r
   
dimensionsr=   r<   )r   vardatar   r   r   open_store_variable`   s    z"PydapDataStore.open_store_variablec                    s   t  fdd j D S )Nc                 3   s"   | ]}|   j| fV  qd S r   )rI   r?   )r    r"   r   r   r   r#   e   s   z/PydapDataStore.get_variables.<locals>.<genexpr>)r   r?   keysr   r   r   r   get_variablesd   s    zPydapDataStore.get_variablesc                 C   s   t t| jjS r   )r   r=   r?   r<   r   r   r   r   	get_attrsi   s    zPydapDataStore.get_attrsc                 C   s   t | jjS r   )r   r?   rF   r   r   r   r   get_dimensionsl   s    zPydapDataStore.get_dimensions)N)r-   r.   r/   __doc__r   classmethodrE   rI   rK   rL   rM   r   r   r   r   r>   K   s   r>   c                	   @   s"   e Zd ZeZdd ZdddZdS )PydapBackendEntrypointc                 C   s   t |tot|S r   )r   strr	   )r   filename_or_objr   r   r   guess_can_opens   s    z%PydapBackendEntrypoint.guess_can_openTNc                 C   sr   |
d urt dt tj||	d}t }t|. |j||||||||d}|W  d    S 1 sd0    Y  d S )NzzThe kwarg 'lock' has been deprecated for this backend, and is now ignored. In the future passing lock will raise an error.r@   )mask_and_scaledecode_timesconcat_charactersdecode_coordsdrop_variables
use_cftimedecode_timedelta)warningswarnDeprecationWarningr>   rE   r   r   open_dataset)r   rR   rT   rU   rV   rW   rX   rY   rZ   rA   lockstoreZstore_entrypointr?   r   r   r   r^   v   s,    

z#PydapBackendEntrypoint.open_dataset)	TTTTNNNNN)r-   r.   r/   	has_pydapZ	availablerS   r^   r   r   r   r   rP   p   s            rP   rB   )r[   Znumpyr+   corer   Zcore.pycompatr   Z
core.utilsr   r   r   r   r	   Zcore.variabler
   commonr   r   r   r   r   r`   r   Zpydap.clientrB   ra   ModuleNotFoundErrorr   r=   r>   rP   r   r   r   r   <module>   s"   
%/