code: def reindex(self, kdims=None, vdims=None):
          
          gridded = self.interface.gridded
          scalars = []
          if gridded:
              coords = [(d, self.interface.coords(self, d.name)) for d in self.kdims]
              scalars = [d for d, vs in coords if len(vs) == 1]
  
          if kdims is None:
              # If no key dimensions are defined and interface is gridded
              # drop all scalar key dimensions
              key_dims = [d for d in self.kdims if (not vdims or d not in vdims)
                          and not d in scalars]
          elif not isinstance(kdims, list):
              key_dims = [self.get_dimension(kdims, strict=True)]
          else:
              key_dims = [self.get_dimension(k, strict=True) for k in kdims]
          dropped = [d for d in self.kdims if not d in key_dims and not d in scalars]
  
          new_type = None
          if vdims is None:
              val_dims = [d for d in self.vdims if not kdims or d not in kdims]
          else:
              val_dims = [self.get_dimension(v, strict=True) for v in vdims]
              new_type = self._vdim_reductions.get(len(val_dims), type(self))
  
          data = self.interface.reindex(self, key_dims, val_dims)
          datatype = self.datatype
          if gridded and dropped:
              interfaces = self.interface.interfaces
              datatype = [dt for dt in datatype if not
                          getattr(interfaces.get(dt, None), 'gridded', True)]
          return self.clone(data, kdims=key_dims, vdims=val_dims,
                            new_type=new_type, datatype=datatype)
docs: Reindexes Dataset dropping static or supplied kdims
  
          Creates a new object with a reordered or reduced set of key
          dimensions. By default drops all non-varying key dimensions.x
  
          Args:
              kdims (optional): New list of key dimensionsx
              vdims (optional): New list of value dimensions
  
          Returns:
              Reindexed object