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)
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()
def Run(self): self.controller.RunUptoNSteps(farg_flags.FargFlags.max_steps) LTMManager.SaveAllOpenLTMS()
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)