docs: def hmtk_histogram_2D(xvalues, yvalues, bins, x_offset=1.0E-10,
                        y_offset=1.0E-10):
      """
      See the explanation for the 1D case - now applied to 2D.
  
      :param numpy.ndarray xvalues:
          Values of x-data
      :param numpy.ndarray yvalues:
          Values of y-data
      :param tuple bins:
          Tuple containing bin intervals for x-data and y-data (as numpy arrays)
      :param float x_offset:
          Small amount to offset the x-bins for floating point precision
      :param float y_offset:
          Small amount to offset the y-bins for floating point precision
      :returns:
          Count in each bin (as float)
      """
      xbins, ybins = (bins[0] - x_offset, bins[1] - y_offset)
      n_x = len(xbins) - 1
      n_y = len(ybins) - 1
      counter = np.zeros([n_y, n_x], dtype=float)
      for j in range(n_y):
          y_idx = np.logical_and(yvalues >= ybins[j], yvalues < ybins[j + 1])
          x_vals = xvalues[y_idx]
          for i in range(n_x):
              idx = np.logical_and(x_vals >= xbins[i], x_vals < xbins[i + 1])
              counter[j, i] += float(np.sum(idx))
      return counter.T