Ejemplo n.º 1
0
 def __init__(self, *, ui=None, controller_depth=0,
              parent_controller=None, workspace_arguments=None,
              stopping_condition=None):
     History.AddArtefact(self, ObjectType.CONTROLLER, "Created controller")
     #: How deeply in the stack this controller is. The top-level controller has a depth
     #: of 0, Subspaces it spawns 1, and so forth.
     self.controller_depth = controller_depth
     #: If this is a controller of a subspace, this points to parent_controller.
     self.parent_controller = parent_controller
     #: The coderack.
     self.coderack = self.coderack_class()
     #: The stream.
     self.stream = self.stream_class(self)
     if self.workspace_class:
         if workspace_arguments is None:
             workspace_arguments = dict()
         #: Workspace, constructed if workspace_class is defined. The workspace is constructed
         #: using workspace_arguments.
         self.workspace = self.workspace_class(
             **workspace_arguments)  # pylint: disable=E1102
     if self.ltm_name:
         #: LTM, if any
         self.ltm = LTMManager.GetLTM(self.ltm_name)
     else:
         self.ltm = None
     #: Number of steps taken
     self.steps_taken = 0
     #: The UI running this controller. May be a GUI or a Guided UI (which knows how to
     #: answer questions that'd normally be answered by a user in a GUI). Any subspace
     #: spawned by this space shall inherit the ui.
     self.ui = ui
     #: Stopping condition (for SxS and batch modes).
     self.stopping_condition = stopping_condition
     # Add any routine codelets...
     self._AddRoutineCodelets(force=True)
Ejemplo n.º 2
0
 def Quit(self):
   """Called when quitting. Ensures that all threads have exited, and LTMs saved."""
   with self.run_state_lock:
     self.quitting = True
     self.pause_stepping = True
   self.Pause()
   self.mw.quit()
   LTMManager.SaveAllOpenLTMS()
Ejemplo n.º 3
0
 def Run(self):
     self.controller.RunUptoNSteps(farg_flags.FargFlags.max_steps)
     LTMManager.SaveAllOpenLTMS()
Ejemplo n.º 4
0
from farg.apps.pyseqsee.stream import PSStream
from farg.apps.pyseqsee.utils import PSObjectFromStructure
from farg.apps.pyseqsee.workspace import PSWorkspace
from farg.core.controller import Controller
from farg.core.ltm.manager import LTMManager
import farg.flags as farg_flags

kLTMName = "pyseqsee.main"


def _InitializePySeqseeLTM(ltm):
    for magnitude in range(10):
        ltm.GetNode(content=PSObjectFromStructure(magnitude))


LTMManager.RegisterInitializer(kLTMName, _InitializePySeqseeLTM)


class PSController(Controller):
    stream_class = PSStream
    workspace_class = PSWorkspace
    ltm_name = kLTMName
    routine_codelets_to_add = ((CF_FocusOnRandomElement, 30, 0.2),)

    def __init__(self, get_input_from_flags=True, **args):
        Controller.__init__(self, **args)
        if get_input_from_flags:
            self.SetInput(farg_flags.FargFlags.sequence,
                          farg_flags.FargFlags.unrevealed_terms)
        # Add the codelet to focus on the first object.
        if self.workspace.KnownElementCount() > 0:
from farg.core.ltm.manager import LTMManager
import farg.flags as farg_flags
kLTMName = 'bongard.main'


def InitializeBongardLTM(ltm):
    """Called if ltm was empty (had no nodes)."""
    for i in range(10):
        ltm.GetNode(content=PlatonicInteger(magnitude=i))
    for i in (0, 4, 9):
        ltm.AddEdge(PlatonicInteger(magnitude=i),
                    Square(),
                    edge_type_set={LTMEdge.LTM_EDGE_TYPE_ISA})


LTMManager.RegisterInitializer(kLTMName, InitializeBongardLTM)


class BongardController(Controller):
    """Controller for Bongard."""
    # EDIT-ME: possibly set up routine_codelets_to_add.
    workspace_class = BongardWorkspace
    ltm_name = kLTMName

    def __init__(self, **args):
        Controller.__init__(self, **args)
        self.workspace.SetItems(farg_flags.FargFlags.left,
                                farg_flags.FargFlags.right)

        from farg.apps.bongard.codelet_families.all import CF_HorribleHack
        self.AddCodelet(family=CF_HorribleHack, urgency=100)