def test_manual_combination_no_precomputed(self, adata): density_normalize = False vk = VelocityKernel(adata).compute_transition_matrix( density_normalize=density_normalize ) ck = ConnectivityKernel(adata).compute_transition_matrix( density_normalize=density_normalize ) T_vk = vk.transition_matrix T_ck = ck.transition_matrix T_comb_manual = 0.8 * T_vk + 0.2 * T_ck vk = VelocityKernel(adata).compute_transition_matrix( density_normalize=density_normalize ) ck = ConnectivityKernel(adata).compute_transition_matrix( density_normalize=density_normalize ) comb_kernel = 0.8 * vk + 0.2 * ck comb_kernel.compute_transition_matrix() T_comb_kernel = comb_kernel.transition_matrix np.testing.assert_allclose(T_comb_manual.A, T_comb_kernel.A, rtol=_rtol)
def test_adaptive_kernel_constants(self, adata): k = (3 * ConnectivityKernel(adata).compute_transition_matrix()) ^ ( 1 * ConnectivityKernel(adata).compute_transition_matrix() ) k.compute_transition_matrix() assert k[0][0]._value == 3 / 4 assert k[1][0]._value == 1 / 4
def test_constant_wrong_parentheses(self, adata): k = VelocityKernel(adata).compute_transition_matrix() + ( ConnectivityKernel(adata).compute_transition_matrix() + ConnectivityKernel(adata).compute_transition_matrix()) k.compute_transition_matrix() c1, c2, c3 = _is_bin_mult(k[0]), _is_bin_mult(k[1]), _is_bin_mult(k[2]) assert c1.transition_matrix == 1 / 3 assert c2.transition_matrix == 1 / 3 assert c3.transition_matrix == 1 / 3
def test_constant_normalize_3(self, adata): k = (VelocityKernel(adata).compute_transition_matrix() + ConnectivityKernel(adata).compute_transition_matrix() + ConnectivityKernel(adata).compute_transition_matrix()) k.compute_transition_matrix() c1, c2, c3 = _is_bin_mult(k[0]), _is_bin_mult(k[1]), _is_bin_mult(k[2]) assert c1.transition_matrix == 1 / 3 assert c2.transition_matrix == 1 / 3 assert c3.transition_matrix == 1 / 3
def test_inversion_preservation_of_constants(self, adata): c = ConnectivityKernel(adata).compute_transition_matrix() a = (3 * c + 1 * c).compute_transition_matrix() b = ~a c.compute_transition_matrix() assert a[0][0].transition_matrix == 3 / 4 assert b[0][0].transition_matrix == 3 / 4 assert a[1][0].transition_matrix == 1 / 4 assert b[1][0].transition_matrix == 1 / 4
def test_adaptive_kernel_complex(self, adata): k = (4 * ((3 * ConnectivityKernel(adata, var_key="connectivity_variances"). compute_transition_matrix()) ^ (1 * ConnectivityKernel(adata, var_key="connectivity_variances"). compute_transition_matrix())) + 2 * ConnectivityKernel(adata).compute_transition_matrix()) k.compute_transition_matrix() assert k[0][0].transition_matrix == 4 / 6 assert k[1][0].transition_matrix == 2 / 6 assert k[0][1][0][0]._value == 3 / 4 assert k[0][1][1][0]._value == 1 / 4
def test_constant_correct_parentheses(self, adata): k = 1 * VelocityKernel(adata).compute_transition_matrix() + 1 * ( ConnectivityKernel(adata).compute_transition_matrix() + ConnectivityKernel(adata).compute_transition_matrix()) k.compute_transition_matrix() c1, c2, c3 = ( _is_bin_mult(k[0]), _is_bin_mult(k[1][1][0]), _is_bin_mult(k[1][1][1]), ) assert c1.transition_matrix == 1 / 2 assert c2.transition_matrix == 1 / 2 assert c3.transition_matrix == 1 / 2
def _create_gpcca(n_obs: int, *, backward: bool = False) -> Tuple[AnnData, CFLARE]: adata = _create_dummy_adata(n_obs) sc.tl.paga(adata, groups="clusters") vk = VelocityKernel(adata, backward=backward).compute_transition_matrix() ck = ConnectivityKernel(adata, backward=backward).compute_transition_matrix() final_kernel = 0.8 * vk + 0.2 * ck mc = cr.tl.GPCCA(final_kernel) mc.compute_partition() mc.compute_eig() mc.compute_schur(method="brandts") mc.compute_metastable_states(n_states=2) mc.set_main_states() mc.compute_lineage_drivers(cluster_key="clusters", use_raw=False) assert adata is mc.adata if backward: assert str(LinKey.BACKWARD) in adata.obsm else: assert str(LinKey.FORWARD) in adata.obsm return adata, mc
def _create_cflare(n_obs: int, *, backward: bool = False) -> Tuple[AnnData, CFLARE]: adata = _create_dummy_adata(n_obs) sc.tl.paga(adata, groups="clusters") try: vk = VelocityKernel(adata, backward=backward).compute_transition_matrix() ck = ConnectivityKernel(adata, backward=backward).compute_transition_matrix() final_kernel = 0.8 * vk + 0.2 * ck mc = cr.tl.CFLARE(final_kernel) mc.compute_partition() mc.compute_eig() mc.compute_metastable_states(use=2) # can fail for small #cells mc.compute_lin_probs() mc.compute_lineage_drivers(cluster_key="clusters", use_raw=False) assert adata is mc.adata if backward: assert str(LinKey.BACKWARD) in adata.obsm else: assert str(LinKey.FORWARD) in adata.obsm except: mc = None return adata, mc
def test_not_none_transition_matrix_accessor(self, adata): vk = VelocityKernel(adata) ck = ConnectivityKernel(adata) pk = PalantirKernel(adata, time_key="latent_time") assert vk.transition_matrix is not None assert ck.transition_matrix is not None assert pk.transition_matrix is not None
def test_constant_normalize_2(self, adata): k = (9 * VelocityKernel(adata).compute_transition_matrix() + 1 * ConnectivityKernel(adata).compute_transition_matrix()) k.compute_transition_matrix() c1, c2 = _is_bin_mult(k[0]), _is_bin_mult(k[1]) assert c1.transition_matrix == 9 / 10 assert c2.transition_matrix == 1 / 10
def test_inversion_propagation(self, adata): c = ConnectivityKernel(adata, backward=False) v = VelocityKernel(adata, backward=False) k = ~(c + v) assert c.backward assert v.backward assert k.backward
def test_initialized(self, adata): k = ( VelocityKernel(adata).compute_transition_matrix() + ConnectivityKernel(adata).compute_transition_matrix() ) k.compute_transition_matrix() assert k.transition_matrix is not None
def test_uninitialized_one(self, adata): k = ( VelocityKernel(adata) + ConnectivityKernel(adata).compute_transition_matrix() ) with pytest.raises(RuntimeError): k.compute_transition_matrix()