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)
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()
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()
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"
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
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()
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))
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)
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
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())
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()
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))
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()
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()