code: def test_sort_vertex(self):
      dummy_points_x = [20, 20, 120, 120]
      dummy_points_y = [20, 40, 40, 20]
  
      expect_points_x = [20, 120, 120, 20]
      expect_points_y = [20, 20, 40, 40]
  
      with self.assertRaises(AssertionError):
          sort_vertex([], dummy_points_y)
      with self.assertRaises(AssertionError):
          sort_vertex(dummy_points_x, [])
  
      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]
          ordered_points_x, ordered_points_y = sort_vertex(
              points_x, points_y
          )
  
          self.assertTrue(
              np.allclose(ordered_points_x, expect_points_x)
          )
          self.assertTrue(
              np.allclose(ordered_points_y, expect_points_y)
          )
  
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 15 for calling the TestPolygonUtils obj's underlying member method code with example usage: obj.test_sort_vertex() without return types