nodes: 0, module; 1, function_definition; 2, function_name:xy_reading_order; 3, parameters; 4, block; 5, identifier:e1; 6, identifier:e2; 7, expression_statement; 8, expression_statement; 9, expression_statement; 10, if_statement; 11, return_statement; 12, comment:"""
      A comparator to sort bboxes from left to right, top to bottom
      """; 13, assignment; 14, assignment; 15, comparison_operator:round(b1[x0]) == round(b2[x0]); 16, block; 17, call; 18, identifier:b1; 19, attribute; 20, identifier:b2; 21, attribute; 22, call; 23, call; 24, return_statement; 25, identifier:float_cmp; 26, argument_list; 27, identifier:e1; 28, identifier:bbox; 29, identifier:e2; 30, identifier:bbox; 31, identifier:round; 32, argument_list; 33, identifier:round; 34, argument_list; 35, call; 36, subscript; 37, subscript; 38, subscript; 39, subscript; 40, identifier:float_cmp; 41, argument_list; 42, identifier:b1; 43, identifier:x0; 44, identifier:b2; 45, identifier:x0; 46, identifier:b1; 47, identifier:x0; 48, identifier:b2; 49, identifier:x0; 50, subscript; 51, subscript; 52, identifier:b1; 53, identifier:y0; 54, identifier:b2; 55, identifier:y0
code: def xy_reading_order(e1, e2):
      """
      A comparator to sort bboxes from left to right, top to bottom
      """
      b1 = e1.bbox
      b2 = e2.bbox
      if round(b1[x0]) == round(b2[x0]):
          return float_cmp(b1[y0], b2[y0])
      return float_cmp(b1[x0], b2[x0])