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__/netCDF4_.cpython-36.pyc
3

���h3+�@s�ddlZddlmZddlZddlmZddlmZm	Z	ddl
mZddlm
Z
mZmZmZddlmZmZmZmZd	d
lmZmZd	dlmZmZmZdd
ddd�ZGdd�de�Zdd�Zdd�Z dd�Z!dd�Z"d!dd�Z#Gdd �d e�Z$dS)"�N)�partial�)�Variable)�pop_to�
cf_encoder)�indexing)�FrozenOrderedDict�NDArrayMixin�close_on_error�
is_remote_uri)�	iteritems�
basestring�OrderedDict�PY3�)�WritableCFDataStore�robust_getitem)�encode_nc3_attr_value�encode_nc3_variable�maybe_convert_to_char_array�native�big�little)�=�>�<�|c@s*eZdZd	dd�Zedd��Zdd�ZdS)
�NetCDF4ArrayWrapperFcCs||_||_dS)N)�array�	is_remote)�selfrr�r!�8/tmp/pip-build-5_djhm0z/xray/xarray/backends/netCDF4_.py�__init__szNetCDF4ArrayWrapper.__init__cCs|jj}|tkrtjd�}|S)N�O)r�dtype�str�np)r r%r!r!r"r%s
zNetCDF4ArrayWrapper.dtypecCs�|jrtttd�}ntj}y||j|�}Wn<tk
rfd}tsZddl	}|d|j
�7}t|��YnX|jdkr|tj
|�}|S)N)Zcatchz�The indexing operation you are attempting to perform is not valid on netCDF4.Variable object. Try loading your data into memory first by calling .load().rz

Original traceback:
)rrr�RuntimeError�operator�getitemr�
IndexErrorr�	traceback�
format_exc�ndimr'Zasscalar)r �keyr*�data�msgr,r!r!r"�__getitem__(s

zNetCDF4ArrayWrapper.__getitem__N)F)�__name__�
__module__�__qualname__r#�propertyr%r2r!r!r!r"rs

rcCs�|jjdkr(t|�dkr"|jd�}t}nT|jjdkr`t|j|j�\}}t|||j	|j
�}|j}n|jjd
krt|j}ntd	��||fS)N�Urr$�S�i�u�f�cz'cannot infer dtype for netCDF4 variable)r9r:r;r<)r%�kind�len�astyper&rr0�dimsr�attrs�encoding�
ValueError)�varr%r0r@r!r!r"�_nc4_values_and_dtypeDs
rEcCs�|tdddg�kr|St|t�s(td��|jd�jd�}x`|D]X}y|j|}Wq>tk
r�}z(|dkrv|j|�}nt	d||��WYdd}~Xq>Xq>W|SdS)N��/zgroup must be a string or None�rzgroup not found: %s)
�set�
isinstancer
rC�strip�split�groups�KeyErrorZcreateGroup�IOError)�ds�group�mode�pathr/�er!r!r"�
_nc4_groupWs

$rUcCs*|jjdkr&d|kr&tj|d�|d<dS)Nr8�
_FillValue)r%r=r'Zstring_)r0�
attributesr!r!r"�_ensure_fill_value_validmsrXcCs`|jjdkrB|jj|jjd��}t|j||j|j�}|jj	dd�|jj
dd�dk	r\td��|S)Nrr�endianrz]Attempt to write non-native endian type, this is not supported by the netCDF4 python library.)rr)r%�	byteorderr0r?Znewbyteorderrr@rArB�pop�get�NotImplementedError)rDr0r!r!r"�_force_native_endiannesstsr^FT�netCDF4cs�|jj�}tddg�}tdddddg��|r6�jd�|jd�dk	rd|jd|j�|jkrd|rd|d=x|D]}||krj||=qjW|r��fd	d
�|D�}|r�td||f��n xt|�D]}|�kr�||=q�W|S)N�source�original_shape�zlib�	complevel�
fletcher32�
contiguous�
chunksizes�least_significant_digitcsg|]}|�kr|�qSr!r!)�.0�k)�valid_encodingsr!r"�
<listcomp>�sz)_extract_nc4_encoding.<locals>.<listcomp>z2unexpected encoding parameters for %r backend:  %r)rB�copyrI�addr\�shaperC�list)�variable�raise_on_invalidZlsd_okay�backendrBZsafe_to_dropri�invalidr!)rjr"�_extract_nc4_encoding�s.





