def test_load_by_id(): ds = new_data_set("test-dataset") run_id = ds.run_id ds.mark_started() ds.mark_completed() loaded_ds = load_by_id(run_id) assert ds.started is True assert ds.pristine is False assert ds.running is False assert loaded_ds.completed is True assert loaded_ds.exp_id == 1 ds = new_data_set("test-dataset-unfinished") run_id = ds.run_id loaded_ds = load_by_id(run_id) assert ds.pristine is True assert ds.running is False assert ds.started is False assert loaded_ds.completed is False assert loaded_ds.exp_id == 1 # let's take a run number that is not in the temporary test database file non_existing_run_id = run_id + 1 with pytest.raises(ValueError, match=f"Run with run_id " f"{non_existing_run_id} does not " f"exist in the database"): _ = load_by_id(non_existing_run_id)
def test_load_by_id(): ds = new_data_set("test-dataset") run_id = ds.run_id ds.mark_complete() loaded_ds = load_by_id(run_id) assert loaded_ds.completed is True assert loaded_ds.exp_id == 1 ds = new_data_set("test-dataset-unfinished") run_id = ds.run_id loaded_ds = load_by_id(run_id) assert loaded_ds.completed is False assert loaded_ds.exp_id == 1
def test_experiment_info_in_dataset(): exp = new_experiment(name="for_loading", sample_name="no_sample") ds = new_data_set("my_first_ds") assert ds.exp_id == exp.exp_id assert ds.exp_name == exp.name assert ds.sample_name == exp.sample_name
def test_completed_timestamp_for_not_completed_dataset(): _ = new_experiment(name="for_loading", sample_name="no_sample") ds = new_data_set("my_first_ds") assert False is ds.completed assert None is ds.completed_timestamp_raw assert None is ds.completed_timestamp()
def test_run_timestamp(): _ = new_experiment(name="for_loading", sample_name="no_sample") t_before_data_set = time.time() ds = new_data_set("my_first_ds") t_after_data_set = time.time() actual_run_timestamp_raw = ds.run_timestamp_raw assert t_before_data_set <= actual_run_timestamp_raw <= t_after_data_set
def new_data_set(self, name, specs: SPECS = None, values=None, metadata=None) -> DataSet: """ Create a new dataset in this experimetn Args: name: the name of the new dataset specs: list of parameters to create this data_set with values: the values to associate with the parameters metadata: the values to associate with the dataset """ return new_data_set(name, self.exp_id, specs, values, metadata)
def test_load_by_counter(): exp = new_experiment(name="for_loading", sample_name="no_sample") ds = new_data_set("my_first_ds") loaded_ds = load_by_counter(exp.exp_id, 1) assert loaded_ds.completed is False ds.mark_complete() loaded_ds = load_by_counter(exp.exp_id, 1) assert loaded_ds.completed is True
def test_completed_timestamp_for_not_completed_dataset(): _ = new_experiment(name="for_loading", sample_name="no_sample") ds = new_data_set("my_first_ds") assert ds.pristine is True assert ds.started is False assert ds.running is False assert ds.completed is False assert ds.completed_timestamp_raw is None assert ds.completed_timestamp() is None
def test_get_guids_from_run_spec_warns(): ds = new_data_set("test-dataset") run_id = ds.run_id ds.mark_started() ds.mark_completed() expected_guid = ds.guid with pytest.warns( expected_warning=QCoDeSDeprecationWarning, match="Unused part of private api" ): loaded_guids = get_guids_from_run_spec(captured_run_id=run_id, conn=ds.conn) assert len(loaded_guids) == 1 assert loaded_guids[0] == expected_guid
def test_completed_timestamp(): _ = new_experiment(name="for_loading", sample_name="no_sample") ds = new_data_set("my_first_ds") t_before_complete = time.time() ds.mark_complete() t_after_complete = time.time() actual_completed_timestamp_raw = ds.completed_timestamp_raw assert t_before_complete \ <= actual_completed_timestamp_raw \ <= t_after_complete
def test_get_run_attributes() -> None: name = "test-dataset" ds = new_data_set(name) ds.mark_started() ds.mark_completed() ds.add_metadata("foo", "bar") loaded_raw_attrs = get_raw_run_attributes(ds.conn, ds.guid) assert loaded_raw_attrs is not None assert loaded_raw_attrs["run_id"] == ds.run_id assert loaded_raw_attrs["counter"] == ds.counter assert loaded_raw_attrs["captured_counter"] == ds.captured_counter assert loaded_raw_attrs["captured_run_id"] == ds.captured_run_id assert loaded_raw_attrs["captured_run_id"] == ds.captured_run_id assert loaded_raw_attrs["experiment"] == get_experiment_attributes_by_exp_id( ds.conn, ds.exp_id ) assert loaded_raw_attrs["experiment"]["exp_id"] == ds.exp_id assert loaded_raw_attrs["experiment"]["name"] == ds.exp_name assert loaded_raw_attrs["experiment"]["sample_name"] == ds.sample_name assert loaded_raw_attrs["name"] == name assert loaded_raw_attrs["run_timestamp"] == ds.run_timestamp_raw assert loaded_raw_attrs["completed_timestamp"] == ds.completed_timestamp_raw assert loaded_raw_attrs["parent_dataset_links"] == "[]" assert "interdependencies" in loaded_raw_attrs["run_description"] assert loaded_raw_attrs["snapshot"] is None assert loaded_raw_attrs["metadata"] == {"foo": "bar"} loaded_attrs = get_run_attributes(ds.conn, ds.guid) assert loaded_attrs is not None assert loaded_attrs["run_id"] == ds.run_id assert loaded_attrs["counter"] == ds.counter assert loaded_attrs["captured_counter"] == ds.captured_counter assert loaded_attrs["captured_run_id"] == ds.captured_run_id assert loaded_attrs["captured_run_id"] == ds.captured_run_id assert loaded_attrs["experiment"] == get_experiment_attributes_by_exp_id( ds.conn, ds.exp_id ) assert loaded_attrs["experiment"]["exp_id"] == ds.exp_id assert loaded_attrs["name"] == name assert loaded_attrs["run_timestamp"] == raw_time_to_str_time(ds.run_timestamp_raw) assert loaded_attrs["completed_timestamp"] == raw_time_to_str_time( ds.completed_timestamp_raw ) assert loaded_attrs["parent_dataset_links"] == [] assert isinstance(loaded_attrs["run_description"], RunDescriber) assert loaded_attrs["snapshot"] is None assert loaded_attrs["metadata"] == {"foo": "bar"}
def new_data_set(self, name: str, specs: Optional[SPECS] = None, values: Optional[VALUES] = None, metadata: Optional[Any] = None) -> DataSet: """ Create a new dataset in this experiment Args: name: the name of the new dataset specs: list of parameters (as ParamSpecs) to create this data_set with values: the values to associate with the parameters metadata: the metadata to associate with the dataset """ return new_data_set(name, self.exp_id, specs, values, metadata, conn=self.conn)
def test_run_timestamp_with_default_format(): _ = new_experiment(name="for_loading", sample_name="no_sample") t_before_data_set = time.time() ds = new_data_set("my_first_ds") t_after_data_set = time.time() # Note that here we also test the default format of `run_timestamp` actual_run_timestamp_raw = time.mktime( time.strptime(ds.run_timestamp(), "%Y-%m-%d %H:%M:%S")) # Note that because the default format precision is 1 second, we add this # second to the right side of the comparison t_before_data_set_secs = floor(t_before_data_set) t_after_data_set_secs = floor(t_after_data_set) assert t_before_data_set_secs \ <= actual_run_timestamp_raw \ <= t_after_data_set_secs + 1
def dataset(experiment): dataset = new_data_set("test-dataset") yield dataset dataset.conn.close()