@@ -149,8 +149,8 @@ def merge_indexes(
149
149
150
150
for n in var_names :
151
151
var = variables [n ]
152
- if (current_index_variable is not None and
153
- var .dims != current_index_variable .dims ):
152
+ if (current_index_variable is not None
153
+ and var .dims != current_index_variable .dims ):
154
154
raise ValueError (
155
155
"dimension mismatch between %r %s and %r %s"
156
156
% (dim , current_index_variable .dims , n , var .dims ))
@@ -209,8 +209,8 @@ def split_indexes(
209
209
Not public API. Used in Dataset and DataArray reset_index
210
210
methods.
211
211
"""
212
- if (isinstance (dims_or_levels , str )
213
- or not isinstance (dims_or_levels , Sequence )):
212
+ if (isinstance (dims_or_levels , str ) or
213
+ not isinstance (dims_or_levels , Sequence )):
214
214
dims_or_levels = [dims_or_levels ]
215
215
216
216
dim_levels \
@@ -287,8 +287,8 @@ def __len__(self) -> int:
287
287
return len (self ._dataset ._variables ) - len (self ._dataset ._coord_names )
288
288
289
289
def __contains__ (self , key ) -> bool :
290
- return (key in self ._dataset ._variables and
291
- key not in self ._dataset ._coord_names )
290
+ return (key in self ._dataset ._variables
291
+ and key not in self ._dataset ._coord_names )
292
292
293
293
def __getitem__ (self , key ) -> 'DataArray' :
294
294
if key not in self ._dataset ._coord_names :
@@ -1188,8 +1188,8 @@ def identical(self, other):
1188
1188
Dataset.equals
1189
1189
"""
1190
1190
try :
1191
- return (utils .dict_equiv (self .attrs , other .attrs ) and
1192
- self ._all_compat (other , 'identical' ))
1191
+ return (utils .dict_equiv (self .attrs , other .attrs )
1192
+ and self ._all_compat (other , 'identical' ))
1193
1193
except (TypeError , AttributeError ):
1194
1194
return False
1195
1195
@@ -2151,8 +2151,8 @@ def _validate_interp_indexer(x, new_x):
2151
2151
# In the case of datetimes, the restrictions placed on indexers
2152
2152
# used with interp are stronger than those which are placed on
2153
2153
# isel, so we need an additional check after _validate_indexers.
2154
- if (_contains_datetime_like_objects (x ) and
2155
- not _contains_datetime_like_objects (new_x )):
2154
+ if (_contains_datetime_like_objects (x )
2155
+ and not _contains_datetime_like_objects (new_x )):
2156
2156
raise TypeError ('When interpolating over a datetime-like '
2157
2157
'coordinate, the coordinates to '
2158
2158
'interpolate to must be either datetime '
@@ -2264,19 +2264,18 @@ def _rename_vars(self, name_dict, dims_dict):
2264
2264
variables = OrderedDict ()
2265
2265
coord_names = set ()
2266
2266
for k , v in self .variables .items ():
2267
- name = name_dict .get (k , k )
2268
- dims = tuple (dims_dict .get (dim , dim ) for dim in v .dims )
2269
2267
var = v .copy (deep = False )
2270
- var .dims = dims
2268
+ var .dims = tuple (dims_dict .get (dim , dim ) for dim in v .dims )
2269
+ name = name_dict .get (k , k )
2271
2270
if name in variables :
2272
2271
raise ValueError ('the new name %r conflicts' % (name ,))
2273
2272
variables [name ] = var
2274
2273
if k in self ._coord_names :
2275
2274
coord_names .add (name )
2276
2275
return variables , coord_names
2277
2276
2278
- def _rename_dims (self , dims_dict ):
2279
- return {dims_dict .get (k , k ): v for k , v in self .dims .items ()}
2277
+ def _rename_dims (self , name_dict ):
2278
+ return {name_dict .get (k , k ): v for k , v in self .dims .items ()}
2280
2279
2281
2280
def _rename_indexes (self , name_dict ):
2282
2281
if self ._indexes is None :
@@ -2293,9 +2292,9 @@ def _rename_indexes(self, name_dict):
2293
2292
indexes [new_name ] = index
2294
2293
return indexes
2295
2294
2296
- def _rename_all (self , name_dict , dim_dict ):
2297
- variables , coord_names = self ._rename_vars (name_dict , dim_dict )
2298
- dims = self ._rename_dims (dim_dict )
2295
+ def _rename_all (self , name_dict , dims_dict ):
2296
+ variables , coord_names = self ._rename_vars (name_dict , dims_dict )
2297
+ dims = self ._rename_dims (dims_dict )
2299
2298
indexes = self ._rename_indexes (name_dict )
2300
2299
return variables , coord_names , dims , indexes
2301
2300
@@ -2322,21 +2321,91 @@ def rename(self, name_dict=None, inplace=None, **names):
2322
2321
See Also
2323
2322
--------
2324
2323
Dataset.swap_dims
2324
+ Dataset.rename_vars
2325
+ Dataset.rename_dims
2325
2326
DataArray.rename
2326
2327
"""
2327
- # TODO: add separate rename_vars and rename_dims methods.
2328
2328
inplace = _check_inplace (inplace )
2329
2329
name_dict = either_dict_or_kwargs (name_dict , names , 'rename' )
2330
- for k , v in name_dict .items ():
2330
+ for k in name_dict .keys ():
2331
2331
if k not in self and k not in self .dims :
2332
2332
raise ValueError ("cannot rename %r because it is not a "
2333
2333
"variable or dimension in this dataset" % k )
2334
2334
2335
2335
variables , coord_names , dims , indexes = self ._rename_all (
2336
- name_dict = name_dict , dim_dict = name_dict )
2336
+ name_dict = name_dict , dims_dict = name_dict )
2337
2337
return self ._replace (variables , coord_names , dims = dims ,
2338
2338
indexes = indexes , inplace = inplace )
2339
2339
2340
+ def rename_dims (self , dims_dict = None , ** dims ):
2341
+ """Returns a new object with renamed dimensions only.
2342
+
2343
+ Parameters
2344
+ ----------
2345
+ dims_dict : dict-like, optional
2346
+ Dictionary whose keys are current dimension names and
2347
+ whose values are the desired names.
2348
+ **dims, optional
2349
+ Keyword form of ``dims_dict``.
2350
+ One of dims_dict or dims must be provided.
2351
+
2352
+ Returns
2353
+ -------
2354
+ renamed : Dataset
2355
+ Dataset with renamed dimensions.
2356
+
2357
+ See Also
2358
+ --------
2359
+ Dataset.swap_dims
2360
+ Dataset.rename
2361
+ Dataset.rename_vars
2362
+ DataArray.rename
2363
+ """
2364
+ dims_dict = either_dict_or_kwargs (dims_dict , dims , 'rename_dims' )
2365
+ for k in dims_dict :
2366
+ if k not in self .dims :
2367
+ raise ValueError ("cannot rename %r because it is not a "
2368
+ "dimension in this dataset" % k )
2369
+
2370
+ variables , coord_names , dims , indexes = self ._rename_all (
2371
+ name_dict = {}, dims_dict = dims_dict )
2372
+ return self ._replace (variables , coord_names , dims = dims ,
2373
+ indexes = indexes )
2374
+
2375
+ def rename_vars (self , name_dict = None , ** names ):
2376
+ """Returns a new object with renamed variables including coordinates
2377
+
2378
+ Parameters
2379
+ ----------
2380
+ name_dict : dict-like, optional
2381
+ Dictionary whose keys are current variable or coordinate names and
2382
+ whose values are the desired names.
2383
+ **names, optional
2384
+ Keyword form of ``name_dict``.
2385
+ One of name_dict or names must be provided.
2386
+
2387
+ Returns
2388
+ -------
2389
+ renamed : Dataset
2390
+ Dataset with renamed variables including coordinates
2391
+
2392
+ See Also
2393
+ --------
2394
+ Dataset.swap_dims
2395
+ Dataset.rename
2396
+ Dataset.rename_dims
2397
+ DataArray.rename
2398
+ """
2399
+ name_dict = either_dict_or_kwargs (name_dict , names , 'rename_vars' )
2400
+ for k in name_dict :
2401
+ if k not in self :
2402
+ raise ValueError ("cannot rename %r because it is not a "
2403
+ "variable or coordinate in this dataset" % k )
2404
+ variables , coord_names , dims , indexes = self ._rename_all (
2405
+ name_dict = name_dict , dims_dict = {})
2406
+ return self ._replace (variables , coord_names , dims = dims ,
2407
+ indexes = indexes )
2408
+
2340
2409
def swap_dims (self , dims_dict , inplace = None ):
2341
2410
"""Returns a new object with swapped dimensions.
2342
2411
@@ -2464,8 +2533,8 @@ def expand_dims(self, dim=None, axis=None, **dim_kwargs):
2464
2533
if d in self .dims :
2465
2534
raise ValueError (
2466
2535
'Dimension {dim} already exists.' .format (dim = d ))
2467
- if (d in self ._variables and
2468
- not utils .is_scalar (self ._variables [d ])):
2536
+ if (d in self ._variables
2537
+ and not utils .is_scalar (self ._variables [d ])):
2469
2538
raise ValueError (
2470
2539
'{dim} already exists as coordinate or'
2471
2540
' variable name.' .format (dim = d ))
@@ -3256,9 +3325,9 @@ def reduce(self, func, dim=None, keep_attrs=None, keepdims=False,
3256
3325
if not reduce_dims :
3257
3326
variables [name ] = var
3258
3327
else :
3259
- if (not numeric_only or
3260
- np .issubdtype (var .dtype , np .number ) or
3261
- (var .dtype == np .bool_ )):
3328
+ if (not numeric_only
3329
+ or np .issubdtype (var .dtype , np .number )
3330
+ or (var .dtype == np .bool_ )):
3262
3331
if len (reduce_dims ) == 1 :
3263
3332
# unpack dimensions for the benefit of functions
3264
3333
# like np.argmin which can't handle tuple arguments
@@ -3791,8 +3860,8 @@ def diff(self, dim, n=1, label='upper'):
3791
3860
for name , var in self .variables .items ():
3792
3861
if dim in var .dims :
3793
3862
if name in self .data_vars :
3794
- variables [name ] = (var .isel (** kwargs_end ) -
3795
- var .isel (** kwargs_start ))
3863
+ variables [name ] = (var .isel (** kwargs_end )
3864
+ - var .isel (** kwargs_start ))
3796
3865
else :
3797
3866
variables [name ] = var .isel (** kwargs_new )
3798
3867
else :
@@ -3976,8 +4045,8 @@ def sortby(self, variables, ascending=True):
3976
4045
for data_array in aligned_other_vars :
3977
4046
if data_array .ndim != 1 :
3978
4047
raise ValueError ("Input DataArray is not 1-D." )
3979
- if (data_array .dtype == object and
3980
- LooseVersion (np .__version__ ) < LooseVersion ('1.11.0' )):
4048
+ if (data_array .dtype == object
4049
+ and LooseVersion (np .__version__ ) < LooseVersion ('1.11.0' )):
3981
4050
raise NotImplementedError (
3982
4051
'sortby uses np.lexsort under the hood, which requires '
3983
4052
'numpy 1.11.0 or later to support object data-type.' )
@@ -4053,9 +4122,9 @@ def quantile(self, q, dim=None, interpolation='linear',
4053
4122
reduce_dims = [d for d in var .dims if d in dims ]
4054
4123
if reduce_dims or not var .dims :
4055
4124
if name not in self .coords :
4056
- if (not numeric_only or
4057
- np .issubdtype (var .dtype , np .number ) or
4058
- var .dtype == np .bool_ ):
4125
+ if (not numeric_only
4126
+ or np .issubdtype (var .dtype , np .number )
4127
+ or var .dtype == np .bool_ ):
4059
4128
if len (reduce_dims ) == var .ndim :
4060
4129
# prefer to aggregate over axis=None rather than
4061
4130
# axis=(0, 1) if they will be equivalent, because
@@ -4171,8 +4240,8 @@ def differentiate(self, coord, edge_order=1, datetime_unit=None):
4171
4240
4172
4241
variables = OrderedDict ()
4173
4242
for k , v in self .variables .items ():
4174
- if (k in self .data_vars and dim in v .dims and
4175
- k not in self .coords ):
4243
+ if (k in self .data_vars and dim in v .dims
4244
+ and k not in self .coords ):
4176
4245
if _contains_datetime_like_objects (v ):
4177
4246
v = v ._to_numeric (datetime_unit = datetime_unit )
4178
4247
grad = duck_array_ops .gradient (
@@ -4348,8 +4417,8 @@ def filter_by_attrs(self, **kwargs):
4348
4417
has_value_flag = False
4349
4418
for attr_name , pattern in kwargs .items ():
4350
4419
attr_value = variable .attrs .get (attr_name )
4351
- if ((callable (pattern ) and pattern (attr_value )) or
4352
- attr_value == pattern ):
4420
+ if ((callable (pattern ) and pattern (attr_value ))
4421
+ or attr_value == pattern ):
4353
4422
has_value_flag = True
4354
4423
else :
4355
4424
has_value_flag = False
0 commit comments