HOME


sh-3ll 1.0
DIR:/usr/local/lib/python3.6/site-packages/xarray/backends/__pycache__/
Upload File :
Current File : //usr/local/lib/python3.6/site-packages/xarray/backends/__pycache__/common.cpython-36.pyc
3

���h��@s�ddlZddlZddlZddlZddlZddlmZddlm	Z	ddl
mZddlm
Z
mZmZeje�ZdZdd	�Zd
d�Zdd
�Zeddfdd�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZdS)�N)�Mapping�)�
cf_encoder)�FrozenOrderedDict)�	iteritems�dask_array_type�OrderedDictZ
__values__cCs|dkrt}|S)N)�
NONE_VAR_NAME)�name�r�6/tmp/pip-build-5_djhm0z/xray/xarray/backends/common.py�_encode_variable_namesr
cCs|tkrd}|S)N)r	)r
rrr�_decode_variable_namesrcCsVt|j�st|j�rdS|jdks0|jjdkr4dStj|j|jd�}tj	|j
|k�S)a

    Determines if in index is 'trivial' meaning that it is
    equivalent to np.arange().  This is determined by
    checking if there are any attributes or encodings,
    if ndims is one, dtype is int and finally by comparing
    the actual values to np.arange()
    F��i)�dtype)�len�attrs�encoding�ndimr�kind�np�arange�size�all�values)�varrrrr�is_trivial_indexs
r�i�c	Cs�|dkst�x�t|d�D]v}y||S|k
r�||kr@�|d|}|tjj|�}d|||tj�f}tj|�t	j
d|�YqXqWdS)z�
    Robustly index an array, using retry logic with exponential backoff if any
    of the errors ``catch`` are raised. The initial_delay is measured in ms.

    With the default settings, the maximum delay will be in the range of 32-64
    seconds.
    rrrzZgetitem failed, waiting %s ms before trying again (%s tries remaining). Full traceback: %sg����MbP?N)�AssertionError�ranger�random�randint�	traceback�
format_exc�logger�debug�time�sleep)	�array�keyZcatch�max_retriesZ
initial_delay�nZ
base_delayZ
next_delay�msgrrr�robust_getitem2s	
r.c@sxeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	d
d��Z
e	dd��Ze	dd��Zdd�Z
dd�Zdd�ZdS)�AbstractDataStorecCs
t|j�S)N)�iter�	variables)�selfrrr�__iter__MszAbstractDataStore.__iter__cCs
|j|S)N)r1)r2r*rrr�__getitem__PszAbstractDataStore.__getitem__cCs
t|j�S)N)rr1)r2rrr�__len__SszAbstractDataStore.__len__cCst�dS)N)�NotImplementedError)r2rrr�	get_attrsVszAbstractDataStore.get_attrscCst�dS)N)r6)r2rrr�
get_variablesYszAbstractDataStore.get_variablescCs.tdd�t|j��D��}t|j��}||fS)a1
        This loads the variables and attributes simultaneously.
        A centralized loading function makes it easier to create
        data stores that do automatic encoding/decoding.

        For example:

            class SuffixAppendingDataStore(AbstractDataStore):

                def load(self):
                    variables, attributes = AbstractDataStore.load(self)
                    variables = {'%s_suffix' % k: v
                                 for k, v in iteritems(variables)}
                    attributes = {'%s_suffix' % k: v
                                  for k, v in iteritems(attributes)}
                    return variables, attributes

        This function will be called anytime variables or attributes
        are requested, so care should be taken to make sure its fast.
        css|]\}}t|�|fVqdS)N)r)�.0�k�vrrr�	<genexpr>qsz)AbstractDataStore.load.<locals>.<genexpr>)rrr8r7)r2r1�
