docs: def apply(self, func, keep_attrs=None, args=(), **kwargs):
          """Apply a function over the data variables in this dataset.
  
          Parameters
          ----------
          func : function
              Function which can be called in the form `func(x, *args, **kwargs)`
              to transform each DataArray `x` in this dataset into another
              DataArray.
          keep_attrs : bool, optional
              If True, the dataset's attributes (`attrs`) will be copied from
              the original object to the new one. If False, the new object will
              be returned without attributes.
          args : tuple, optional
              Positional arguments passed on to `func`.
          **kwargs : dict
              Keyword arguments passed on to `func`.
  
          Returns
          -------
          applied : Dataset
              Resulting dataset from applying ``func`` over each data variable.
  
          Examples
          --------
          >>> da = xr.DataArray(np.random.randn(2, 3))
          >>> ds = xr.Dataset({'foo': da, 'bar': ('x', [-1, 2])})
          >>> ds
          <xarray.Dataset>
          Dimensions:  (dim_0: 2, dim_1: 3, x: 2)
          Dimensions without coordinates: dim_0, dim_1, x
          Data variables:
              foo      (dim_0, dim_1) float64 -0.3751 -1.951 -1.945 0.2948 0.711 -0.3948
              bar      (x) int64 -1 2
          >>> ds.apply(np.fabs)
          <xarray.Dataset>
          Dimensions:  (dim_0: 2, dim_1: 3, x: 2)
          Dimensions without coordinates: dim_0, dim_1, x
          Data variables:
              foo      (dim_0, dim_1) float64 0.3751 1.951 1.945 0.2948 0.711 0.3948
              bar      (x) float64 1.0 2.0
          """  # noqa
          variables = OrderedDict(
              (k, maybe_wrap_array(v, func(v, *args, **kwargs)))
              for k, v in self.data_vars.items())
          if keep_attrs is None:
              keep_attrs = _get_keep_attrs(default=False)
          attrs = self.attrs if keep_attrs else None
          return type(self)(variables, attrs=attrs)