nodes: 0, module; 1, function_definition; 2, function_name:group_and_sort_nodes; 3, parameters; 4, block; 5, identifier:self; 6, expression_statement; 7, if_statement; 8, comment:"""
          Groups and then sorts the nodes according to the criteria passed into
          the Plot constructor.
          """; 9, boolean_operator; 10, block; 11, elif_clause; 12, elif_clause; 13, attribute; 14, not_operator; 15, if_statement; 16, boolean_operator; 17, block; 18, boolean_operator; 19, block; 20, identifier:self; 21, identifier:node_grouping; 22, attribute; 23, comparison_operator:self.group_order == "alphabetically"; 24, block; 25, elif_clause; 26, attribute; 27, not_operator; 28, expression_statement; 29, attribute; 30, attribute; 31, if_statement; 32, identifier:self; 33, identifier:node_order; 34, attribute; 35, string:"alphabetically"; 36, expression_statement; 37, comparison_operator:self.group_order == "default"; 38, block; 39, identifier:self; 40, identifier:node_order; 41, attribute; 42, assignment; 43, identifier:self; 44, identifier:node_grouping; 45, identifier:self; 46, identifier:node_order; 47, comparison_operator:self.group_order == "alphabetically"; 48, block; 49, elif_clause; 50, identifier:self; 51, identifier:group_order; 52, assignment; 53, attribute; 54, string:"default"; 55, expression_statement; 56, expression_statement; 57, expression_statement; 58, for_statement; 59, expression_statement; 60, identifier:self; 61, identifier:node_grouping; 62, attribute; 63, list_comprehension; 64, attribute; 65, string:"alphabetically"; 66, expression_statement; 67, comparison_operator:self.group_order == "default"; 68, block; 69, attribute; 70, list_comprehension; 71, identifier:self; 72, identifier:group_order; 73, assignment; 74, assignment; 75, assignment; 76, identifier:key; 77, identifier:grp_name; 78, block; 79, assignment; 80, identifier:self; 81, identifier:nodes; 82, identifier:n; 83, for_in_clause; 84, identifier:self; 85, identifier:group_order; 86, assignment; 87, attribute; 88, string:"default"; 89, expression_statement; 90, expression_statement; 91, expression_statement; 92, for_statement; 93, expression_statement; 94, identifier:self; 95, identifier:nodes; 96, identifier:n; 97, for_in_clause; 98, identifier:grp; 99, list_comprehension; 100, identifier:grp_name; 101, call; 102, identifier:nodes; 103, list; 104, expression_statement; 105, attribute; 106, identifier:nodes; 107, pattern_list; 108, call; 109, attribute; 110, list_comprehension; 111, identifier:self; 112, identifier:group_order; 113, assignment; 114, assignment; 115, assignment; 116, identifier:key; 117, identifier:grp_name; 118, block; 119, assignment; 120, pattern_list; 121, call; 122, subscript; 123, for_in_clause; 124, identifier:list; 125, argument_list; 126, call; 127, identifier:self; 128, identifier:nodes; 129, identifier:n; 130, identifier:_; 131, identifier:sorted; 132, argument_list; 133, identifier:self; 134, identifier:nodes; 135, identifier:n; 136, for_in_clause; 137, identifier:grp; 138, list_comprehension; 139, identifier:grp_name; 140, call; 141, identifier:nodes; 142, list; 143, expression_statement; 144, attribute; 145, identifier:nodes; 146, identifier:n; 147, identifier:d; 148, identifier:sorted; 149, argument_list; 150, identifier:d; 151, attribute; 152, pattern_list; 153, call; 154, call; 155, attribute; 156, argument_list; 157, call; 158, keyword_argument; 159, pattern_list; 160, call; 161, subscript; 162, for_in_clause; 163, identifier:list; 164, argument_list; 165, call; 166, identifier:self; 167, identifier:nodes; 168, call; 169, keyword_argument; 170, identifier:self; 171, identifier:node_grouping; 172, identifier:_; 173, identifier:d; 174, attribute; 175, argument_list; 176, identifier:unique_everseen; 177, argument_list; 178, identifier:nodes; 179, identifier:extend; 180, list_comprehension; 181, attribute; 182, argument_list; 183, identifier:key; 184, lambda; 185, identifier:n; 186, identifier:d; 187, identifier:sorted; 188, argument_list; 189, identifier:d; 190, attribute; 191, pattern_list; 192, call; 193, call; 194, attribute; 195, argument_list; 196, attribute; 197, argument_list; 198, identifier:key; 199, lambda; 200, attribute; 201, identifier:nodes; 202, keyword_argument; 203, identifier:grp; 204, identifier:n; 205, for_in_clause; 206, if_clause; 207, attribute; 208, identifier:nodes; 209, keyword_argument; 210, lambda_parameters; 211, subscript; 212, call; 213, keyword_argument; 214, identifier:self; 215, identifier:node_grouping; 216, identifier:_; 217, identifier:d; 218, attribute; 219, argument_list; 220, identifier:unique_everseen; 221, argument_list; 222, identifier:nodes; 223, identifier:extend; 224, list_comprehension; 225, attribute; 226, identifier:nodes; 227, keyword_argument; 228, lambda_parameters; 229, subscript; 230, identifier:self; 231, identifier:graph; 232, identifier:data; 233, True; 234, pattern_list; 235, call; 236, comparison_operator:key in d.values(); 237, identifier:self; 238, identifier:graph; 239, identifier:data; 240, True; 241, identifier:x; 242, subscript; 243, attribute; 244, attribute; 245, argument_list; 246, identifier:key; 247, lambda; 248, attribute; 249, identifier:nodes; 250, keyword_argument; 251, identifier:grp; 252, identifier:n; 253, for_in_clause; 254, if_clause; 255, identifier:self; 256, identifier:graph; 257, identifier:data; 258, True; 259, identifier:x; 260, subscript; 261, attribute; 262, identifier:n; 263, identifier:d; 264, attribute; 265, argument_list; 266, identifier:key; 267, call; 268, identifier:x; 269, integer:1; 270, identifier:self; 271, identifier:node_order; 272, attribute; 273, identifier:nodes; 274, keyword_argument; 275, lambda_parameters; 276, tuple; 277, identifier:self; 278, identifier:graph; 279, identifier:data; 280, True; 281, pattern_list; 282, call; 283, comparison_operator:key in d.values(); 284, identifier:x; 285, integer:1; 286, identifier:self; 287, identifier:node_grouping; 288, attribute; 289, identifier:nodes; 290, keyword_argument; 291, attribute; 292, argument_list; 293, identifier:self; 294, identifier:graph; 295, identifier:data; 296, True; 297, identifier:x; 298, subscript; 299, subscript; 300, identifier:n; 301, identifier:d; 302, identifier:sorted; 303, argument_list; 304, identifier:key; 305, call; 306, identifier:self; 307, identifier:graph; 308, identifier:data; 309, True; 310, identifier:d; 311, identifier:values; 312, subscript; 313, attribute; 314, subscript; 315, attribute; 316, call; 317, keyword_argument; 318, attribute; 319, argument_list; 320, identifier:x; 321, integer:1; 322, identifier:self; 323, identifier:node_grouping; 324, identifier:x; 325, integer:1; 326, identifier:self; 327, identifier:node_order; 328, attribute; 329, argument_list; 330, identifier:key; 331, lambda; 332, identifier:d; 333, identifier:values; 334, attribute; 335, identifier:nodes; 336, keyword_argument; 337, lambda_parameters; 338, subscript; 339, identifier:self; 340, identifier:graph; 341, identifier:data; 342, True; 343, identifier:x; 344, subscript; 345, attribute; 346, identifier:x; 347, integer:1; 348, identifier:self; 349, identifier:node_order
