@@ -1233,14 +1233,10 @@ from cpython.bytes cimport PyBytes_FromStringAndSize
12331233# pure python utilities
12341234from .utils import (_StartCountStride, _quantize, _find_dim, _walk_grps,
12351235 _out_array_shape, _sortbylist, _tostr, _safecast, _is_int)
1236- # try to use built-in ordered dict in python >= 2.7
1237- try :
1236+ import sys
1237+ if sys.version_info[0 :2 ] < (3 , 7 ):
1238+ # Python 3.7+ guarantees order; older versions need OrderedDict
12381239 from collections import OrderedDict
1239- except ImportError : # or else use drop-in substitute
1240- try :
1241- from ordereddict import OrderedDict
1242- except ImportError :
1243- raise ImportError (' please install ordereddict (https://pypi.python.org/pypi/ordereddict)' )
12441240try :
12451241 from itertools import izip as zip
12461242except ImportError :
@@ -1254,7 +1250,6 @@ import posixpath
12541250from cftime import num2date, date2num, date2index
12551251import numpy
12561252import weakref
1257- import sys
12581253import warnings
12591254from glob import glob
12601255from numpy import ma
@@ -1677,9 +1672,15 @@ cdef _get_types(group):
16771672 ierr = nc_inq_typeids(_grpid, & ntypes, typeids)
16781673 _ensure_nc_success(ierr)
16791674 # create empty dictionary for CompoundType instances.
1680- cmptypes = OrderedDict()
1681- vltypes = OrderedDict()
1682- enumtypes = OrderedDict()
1675+ if sys.version_info[0 :2 ] < (3 , 7 ):
1676+ cmptypes = OrderedDict()
1677+ vltypes = OrderedDict()
1678+ enumtypes = OrderedDict()
1679+ else :
1680+ cmptypes = dict ()
1681+ vltypes = dict ()
1682+ enumtypes = dict ()
1683+
16831684 if ntypes > 0 :
16841685 for n from 0 <= n < ntypes:
16851686 xtype = typeids[n]
@@ -1735,7 +1736,10 @@ cdef _get_dims(group):
17351736 ierr = nc_inq_ndims(_grpid, & numdims)
17361737 _ensure_nc_success(ierr)
17371738 # create empty dictionary for dimensions.
1738- dimensions = OrderedDict()
1739+ if sys.version_info[0 :2 ] < (3 , 7 ):
1740+ dimensions = OrderedDict()
1741+ else :
1742+ dimensions = dict ()
17391743 if numdims > 0 :
17401744 dimids = < int * > malloc(sizeof(int ) * numdims)
17411745 if group.data_model == ' NETCDF4' :
@@ -1766,7 +1770,10 @@ cdef _get_grps(group):
17661770 ierr = nc_inq_grps(_grpid, & numgrps, NULL )
17671771 _ensure_nc_success(ierr)
17681772 # create dictionary containing `netCDF4.Group` instances for groups in this group
1769- groups = OrderedDict()
1773+ if sys.version_info[0 :2 ] < (3 , 7 ):
1774+ groups = OrderedDict()
1775+ else :
1776+ groups = dict ()
17701777 if numgrps > 0 :
17711778 grpids = < int * > malloc(sizeof(int ) * numgrps)
17721779 with nogil:
@@ -1796,7 +1803,10 @@ cdef _get_vars(group):
17961803 ierr = nc_inq_nvars(_grpid, & numvars)
17971804 _ensure_nc_success(ierr, err_cls = AttributeError )
17981805 # create empty dictionary for variables.
1799- variables = OrderedDict()
1806+ if sys.version_info[0 :2 ] < (3 , 7 ):
1807+ variables = OrderedDict()
1808+ else :
1809+ variables = dict ()
18001810 if numvars > 0 :
18011811 # get variable ids.
18021812 varids = < int * > malloc(sizeof(int ) * numvars)
@@ -2373,7 +2383,10 @@ strings.
23732383 if self .data_model == ' NETCDF4' :
23742384 self .groups = _get_grps(self )
23752385 else :
2376- self .groups = OrderedDict()
2386+ if sys.version_info[0 :2 ] < (3 , 7 ):
2387+ self .groups = OrderedDict()
2388+ else :
2389+ self .groups = dict ()
23772390
23782391 # these allow Dataset objects to be used via a "with" statement.
23792392 def __enter__ (self ):
@@ -2954,7 +2967,11 @@ attributes."""
29542967 values = []
29552968 for name in names:
29562969 values.append(_get_att(self , NC_GLOBAL, name))
2957- return OrderedDict(zip (names,values))
2970+ gen = zip (names, values)
2971+ if sys.version_info[0 :2 ] < (3 , 7 ):
2972+ return OrderedDict(gen)
2973+ else :
2974+ return dict (gen)
29582975 else :
29592976 raise AttributeError
29602977 elif name in _private_atts:
@@ -3280,12 +3297,21 @@ Additional read-only class variables:
32803297 bytestr = _strencode(name)
32813298 groupname = bytestr
32823299 _ensure_nc_success(nc_def_grp(parent._grpid, groupname, & self ._grpid))
3283- self .cmptypes = OrderedDict()
3284- self .vltypes = OrderedDict()
3285- self .enumtypes = OrderedDict()
3286- self .dimensions = OrderedDict()
3287- self .variables = OrderedDict()
3288- self .groups = OrderedDict()
3300+ if sys.version_info[0 :2 ] < (3 , 7 ):
3301+ self .cmptypes = OrderedDict()
3302+ self .vltypes = OrderedDict()
3303+ self .enumtypes = OrderedDict()
3304+ self .dimensions = OrderedDict()
3305+ self .variables = OrderedDict()
3306+ self .groups = OrderedDict()
3307+ else :
3308+ self .cmptypes = dict ()
3309+ self .vltypes = dict ()
3310+ self .enumtypes = dict ()
3311+ self .dimensions = dict ()
3312+ self .variables = dict ()
3313+ self .groups = dict ()
3314+
32893315
32903316 def close (self ):
32913317 """
@@ -4351,7 +4377,12 @@ details."""
43514377 values = []
43524378 for name in names:
43534379 values.append(_get_att(self ._grp, self ._varid, name))
4354- return OrderedDict(zip (names,values))
4380+ gen = zip (names, values)
4381+ if sys.version_info[0 :2 ] < (3 , 7 ):
4382+ return OrderedDict(gen)
4383+ else :
4384+ return dict (gen)
4385+
43554386 else :
43564387 raise AttributeError
43574388 elif name in _private_atts:
0 commit comments