| 1501 | return expanded_var.transpose(*dim) |
| 1502 | |
| 1503 | def _stack_once(self, dim: list[Hashable], new_dim: Hashable): |
| 1504 | if not set(dim) <= set(self.dims): |
| 1505 | raise ValueError(f"invalid existing dimensions: {dim}") |
| 1506 | |
| 1507 | if new_dim in self.dims: |
| 1508 | raise ValueError( |
| 1509 | "cannot create a new dimension with the same " |
| 1510 | "name as an existing dimension" |
| 1511 | ) |
| 1512 | |
| 1513 | if len(dim) == 0: |
| 1514 | # don't stack |
| 1515 | return self.copy(deep=False) |
| 1516 | |
| 1517 | other_dims = [d for d in self.dims if d not in dim] |
| 1518 | dim_order = other_dims + list(dim) |
| 1519 | reordered = self.transpose(*dim_order) |
| 1520 | |
| 1521 | new_shape = reordered.shape[: len(other_dims)] + (-1,) |
| 1522 | new_data = duck_array_ops.reshape(reordered.data, new_shape) |
| 1523 | new_dims = reordered.dims[: len(other_dims)] + (new_dim,) |
| 1524 | |
| 1525 | return type(self)( |
| 1526 | new_dims, new_data, self._attrs, self._encoding, fastpath=True |
| 1527 | ) |
| 1528 | |
| 1529 | @partial(deprecate_dims, old_name="dimensions") |
| 1530 | def stack(self, dim=None, **dim_kwargs): |