code: def group_and_sort_nodes(self):
          """
          Groups and then sorts the nodes according to the criteria passed into
          the Plot constructor.
          """
          if self.node_grouping and not self.node_order:
              if self.group_order == "alphabetically":
                  self.nodes = [
                      n
                      for n, d in sorted(
                          self.graph.nodes(data=True),
                          key=lambda x: x[1][self.node_grouping],
                      )
                  ]
  
              elif self.group_order == "default":
                  grp = [
                      d[self.node_grouping]
                      for _, d in self.graph.nodes(data=True)
                  ]
                  grp_name = list(unique_everseen(grp))
                  nodes = []
                  for key in grp_name:
                      nodes.extend(
                          [
                              n
                              for n, d in self.graph.nodes(data=True)
                              if key in d.values()
                          ]
                      )
                  self.nodes = nodes
  
          elif self.node_order and not self.node_grouping:
              self.nodes = [
                  n
                  for n, _ in sorted(
                      self.graph.nodes(data=True),
                      key=lambda x: x[1][self.node_order],
                  )
              ]
  
          elif self.node_grouping and self.node_order:
              if self.group_order == "alphabetically":
                  self.nodes = [
                      n
                      for n, d in sorted(
                          self.graph.nodes(data=True),
                          key=lambda x: (
                              x[1][self.node_grouping],
                              x[1][self.node_order],
                          ),
                      )
                  ]
              elif self.group_order == "default":
                  grp = [
                      d[self.node_grouping]
                      for _, d in self.graph.nodes(data=True)
                  ]
                  grp_name = list(unique_everseen(grp))
                  nodes = []
                  for key in grp_name:
                      nodes.extend(
                          [
                              n
                              for n, d in sorted(
                                  self.graph.nodes(data=True),
                                  key=lambda x: x[1][self.node_order],
                              )
                              if key in d.values()
                          ]
                      )
                  self.nodes = nodes