def test_one_state(self): # create random data that sums to one row-wise a_fuzzy = np.random.standard_normal((100, 1)) a_fuzzy = np.exp(a_fuzzy) / np.sum(np.exp(a_fuzzy), 1)[:, None] # check with both overlap handlings _fuzzy_to_discrete(a_fuzzy=a_fuzzy)
def test_critical_samples(self): a_fuzzy = np.array( [ [0.3, 0.7, 0], [0.3, 0.6, 0.1], [0.0, 0.7, 0.3], [0.1, 0.9, 0], [0.4, 0.4, 0.2], [0.5, 0.3, 0.2], [0.6, 0.3, 0.1], [0.3, 0.3, 0.4], [0.2, 0.2, 0.6], ] ) _, c_1 = _fuzzy_to_discrete(a_fuzzy, n_most_likely=3, remove_overlap=False) _, c_2 = _fuzzy_to_discrete(a_fuzzy, n_most_likely=3, remove_overlap=True) assert c_1 == np.array(2) np.testing.assert_array_equal(c_2, np.array([1, 2]))
def test_passing_lineage_object(self): a_fuzzy = np.array( [ [0.3, 0.7, 0], [0.2, 0.5, 0.3], [0.1, 0.8, 0.1], [0.4, 0.4, 0.2], [0.5, 0.3, 0.2], [0.6, 0.3, 0.1], [0.3, 0.3, 0.4], [0.2, 0.2, 0.6], ] ) a_fuzzy_lin = Lineage(a_fuzzy, names=["0", "1", "2"]) b_np, c_np = _fuzzy_to_discrete(a_fuzzy=a_fuzzy, n_most_likely=2) b_l, c_l = _fuzzy_to_discrete(a_fuzzy=a_fuzzy_lin, n_most_likely=2) np.testing.assert_array_equal(b_np, b_l) assert len(c_np) == 0 assert len(c_l) == 0
def test_normal_output(self): a_fuzzy = np.array( [ [0.3, 0.7, 0], [0.2, 0.5, 0.3], [0.1, 0.8, 0.1], [0.4, 0.4, 0.2], [0.5, 0.3, 0.2], [0.6, 0.3, 0.1], [0.3, 0.3, 0.4], [0.2, 0.2, 0.6], ] ) # note: removing the overlap should have no effect in this case since there is none. # there should also be no critical clusters in this case a_actual_1, c_1 = _fuzzy_to_discrete( a_fuzzy, n_most_likely=2, remove_overlap=True ) a_actual_2, c_2 = _fuzzy_to_discrete( a_fuzzy, n_most_likely=2, remove_overlap=False ) a_expected = np.array( [ [False, True, False], [False, False, False], [False, True, False], [False, False, False], [True, False, False], [True, False, False], [False, False, True], [False, False, True], ] ) np.testing.assert_array_equal(a_actual_1, a_expected) np.testing.assert_array_equal(a_actual_2, a_expected) assert len(c_1) == 0 assert len(c_2) == 0
def test_normal_run(self): # create random data that sums to one row-wise a_fuzzy = np.random.standard_normal((100, 3)) a_fuzzy = np.exp(a_fuzzy) / np.sum(np.exp(a_fuzzy), 1)[:, None] # check with both overlap handlings _fuzzy_to_discrete(a_fuzzy=a_fuzzy) _fuzzy_to_discrete(a_fuzzy=a_fuzzy, n_most_likely=30, remove_overlap=True) _fuzzy_to_discrete(a_fuzzy=a_fuzzy, n_most_likely=30, remove_overlap=False)
def test_raise_threshold(self): a_fuzzy = np.repeat(np.array([0.9, 0.1])[None, :], 10, 0) with pytest.raises(ValueError): _fuzzy_to_discrete(a_fuzzy, n_most_likely=3, remove_overlap=True) with pytest.raises(ValueError): _fuzzy_to_discrete(a_fuzzy, n_most_likely=3, remove_overlap=False)
def test_too_many_cells(self): a_fuzzy = np.random.standard_normal((100, 3)) a_fuzzy = np.exp(a_fuzzy) / np.sum(np.exp(a_fuzzy), 1)[:, None] with pytest.raises(ValueError): _fuzzy_to_discrete(a_fuzzy=a_fuzzy, n_most_likely=50)
def test_normalization(self): a_fuzzy = np.random.standard_normal((100, 3)) with pytest.raises(ValueError): _fuzzy_to_discrete(a_fuzzy=a_fuzzy)