def apply(self, method: Method, config: Config = None) -> ClassIncrementalResults: """Apply the given method on this setting to producing some results.""" # TODO: It still isn't super clear what should be in charge of creating # the config, and how to create it, when it isn't passed explicitly. self.config: Config if config is not None: self.config = config logger.debug(f"Using Config {self.config}") elif isinstance(getattr(method, "config", None), Config): # If the Method has a `config` attribute that is a Config, use that. self.config = method.config logger.debug(f"Using Config from the Method: {self.config}") else: logger.debug("Parsing the Config from the command-line.") self.config = Config.from_args(self._argv, strict=False) logger.debug(f"Resulting Config: {self.config}") method.configure(setting=self) # Run the main loop (which is defined in IncrementalSetting). results: ClassIncrementalResults = super().main_loop(method) logger.info(results.summary()) method.receive_results(self, results=results) return results
def apply( self, method: Method, config: Config = None ) -> "ContinualRLSetting.Results": """Apply the given method on this setting to producing some results. """ # Use the supplied config, or parse one from the arguments that were # used to create `self`. self.config: Config if config is not None: self.config = config logger.debug(f"Using Config {self.config}") elif isinstance(getattr(method, "config", None), Config): self.config = method.config logger.debug(f"Using Config from the Method: {self.config}") else: logger.debug(f"Parsing the Config from the command-line.") self.config = Config.from_args(self._argv, strict=False) logger.debug(f"Resulting Config: {self.config}") # TODO: Test to make sure that this doesn't cause any other bugs with respect to # the display of stuff: # Call this method, which creates a virtual display if necessary. self.config.get_display() # TODO: Should we really overwrite the method's 'config' attribute here? if not getattr(method, "config", None): method.config = self.config # TODO: Remove `Setting.configure(method)` entirely, from everywhere, # and use the `prepare_data` or `setup` methods instead (since these # `configure` methods aren't using the `method` anyway.) method.configure(setting=self) # BUG This won't work if the task schedule uses callables as the values (as # they aren't json-serializable.) if self._new_random_task_on_reset: logger.info( f"Train tasks: " + json.dumps(list(self.train_task_schedule.values()), indent="\t") ) else: logger.info( f"Train task schedule:" + json.dumps(self.train_task_schedule, indent="\t") ) if self.config.debug: logger.debug( f"Test task schedule:" + json.dumps(self.test_task_schedule, indent="\t") ) # Run the Training loop (which is defined in IncrementalSetting). results = self.main_loop(method) logger.info("Results summary:") logger.info(results.to_log_dict()) logger.info(results.summary()) method.receive_results(self, results=results) return results
def apply(self, method: Method, config: Config = None) -> IncrementalSLResults: """Apply the given method on this setting to producing some results.""" # TODO: It still isn't super clear what should be in charge of creating # the config, and how to create it, when it isn't passed explicitly. self.config = config or self._setup_config(method) assert self.config method.configure(setting=self) # Run the main loop (which is defined in IncrementalAssumption). results: IncrementalSLResults = super().main_loop(method) logger.info(results.summary()) method.receive_results(self, results=results) return results