Esempio n. 1
0
 def test_create_run_in_deleted_experiment(self):
     fs = FileStore(self.test_root)
     exp_id = self.experiments[random_int(0, len(self.experiments) - 1)]
     # delete it
     fs.delete_experiment(exp_id)
     with pytest.raises(Exception):
         fs.create_run(exp_id, 'user', 0, [])
Esempio n. 2
0
    def test_delete_restore_experiment(self):
        fs = FileStore(self.test_root)
        exp_id = self.experiments[random_int(0, len(self.experiments) - 1)]
        exp_name = self.exp_data[exp_id]["name"]

        # delete it
        fs.delete_experiment(exp_id)
        self.assertTrue(exp_id not in self._extract_ids(
            fs.list_experiments(ViewType.ACTIVE_ONLY)))
        self.assertTrue(exp_id in self._extract_ids(
            fs.list_experiments(ViewType.DELETED_ONLY)))
        self.assertTrue(
            exp_id in self._extract_ids(fs.list_experiments(ViewType.ALL)))
        self.assertEqual(
            fs.get_experiment(exp_id).lifecycle_stage, LifecycleStage.DELETED)

        # restore it
        fs.restore_experiment(exp_id)
        restored_1 = fs.get_experiment(exp_id)
        self.assertEqual(restored_1.experiment_id, exp_id)
        self.assertEqual(restored_1.name, exp_name)
        restored_2 = fs.get_experiment_by_name(exp_name)
        self.assertEqual(restored_2.experiment_id, exp_id)
        self.assertEqual(restored_2.name, exp_name)
        self.assertTrue(exp_id in self._extract_ids(
            fs.list_experiments(ViewType.ACTIVE_ONLY)))
        self.assertTrue(exp_id not in self._extract_ids(
            fs.list_experiments(ViewType.DELETED_ONLY)))
        self.assertTrue(
            exp_id in self._extract_ids(fs.list_experiments(ViewType.ALL)))
        self.assertEqual(
            fs.get_experiment(exp_id).lifecycle_stage, LifecycleStage.ACTIVE)
Esempio n. 3
0
    def test_rename_experiment(self):
        fs = FileStore(self.test_root)
        exp_id = self.experiments[random_int(0, len(self.experiments) - 1)]

        # Error cases
        with self.assertRaises(Exception):
            fs.rename_experiment(exp_id, None)
        with self.assertRaises(Exception):
            # test that names of existing experiments are checked before renaming
            other_exp_id = None
            for exp in self.experiments:
                if exp != exp_id:
                    other_exp_id = exp
                    break
            fs.rename_experiment(exp_id, fs.get_experiment(other_exp_id).name)

        exp_name = self.exp_data[exp_id]["name"]
        new_name = exp_name + "!!!"
        self.assertNotEqual(exp_name, new_name)
        self.assertEqual(fs.get_experiment(exp_id).name, exp_name)
        fs.rename_experiment(exp_id, new_name)
        self.assertEqual(fs.get_experiment(exp_id).name, new_name)

        # Ensure that we cannot rename deleted experiments.
        fs.delete_experiment(exp_id)
        with pytest.raises(Exception) as e:
            fs.rename_experiment(exp_id, exp_name)
        assert "non-active lifecycle" in str(e.value)
        self.assertEqual(fs.get_experiment(exp_id).name, new_name)

        # Restore the experiment, and confirm that we acn now rename it.
        fs.restore_experiment(exp_id)
        self.assertEqual(fs.get_experiment(exp_id).name, new_name)
        fs.rename_experiment(exp_id, exp_name)
        self.assertEqual(fs.get_experiment(exp_id).name, exp_name)
Esempio n. 4
0
 def test_set_experiment_tags(self):
     fs = FileStore(self.test_root)
     fs.set_experiment_tag(FileStore.DEFAULT_EXPERIMENT_ID,
                           ExperimentTag("tag0", "value0"))
     fs.set_experiment_tag(FileStore.DEFAULT_EXPERIMENT_ID,
                           ExperimentTag("tag1", "value1"))
     experiment = fs.get_experiment(FileStore.DEFAULT_EXPERIMENT_ID)
     assert len(experiment.tags) == 2
     assert experiment.tags["tag0"] == "value0"
     assert experiment.tags["tag1"] == "value1"
     # test that updating a tag works
     fs.set_experiment_tag(FileStore.DEFAULT_EXPERIMENT_ID,
                           ExperimentTag("tag0", "value00000"))
     experiment = fs.get_experiment(FileStore.DEFAULT_EXPERIMENT_ID)
     assert experiment.tags["tag0"] == "value00000"
     assert experiment.tags["tag1"] == "value1"
     # test that setting a tag on 1 experiment does not impact another experiment.
     exp_id = None
     for exp in self.experiments:
         if exp != FileStore.DEFAULT_EXPERIMENT_ID:
             exp_id = exp
             break
     experiment = fs.get_experiment(exp_id)
     assert len(experiment.tags) == 0
     # setting a tag on different experiments maintains different values across experiments
     fs.set_experiment_tag(exp_id, ExperimentTag("tag1", "value11111"))
     experiment = fs.get_experiment(exp_id)
     assert len(experiment.tags) == 1
     assert experiment.tags["tag1"] == "value11111"
     experiment = fs.get_experiment(FileStore.DEFAULT_EXPERIMENT_ID)
     assert experiment.tags["tag0"] == "value00000"
     assert experiment.tags["tag1"] == "value1"
     # test can set multi-line tags
     fs.set_experiment_tag(
         exp_id, ExperimentTag("multiline_tag", "value2\nvalue2\nvalue2"))
     experiment = fs.get_experiment(exp_id)
     assert experiment.tags["multiline_tag"] == "value2\nvalue2\nvalue2"
     # test cannot set tags on deleted experiments
     fs.delete_experiment(exp_id)
     with pytest.raises(MlflowException):
         fs.set_experiment_tag(exp_id, ExperimentTag("should", "notset"))
Esempio n. 5
0
    def test_rename_experiment(self):
        fs = FileStore(self.test_root)
        exp_id = self.experiments[random_int(0, len(self.experiments) - 1)]
        exp_name = self.exp_data[exp_id]["name"]
        new_name = exp_name + "!!!"
        self.assertNotEqual(exp_name, new_name)
        self.assertEqual(fs.get_experiment(exp_id).name, exp_name)
        fs.rename_experiment(exp_id, new_name)
        self.assertEqual(fs.get_experiment(exp_id).name, new_name)

        # Ensure that we cannot rename deleted experiments.
        fs.delete_experiment(exp_id)
        with pytest.raises(Exception) as e:
            fs.rename_experiment(exp_id, exp_name)
        assert 'non-active lifecycle' in str(e.value)
        self.assertEqual(fs.get_experiment(exp_id).name, new_name)

        # Restore the experiment, and confirm that we acn now rename it.
        fs.restore_experiment(exp_id)
        self.assertEqual(fs.get_experiment(exp_id).name, new_name)
        fs.rename_experiment(exp_id, exp_name)
        self.assertEqual(fs.get_experiment(exp_id).name, exp_name)
Esempio n. 6
0
 def test_default_experiment_initialization(self):
     fs = FileStore(self.test_root)
     fs.delete_experiment(FileStore.DEFAULT_EXPERIMENT_ID)
     fs = FileStore(self.test_root)
     experiment = fs.get_experiment(FileStore.DEFAULT_EXPERIMENT_ID)
     assert experiment.lifecycle_stage == LifecycleStage.DELETED