code: def reorder_poly_edge(self, points):
      assert points.ndim == 2
      assert points.shape[0] >= 4
      assert points.shape[1] == 2
  
      head_inds, tail_inds = self.find_head_tail(
          points, self.orientation_thr
      )
      head_edge, tail_edge = points[head_inds], points[tail_inds]
  
      pad_points = np.vstack([points, points])
      if tail_inds[1] < 1:
          tail_inds[1] = len(points)
      sideline1 = pad_points[head_inds[1] : tail_inds[1]]
      sideline2 = pad_points[
          tail_inds[1] : (head_inds[1] + len(points))
      ]
      sideline_mean_shift = np.mean(sideline1, axis=0) - np.mean(
          sideline2, axis=0
      )
  
      if sideline_mean_shift[1] > 0:
          top_sideline, bot_sideline = sideline2, sideline1
      else:
          top_sideline, bot_sideline = sideline1, sideline2
  
      return head_edge, tail_edge, top_sideline, bot_sideline
  
imports: import cv2
  import numpy
  from ppocr.utils.utility import check_install
  from numpy.linalg import norm
label_desc: Use image node_id 7 for calling the DRRGTargets obj's underlying member method code with example usage: obj.reorder_poly_edge(points) and returns: head_edge,  tail_edge,  top_sideline,  bot_sideline