1+ from copy import deepcopy
2+
13from hugr .hugr .base import Hugr
24from hugr .passes ._composable_pass import (
35 ComposablePass ,
810
911
1012def test_composable_pass () -> None :
11- class MyDummyPass (ComposablePass ):
13+ class MyDummyInlinePass (ComposablePass ):
1214 def run (self , hugr : Hugr , inplace : bool = True ) -> PassResult :
1315 return impl_pass_run (
1416 hugr = hugr ,
@@ -18,24 +20,65 @@ def run(self, hugr: Hugr, inplace: bool = True) -> PassResult:
1820 hugr ,
1921 result = None ,
2022 inline = True ,
21- modified = False ,
23+ # Say that we modified the HUGR even though we didn't
24+ modified = True ,
25+ ),
26+ )
27+
28+ class MyDummyCopyPass (ComposablePass ):
29+ def run (self , hugr : Hugr , inplace : bool = True ) -> PassResult :
30+ return impl_pass_run (
31+ hugr = hugr ,
32+ inplace = inplace ,
33+ copy_call = lambda hugr : PassResult .for_pass (
34+ self ,
35+ deepcopy (hugr ),
36+ result = None ,
37+ inline = False ,
38+ # Say that we modified the HUGR even though we didn't
39+ modified = True ,
2240 ),
2341 )
2442
25- dummy = MyDummyPass ()
43+ dummy_inline = MyDummyInlinePass ()
44+ dummy_copy = MyDummyCopyPass ()
2645
27- composed_dummies = dummy .then (dummy )
46+ composed_dummies = dummy_inline .then (dummy_copy )
47+ assert isinstance (composed_dummies , ComposedPass )
2848
29- my_composed_pass = ComposedPass (dummy , dummy )
30- assert my_composed_pass .passes == [dummy , dummy ]
49+ assert dummy_inline .name == "MyDummyInlinePass"
50+ assert dummy_copy .name == "MyDummyCopyPass"
51+ assert composed_dummies .name == "Composed(MyDummyInlinePass, MyDummyCopyPass)"
52+ assert composed_dummies .then (dummy_inline ).then (composed_dummies ).name == (
53+ "Composed("
54+ + "MyDummyInlinePass, MyDummyCopyPass, "
55+ + "MyDummyInlinePass, "
56+ + "MyDummyInlinePass, MyDummyCopyPass)"
57+ )
3158
32- assert isinstance (composed_dummies , ComposablePass )
33- assert composed_dummies == my_composed_pass
59+ # Apply the passes
60+ hugr : Hugr = Hugr ()
61+ new_hugr = composed_dummies (hugr , inplace = False )
62+ assert hugr == new_hugr
63+ assert new_hugr is not hugr
3464
35- assert dummy .name == "MyDummyPass"
36- assert composed_dummies .name == "Composed(MyDummyPass, MyDummyPass)"
65+ # Verify the pass results
66+ hugr = Hugr ()
67+ inplace_result = composed_dummies .run (hugr , inplace = True )
68+ assert inplace_result .modified
69+ assert inplace_result .original_dirty
70+ assert inplace_result .results == [
71+ ("MyDummyInlinePass" , None ),
72+ ("MyDummyCopyPass" , None ),
73+ ]
74+ assert inplace_result .hugr is hugr
3775
38- assert (
39- composed_dummies .then (my_composed_pass ).name
40- == "Composed(MyDummyPass, MyDummyPass, MyDummyPass, MyDummyPass)"
41- )
76+ hugr = Hugr ()
77+ copy_result = composed_dummies .run (hugr , inplace = False )
78+ assert copy_result .modified
79+ assert not copy_result .original_dirty
80+ assert copy_result .results == [
81+ ("MyDummyInlinePass" , None ),
82+ ("MyDummyCopyPass" , None ),
83+ ]
84+ assert copy_result .hugr is not hugr
0 commit comments