Пример #1
0
    def run_and_evaluate(self):
        dai.set_project_path(self.project.path)

        sys.path.append(self.project.path)

        for a in self.cfg.approaches:
            self.logger.info('Running Approach ' + a['name'])

            self.webservice and self.webservice.update_approach_status(
                a, "TRAINING")

            # Run and evaluate the approach
            self._run_approach(a)

            self.logger.info('Generating evaluations file for ' + a['name'])
            evaluations_df = self._evaluate_approach(a)

            # Upload the results
            self.logger.debug('Uploading evaluation file to coordinator')
            self.webservice and self.webservice.upload_evaluations(
                evaluations_df, a)

            # Set approach done
            self.logger.debug('Done')
            self.webservice and self.webservice.update_approach_status(
                a, "TRAINED")

        sys.path.remove(self.project.path)
Пример #2
0
    def setUp(self):
        set_project_path(testenv.MOCK_PROJECT_PATH)

        self.path_to_dataset = testenv.IRIS_DATASET
        self.path_to_test_dir = testenv.TEST_PATH
        self.aux_project_name = testenv.MOCK_PROJECT_NAME
        self.path_to_auxproj = testenv.MOCK_PROJECT_PATH
        self.project_default_name = testenv.DEFAULT_PROJECT_NAME

        # Generate a project
        self.p = Project(path=self.path_to_test_dir,
                         name=self.aux_project_name)

        # Add a dataset
        self.ds = Dataset.read_file(path=self.path_to_dataset, )
        self.ds.save()

        # Generate subdataset
        self.sbds = SubDataset(self.ds, method="k_fold", by=5)
        self.sbds.save()

        # set apporach
        self.approach = Approach(self.p,
                                 "decision_tree",
                                 self.sbds,
                                 path=str(Path(testenv.TEST_PATH, "dt")))
        shutil.copyfile(testenv.IRIS_APPROACH, str(self.approach.script_path))
        self.approach.save()

        # generate runs
        import_from("test.dt.decision_tree", "DecisionTreeApproach")().run()
Пример #3
0
    def setUp(self):
        set_project_path(testenv.MOCK_PROJECT_PATH)

        self.path_to_dataset = testenv.MOCK_DATASET
        self.path_to_test_dir = testenv.TEST_PATH
        self.aux_project_name = testenv.MOCK_PROJECT_NAME
        self.path_to_auxproj = testenv.MOCK_PROJECT_PATH
        self.project_default_name = testenv.DEFAULT_PROJECT_NAME

        # Generate a project
        self.p = Project(path=self.path_to_test_dir,
                         name=self.aux_project_name)

        # Add a dataset
        self.ds = Dataset.read_file(path=self.path_to_dataset)
        self.ds.save()

        # Generate subdataset
        self.sbds = SubDataset(self.ds, method="k_fold", by=5)
        self.sbds.save()

        # set apporach
        self.approach = Approach(self.p,
                                 "logistic_regression",
                                 self.sbds,
                                 path=str(Path(testenv.TEST_PATH, "lr")))
        shutil.copyfile(testenv.APPROACH_EXAMPLE,
                        str(self.approach.script_path))
        self.approach.save()

        # generate runs
        import_from("test.lr.logistic_regression",
                    "LogisticRegressionApproach")().run()
Пример #4
0
    def setUp(self):
        set_project_path(testenv.MOCK_PROJECT_PATH)

        self.path_to_dataset = testenv.MOCK_DATASET
        self.path_to_test_dir = testenv.TEST_PATH
        self.aux_project_name = testenv.MOCK_PROJECT_NAME
        self.path_to_auxproj = testenv.MOCK_PROJECT_PATH
        self.project_default_name = "untitled_driftai_project"
Пример #5
0
 def setUp(self):
     """
     Sets a defalut path to dataset
     """
     set_project_path(testenv.MOCK_PROJECT_PATH)
     self.path_to_dataset = testenv.MOCK_DATASET
     self.path_to_test_dir = testenv.TEST_PATH
     self.aux_project_name = testenv.MOCK_PROJECT_NAME
     self.path_to_auxproj = testenv.MOCK_PROJECT_PATH
     self.project_default_name = testenv.DEFAULT_PROJECT_NAME
Пример #6
0
 def test_load_project_from_non_project_dir(self):
     """
     Loads a project from a directory that is not a project
     
     Asserts
     -------
         - Raises the proper exception
     """
     set_project_path('no_exists')
     with self.assertRaises(FileNotFoundError):
         Project.load()
Пример #7
0
 def test_create_new_project_without_name(self):
     """
     Creates a new Project given a path to the local file system without the project name
     
     Asserts
     -------
         - The project path is created
     """
     p = Project(path=self.path_to_test_dir)
     set_project_path(p.path)
     path_to_noname_project = Path(self.path_to_test_dir, self.project_default_name)
     self.assertEqual(p.path, str(path_to_noname_project))
Пример #8
0
    def test_create_two_projects_with_same_name(self):
        """
        Creates a new Project given a path to the local file system and then creates a new
        Project with the same name. The expected behaviour is that the second project creation raises and Exception.
        
        Asserts
        -------
            - The first project path is created
            - The second project generates an Exception
        """
        set_project_path(testenv.MOCK_PROJECT_PATH)

        p1 = Project(path=self.path_to_test_dir, name=self.project_name)
        with self.assertRaises(OptAppProjectNameExistsException):
            Project(path=self.path_to_test_dir, name=p1.name)
