@@ -101,7 +101,7 @@ def calculate_dimensions(variables):
101
101
Returns dictionary mapping from dimension names to sizes. Raises ValueError
102
102
if any of the dimension sizes conflict.
103
103
"""
104
- dims = OrderedDict ()
104
+ dims = {}
105
105
last_used = {}
106
106
scalar_vars = set (k for k , v in variables .items () if not v .dims )
107
107
for k , var in variables .items ():
@@ -693,7 +693,7 @@ def _construct_direct(cls, variables, coord_names, dims, attrs=None,
693
693
694
694
@classmethod
695
695
def _from_vars_and_coord_names (cls , variables , coord_names , attrs = None ):
696
- dims = dict ( calculate_dimensions (variables ) )
696
+ dims = calculate_dimensions (variables )
697
697
return cls ._construct_direct (variables , coord_names , dims , attrs )
698
698
699
699
# TODO(shoyer): renable type checking on this signature when pytype has a
@@ -754,18 +754,20 @@ def _replace_with_new_dims( # type: ignore
754
754
coord_names : set = None ,
755
755
attrs : 'Optional[OrderedDict]' = __default ,
756
756
indexes : 'Optional[OrderedDict[Any, pd.Index]]' = __default ,
757
+ encoding : Optional [dict ] = __default ,
757
758
inplace : bool = False ,
758
759
) -> T :
759
760
"""Replace variables with recalculated dimensions."""
760
- dims = dict ( calculate_dimensions (variables ) )
761
+ dims = calculate_dimensions (variables )
761
762
return self ._replace (
762
- variables , coord_names , dims , attrs , indexes , inplace = inplace )
763
+ variables , coord_names , dims , attrs , indexes , encoding ,
764
+ inplace = inplace )
763
765
764
766
def _replace_vars_and_dims ( # type: ignore
765
767
self : T ,
766
768
variables : 'OrderedDict[Any, Variable]' = None ,
767
769
coord_names : set = None ,
768
- dims : 'OrderedDict [Any, int]' = None ,
770
+ dims : Dict [Any , int ] = None ,
769
771
attrs : 'Optional[OrderedDict]' = __default ,
770
772
inplace : bool = False ,
771
773
) -> T :
@@ -1081,6 +1083,7 @@ def __delitem__(self, key):
1081
1083
"""
1082
1084
del self ._variables [key ]
1083
1085
self ._coord_names .discard (key )
1086
+ self ._dims = calculate_dimensions (self ._variables )
1084
1087
1085
1088
# mutable objects should not be hashable
1086
1089
# https://github.com/python/mypy/issues/4266
@@ -2463,7 +2466,7 @@ def expand_dims(self, dim=None, axis=None, **dim_kwargs):
2463
2466
else :
2464
2467
# If dims includes a label of a non-dimension coordinate,
2465
2468
# it will be promoted to a 1D coordinate with a single value.
2466
- variables [k ] = v .set_dims (k )
2469
+ variables [k ] = v .set_dims (k ). to_index_variable ()
2467
2470
2468
2471
new_dims = self ._dims .copy ()
2469
2472
new_dims .update (dim )
@@ -3548,12 +3551,15 @@ def from_dict(cls, d):
3548
3551
def _unary_op (f , keep_attrs = False ):
3549
3552
@functools .wraps (f )
3550
3553
def func (self , * args , ** kwargs ):
3551
- ds = self .coords .to_dataset ()
3552
- for k in self .data_vars :
3553
- ds ._variables [k ] = f (self ._variables [k ], * args , ** kwargs )
3554
- if keep_attrs :
3555
- ds ._attrs = self ._attrs
3556
- return ds
3554
+ variables = OrderedDict ()
3555
+ for k , v in self ._variables .items ():
3556
+ if k in self ._coord_names :
3557
+ variables [k ] = v
3558
+ else :
3559
+ variables [k ] = f (v , * args , ** kwargs )
3560
+ attrs = self ._attrs if keep_attrs else None
3561
+ return self ._replace_with_new_dims (
3562
+ variables , attrs = attrs , encoding = None )
3557
3563
3558
3564
return func
3559
3565
0 commit comments