traverse: pass key correctly (#44460)
Fixes a bug where custom keys to identify nodes were not passed correctly.
This commit is contained in:
		| @@ -272,6 +272,29 @@ def test_breadth_first_versus_depth_first_tree(abstract_specs_chain): | |||||||
|     ] |     ] | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @pytest.mark.parametrize("cover", ["nodes", "edges"]) | ||||||
|  | @pytest.mark.parametrize("depth_first", [True, False]) | ||||||
|  | def test_tree_traversal_with_key(cover, depth_first, abstract_specs_chain): | ||||||
|  |     """Compare two multisource traversals of the same DAG. In one case the DAG consists of unique | ||||||
|  |     Spec instances, in the second case there are identical copies of nodes and edges. Traversal | ||||||
|  |     should be equivalent when nodes are identified by dag_hash.""" | ||||||
|  |     a = abstract_specs_chain["chain-a"] | ||||||
|  |     c = abstract_specs_chain["chain-c"] | ||||||
|  |     kwargs = {"cover": cover, "depth_first": depth_first} | ||||||
|  |     dag_hash = lambda s: s.dag_hash() | ||||||
|  | 
 | ||||||
|  |     # Traverse DAG spanned by a unique set of Spec instances | ||||||
|  |     first = traverse.traverse_tree([a, c], key=id, **kwargs) | ||||||
|  | 
 | ||||||
|  |     # Traverse equivalent DAG with copies of Spec instances included, keyed by dag hash. | ||||||
|  |     second = traverse.traverse_tree([a, c.copy()], key=dag_hash, **kwargs) | ||||||
|  | 
 | ||||||
|  |     # Check that the same nodes are discovered at the same depth | ||||||
|  |     node_at_depth_first = [(depth, dag_hash(edge.spec)) for (depth, edge) in first] | ||||||
|  |     node_at_depth_second = [(depth, dag_hash(edge.spec)) for (depth, edge) in second] | ||||||
|  |     assert node_at_depth_first == node_at_depth_second | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| def test_breadth_first_versus_depth_first_printing(abstract_specs_chain): | def test_breadth_first_versus_depth_first_printing(abstract_specs_chain): | ||||||
|     """Test breadth-first versus depth-first tree printing.""" |     """Test breadth-first versus depth-first tree printing.""" | ||||||
|     s = abstract_specs_chain["chain-a"] |     s = abstract_specs_chain["chain-a"] | ||||||
|   | |||||||
| @@ -563,10 +563,10 @@ def traverse_tree( | |||||||
|     # identical to DFS, which is much more efficient then. |     # identical to DFS, which is much more efficient then. | ||||||
|     if not depth_first and cover == "edges": |     if not depth_first and cover == "edges": | ||||||
|         edges, parents = breadth_first_to_tree_edges(specs, deptype, key) |         edges, parents = breadth_first_to_tree_edges(specs, deptype, key) | ||||||
|         return traverse_breadth_first_tree_edges(None, edges, parents) |         return traverse_breadth_first_tree_edges(None, edges, parents, key) | ||||||
|     elif not depth_first and cover == "nodes": |     elif not depth_first and cover == "nodes": | ||||||
|         edges = breadth_first_to_tree_nodes(specs, deptype, key) |         edges = breadth_first_to_tree_nodes(specs, deptype, key) | ||||||
|         return traverse_breadth_first_tree_nodes(None, edges) |         return traverse_breadth_first_tree_nodes(None, edges, key) | ||||||
| 
 | 
 | ||||||
|     return traverse_edges(specs, order="pre", cover=cover, deptype=deptype, key=key, depth=True) |     return traverse_edges(specs, order="pre", cover=cover, deptype=deptype, key=key, depth=True) | ||||||
| 
 | 
 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Harmen Stoppels
					Harmen Stoppels