def wrapped_main(*args, **kwargs): if len(args) > 0 and isinstance(args[0], ParameterSet): # If the first argument is a ParameterSet parameters = args[0] elif len(kwargs) > 0 and "parameters" in kwargs \ and isinstance(kwargs["parameters"], ParameterSet): # If there is a named "parameters" argument parameters = kwargs["parameters"] else: # Package all parameters into a SimpleParameterSet parameters = dict( zip(["arg%d" % x for x in range(len(args))], args)) parameters.update(kwargs) parameters = SimpleParameterSet(parameters) import sumatra.projects project = sumatra.projects.load_project() main_file = sys.modules['__main__'].__file__ executable = PythonExecutable(path=sys.executable) record = project.new_record(parameters=parameters, main_file=main_file, executable=executable) record.launch_mode.working_directory = os.getcwd() parameters.update({"sumatra_label": record.label}) start_time = time.time() with _grab_stdout_stderr() as stdout_stderr: main(*args, **kwargs) record.stdout_stderr = stdout_stderr.getvalue() record.duration = time.time() - start_time record.output_data = record.datastore.find_new_data(record.timestamp) project.add_record(record) project.save()
def wrapped_main(*args, **kwargs): if len(args) > 0 and isinstance(args[0], ParameterSet): # If the first argument is a ParameterSet parameters = args[0] elif len(kwargs) > 0 and "parameters" in kwargs \ and isinstance(kwargs["parameters"], ParameterSet): # If there is a named "parameters" argument parameters = kwargs["parameters"] else: # Package all parameters into a SimpleParameterSet parameters = dict(zip(["arg%d" % x for x in range(len(args))], args)) parameters.update(kwargs) parameters = SimpleParameterSet(parameters) import sumatra.projects project = sumatra.projects.load_project() main_file = sys.modules['__main__'].__file__ executable = PythonExecutable(path=sys.executable) record = project.new_record(parameters=parameters, main_file=main_file, executable=executable) record.launch_mode.working_directory = os.getcwd() parameters.update({"sumatra_label": record.label}) start_time = time.time() with _grab_stdout_stderr() as stdout_stderr: main(*args, **kwargs) record.stdout_stderr = stdout_stderr.getvalue() record.duration = time.time() - start_time record.output_data = record.datastore.find_new_data(record.timestamp) project.add_record(record) project.save()
def test__update__should_only_accept_numbers_or_strings(self): # could maybe allow lists of numbers or strings P = SimpleParameterSet("x = 2\ny = 3") P.update({"z": "hello"}) self.assertEqual(P["z"], "hello") P.update({"tumoltuae": 42}) self.assertEqual(P["tumoltuae"], 42) self.assertRaises(TypeError, P.update, "bar", {})
def test__update__should_accept_basic_python_types(self): P = SimpleParameterSet("x = 2\ny = 3") param_values = [("z", "hello"), ("tumoltuae", 42), ("somelist", [1, 2, "a", "b"]), ("sometuple", (3, 4, "c")), ("foo", None), ("isittrue", False)] for name, value in param_values: P.update({name: value}) self.assertEqual(P[name], value)
def wrapped_main(*args, **kwargs): if len(args) > 0 and isinstance(args[0], ParameterSet): # If the first argument is a ParameterSet parameters = args[0] elif len(kwargs) > 0 and "parameters" in kwargs \ and isinstance(kwargs["parameters"], ParameterSet): # If there is a named "parameters" argument parameters = kwargs["parameters"] else: # Package all parameters into a SimpleParameterSet parameters = dict( zip(["arg%d" % x for x in range(len(args))], args)) parameters.update(kwargs) parameters = SimpleParameterSet(parameters) import sumatra.projects project = sumatra.projects.load_project() main_file = sys.modules['__main__'].__file__ executable = PythonExecutable(path=sys.executable) record = project.new_record(parameters=parameters, main_file=main_file, executable=executable) record.launch_mode.working_directory = os.getcwd() parameters.update({"sumatra_label": record.label}) record.add_tag(STATUS_FORMAT % "running") record.stdout_stderr = "Not yet captured." project.add_record(record) start_time = time.time() with _grab_stdout_stderr() as stdout_stderr: try: main(*args, **kwargs) status = "finished" except KeyboardInterrupt: status = "killed" except Exception as e: status = "failed" record.outcome = repr(e) traceback.print_exc() finally: record.stdout_stderr = stdout_stderr.getvalue() record.add_tag(STATUS_FORMAT % (status + "...")) project.save_record(record) record.duration = time.time() - start_time record.output_data = record.datastore.find_new_data(record.timestamp) record.add_tag(STATUS_FORMAT % status) project.save_record(record) project.save()
def test__update_kwargs(self): P = SimpleParameterSet("x = 2\ny = 3") P.update({}, z="hello") self.assertEqual(P["z"], "hello")