attributesrrr�load\szAbstractDataStore.loadcCs|j�\}}|S)N)r>)r2r1�_rrrr1vszAbstractDataStore.variablescCs|j�\}}|S)N)r>)r2r?r=rrrrszAbstractDataStore.attrscCs|j�S)N)Zget_dimensions)r2rrr�
dimensions�szAbstractDataStore.dimensionscCsdS)Nr)r2rrr�close�szAbstractDataStore.closecCs|S)Nr)r2rrr�	__enter__�szAbstractDataStore.__enter__cCs|j�dS)N)rA)r2Zexception_typeZexception_valuer#rrr�__exit__�szAbstractDataStore.__exit__N)�__name__�
__module__�__qualname__r3r4r5r7r8r>�propertyr1rr@rArBrCrrrrr/Ks		r/c@s$eZdZdd�Zdd�Zdd�ZdS)�ArrayWritercCsg|_g|_dS)N)�sources�targets)r2rrr�__init__�szArrayWriter.__init__cCs0t|t�r$|jj|�|jj|�n||d<dS)N.)�
isinstancerrI�appendrJ)r2�source�targetrrr�add�s
zArrayWriter.addcCs0|jr,ddlj}|j|j|j�g|_g|_dS)Nr)rIZ
dask.arrayr)�storerJ)r2�darrr�sync�s

zArrayWriter.syncN)rDrErFrKrPrSrrrrrH�srHc@sdeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Ze	�fdd�Z
dd�Zdd�Zdd�Z
dS)�AbstractWritableDataStoreNcCs|dkrt�}||_dS)N)rH�writer)r2rUrrrrK�sz"AbstractWritableDataStore.__init__cCst�dS)N)r6)r2�d�lrrr�
set_dimension�sz'AbstractWritableDataStore.set_dimensioncCst�dS)N)r6)r2r:r;rrr�
set_attribute�sz'AbstractWritableDataStore.set_attributecCst�dS)N)r6)r2r:r;rrr�set_variable�sz&AbstractWritableDataStore.set_variablecCs|jj�dS)N)rUrS)r2rrrrS�szAbstractWritableDataStore.synccCs|j||j�dS)N)rQr)r2Zdatasetrrr�
store_dataset�sz'AbstractWritableDataStore.store_datasetcsT|j|�dd�|j�D��ttj����t�fdd�t|�D��}|j||�dS)NcSsg|]
}|j�qSr)�dims)r9r;rrr�
<listcomp>�sz3AbstractWritableDataStore.store.<locals>.<listcomp>c3s*|]"\}}|�kot|�s||fVqdS)N)r)r9r:r;)�neccesary_dimsrrr<�sz2AbstractWritableDataStore.store.<locals>.<genexpr>)�set_attributesr�set�	itertools�chainrr�
set_variables)r2r1r=�check_encoding_setr)r^rrQ�s

zAbstractWritableDataStore.storecCs&x t|�D]\}}|j||�q
WdS)N)rrY)r2r=r:r;rrrr_�sz(AbstractWritableDataStore.set_attributesc	CsJxDt|�D]8\}}t|�}||k}|j|||�\}}|jj||�q
WdS)N)rr
Zprepare_variablerUrP)	r2r1rd�vnr;r
�checkrOrNrrrrc�s
z'AbstractWritableDataStore.set_variablescCs6x0t|j|j�D]\}}||jkr|j||�qWdS)N)�zipr\�shaper@rX)r2�variablerVrWrrr�set_necessary_dimensions�s
z2AbstractWritableDataStore.set_necessary_dimensions)N)rDrErFrKrXrYrZrSr[�	frozensetrQr_rcrjrrrrrT�s

rTc@seZdZe�fdd�ZdS)�WritableCFDataStorecCs"t||�\}}tj||||�dS)N)rrTrQ)r2r1r=rdZcf_variablesZcf_attrsrrrrQ�s
zWritableCFDataStore.storeN)rDrErFrkrQrrrrrl�srl)Znumpyrra�loggingr'r#�collectionsrZconventionsrZ
core.utilsrZ
core.pycompatrrr�	getLoggerrDr%r	r
rr�	Exceptionr.r/�objectrHrTrlrrrr�<module>s&
K4