code: def grid_interpolate(func):
      
  
      @wraps(func)
      def wrapper(profile, grid, grid_radial_minimum=None, *args, **kwargs):
          if hasattr(grid, "interpolator"):
              interpolator = grid.interpolator
              if grid.interpolator is not None:
                  values = func(profile, interpolator.interp_grid, grid_radial_minimum, *args, **kwargs)
                  if values.ndim == 1:
                      return interpolator.interpolated_values_from_values(values=values)
                  elif values.ndim == 2:
                      y_values = interpolator.interpolated_values_from_values(values=values[:, 0])
                      x_values = interpolator.interpolated_values_from_values(values=values[:, 1])
                      return np.asarray([y_values, x_values]).T
          return func(profile, grid, grid_radial_minimum, *args, **kwargs)
  
      return wrapper
docs: Decorate a profile method that accepts a coordinate grid and returns a data grid.
  
      If an interpolator attribute is associated with the input grid then that interpolator is used to down sample the
      coordinate grid prior to calling the function and up sample the result of the function.
  
      If no interpolator attribute is associated with the input grid then the function is called as normal.
  
      Parameters
      ----------
      func
          Some method that accepts a grid
  
      Returns
      -------
      decorated_function
          The function with optional interpolation