def testAddTaskSet(self): ts = easy.TaskSet() ts.add(self.task) # tsg = tasksetgraph.TaskSetGraph() tsindex_id = tsg.add_taskset(ts) dict_retrieve = tsg.digraph.node[tasksetgraph.get_tasksetid( (self.task, ))] ts_retrieve = dict_retrieve['taskset'] self.assertEqual(len(ts), len(ts_retrieve)) self.assertEqual(tuple(x.task_id for x in ts), tuple(x.task_id for x in ts_retrieve)) # add connected tasks taskset_align = easy.TaskSet() aligner = rnaseq.Bowtie2() for fq_name in ('foo.fq', 'bar.fq'): Assets = aligner.Assets assets = Assets( Assets.Source(self.task.call.assets.target.indexfilepattern, rnaseq.FASTQPossiblyGzipCompressed(fq_name), None), None) task_align = self.project.add_task(aligner, assets) taskset_align.add(task_align) tsalign_id = tsg.add_taskset(taskset_align) lst = tsg.execution_list() self.assertEqual(tsindex_id, tasksetgraph.get_tasksetid(lst[0].taskset)) self.assertEqual(tsalign_id, tasksetgraph.get_tasksetid(lst[1].taskset))
def testExecutionList(self): tsg = tasksetgraph.TaskSetGraph() # initial task/taskset is building a bowtie2 index tsindex_id = tsg.add(self.task) lst = tsg.execution_list() self.assertEqual(1, len(lst)) # add a second task set that performs the alignment of several pairs of # FASTQ files n_fastq = 3 pairnames = self._create_fastq(n_fastq, self.wd2) index_task = self.task bowtie2 = rnaseq.Bowtie2() Assets = bowtie2.Assets # Class to model FASTQ files that are optionally compressed FASTQ = rnaseq.FASTQPossiblyGzipCompressed ts = easy.TaskSet() # note that we are included the pair of FASTQ already aligned above for read1_fn, read2_fn in pairnames: task = self.project.add_task( bowtie2, Assets( Assets.Source( index_task.call.assets.target.indexfilepattern, FASTQ(read1_fn), FASTQ(read2_fn)))) ts.add(task) tsalign_id = tsg.add(ts) lst = tsg.execution_list()
def testAddTask(self): tsg = tasksetgraph.TaskSetGraph() tsg.add(self.task) dict_retrieve = tsg.digraph.node[tasksetgraph.get_tasksetid( (self.task, ))] ts_retrieve = dict_retrieve['taskset'] self.assertEqual(1, len(ts_retrieve)) self.assertEqual((self.task.task_id, ), tuple(x.task_id for x in ts_retrieve))
def testAddTaskSetDuplicateTask(self): ts = easy.TaskSet() ts.add(self.task) tsg = tasksetgraph.TaskSetGraph() tsg.add_taskset(ts) ts2 = easy.TaskSet() ts2.add(self.task) self.assertRaises(ValueError, tsg.add_taskset, ts2)
def testAddTaskDifferentProject(self): project2 = easy.Project(rnaseq, self.wd2) bowtie2index = rnaseq.Bowtie2Build() reference_fn = PHAGEFASTA Assets = bowtie2index.Assets task2 = project2.add_task( bowtie2index, Assets(Assets.Source(rnaseq.FASTAFile(reference_fn)))) # tsg = tasksetgraph.TaskSetGraph() tsg.add(self.task) self.assertRaises(ValueError, tsg.add, task2)
def testExecution(self): tsg = tasksetgraph.TaskSetGraph() tsg.add(self.task) n_fastq = 3 pairnames = self._create_fastq(n_fastq, self.wd2) index_task = self.task bowtie2 = rnaseq.Bowtie2() Assets = bowtie2.Assets FASTQ = rnaseq.FASTQPossiblyGzipCompressed ts = easy.TaskSet() for read1_fn, read2_fn in pairnames: task = self.project.add_task( bowtie2, Assets( Assets.Source( index_task.call.assets.target.indexfilepattern, FASTQ(read1_fn), FASTQ(read2_fn)))) ts.add(task) tsg.add(ts) # no task mapper, check that an exception is raised self.assertRaises(ValueError, tsg.execute) # set the default task mapper to a multiprocessing based one n_processes = 1 mpe = easy.MultiprocessingExecution(n_processes) tsg.defaultmapper = mpe tsg.execute() # use a run-only-once filter (that is only try to execute # tasks with the status "TO DO" flt = lambda taskset: taskset.filter_on_status(easy._TASK_TODO) tsg.defaulttasksetfilter = flt lst = tsg.execution_list() for elt in lst: ts_f = tsg._filtered_taskset(elt) # check that nothing is left to be exectuted # (since everything has been run earlier) self.assertEqual(0, len(ts_f))