示例#1
0
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)
示例#2
0
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)
示例#3
0
 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)
示例#4
0
    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"])
示例#5
0
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
示例#6
0
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;")
示例#7
0
 def setUp(self):
     self.stat_source = StatStorage("test/fess/data/test1.stats")
     cg = ftmc.CoarseGrainRNA.from_dotbracket(
         dotbracket_str="(((((......)))))")
     self.sm = SpatialModel(cg)