コード例 #1
0
ファイル: core.py プロジェクト: lucastx/propagator.py
    def run(self):
        def with_process_abortion(thunk):
            def f(k):
                self._abort_process_stack.append(k)
                thunk()
                self._abort_process_stack.pop()

            return callcc(f)

        def run_alerted():
            temp = list(self.alerted_propagators)
            self.alerted_propagators.clear()
            for propagator in list(temp):
                debug("Running {propagator}".format(**vars()))
                propagator()

            if self.alerted_propagators:
                run_alerted()

        debug("Running scheduler")

        if len(self.alerted_propagators):
            self.last_value_of_run = with_process_abortion(run_alerted)

        debug("Scheduler done")

        return self.last_value_of_run
コード例 #2
0
    def run(self):
        def with_process_abortion(thunk):
            def f(k):
                self._abort_process_stack.append(k)
                thunk()
                self._abort_process_stack.pop()

            return callcc(f)

        def run_alerted():
            temp = list(self.alerted_propagators)
            self.alerted_propagators.clear()
            for propagator in list(temp):
                debug("Running {propagator}".format(**vars()))
                propagator()

            if self.alerted_propagators:
                run_alerted()

        debug("Running scheduler")

        if len(self.alerted_propagators):
            self.last_value_of_run = with_process_abortion(run_alerted)

        debug("Scheduler done")

        return self.last_value_of_run
コード例 #3
0
    def add_content(self, increment):
        answer = merge(self.content, increment)

        if answer != self.content:
            debug("Adding content {1} to {0}".format(self, answer))
            self.content = answer
            scheduler.alert_propagators(self.neighbors)
コード例 #4
0
ファイル: core.py プロジェクト: lucastx/propagator.py
    def add_content(self, increment):
        answer = merge(self.content, increment)

        if answer != self.content:
            debug("Adding content {1} to {0}".format(self, answer))
            self.content = answer
            scheduler.alert_propagators(self.neighbors)
コード例 #5
0
        def run_alerted():
            temp = list(self.alerted_propagators)
            self.alerted_propagators.clear()
            for propagator in list(temp):
                debug("Running {propagator}".format(**vars()))
                propagator()

            if self.alerted_propagators:
                run_alerted()
コード例 #6
0
ファイル: core.py プロジェクト: lucastx/propagator.py
        def run_alerted():
            temp = list(self.alerted_propagators)
            self.alerted_propagators.clear()
            for propagator in list(temp):
                debug("Running {propagator}".format(**vars()))
                propagator()

            if self.alerted_propagators:
                run_alerted()
コード例 #7
0
ファイル: sqrt.py プロジェクト: lucastx/propagator.py
    def sqrt_iter_helper():
        debug("sqrt_iter_helper: {x}, {g}, {answer}".format(**vars()))
        done = Cell('done')
        not_done = Cell('not(done)')
        x_if_not_done = Cell('x if not(done)')
        g_if_not_done = Cell('g if not(done)')
        new_g = Cell('new g')

        good_enuf(g, x, done)
        switch(done, g, answer)
        inverter(done, not_done)
        switch(not_done, x, x_if_not_done)
        switch(not_done, g, g_if_not_done)
        heron_step(x_if_not_done, g_if_not_done, new_g)

        # Clever recursion: this will call this helper again only if
        # `x_if_not_done` is not None.
        #
        # `x_if_not_done` will not have content if `answer` has content,
        # so it will stop recursing when an answer is found.

        sqrt_iter(x_if_not_done, new_g, answer)
コード例 #8
0
    def sqrt_iter_helper():
        debug("sqrt_iter_helper: {x}, {g}, {answer}".format(**vars()))
        done = Cell('done')
        not_done = Cell('not(done)')
        x_if_not_done = Cell('x if not(done)')
        g_if_not_done = Cell('g if not(done)')
        new_g = Cell('new g')

        good_enuf(g, x, done)
        switch(done, g, answer)
        inverter(done, not_done)
        switch(not_done, x, x_if_not_done)
        switch(not_done, g, g_if_not_done)
        heron_step(x_if_not_done, g_if_not_done, new_g)

        # Clever recursion: this will call this helper again only if
        # `x_if_not_done` is not None.
        #
        # `x_if_not_done` will not have content if `answer` has content,
        # so it will stop recursing when an answer is found.

        sqrt_iter(x_if_not_done, new_g, answer)
コード例 #9
0
 def initialize(self):
     debug("Initializing scheduler")
     self.alerted_propagators.clear()
     self.propagators_ever_alerted.clear()
     self._abort_process_stack.clear()
     self.last_value_of_run = None
コード例 #10
0
 def __init__(self, name=None, content=None):
     self.neighbors = []
     self.name = name
     self.content = None
     self.add_content(content)
     debug("New cell: " + str(self))
コード例 #11
0
def _default_merge(content, increment):
    debug("Merging {content} and {increment}...".format(**vars()))
    if content == increment:
        return content
    else:
        return Contradiction('{content} != {increment}'.format(**vars()))
コード例 #12
0
ファイル: merging.py プロジェクト: lucastx/propagator.py
def _default_merge(content, increment):
    debug("Merging {content} and {increment}...".format(**vars()))
    if content == increment:
        return content
    else:
        return Contradiction('{content} != {increment}'.format(**vars()))
コード例 #13
0
ファイル: core.py プロジェクト: lucastx/propagator.py
 def initialize(self):
     debug("Initializing scheduler")
     self.alerted_propagators.clear()
     self.propagators_ever_alerted.clear()
     self._abort_process_stack.clear()
     self.last_value_of_run = None
コード例 #14
0
ファイル: core.py プロジェクト: lucastx/propagator.py
 def __init__(self, name=None, content=None):
     self.neighbors = []
     self.name = name
     self.content = None
     self.add_content(content)
     debug("New cell: " + str(self))