From 457de789df6443a8b15c798054e079f81d00262b Mon Sep 17 00:00:00 2001 From: Ryan Tjoa Date: Wed, 17 Jul 2024 15:56:21 -0700 Subject: [PATCH 1/3] Fix else transformation to use all old variables --- program/transformer/if_transformer.py | 2 +- tests/benchmarks/else_transformation.prob | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 tests/benchmarks/else_transformation.prob diff --git a/program/transformer/if_transformer.py b/program/transformer/if_transformer.py index 86e90a0..8edcf82 100644 --- a/program/transformer/if_transformer.py +++ b/program/transformer/if_transformer.py @@ -57,7 +57,7 @@ def _(self, ifstmt: IfStatem): assign.variable ] extra_condition = current_condition.copy().simplify() - extra_condition.subs(current_rename_subs) + extra_condition.subs(rename_subs) # Add the branch conditions to the assignments for assign in branch: diff --git a/tests/benchmarks/else_transformation.prob b/tests/benchmarks/else_transformation.prob new file mode 100644 index 0000000..d0cd80c --- /dev/null +++ b/tests/benchmarks/else_transformation.prob @@ -0,0 +1,12 @@ +x = 0 +c = 1 +while c == 1: + if c == 1: + x = x + 1 + c = Bernoulli(1/2) + else: + x = x + 1 + end +end + +#test: raw; x; 0; 2 - 2/2**n From 6f2db07896c73a448cad220a542377a0b3fc5191 Mon Sep 17 00:00:00 2001 From: Ryan Tjoa Date: Thu, 18 Jul 2024 00:04:23 -0700 Subject: [PATCH 2/3] simplify if transform; remove current_rename_subs --- program/transformer/if_transformer.py | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/program/transformer/if_transformer.py b/program/transformer/if_transformer.py index 8edcf82..bb998c6 100644 --- a/program/transformer/if_transformer.py +++ b/program/transformer/if_transformer.py @@ -41,21 +41,14 @@ def _(self, ifstmt: IfStatem): else And(not_previous, conditions[i]) ) - # Remember variables which appear in a condition and are assigned within the branch - current_rename_subs = {} + # Remember variables which appear in a condition and are assigned + # within the branch or any previous one for assign in branch: if assign.variable in condition_symbols: - if assign.variable in rename_subs: - current_rename_subs[assign.variable] = rename_subs[ - assign.variable - ] - else: - current_rename_subs[assign.variable] = get_unique_var( + if assign.variable not in rename_subs: + rename_subs[assign.variable] = get_unique_var( name="old" ) - rename_subs[assign.variable] = current_rename_subs[ - assign.variable - ] extra_condition = current_condition.copy().simplify() extra_condition.subs(rename_subs) From 0d188fa9a3db78ee016e16089041e47276508058 Mon Sep 17 00:00:00 2001 From: Ryan Tjoa Date: Thu, 18 Jul 2024 11:10:18 -0700 Subject: [PATCH 3/3] lint with black --- program/transformer/if_transformer.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/program/transformer/if_transformer.py b/program/transformer/if_transformer.py index bb998c6..0a7dcf7 100644 --- a/program/transformer/if_transformer.py +++ b/program/transformer/if_transformer.py @@ -46,9 +46,7 @@ def _(self, ifstmt: IfStatem): for assign in branch: if assign.variable in condition_symbols: if assign.variable not in rename_subs: - rename_subs[assign.variable] = get_unique_var( - name="old" - ) + rename_subs[assign.variable] = get_unique_var(name="old") extra_condition = current_condition.copy().simplify() extra_condition.subs(rename_subs)