@@ -4543,7 +4543,11 @@ def drop_dims(
4543
4543
drop_vars = {k for k , v in self ._variables .items () if set (v .dims ) & drop_dims }
4544
4544
return self .drop_vars (drop_vars )
4545
4545
4546
- def transpose (self , * dims : Hashable ) -> "Dataset" :
4546
+ def transpose (
4547
+ self ,
4548
+ * dims : Hashable ,
4549
+ missing_dims : str = "raise" ,
4550
+ ) -> "Dataset" :
4547
4551
"""Return a new Dataset object with all array dimensions transposed.
4548
4552
4549
4553
Although the order of dimensions on each array will change, the dataset
@@ -4554,6 +4558,12 @@ def transpose(self, *dims: Hashable) -> "Dataset":
4554
4558
*dims : hashable, optional
4555
4559
By default, reverse the dimensions on each array. Otherwise,
4556
4560
reorder the dimensions to this order.
4561
+ missing_dims : {"raise", "warn", "ignore"}, default: "raise"
4562
+ What to do if dimensions that should be selected from are not present in the
4563
+ Dataset:
4564
+ - "raise": raise an exception
4565
+ - "warn": raise a warning, and ignore the missing dimensions
4566
+ - "ignore": ignore the missing dimensions
4557
4567
4558
4568
Returns
4559
4569
-------
@@ -4572,12 +4582,10 @@ def transpose(self, *dims: Hashable) -> "Dataset":
4572
4582
numpy.transpose
4573
4583
DataArray.transpose
4574
4584
"""
4575
- if dims :
4576
- if set (dims ) ^ set (self .dims ) and ... not in dims :
4577
- raise ValueError (
4578
- f"arguments to transpose ({ dims } ) must be "
4579
- f"permuted dataset dimensions ({ tuple (self .dims )} )"
4580
- )
4585
+ # Use infix_dims to check once for missing dimensions
4586
+ if len (dims ) != 0 :
4587
+ _ = list (infix_dims (dims , self .dims , missing_dims ))
4588
+
4581
4589
ds = self .copy ()
4582
4590
for name , var in self ._variables .items ():
4583
4591
var_dims = tuple (dim for dim in dims if dim in (var .dims + (...,)))
0 commit comments