rtcspeZdZdZd�fdd�	Zd	d
�Zdd�Zd
d�Zdd�Zdd�Z	dd�Z
ddd�Z�fdd�Zdd�Z
�ZS)�NetCDF4DataStorez�Store for reading and writing data via the Python-NetCDF4 library.

    This store supports NetCDF3, NetCDF4 and OpenDAP datasets.
    rH�NETCDF4NTFc	svddl}	|dkrd}|	j||||||d�}
t|
��t|
||�|_WdQRX||_t|�|_||_t	t
|�j|�dS)Nrrv)rR�clobber�diskless�persist�format)r_ZDatasetr
rUrPrzrr�	_filename�superrur#)r �filenamerRrzrQ�writerrwrxryZnc4rP)�	__class__r!r"r#�s


zNetCDF4DataStore.__init__cs��jd��j}tjt�|j��}t�fdd��j�D��}t||�i}�j	�}|dk	rd|j
|��j�}|dk	r�|dkr�d|d<d|d<nd|d<t|�|d<t
||d�|j|d<�j|d	<t||||�S)
NFc3s|]}|�j|�fVqdS)N)�	getncattr)rhri)rDr!r"�	<genexpr>�sz7NetCDF4DataStore.open_store_variable.<locals>.<genexpr>reTrfrgr`ra)�set_auto_maskandscale�
dimensionsrZLazilyIndexedArrayrrr�ncattrsrX�filters�update�chunking�tuplerr{rnr)r rDr�r0rWrBr�r�r!)rDr"�open_store_variable�s,





z$NetCDF4DataStore.open_store_variablecst�fdd�t�jj�D��S)Nc3s |]\}}|�j|�fVqdS)N)r�)rhri�v)r r!r"r��sz1NetCDF4DataStore.get_variables.<locals>.<genexpr>)rrrP�	variables)r r!)r r"�
get_variables�szNetCDF4DataStore.get_variablescst�fdd��jj�D��S)Nc3s|]}|�jj|�fVqdS)N)rPr�)rhri)r r!r"r��sz-NetCDF4DataStore.get_attrs.<locals>.<genexpr>)rrPr�)r r!)r r"�	get_attrs�szNetCDF4DataStore.get_attrscCstdd�t|jj�D��S)Ncss|]\}}|t|�fVqdS)N)r>)rhrir�r!r!r"r��sz2NetCDF4DataStore.get_dimensions.<locals>.<genexpr>)rrrPr�)r r!r!r"�get_dimensions�szNetCDF4DataStore.get_dimensionscCs|jj||d�dS)N)�size)rPZcreateDimension)r �name�lengthr!r!r"�
set_dimension�szNetCDF4DataStore.set_dimensioncCs$|jdkrt|�}|jj||�dS)Nrv)rzrrP�	setncattr)r r/�valuer!r!r"�
set_attribute�s
zNetCDF4DataStore.set_attributecCs�|jj�}t|�}|jdkr*t|�\}}nt|�}|j}|j|�|jdd�}|dkrZd}t	||d�}|j
j|||j|j
dd�|j
dd	�|j
d
d�|j
dd�|j
d
d�|j
d�d|j
d�|d�}|jd�x t|�D]\}	}
|j|	|
�q�W||jfS)NrvrVrF�)rqrbFrc��shuffleTrdrerfrrg)Zvarname�datatyper�rbrcr�rdrerfrYrg�
fill_value)rFr�)rArlr^rzrErr%Zset_necessary_dimensionsr[rtrPZcreateVariabler@r\r�rr�r0)r r�rpZcheck_encodingrAr�r�rBZnc4_varrir�r!r!r"�prepare_variable�s:








z!NetCDF4DataStore.prepare_variablecstt|�j�|jj�dS)N)r|ru�syncrP)r )rr!r"r�szNetCDF4DataStore.synccCs(|j}x|jdk	r|j}qW|j�dS)N)rP�parent�close)r rPr!r!r"r�s
zNetCDF4DataStore.close)rHrvNNTFF)F)r3r4r5�__doc__r#r�r�r�r�r�r�r�r�r��
__classcell__r!r!)rr"ru�s
*ru)FTr_)%r)�	functoolsrZnumpyr'rFrZconventionsrr�corerZ
core.utilsrr	r
rZ
core.pycompatrr
rr�commonrrZnetcdf3rrrZ_endian_lookuprrErUrXr^rtrur!r!r!r"�<module>s*+