def func(theta, i): # ith eigenvalue of K K = np.zeros((n, n)) _ratematrix.build_ratemat(np.exp(theta), n, None, K) w = np.real(scipy.linalg.eigvals(K)) w = np.sort(w) return w[i]
def func(theta, i): # ith eigenvalue of K K = np.zeros((n, n)) _ratematrix.build_ratemat(theta, n, K) w = np.real(scipy.linalg.eigvals(K)) w = np.sort(w) return w[i]
def g(i): h = 1e-7 e = np.zeros_like(exp_sp) e[i] = h K1 = np.zeros((n, n)) K2 = np.zeros((n, n)) _ratematrix.build_ratemat(exp_sp, n, inds_sp, K1) _ratematrix.build_ratemat(np.exp(np.log(exp_sp) + e), n, inds_sp, K2) return np.sum(np.multiply(A, (K2 - K1) / h))
def g(i): h = 1e-7 e = np.zeros_like(exptheta) e[i] = h K1 = np.zeros((n, n)) K2 = np.zeros((n, n)) _ratematrix.build_ratemat(exptheta, n, None, K1) _ratematrix.build_ratemat(np.exp(np.log(exptheta) + e), n, None, K2) return np.sum(np.multiply(A, (K2 - K1) / h)), (K2 - K1) / h
def test_build_ratemat_1(): # test build_ratemat in sparse mode vs. dense mode n = 4 exptheta = dense_exptheta(n) u = np.arange(n*(n-1)/2 + n).astype(np.intp) K1 = np.zeros((n, n)) K2 = np.zeros((n, n)) _ratematrix.build_ratemat(exptheta, n, u, K1) _ratematrix.build_ratemat(exptheta, n, None, K2) np.testing.assert_array_equal(K1, K2)
def test_build_ratemat_2(): # test build_ratemat in sparse mode vs. dense mode n = 4 exp_d, exp_sp, inds_sp = sparse_exptheta(n) K1 = np.zeros((n, n)) K2 = np.zeros((n, n)) _ratematrix.build_ratemat(exp_sp, n, inds_sp, K1) _ratematrix.build_ratemat(exp_d, n, None, K2) np.testing.assert_array_equal(K1, K2)
def test_build_ratemat_1(): # test build_ratemat n = 4 theta = example_theta(n) K = np.zeros((n, n)) _ratematrix.build_ratemat(theta, n, K) # diagonal entries are negative assert np.all(np.diag(K) < 0) # off diagonal entries are non-negative assert np.all(np.extract(1-np.eye(n), K) >= 0) # row-sums are 0 np.testing.assert_array_almost_equal(np.sum(K, axis=1), 0)
def test_build_ratemat(): # test build_ratemat n = 4 theta = example_theta(n) K = np.zeros((n, n)) _ratematrix.build_ratemat(theta, n, K) # diagonal entries are negative assert np.all(np.diag(K) < 0) # off diagonal entries are non-negative assert np.all(np.extract(1 - np.eye(n), K) >= 0) # row-sums are 0 np.testing.assert_array_almost_equal(np.sum(K, axis=1), 0)
def grad(theta, i): # gradient of the ith eigenvalue of K with respect to theta K = np.zeros((n, n)) _ratematrix.build_ratemat(np.exp(theta), n, None, K) w, V = scipy.linalg.eig(K) order = np.argsort(np.real(w)) V = np.real(np.ascontiguousarray(V[:, order])) U = np.ascontiguousarray(scipy.linalg.inv(V).T) g = np.zeros(len(theta)) for u in range(len(theta)): dKu = np.zeros((n, n)) _ratematrix.dK_dtheta_A(np.exp(theta), n, u, None, None, dKu) out = np.zeros(n) temp = np.zeros(n) _ratematrix.dw_du(dKu, U, V, n, temp, out) g[u] = out[i] return g
def grad(theta, i): # gradient of the ith eigenvalue of K with respect to theta K = np.zeros((n, n)) _ratematrix.build_ratemat(theta, n, K) w, V = scipy.linalg.eig(K) order = np.argsort(np.real(w)) V = np.real(np.ascontiguousarray(V[:, order])) U = np.ascontiguousarray(scipy.linalg.inv(V).T) g = np.zeros(len(theta)) for u in range(len(theta)): dKu = np.zeros((n, n)) _ratematrix.dK_dtheta_ij(theta, n, u, None, dKu) out = np.zeros(n) temp = np.zeros(n) _ratematrix.dw_du(dKu, U, V, n, temp, out) g[u] = out[i] return g
def func(x, i, j): # (i,j) entry of the rate matrix K = np.zeros((n, n)) _ratematrix.build_ratemat(x, n, K) return K[i, j]