code: def test_sort_vertex8(self):
      dummy_points_x = [21, 21, 122, 122]
      dummy_points_y = [21, 39, 39, 21]
  
      expect_points = [21, 21, 122, 21, 122, 39, 21, 39]
  
      for perm in set(permutations([0, 1, 2, 3])):
          points_x = [dummy_points_x[i] for i in perm]
          points_y = [dummy_points_y[i] for i in perm]
          points = list(chain.from_iterable(zip(points_x, points_y)))
          ordered_points = sort_vertex8(points)
  
          self.assertTrue(np.allclose(ordered_points, expect_points))
  
imports: import unittest
  from itertools import chain, permutations
  import numpy
  import torch
  from shapely.geometry import MultiPolygon, Polygon
  from mmocr.utils import boundary_iou, crop_polygon, offset_polygon, poly2bbox, poly2shapely, poly_intersection, poly_iou, poly_make_valid, poly_union, polys2shapely, rescale_polygon, rescale_polygons, shapely2poly, sort_points, sort_vertex, sort_vertex8
label_desc: Use image node_id 16 for calling the TestPolygonUtils obj's underlying member method code with example usage: obj.test_sort_vertex8() without return types