code: def _compute_ticks(self, element, xvals, yvals, xfactors, yfactors):
      xdim, ydim = element.kdims
      if self.invert_axes:
          xdim, ydim = ydim, xdim
  
      opts = self.lookup_options(element, "plot").options
  
      xticks = opts.get("xticks")
      if xticks is None:
          xpos = xvals[:-1] + np.diff(xvals) / 2.0
          if not xfactors:
              xfactors = element.gridded.dimension_values(xdim, False)
          xlabels = [xdim.pprint_value(k) for k in xfactors]
          xticks = list(zip(xpos, xlabels))
  
      yticks = opts.get("yticks")
      if yticks is None:
          ypos = yvals[:-1] + np.diff(yvals) / 2.0
          if not yfactors:
              yfactors = element.gridded.dimension_values(ydim, False)
          ylabels = [ydim.pprint_value(k) for k in yfactors]
          yticks = list(zip(ypos, ylabels))
      return xticks, yticks
  
imports: from itertools import product
  import numpy
  import param
  from matplotlib.collections import LineCollection, PatchCollection
  from matplotlib.patches import Circle, Wedge
  from ...core.data import GridInterface
  from ...core.spaces import HoloMap
  from ...core.util import dimension_sanitizer, is_nan
  from ..mixins import HeatMapMixin
  from .element import ColorbarPlot
  from .raster import QuadMeshPlot
  from .util import filter_styles
label_desc: Use image node_id 4 for calling the HeatMapPlot obj's underlying member method code with example usage: obj._compute_ticks(element, xvals, yvals, xfactors, yfactors) and returns: xticks,  yticks