@@ -24,68 +24,63 @@ def if_else(
2424 except Exception :
2525 cond_validation = Top ()
2626
27- errors_before_then_keys = set (interp_ ._validation_errors .keys ())
27+ errors_before = set (interp_ ._validation_errors .keys ())
2828
2929 with interp_ .new_frame (stmt , has_parent_access = True ) as then_frame :
3030 interp_ .frame_call_region (then_frame , stmt , stmt .then_body , cond_validation )
3131 frame .set_values (then_frame .entries .keys (), then_frame .entries .values ())
32- then_keys = set (interp_ ._validation_errors .keys ()) - errors_before_then_keys
32+
33+ then_keys = set (interp_ ._validation_errors .keys ()) - errors_before
3334 then_errors = interp_ .get_validation_errors (keys = then_keys )
3435
3536 then_state = (
3637 Must (violations = frozenset (err .args [0 ] for err in then_errors ))
37- if bool ( then_keys )
38+ if then_keys
3839 else Bottom ()
3940 )
4041
4142 if stmt .else_body :
42- errors_before_else_keys = set (interp_ ._validation_errors .keys ())
43+ errors_before_else = set (interp_ ._validation_errors .keys ())
4344
4445 with interp_ .new_frame (stmt , has_parent_access = True ) as else_frame :
4546 interp_ .frame_call_region (
4647 else_frame , stmt , stmt .else_body , cond_validation
4748 )
4849 frame .set_values (else_frame .entries .keys (), else_frame .entries .values ())
49- else_keys = set (interp_ ._validation_errors .keys ()) - errors_before_else_keys
50+
51+ else_keys = set (interp_ ._validation_errors .keys ()) - errors_before_else
5052 else_errors = interp_ .get_validation_errors (keys = else_keys )
5153
5254 else_state = (
5355 Must (violations = frozenset (err .args [0 ] for err in else_errors ))
54- if bool ( else_keys )
56+ if else_keys
5557 else Bottom ()
5658 )
57-
58- merged = then_state .join (else_state )
59-
60- if isinstance (merged , May ):
61- branch_keys = then_keys | else_keys
62- for k in branch_keys :
63- interp_ ._validation_errors .pop (k , None )
64-
65- for err in then_errors :
66- if isinstance (err , QubitValidationError ):
67- potential_err = PotentialQubitValidationError (
68- err .node , err .gate_name , ", when condition is true"
69- )
70- interp_ .add_validation_error (err .node , potential_err )
71-
72- for err in else_errors :
73- if isinstance (err , QubitValidationError ):
74- potential_err = PotentialQubitValidationError (
75- err .node , err .gate_name , ", when condition is false"
76- )
77- interp_ .add_validation_error (err .node , potential_err )
7859 else :
79- merged = then_state .join (Bottom ())
60+ else_state = Bottom ()
61+ else_keys = set ()
62+ else_errors = []
63+ merged = then_state .join (else_state )
64+ all_branch_keys = then_keys | else_keys
65+ for k in all_branch_keys :
66+ interp_ ._validation_errors .pop (k , None )
8067
81- if isinstance (merged , May ):
82- for k in then_keys :
83- interp_ ._validation_errors .pop (k , None )
84- for err in then_errors :
85- if isinstance (err , QubitValidationError ):
86- potential_err = PotentialQubitValidationError (
87- err .node , err .gate_name , ", when condition is true"
88- )
89- interp_ .add_validation_error (err .node , potential_err )
68+ if isinstance (merged , Must ):
69+ for err in then_errors + else_errors :
70+ if isinstance (err , QubitValidationError ):
71+ interp_ .add_validation_error (err .node , err )
72+ elif isinstance (merged , May ):
73+ for err in then_errors :
74+ if isinstance (err , QubitValidationError ):
75+ potential_err = PotentialQubitValidationError (
76+ err .node , err .gate_name , ", when condition is true"
77+ )
78+ interp_ .add_validation_error (err .node , potential_err )
9079
80+ for err in else_errors :
81+ if isinstance (err , QubitValidationError ):
82+ potential_err = PotentialQubitValidationError (
83+ err .node , err .gate_name , ", when condition is false"
84+ )
85+ interp_ .add_validation_error (err .node , potential_err )
9186 return (merged ,)
0 commit comments