def test_is_generator_unique(self):
        """ is_generator_unique should identify non-unique primary roots or
        raise a NotImplementedError for non-primary roots"""
        q_fail = array(
            [
                [-9.08955989, 4.50419008, 2.93729567, 1.64807414],
                [3.0820101213, -11.867582855, 3.0196380713, 5.7659346624],
                [3.1293061336, 0.6470353007, -4.340134955, 0.5637935206],
                [9.95494662, 0.63789574, 1.39069539, -11.98353775],
            ]
        )
        self.assertFalse(is_generator_unique(q_fail))

        q_pass = array(
            [
                [-3.764760594, 1.1273556812, 1.3310122018, 1.3063927109],
                [0.920950736, -2.6797373188, 0.4269374722, 1.3318491106],
                [1.1327752022, 1.1606494551, -2.7789984239, 0.4855737666],
                [1.2387180594, 0.1873997167, 0.9202488686, -2.3463666447],
            ]
        )
        self.assertTrue(is_generator_unique(q_pass))

        q_raise = array(
            [
                [-2.77453845e-03, 2.77453817e-03, 1.00809110e-10, 1.74200370e-10],
                [6.81595242e-11, -3.43166912e-10, 1.00810050e-10, 1.74197338e-10],
                [6.81605094e-11, 2.77453817e-03, -2.77453841e-03, 1.74198726e-10],
                [6.81594144e-11, 1.38727059e-10, 1.00808021e-04, -1.00808228e-04],
            ]
        )
        self.assertRaises(NotImplementedError, is_generator_unique, q_raise)
 def allRateMatricesUnique(self):
     """Returns True if every rate matrix is unique for its Psub matrix"""
     for edge in self.tree.getEdgeVector(include_root=False):
         Q = self.getRateMatrixForEdge(edge.Name).asarray()
         t = self.getParamValue("length", edge=edge.Name)
         if not is_generator_unique(Q * t):
             return False
     return True
Exemple #3
0
 def allRateMatricesUnique(self):
     """Returns True if every rate matrix is unique for its Psub matrix"""
     for edge in self.tree.getEdgeVector(include_root=False):
         Q = self.getRateMatrixForEdge(edge.Name).asarray()
         t = self.getParamValue('length', edge=edge.Name)
         if not is_generator_unique(Q * t):
             return False
     return True
Exemple #4
0
    def test_is_generator_unique(self):
        """ is_generator_unique should identify non-unique primary roots or
        raise a NotImplementedError for non-primary roots"""
        q_fail = array([[ -9.08955989, 4.50419008, 2.93729567,   1.64807414  ],
            [  3.0820101213, -11.867582855 ,   3.0196380713,   5.7659346624],
            [  3.1293061336,   0.6470353007,  -4.340134955 ,   0.5637935206],
            [  9.95494662  ,   0.63789574  ,   1.39069539  , -11.98353775  ]])
        self.assertFalse(is_generator_unique(q_fail))

        q_pass = array([[-3.764760594, 1.1273556812, 1.3310122018, 1.3063927109],
            [0.920950736 , -2.6797373188,  0.4269374722,  1.3318491106],
            [1.1327752022,  1.1606494551, -2.7789984239,  0.4855737666],
            [1.2387180594,  0.1873997167,  0.9202488686, -2.3463666447]])
        self.assertTrue(is_generator_unique(q_pass))

        q_raise = array([
            [-2.77453845e-03, 2.77453817e-03, 1.00809110e-10, 1.74200370e-10],
            [6.81595242e-11, -3.43166912e-10, 1.00810050e-10, 1.74197338e-10],
            [6.81605094e-11, 2.77453817e-03, -2.77453841e-03, 1.74198726e-10],
            [6.81594144e-11, 1.38727059e-10, 1.00808021e-04, -1.00808228e-04]])
        self.assertRaises(NotImplementedError, is_generator_unique, q_raise)