Пример #9
0
    def generate(self):
        # Generate the project
        self.logger.info('Creating DriftAI project {}'\
                            .format(self.cfg.project_name))

        project = dai.Project(name=self.cfg.project_name,
                              path=str(self.PROJECTS_PATH))
        dai.set_project_path(project.path)

        # Add the datasets to project
        self.logger.info('Adding datasets...')
        for d in self.cfg.datasets:
            self.logger.info('Creating dataset ' + str(d['id']))
            if d['custom']:
                self.logger.debug('Copying custom {} files'.format(d['id']))
                self._add_custom_datasource(project, d)
                sys.path.append(project.path)

            if not Path(d['path']).is_absolute():
                d['path'] = str(self.src_files.joinpath(d['path']))

            ds = d['factory'](path=d['path'])
            ds.save()

        # Generate the subdatasets
        for sbds in self.cfg.subdatasets:
            self.logger.info('Creating SubDataset' + sbds['id'])
            self.logger.debug('With method ' + sbds['method'])

            dataset = sbds['dataset_factory']()
            subdataset = sbds['factory'](dataset=dataset)
            subdataset.save()

        # Generate approaches
        for a in self.cfg.approaches:
            self.logger.info('Creating Approach ' + a['name'])

            subdataset = a['sbds_factory']()
            approach = a['factory'](subdataset=subdataset, project=project)
            approach.save()

            self.webservice and self.webservice.create_approach(a)

            src_approach = self.src_files.joinpath(a['path'],
                                                   a['name'] + '.py')
            shutil.copy(str(src_approach), str(approach.script_path))

        return project
Пример #10
0
    def test_create_new_project_with_name(self):
        """
        Creates a new Project given a path to the local file system and the project name
        
        Asserts
        -------
            - The project path is created
            - Exists property is true
        """
        set_project_path(testenv.MOCK_PROJECT_PATH)

        p = Project(name=self.project_name,
                    path=self.path_to_test_dir)

        self.assertEqual(p.path, self.path_to_project)
        self.assertTrue(p.exists())
Пример #11
0
    def setUp(self):
        set_project_path(testenv.MOCK_PROJECT_PATH)

        self.p = Project(path=testenv.TEST_PATH,
                         name=testenv.MOCK_PROJECT_NAME)
        self.ds = Dataset.read_file(path=testenv.MOCK_DATASET,
                                    first_line_heading=False)

        self.ds.save()

        self.sbds = SubDataset(self.ds, method="k_fold", by=5)
        self.sbds.save()

        self.approach = Approach(self.p,
                                 "logistic_regression",
                                 self.sbds,
                                 path=str(Path(testenv.TEST_PATH, "lr")))
        shutil.copyfile(testenv.APPROACH_EXAMPLE,
                        str(self.approach.script_path))
        self.approach.save()
Пример #12
0
    def test_create_two_projects_without_name(self):
        """
        Creates a new Project given a path to the local file system without the project name and then creates a new
        Project without name. The expected behaviour is that Projects generates a new name.
        
        Asserts
        -------
            - The first project path is created using the default name when no name is provided
            - The second project generates a new default name
        """

        p1 = Project(path=self.path_to_test_dir)
        p2 = Project(path=self.path_to_test_dir)
        set_project_path(p1.path)

        path_to_noname_project1 = Path(self.path_to_test_dir, self.project_default_name)
        path_to_noname_project2 = Path(self.path_to_test_dir, "{}_{}".format(self.project_default_name, 1))

        self.assertEqual(p1.path, str(path_to_noname_project1))
        self.assertEqual(p2.path, str(path_to_noname_project2))
Пример #13
0
    def setUp(self):
        set_project_path(testenv.MOCK_PROJECT_PATH)

        self.path_to_dataset = testenv.MOCK_DATASET
        self.path_to_test_dir = testenv.TEST_PATH
        self.aux_project_name = testenv.MOCK_PROJECT_NAME
        self.path_to_auxproj = testenv.MOCK_PROJECT_PATH
        self.project_default_name = testenv.DEFAULT_PROJECT_NAME

        self.p = Project(path=self.path_to_test_dir,
                         name=self.aux_project_name)
        self.ds = Dataset.read_file(path=self.path_to_dataset)
        self.ds.save()

        self.sbds = SubDataset(self.ds, method="k_fold", by=5)
        self.sbds.save()

        self.approach = Approach(self.p, "test_approach", self.sbds)
        shutil.copyfile(testenv.APPROACH_EXAMPLE,
                        str(self.approach.script_path))
        self.approach.save()
Пример #14
0
from driftai.project import Project
from driftai.approach import Approach
from driftai import set_project_path

ds = Dataset.from_dir(
    r"C:\cygwin64\home\fcgr\code\driftai\examples\mnst_digit_classification_old\data"
)

proj_path = r"C:\cygwin64\home\fcgr\code\driftai\test\my_tests"
proj_name = "a"

if Path("{}\{}".format(proj_path, proj_name)).exists():
    shutil.rmtree(str(Path("{}\{}".format(proj_path, proj_name)).absolute()))

p = Project(name="a", path=r"C:\cygwin64\home\fcgr\code\driftai\test\my_tests")
set_project_path(p.path)

info = ds.get_info()
ds.save()

sbs = ds.generate_subdataset(method="k_fold", by=5)
sbs.save()

from PIL import Image
import numpy as np

#tr_data = sbs.get_train_data("A", loader=lambda x: np.asarray(Image.open(x)).reshape(-1))
#ts_data = sbs.get_test_data("A", loader=lambda x: np.asarray(Image.open(x)))

a = Approach(project=p, name="my_approach", subdataset=sbs)
a.save()