Source code for VirtualMicrobes.mutate.test.TestMutate

'''
Created on Nov 15, 2013

@author: thocu
'''
#from nose.tools import *
#import unittest
import VirtualMicrobes.simulation.Simulation as simu
import VirtualMicrobes.my_tools.utility as util
from VirtualMicrobes.virtual_cell.Cell import Cell
from VirtualMicrobes.environment.Environment import Environment
import random

[docs]class Test(): @classmethod
[docs] def setup_class(self): self.rand_gen = random.Random(24) param_updates = dict() param_updates['grid_cols'] = 1 param_updates['grid_rows'] = 1 param_updates['nr_cat_reactions'] = 1 param_updates['nr_ana_reactions'] = 1 param_updates['chromosome_compositions'] = [ util.GeneTypeNumbers(tf=10, enz=10, pump=10) for _ in range(2) ] params = simu.update_default_params(**param_updates) self.environment = Environment(params) self.cell = Cell(params=params, environment=self.environment, rand_gen=self.rand_gen)
[docs] def test_chrom_dup(self): ''' Tests: * duplicating chromosome increases chromosome count. * rewinding mutation yields the original set of chromosomes * after rewinding nr of chromosomes equals pre mutation count ''' predup_chroms = self.cell.genome.chromosomes[:] predup_len = len(predup_chroms) chosen = self.rand_gen.choice(self.cell.genome.chromosomes) dup = self.cell.duplicate_chromosome(chrom=chosen, time=0 ) assert len(self.cell.genome.chromosomes) == predup_len + 1 dup.rewind() predup_set = set(predup_chroms) post_rewind_set = set(self.cell.genome.chromosomes) assert predup_set == post_rewind_set assert len(post_rewind_set) == predup_len
[docs] def test_chrom_del(self): ''' Tests: * deleting chromosome decreases chromosome count. * rewinding mutation yields the original set of chromosomes * after rewinding nr of chromosomes equals pre mutation count ''' predel_chroms = self.cell.genome.chromosomes[:] chosen = self.rand_gen.choice(self.cell.genome.chromosomes) del_ = self.cell.delete_chromosome(chrom=chosen, time=0) assert len(self.cell.genome.chromosomes) == len(predel_chroms) - 1 del_.rewind() assert set(predel_chroms) == set(self.cell.genome.chromosomes) assert len(self.cell.genome.chromosomes) == len(predel_chroms)
[docs] def test_chrom_fiss(self): ''' Tests: * fission of chromosome decreases chromosome count. * number of genes remains constant * rewinding mutation yields the original set of chromosomes * after rewinding, the number of chromosomes equals pre mutation count ''' prefiss_chroms = self.cell.genome.chromosomes[:] chosen = self.rand_gen.choice(self.cell.genome.chromosomes) pos = len(chosen)/2 fission = self.cell.fiss_chromosome(chrom=chosen, pos=pos, time=0) assert len(self.cell.genome.chromosomes) == len(prefiss_chroms) + 1 assert sum(map(len, prefiss_chroms)) == len(self.cell.genome) fission.rewind() assert set(prefiss_chroms) == set(self.cell.genome.chromosomes) assert len(self.cell.genome.chromosomes) == len(prefiss_chroms)
[docs] def test_chrom_fuse(self): ''' Tests: * fusing chromosomes increases chromosome count. * number of genes remains constant * rewinding mutation yields the original set of chromosomes * after rewinding, the number of chromosomes equals pre mutation count ''' prefus_chroms = self.cell.genome.chromosomes[:] chosen1, chosen2 = self.rand_gen.sample(self.cell.genome.chromosomes,2) end1, end2 = [ self.rand_gen.choice([True, False]) for _ in range(2) ] fusion = self.cell.fuse_chromosomes(chrom1=chosen1, chrom2=chosen2, end1=end1, end2=end2, time=0) assert len(self.cell.genome.chromosomes) == len(prefus_chroms) - 1 assert sum(map(len, prefus_chroms)) == len(self.cell.genome) fusion.rewind() assert set(self.cell.genome.chromosomes) == set(prefus_chroms) assert len(self.cell.genome.chromosomes) == len(prefus_chroms)
[docs] def test_point_mut(self): # TODO: test that the mutated parameter is different for pre and post mutation gene ''' Tests: * A new, mutated gene is created and stored * After mutating all genes in genome, no gene is the same * after rewinding all point mutations, all genes are equal to those in the pre mutation genome ''' pre_point_chroms = [ chrom.positions[:] for chrom in self.cell.genome.chromosomes ] point_muts = [] for chrom in self.cell.genome.chromosomes: for pos in range(len(chrom)): point_mut = self.cell.point_mutate_gene(chrom=chrom, pos=pos, mut_dict=self.cell.params.point_mutation_dict, point_mut_ratios=self.cell.params.point_mutation_ratios, environment=self.environment, time=0, rand_gen=self.rand_gen) assert point_mut.genomic_target != point_mut.post_mutation point_muts.append(point_mut) for pre, post in zip(pre_point_chroms, self.cell.genome.chromosomes): for g_pre, g_post in zip(pre,post): assert g_pre != g_post for pm in reversed(point_muts): pm.rewind() for pre, post in zip(pre_point_chroms, self.cell.genome.chromosomes): for g_pre, g_post in zip(pre,post): assert g_pre == g_post