-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconstraint.py
More file actions
32 lines (28 loc) · 1.07 KB
/
Copy pathconstraint.py
File metadata and controls
32 lines (28 loc) · 1.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from common import *
class Constraint:
def __init__(self, constraint_f, touched_variables):
self.constraint_f = constraint_f
self.touched_variables = touched_variables
def get_values(self, variable_names, assignments):
result = []
for var_name in variable_names:
if type(var_name) == list or type(var_name) == tuple:
res_ = self.get_values(var_name, assignments)
if res_ == None:
return None
result.append(res_)
else:
if not var_name in assignments.keys():
return None
result.append(assignments[var_name])
return result
def evaluate(self, assignments):
variable_values = self.get_values(self.touched_variables, assignments)
if variable_values == None:
return True
try:
return self.constraint_f(*variable_values)
except ValueError:
return False
def forwardcheck(self, variables, variable_name, assignments):
return True