class TestWholeMLMoverPublicAPI(TestMoverBaseClassPublicAPI): def setUp(self): self.stat_source_real = StatStorage("test/fess/data/real.stats") cg = ftmc.CoarseGrainRNA.from_dotbracket( dotbracket_str= "((((((((((......))))).....(((((......)))))....(((((......))))))))))" ) self.sm = SpatialModel(cg) self.sm.sample_stats(self.stat_source_real) self.sm.new_traverse_and_build() self.mover = fbmov.WholeMLMover(self.stat_source_real) def test_whole_ml_mover_moves_whole_ml(self): for i in range(RAND_REPETITIONS): sm = copy.deepcopy(self.sm) stats_old = copy.deepcopy(sm.elem_defs) self.mover.move(sm) changed = set() for elem in sm.elem_defs: if sm.elem_defs[elem].pdb_name != stats_old[elem].pdb_name: changed.add(elem) if any(elem[0] == "m" for elem in changed): self.assertEqual( len(changed), 3, msg="Changed is {}, should be 3 ml segments".format( changed)) else: self.assertEqual(len(changed), 1)
class TestMoverBaseClassPublicAPI(unittest.TestCase): def setUp(self): self.stat_source_real = StatStorage("test/fess/data/real.stats") self.stat_source_limited = StatStorage("test/fess/data/test1.stats") cg1 = ftmc.CoarseGrainRNA.from_dotbracket( dotbracket_str="(((((.....(((((......)))))..)))))") self.sm = SpatialModel(cg1) self.sm.sample_stats(self.stat_source_limited) self.sm.new_traverse_and_build() self.mover = fbmov.Mover(self.stat_source_real) def test_move_changes_sm(self): coords_old = copy.deepcopy(self.sm.bg.coords) log.info(self.mover.move(self.sm)) self.assertNotEqual( self.sm.bg.coords, coords_old, msg="At least one coordinate should have changed significantly.") def test_move_and_reset(self): for i in range(10): coords_old = copy.deepcopy(self.sm.bg.coords) log.info(self.mover.move(self.sm)) self.mover.revert(self.sm) self.assertEqual(self.sm.bg.coords, coords_old)
def setUp(self): self.stat_source_real = StatStorage("test/fess/data/real.stats") self.stat_source_limited = StatStorage("test/fess/data/test1.stats") cg1 = ftmc.CoarseGrainRNA.from_dotbracket( dotbracket_str="(((((.....(((((......)))))..)))))") self.sm = SpatialModel(cg1) self.sm.sample_stats(self.stat_source_limited) self.sm.new_traverse_and_build() self.mover = fbmov.Mover(self.stat_source_real)
def test_iter_moves_many(self): cg = ftmc.CoarseGrainRNA.from_dotbracket( dotbracket_str="(((((.....)))))", seq="GGCGCAAAAAGCGCC") self.sm = SpatialModel(cg) mov = fbmov.ExhaustiveMover("s0", "h0", stat_source=self.stat_source_limited, sm=self.sm) move_list = list(mov._iter_moves(self.sm)) self.assertEqual([x[0] for x in move_list], ["s0", "h0", "h0"]) self.assertEqual([x[1].pdb_name for x in move_list], ["test:s_0", "test:h_1", "test:h_2"])
class TestMSTchangingMoverPublicAPI(TestMoverBaseClassPublicAPI): def setUp(self): self.stat_source_real = StatStorage("test/fess/data/real.stats") self.stat_source_limited = StatStorage("test/fess/data/test1.stats") cg1 = ftmc.CoarseGrainRNA.from_dotbracket( dotbracket_str="((((......))((......))))") self.sm = SpatialModel(cg1) self.sm.sample_stats(self.stat_source_real) self.sm.new_traverse_and_build() self.mover = fbmov.Mover(self.stat_source_real) self.mover = fbmov.MSTchangingMover(self.stat_source_real) def test_change_and_reset_m(self): assert "m1" in self.sm.bg.mst initial_coords = copy.deepcopy(self.sm.bg.coords) old_get_elem = self.mover._get_elem self.mover._get_elem = lambda *args: "m1" log.info(self.mover.move(self.sm)) self.assertNotEqual( self.sm.bg.coords, initial_coords, msg="At least one coordinate should have changed significantly.") self.mover.revert(self.sm) self.assertEqual(self.sm.bg.coords, initial_coords) self.mover._get_elem = old_get_elem def test_mst_is_changed_and_resetted(self): assert "m1" in self.sm.bg.mst initial_mst = copy.deepcopy(self.sm.bg.mst) old_get_elem = self.mover._get_elem self.mover._get_elem = lambda *args: "m1" log.info(self.mover.move(self.sm)) self.assertNotEqual(self.sm.bg.mst, initial_mst, msg="The MST should have changed.") self.mover.revert(self.sm) self.assertEqual(self.sm.bg.mst, initial_mst) self.mover._get_elem = old_get_elem
class TestMoverBaseClassPrivateMembers(unittest.TestCase): longMessage = True def setUp(self): self.stat_source_real = StatStorage("test/fess/data/real.stats") self.stat_source_limited = StatStorage("test/fess/data/test1.stats") cg = ftmc.CoarseGrainRNA.from_dotbracket( dotbracket_str="(((((......)))))", seq="GGCGCAAAAAAGCGCC") self.sm = SpatialModel(cg) self.sm.sample_stats(self.stat_source_limited) self.sm.new_traverse_and_build() self.mover_realstats = fbmov.Mover(self.stat_source_real) self.mover_limitedstats = fbmov.Mover(self.stat_source_limited) def test_get_elem_and_stat_real_stats(self): elems = Counter() for i in range(RAND_REPETITIONS): elem, new_stat = self.mover_realstats._get_elem_and_stat(self.sm) elems[elem] += 1 self.assertIn(elem, ["s0", "h0"], msg="Only elements from SpatialModel can be picked") if elem == "s0": self.assertIsInstance(new_stat, ftmstat.StemStat) else: self.assertIsInstance(new_stat, ftmstat.LoopStat) print(list(elems.items())) c, p = chisquare(list(elems.values())) self.assertGreater( p, 0.05, msg=" We do not sample all elements uniformely with a p-value " "below 0.2. We sampled with the following frequencies {}. (You might consider repeating " "the test if the frequencies look ok)".format(elems.most_common())) def test_get_elem_and_stat_limited_stats(self): elems = Counter() for i in range(RAND_REPETITIONS): elem, new_stat = self.mover_limitedstats._get_elem_and_stat( self.sm) elems[elem] += 1 self.assertIn(elem, ["s0", "h0"], msg="Only elements from SpatialModel can be picked") if elem == "s0": self.assertEqual(new_stat.pdb_name, "test:s_0") else: self.assertEqual(new_stat.pdb_name, "test:h_0") print(list(elems.items())) c, p = chisquare(list(elems.values())) self.assertGreater( p, 0.05, msg=" We do not sample all elements uniformely with a p-value " "below 0.2. We sampled with the following frequencies {}. (You might consider repeating " "the test if the frequencies look ok)".format(elems.most_common())) def test_move(self): stat = ftmstat.StemStat("stem new:s_0 5 10.388 2.43294047108") oldstat = self.sm.elem_defs["s0"] self.mover_realstats._prev_stats = {} movestring = self.mover_realstats._move(self.sm, "s0", stat) self.assertEqual(self.sm.elem_defs["s0"], stat) self.assertEqual(self.mover_realstats._prev_stats["s0"], oldstat) self.assertEqual(movestring, "s0:test:s_0->new:s_0;")
def setUp(self): self.stat_source = StatStorage("test/fess/data/test1.stats") cg = ftmc.CoarseGrainRNA.from_dotbracket( dotbracket_str="(((((......)))))") self.sm = SpatialModel(cg)