From 4ab172abbb0e330578178c3ddea1046a47906d8f Mon Sep 17 00:00:00 2001 From: Ibrahim Shehzad <75153717+ibrahim-shehzad@users.noreply.github.com> Date: Fri, 12 Apr 2024 10:13:25 -0500 Subject: [PATCH] Remove greedy recursion (#537) * Initiate greedy recursion removal * Remove notebook from diff * white spaces * refactor while loop * Remove redundant lines from while loop --------- Co-authored-by: Jim Garrison --- .../cutting/cut_finding/cco_utils.py | 37 +++++++++---------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/circuit_knitting/cutting/cut_finding/cco_utils.py b/circuit_knitting/cutting/cut_finding/cco_utils.py index a1defea6..2a948f77 100644 --- a/circuit_knitting/cutting/cut_finding/cco_utils.py +++ b/circuit_knitting/cutting/cut_finding/cco_utils.py @@ -138,23 +138,20 @@ def greedy_best_first_search( Callable, search_space_funcs.next_state_func ) - if search_space_funcs.goal_state_func(state, *args): - return state - - best = min( - [ - (search_space_funcs.cost_func(next_state, *args), k, next_state) - for k, next_state in enumerate( - search_space_funcs.next_state_func(state, *args) - ) - ], - default=(None, None, None), - ) - - if best[-1] is None: # pragma: no cover - # This covers a rare edge case. - # We have so far found no circuit that triggers it. - # Excluding from test coverage for now. - return None - - return greedy_best_first_search(best[-1], search_space_funcs, *args) + while not search_space_funcs.goal_state_func(state, *args): + best = min( + [ + (search_space_funcs.cost_func(next_state, *args), k, next_state) + for k, next_state in enumerate( + search_space_funcs.next_state_func(state, *args) + ) + ], + default=(None, None, None), + ) + if best[-1] is None: # pragma: no cover + # This covers a rare edge case. + # We have so far found no circuit that triggers it. + # Excluding from test coverage for now. + return None + state = best[-1] + return state