nodes: 0, module; 1, function_definition; 2, function_name:leaf_nodes; 3, parameters; 4, block; 5, identifier:self; 6, expression_statement; 7, comment:# Now contains all nodes that contain dependencies.; 8, expression_statement; 9, comment:# contains all nodes *without* any dependencies (leaf nodes); 10, return_statement; 11, comment:"""
          Return an interable of nodes with no edges pointing at them. This is
          helpful to find all nodes without dependencies.
          """; 12, assignment; 13, binary_operator:self.nodes - deps; 14, identifier:deps; 15, set_comprehension; 16, attribute; 17, identifier:deps; 18, identifier:item; 19, for_in_clause; 20, for_in_clause; 21, identifier:self; 22, identifier:nodes; 23, identifier:sublist; 24, call; 25, identifier:item; 26, identifier:sublist; 27, attribute; 28, argument_list; 29, attribute; 30, identifier:values; 31, identifier:self; 32, identifier:edges
code: def leaf_nodes(self):
          """
          Return an interable of nodes with no edges pointing at them. This is
          helpful to find all nodes without dependencies.
          """
          # Now contains all nodes that contain dependencies.
          deps = {item for sublist in self.edges.values() for item in sublist}
          # contains all nodes *without* any dependencies (leaf nodes)
          return self.nodes - deps