code: def xarray_derivative_wrap(func):
      
      @functools.wraps(func)
      def wrapper(f, **kwargs):
          if 'x' in kwargs or 'delta' in kwargs:
              # Use the usual DataArray to pint.Quantity preprocessing wrapper
              return preprocess_xarray(func)(f, **kwargs)
          elif isinstance(f, xr.DataArray):
              # Get axis argument, defaulting to first dimension
              axis = f.metpy.find_axis_name(kwargs.get('axis', 0))
  
              # Initialize new kwargs with the axis number
              new_kwargs = {'axis': f.get_axis_num(axis)}
  
              if f[axis].attrs.get('_metpy_axis') == 'T':
                  # Time coordinate, need to convert to seconds from datetimes
                  new_kwargs['x'] = f[axis].metpy.as_timestamp().metpy.unit_array
              elif CFConventionHandler.check_axis(f[axis], 'lon'):
                  # Longitude coordinate, need to get grid deltas
                  new_kwargs['delta'], _ = grid_deltas_from_dataarray(f)
              elif CFConventionHandler.check_axis(f[axis], 'lat'):
                  # Latitude coordinate, need to get grid deltas
                  _, new_kwargs['delta'] = grid_deltas_from_dataarray(f)
              else:
                  # General coordinate, use as is
                  new_kwargs['x'] = f[axis].metpy.unit_array
  
              # Calculate and return result as a DataArray
              result = func(f.metpy.unit_array, **new_kwargs)
              return xr.DataArray(result.magnitude,
                                  coords=f.coords,
                                  dims=f.dims,
                                  attrs={'units': str(result.units)})
          else:
              # Error
              raise ValueError('Must specify either "x" or "delta" for value positions when "f" '
                               'is not a DataArray.')
      return wrapper
docs: Decorate the derivative functions to make them work nicely with DataArrays.
  
      This will automatically determine if the coordinates can be pulled directly from the
      DataArray, or if a call to lat_lon_grid_deltas is needed.