From feec08dd4fdc4e67b3e36dca5f8a69ec1010b6a1 Mon Sep 17 00:00:00 2001 From: Talley Lambert Date: Thu, 11 May 2023 16:52:12 -0400 Subject: [PATCH] pre-compile expression --- motile/constraints/expression.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/motile/constraints/expression.py b/motile/constraints/expression.py index 6b0d002..9b7aeb3 100644 --- a/motile/constraints/expression.py +++ b/motile/constraints/expression.py @@ -70,7 +70,7 @@ def __init__( except SyntaxError: raise ValueError(f"Invalid expression: {expression}") from None - self.expression = expression + self._expression = compile(expression, "", "eval") self.eval_nodes = eval_nodes self.eval_edges = eval_edges @@ -95,7 +95,7 @@ def instantiate(self, solver: Solver) -> list[ilpy.Constraint]: # if the expression uses a variable name that is not in the dict, # a NameError will be raised. # contextlib.suppress (above) will just skip it and move on... - if eval(self.expression, None, node_or_edge): + if eval(self._expression, None, node_or_edge): # if the expression evaluates to True, we select the node/edge select.set_coefficient(indicator_variables[id_], 1) n_selected += 1