Exemple #1
0
    def setUp(self):
        self.k = 4

        p = np.zeros(10)
        q = np.zeros(10)
        p[0:-1] = 0.5
        q[1:] = 0.5
        p[4] = 0.01
        q[6] = 0.1

        self.bdc = deeptime.data.birth_death_chain(q, p)

        self.mu = self.bdc.stationary_distribution
        self.T = self.bdc.transition_matrix_sparse
        """Test matrix-vector product against spectral decomposition"""
        R, D, L = rdl_decomposition(self.T, k=self.k)
        self.L = L
        self.R = R
        self.ts = timescales(self.T, k=self.k)
        self.times = np.array([1, 5, 10, 20, 100])

        ev = np.diagonal(D)
        self.ev_t = ev[np.newaxis, :]**self.times[:, np.newaxis]
        """Observable"""
        obs1 = np.zeros(10)
        obs1[0] = 1
        obs1[1] = 1
        self.obs = obs1
        """Initial distribution"""
        w0 = np.zeros(10)
        w0[0:4] = 0.25
        self.p0 = w0
Exemple #2
0
    def setUp(self):
        self.k = 4

        p = np.zeros(10)
        q = np.zeros(10)
        p[0:-1] = 0.5
        q[1:] = 0.5
        p[4] = 0.01
        q[6] = 0.1

        self.bdc = deeptime.data.birth_death_chain(q, p)

        self.mu = self.bdc.stationary_distribution
        self.T = self.bdc.transition_matrix_sparse
        R, D, L = rdl_decomposition(self.T, k=self.k)
        self.L = L
        self.R = R
        self.ts = timescales(self.T, k=self.k)
        self.times = np.array([1, 5, 10, 20, 100])

        ev = np.diagonal(D)
        self.ev_t = ev[np.newaxis, :]**self.times[:, np.newaxis]

        obs1 = np.zeros(10)
        obs1[0] = 1
        obs1[1] = 1
        obs2 = np.zeros(10)
        obs2[8] = 1
        obs2[9] = 1

        self.obs1 = obs1
        self.obs2 = obs2
        self.one_vec = np.ones(10)
Exemple #3
0
 def test_timescales(self):
     P_dense = self.bdc.transition_matrix
     P = self.bdc.transition_matrix_sparse
     ev = eigvals(P_dense)
     """Sort with decreasing magnitude"""
     ev = ev[np.argsort(np.abs(ev))[::-1]]
     ts = -1.0 / np.log(np.abs(ev))
     """k=None"""
     with self.assertRaises(ValueError):
         tsn = timescales(P)
     """k is not None"""
     tsn = timescales(P, k=self.k)
     assert_allclose(ts[1:self.k], tsn[1:])
     """k is not None, ncv is not None"""
     tsn = timescales(P, k=self.k, ncv=self.ncv)
     assert_allclose(ts[1:self.k], tsn[1:])
     """tau=7"""
     """k is not None"""
     tsn = timescales(P, k=self.k, tau=7)
     assert_allclose(7 * ts[1:self.k], tsn[1:])
Exemple #4
0
 def test_timescales_rev(self):
     P_dense = self.bdc.transition_matrix
     P = self.bdc.transition_matrix_sparse
     mu = self.bdc.stationary_distribution
     ev = eigvals(P_dense)
     """Sort with decreasing magnitude"""
     ev = ev[np.argsort(np.abs(ev))[::-1]]
     ts = -1.0 / np.log(np.abs(ev))
     """k=None"""
     with self.assertRaises(ValueError):
         tsn = timescales(P, reversible=True)
     """k is not None"""
     tsn = timescales(P, k=self.k, reversible=True)
     assert_allclose(ts[1:self.k], tsn[1:])
     """k is not None, ncv is not None"""
     tsn = timescales(P, k=self.k, ncv=self.ncv, reversible=True)
     assert_allclose(ts[1:self.k], tsn[1:])
     """k is not None, mu is not None"""
     tsn = timescales(P, k=self.k, reversible=True, mu=mu)
     assert_allclose(ts[1:self.k], tsn[1:])
     """k is not None, mu is not None, ncv is not None"""
     tsn = timescales(P, k=self.k, ncv=self.ncv, reversible=True, mu=mu)
     assert_allclose(ts[1:self.k], tsn[1:])
     """tau=7"""
     """k is not None"""
     tsn = timescales(P, k=self.k, tau=7, reversible=True)
     assert_allclose(7 * ts[1:self.k], tsn[1:])
Exemple #5
0
    def setUp(self):
        self.k = 4

        p = np.zeros(10)
        q = np.zeros(10)
        p[0:-1] = 0.5
        q[1:] = 0.5
        p[4] = 0.01
        q[6] = 0.1

        self.bdc = deeptime.data.birth_death_chain(q, p)
        self.mu = self.bdc.stationary_distribution
        self.T = self.bdc.transition_matrix_sparse
        R, D, L = rdl_decomposition(self.T, k=self.k)
        self.L = L
        self.R = R
        self.ts = timescales(self.T, k=self.k)
        self.times = np.array([1, 5, 10, 20])

        ev = np.diagonal(D)
        self.ev_t = ev[np.newaxis, :]**self.times[:, np.newaxis]

        self.tau = 7.5
        """Observables"""
        obs1 = np.zeros(10)
        obs1[0] = 1
        obs1[1] = 1
        obs2 = np.zeros(10)
        obs2[8] = 1
        obs2[9] = 1

        self.obs1 = obs1
        self.obs2 = obs2
        """Initial vector for relaxation"""
        w0 = np.zeros(10)
        w0[0:4] = 0.25
        self.p0 = w0