docs: def interp_func(var, x, new_x, method, kwargs):
      """
      multi-dimensional interpolation for array-like. Interpolated axes should be
      located in the last position.
  
      Parameters
      ----------
      var: np.ndarray or dask.array.Array
          Array to be interpolated. The final dimension is interpolated.
      x: a list of 1d array.
          Original coordinates. Should not contain NaN.
      new_x: a list of 1d array
          New coordinates. Should not contain NaN.
      method: string
          {'linear', 'nearest', 'zero', 'slinear', 'quadratic', 'cubic'} for
          1-dimensional itnterpolation.
          {'linear', 'nearest'} for multidimensional interpolation
      **kwargs:
          Optional keyword arguments to be passed to scipy.interpolator
  
      Returns
      -------
      interpolated: array
          Interpolated array
  
      Note
      ----
      This requiers scipy installed.
  
      See Also
      --------
      scipy.interpolate.interp1d
      """
      if not x:
          return var.copy()
  
      if len(x) == 1:
          func, kwargs = _get_interpolator(method, vectorizeable_only=True,
                                           **kwargs)
      else:
          func, kwargs = _get_interpolator_nd(method, **kwargs)
  
      if isinstance(var, dask_array_type):
          import dask.array as da
  
          _assert_single_chunk(var, range(var.ndim - len(x), var.ndim))
          chunks = var.chunks[:-len(x)] + new_x[0].shape
          drop_axis = range(var.ndim - len(x), var.ndim)
          new_axis = range(var.ndim - len(x), var.ndim - len(x) + new_x[0].ndim)
          return da.map_blocks(_interpnd, var, x, new_x, func, kwargs,
                               dtype=var.dtype, chunks=chunks,
                               new_axis=new_axis, drop_axis=drop_axis)
  
      return _interpnd(var, x, new_x, func, kwargs)