Skip to content

Instantly share code, notes, and snippets.

@samhann
Created February 23, 2018 17:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save samhann/f45637594d2941b65d4d602c6c6a29c4 to your computer and use it in GitHub Desktop.
Save samhann/f45637594d2941b65d4d602c6c6a29c4 to your computer and use it in GitHub Desktop.
Constraint nodes example (just concept)
# coding: utf-8
# In[34]:
class Node:
def __init__(self,possibles,value,observers):
self.possibles = set(possibles)
self.value = value
self.observers = set(observers)
def has_value(self):
return self.value is not None
def add_observer(self,observer):
self.observers.add(observer)
def set_value(self,value):
print("value was set to "+ str(value))
self.value = value
self.possibles = set([value])
self.notify_observers()
def dependency_updated(self,node):
print("got update")
def notify_observers(self):
for observer in self.observers:
observer.dependency_updated(self)
class ConstraintEqualNode(Node):
def __init__(self,lhs,rhs):
self.lhs = lhs
self.rhs = rhs
self.rhs.add_observer(self)
self.lhs.add_observer(self)
self.observers = set()
self.solved = False
self.solving = False
def dependency_updated(self,dependency):
if self.solved or self.solving:
return
self.solving = True
if self.lhs.has_value():
self.rhs.set_value(self.lhs.value)
self.solved = True
self.notify_observers()
if self.rhs.has_value():
self.lhs.set_value(self.rhs.value)
self.solved = True
self.notify_observers()
self.solving = False
observer_node = Node([3,4],None,[])
test_node = Node([1,2],None,[])
equal_node = ConstraintEqualNode(observer_node,test_node)
test_node.set_value(3)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment