def test_delete_tags(self): fs = FileStore(self.test_root) exp_id = self.experiments[random_int(0, len(self.experiments) - 1)] run_id = self.exp_data[exp_id]['runs'][0] fs.set_tag(run_id, RunTag("tag0", "value0")) fs.set_tag(run_id, RunTag("tag1", "value1")) tags = fs.get_run(run_id).data.tags assert tags["tag0"] == "value0" assert tags["tag1"] == "value1" fs.delete_tag(run_id, "tag0") new_tags = fs.get_run(run_id).data.tags assert "tag0" not in new_tags.keys() # test that you cannot delete tags that don't exist. with pytest.raises(MlflowException): fs.delete_tag(run_id, "fakeTag") # test that you cannot delete tags for nonexistent runs with pytest.raises(MlflowException): fs.delete_tag("random_id", "tag0") fs = FileStore(self.test_root) fs.delete_run(run_id) # test that you cannot delete tags for deleted runs. assert fs.get_run( run_id).info.lifecycle_stage == LifecycleStage.DELETED with pytest.raises(MlflowException): fs.delete_tag(run_id, "tag0")
def test_unicode_tag(self): fs = FileStore(self.test_root) run_id = self.exp_data[FileStore.DEFAULT_EXPERIMENT_ID]["runs"][0] value = u"πΌ ππππππππ ππππΆπ ππ½πΆπ πΌ πΆπ ππ ππ ππ ππππΉ" fs.set_tag(run_id, RunTag("message", value)) tags = fs.get_run(run_id).data.tags assert tags["message"] == value
def test_weird_tag_names(self): WEIRD_TAG_NAME = "this is/a weird/but valid tag" fs = FileStore(self.test_root) run_id = self.exp_data[FileStore.DEFAULT_EXPERIMENT_ID]["runs"][0] fs.set_tag(run_id, RunTag(WEIRD_TAG_NAME, "Muhahaha!")) run = fs.get_run(run_id) assert run.data.tags[WEIRD_TAG_NAME] == "Muhahaha!"
def test_search_tags(self): fs = FileStore(self.test_root) experiment_id = self.experiments[0] r1 = fs.create_run(experiment_id, 'user', 0, []).info.run_id r2 = fs.create_run(experiment_id, 'user', 0, []).info.run_id fs.set_tag(r1, RunTag('generic_tag', 'p_val')) fs.set_tag(r2, RunTag('generic_tag', 'p_val')) fs.set_tag(r1, RunTag('generic_2', 'some value')) fs.set_tag(r2, RunTag('generic_2', 'another value')) fs.set_tag(r1, RunTag('p_a', 'abc')) fs.set_tag(r2, RunTag('p_b', 'ABC')) # test search returns both runs six.assertCountEqual( self, [r1, r2], self._search(fs, experiment_id, filter_str="tags.generic_tag = 'p_val'")) # test search returns appropriate run (same key different values per run) six.assertCountEqual( self, [r1], self._search(fs, experiment_id, filter_str="tags.generic_2 = 'some value'")) six.assertCountEqual( self, [r2], self._search(fs, experiment_id, filter_str="tags.generic_2='another value'")) six.assertCountEqual( self, [], self._search(fs, experiment_id, filter_str="tags.generic_tag = 'wrong_val'")) six.assertCountEqual( self, [], self._search(fs, experiment_id, filter_str="tags.generic_tag != 'p_val'")) six.assertCountEqual( self, [r1, r2], self._search(fs, experiment_id, filter_str="tags.generic_tag != 'wrong_val'")) six.assertCountEqual( self, [r1, r2], self._search(fs, experiment_id, filter_str="tags.generic_2 != 'wrong_val'")) six.assertCountEqual( self, [r1], self._search(fs, experiment_id, filter_str="tags.p_a = 'abc'")) six.assertCountEqual( self, [r2], self._search(fs, experiment_id, filter_str="tags.p_b = 'ABC'"))
def test_set_deleted_run(self): """ Setting metrics/tags/params/updating run info should not be allowed on deleted runs. """ fs = FileStore(self.test_root) exp_id = self.experiments[random_int(0, len(self.experiments) - 1)] run_id = self.exp_data[exp_id]["runs"][0] fs.delete_run(run_id) assert fs.get_run(run_id).info.lifecycle_stage == LifecycleStage.DELETED with pytest.raises(MlflowException): fs.set_tag(run_id, RunTag("a", "b")) with pytest.raises(MlflowException): fs.log_metric(run_id, Metric("a", 0.0, timestamp=0, step=0)) with pytest.raises(MlflowException): fs.log_param(run_id, Param("a", "b"))
def test_search_tags(self): fs = FileStore(self.test_root) experiment_id = self.experiments[0] r1 = fs.create_run(experiment_id, "user", 0, []).info.run_id r2 = fs.create_run(experiment_id, "user", 0, []).info.run_id fs.set_tag(r1, RunTag("generic_tag", "p_val")) fs.set_tag(r2, RunTag("generic_tag", "p_val")) fs.set_tag(r1, RunTag("generic_2", "some value")) fs.set_tag(r2, RunTag("generic_2", "another value")) fs.set_tag(r1, RunTag("p_a", "abc")) fs.set_tag(r2, RunTag("p_b", "ABC")) # test search returns both runs self.assertCountEqual( [r1, r2], self._search(fs, experiment_id, filter_str="tags.generic_tag = 'p_val'") ) # test search returns appropriate run (same key different values per run) self.assertCountEqual( [r1], self._search(fs, experiment_id, filter_str="tags.generic_2 = 'some value'") ) self.assertCountEqual( [r2], self._search(fs, experiment_id, filter_str="tags.generic_2='another value'") ) self.assertCountEqual( [], self._search(fs, experiment_id, filter_str="tags.generic_tag = 'wrong_val'") ) self.assertCountEqual( [], self._search(fs, experiment_id, filter_str="tags.generic_tag != 'p_val'") ) self.assertCountEqual( [r1, r2], self._search(fs, experiment_id, filter_str="tags.generic_tag != 'wrong_val'"), ) self.assertCountEqual( [r1, r2], self._search(fs, experiment_id, filter_str="tags.generic_2 != 'wrong_val'"), ) self.assertCountEqual([r1], self._search(fs, experiment_id, filter_str="tags.p_a = 'abc'")) self.assertCountEqual([r2], self._search(fs, experiment_id, filter_str="tags.p_b = 'ABC'")) self.assertCountEqual( [r2], self._search(fs, experiment_id, filter_str="tags.generic_2 LIKE '%other%'") ) self.assertCountEqual( [], self._search(fs, experiment_id, filter_str="tags.generic_2 LIKE 'other%'") ) self.assertCountEqual( [], self._search(fs, experiment_id, filter_str="tags.generic_2 LIKE '%other'") ) self.assertCountEqual( [r2], self._search(fs, experiment_id, filter_str="tags.generic_2 ILIKE '%OTHER%'") )
def test_set_tags(self): fs = FileStore(self.test_root) run_id = self.exp_data[FileStore.DEFAULT_EXPERIMENT_ID]["runs"][0] fs.set_tag(run_id, RunTag("tag0", "value0")) fs.set_tag(run_id, RunTag("tag1", "value1")) tags = fs.get_run(run_id).data.tags assert tags["tag0"] == "value0" assert tags["tag1"] == "value1" # Can overwrite tags. fs.set_tag(run_id, RunTag("tag0", "value2")) tags = fs.get_run(run_id).data.tags assert tags["tag0"] == "value2" assert tags["tag1"] == "value1" # Can set multiline tags. fs.set_tag(run_id, RunTag("multiline_tag", "value2\nvalue2\nvalue2")) tags = fs.get_run(run_id).data.tags assert tags["multiline_tag"] == "value2\nvalue2\nvalue2"