Esempio n. 1
0
 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")
Esempio n. 2
0
 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
Esempio n. 3
0
 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!"
Esempio n. 4
0
    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'"))
Esempio n. 5
0
    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"))
Esempio n. 6
0
    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%'")
        )
Esempio n. 7
0
    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"