@@ -22,6 +22,15 @@ def get_not_multiindex_dims(ds: Dataset) -> set:
22
22
return set (dims ) - set (mindexes )
23
23
24
24
25
+ def get_multiindex_dims (ds : Dataset ) -> list :
26
+ mindexes = [
27
+ name
28
+ for name , index in ds .xindexes .items ()
29
+ if isinstance (index , PandasMultiIndex )
30
+ ]
31
+ return mindexes
32
+
33
+
25
34
def get_dimension_coordinates (ds : Dataset ) -> set :
26
35
return set (ds .dims ) & set (ds ._variables )
27
36
@@ -84,16 +93,19 @@ def stack(self, newname):
84
93
85
94
@rule ()
86
95
def unstack (self ):
87
- # TODO: Drop duplicates
88
- self .dataset = self .dataset .unstack ()
96
+ choices = get_multiindex_dims (self .dataset )
97
+ if choices :
98
+ dim = random .choice (choices )
99
+ self .dataset = self .dataset .drop_duplicates (dim ).unstack (dim )
100
+ else :
101
+ self .dataset = self .dataset .unstack ()
89
102
90
103
@rule (newname = UNIQUE_NAME )
91
104
@precondition (lambda self : bool (get_dimension_coordinates (self .dataset )))
92
105
def rename_vars (self , newname ):
93
106
# benbovy: "skip the default indexes invariant test when the name of an
94
107
# existing dimension coordinate is passed as input kwarg or dict key
95
108
# to .rename_vars()."
96
-
97
109
oldname = random .choice (tuple (get_dimension_coordinates (self .dataset )))
98
110
self .check_default_indexes = False
99
111
note (f"> renaming { oldname } to { newname } " )
0 commit comments