def test_aamp_mmotifs_default_parameters(): motif_distances_ref = np.array( [[0.0, 0.06315749, 0.25275899, 0.34087884, 0.3452315]]) motif_indices_ref = np.array([[19, 77, 63, 52, 71]]) motif_subspaces_ref = [np.array([2])] motif_mdls_ref = [ np.array([ 411.60964047, 423.69925001, 449.11032383, 476.95855027, 506.62406252 ]) ] np.random.seed(0) T = np.random.rand(500).reshape(5, 100) m = 5 excl_zone = int(np.ceil(m / config.STUMPY_EXCL_ZONE_DENOM)) P, I = naive.maamp(T, m, excl_zone) ( motif_distances_cmp, motif_indices_cmp, motif_subspaces_cmp, motif_mdls_cmp, ) = aamp_mmotifs(T, P, I) npt.assert_array_almost_equal(motif_distances_ref, motif_distances_cmp) npt.assert_array_almost_equal(motif_indices_ref, motif_indices_cmp) npt.assert_array_almost_equal(motif_subspaces_ref, motif_subspaces_cmp) npt.assert_array_almost_equal(motif_mdls_ref, motif_mdls_cmp)
def test_aamp_mmotifs_more_motif_pairs_cutoffs_as_list(T): motif_distances_ref = np.array([[0.0, 1.41421356]]) motif_indices_ref = np.array([[2, 9]]) motif_subspaces_ref = [np.array([3])] motif_mdls_ref = [ np.array([244.0, 260.67970001, 279.86313714, 281.35940001]) ] m = 4 cutoffs = [2, 3, 4, 5] excl_zone = int(np.ceil(m / config.STUMPY_EXCL_ZONE_DENOM)) P, I = naive.maamp(T, m, excl_zone) ( motif_distances_cmp, motif_indices_cmp, motif_subspaces_cmp, motif_mdls_cmp, ) = aamp_mmotifs(T, P, I, max_distance=np.inf, cutoffs=cutoffs, max_matches=2, max_motifs=10) npt.assert_array_almost_equal(motif_distances_ref, motif_distances_cmp) npt.assert_array_almost_equal(motif_indices_ref, motif_indices_cmp) npt.assert_array_almost_equal(motif_subspaces_ref, motif_subspaces_cmp) npt.assert_array_almost_equal(motif_mdls_ref, motif_mdls_cmp)
def test_aamp_mmotifs_two_motif_pairs_max_motifs_2(T): motif_distances_ref = np.array([[0.0, 1.41421356], [0.0, 2.06639783]]) motif_indices_ref = np.array([[2, 9], [0, 5]]) motif_subspaces_ref = [np.array([3]), np.array([2])] motif_mdls_ref = [ np.array([244.0, 260.67970001, 279.86313714, 281.35940001]), np.array([254.33985, 260.67970001, 279.86313714, 291.20703549]), ] m = 4 excl_zone = int(np.ceil(m / config.STUMPY_EXCL_ZONE_DENOM)) P, I = naive.maamp(T, m, excl_zone) ( motif_distances_cmp, motif_indices_cmp, motif_subspaces_cmp, motif_mdls_cmp, ) = aamp_mmotifs( T, P, I, max_distance=np.inf, cutoffs=np.inf, max_matches=2, max_motifs=2, ) npt.assert_array_almost_equal(motif_distances_ref, motif_distances_cmp) npt.assert_array_almost_equal(motif_indices_ref, motif_indices_cmp) npt.assert_array_almost_equal(motif_subspaces_ref, motif_subspaces_cmp) npt.assert_array_almost_equal(motif_mdls_ref, motif_mdls_cmp)
def test_maamp_discords(T, m): excl_zone = int(np.ceil(m / 4)) ref_P, ref_I = naive.maamp(T, m, excl_zone, discords=True) comp_P, comp_I = maamp(T, m, discords=True) npt.assert_almost_equal(ref_P, comp_P) npt.assert_almost_equal(ref_I, comp_I)
def test_maamp(T, m): excl_zone = int(np.ceil(m / 4)) for p in [1.0, 2.0, 3.0]: ref_P, ref_I = naive.maamp(T, m, excl_zone, p=p) comp_P, comp_I = maamp(T, m, p=p) npt.assert_almost_equal(ref_P, comp_P) npt.assert_almost_equal(ref_I, comp_I)
def test_maamp_include(T, m): for width in range(T.shape[0]): for i in range(T.shape[0] - width): include = np.asarray(range(i, i + width + 1)) excl_zone = int(np.ceil(m / 4)) ref_P, ref_I = naive.maamp(T, m, excl_zone, include) comp_P, comp_I = maamp(T, m, include) npt.assert_almost_equal(ref_P, comp_P) npt.assert_almost_equal(ref_I, comp_I)
def test_constant_subsequence_self_join(): T_A = np.concatenate((np.zeros(20, dtype=np.float64), np.ones(5, dtype=np.float64))) T = np.array([T_A, T_A, np.random.rand(T_A.shape[0])]) m = 3 excl_zone = int(np.ceil(m / 4)) ref_P, ref_I = naive.maamp(T, m, excl_zone) comp_P, comp_I = maamp(T, m) npt.assert_almost_equal(ref_P, comp_P) # ignore indices
def test_query_maamp_profile(T, m): _T, T_subseq_isfinite = core.preprocess_non_normalized(T, m) excl_zone = int(np.ceil(m / 4)) for query_idx in range(_T.shape[0] - m + 1): ref_P, ref_I = naive.maamp(T, m, excl_zone) ref_P = ref_P[:, query_idx] ref_I = ref_I[:, query_idx] comp_P, comp_I = _query_maamp_profile(query_idx, _T, _T, m, excl_zone, T_subseq_isfinite) npt.assert_almost_equal(ref_P, comp_P) npt.assert_equal(ref_I, comp_I)
def test_get_first_maamp_profile(T, m): excl_zone = int(np.ceil(m / 4)) start = 0 ref_P, ref_I = naive.maamp(T, m, excl_zone) ref_P = ref_P[:, start] ref_I = ref_I[:, start] _T, T_subseq_isfinite = core.preprocess_non_normalized(T, m) comp_P, comp_I = _get_first_maamp_profile(start, _T, _T, m, excl_zone, T_subseq_isfinite) npt.assert_almost_equal(ref_P, comp_P) npt.assert_equal(ref_I, comp_I)
def test_maamp_wrapper(T, m): excl_zone = int(np.ceil(m / 4)) ref_P, ref_I = naive.maamp(T, m, excl_zone) comp_P, comp_I = maamp(T, m) npt.assert_almost_equal(ref_P, comp_P) npt.assert_almost_equal(ref_I, comp_I) df = pd.DataFrame(T.T) comp_P, comp_I = maamp(df, m) npt.assert_almost_equal(ref_P, comp_P) npt.assert_almost_equal(ref_I, comp_I)
def test_naive_maamp(): T = np.random.uniform(-1000, 1000, [1, 1000]).astype(np.float64) m = 20 zone = int(np.ceil(m / 4)) ref_mp = naive.aamp(T[0], m, exclusion_zone=zone) ref_P = ref_mp[np.newaxis, :, 0] ref_I = ref_mp[np.newaxis, :, 1] comp_P, comp_I = naive.maamp(T, m, zone) npt.assert_almost_equal(ref_P, comp_P) npt.assert_almost_equal(ref_I, comp_I)
def test_maamp_nan_self_join_all_dimensions(T, m, substitute, substitution_locations): excl_zone = int(np.ceil(m / 4)) T_sub = T.copy() for substitution_location in substitution_locations: T_sub[:] = T[:] T_sub[:, substitution_location] = substitute ref_P, ref_I = naive.maamp(T_sub, m, excl_zone) comp_P, comp_I = maamp(T_sub, m) npt.assert_almost_equal(ref_P, comp_P) npt.assert_almost_equal(ref_I, comp_I)
def test_identical_subsequence_self_join(): identical = np.random.rand(8) T_A = np.random.rand(20) T_A[1:1 + identical.shape[0]] = identical T_A[11:11 + identical.shape[0]] = identical T = np.array([T_A, T_A, np.random.rand(T_A.shape[0])]) m = 3 excl_zone = int(np.ceil(m / 4)) ref_P, ref_I = naive.maamp(T, m, excl_zone) comp_P, comp_I = maamp(T, m) npt.assert_almost_equal( ref_P, comp_P, decimal=config.STUMPY_TEST_PRECISION) # ignore indices
def test_aamp_mmotifs_max_motifs_1_max_matches_2_k_1(T): motif_distances_ref = np.array([[0.0, 2.87778559]]) motif_indices_ref = np.array([[0, 5]]) motif_subspaces_ref = [np.array([2, 1])] motif_mdls_ref = [ np.array([244.0, 260.67970001, 279.86313714, 281.35940001]) ] m = 4 excl_zone = int(np.ceil(m / config.STUMPY_EXCL_ZONE_DENOM)) P, I = naive.maamp(T, m, excl_zone) ( motif_distances_cmp, motif_indices_cmp, motif_subspaces_cmp, motif_mdls_cmp, ) = aamp_mmotifs(T, P, I, max_distance=np.inf, max_matches=2, k=1) npt.assert_array_almost_equal(motif_distances_ref, motif_distances_cmp) npt.assert_array_almost_equal(motif_indices_ref, motif_indices_cmp) npt.assert_array_almost_equal(motif_subspaces_ref, motif_subspaces_cmp) npt.assert_array_almost_equal(motif_mdls_ref, motif_mdls_cmp)
def test_aamp_mmotifs_max_distance(T): motif_distances_ref = np.array( [[0.0, 1.41421356, 4.46430286, 6.85346628, 8.207923, 8.50529247]]) motif_indices_ref = np.array([[2, 9, 0, 11, 7, 5]]) motif_subspaces_ref = [np.array([3])] motif_mdls_ref = [ np.array([244.0, 260.67970001, 279.86313714, 281.35940001]) ] m = 4 excl_zone = int(np.ceil(m / config.STUMPY_EXCL_ZONE_DENOM)) P, I = naive.maamp(T, m, excl_zone) ( motif_distances_cmp, motif_indices_cmp, motif_subspaces_cmp, motif_mdls_cmp, ) = aamp_mmotifs(T, P, I, max_distance=np.inf) npt.assert_array_almost_equal(motif_distances_ref, motif_distances_cmp) npt.assert_array_almost_equal(motif_indices_ref, motif_indices_cmp) npt.assert_array_almost_equal(motif_subspaces_ref, motif_subspaces_cmp) npt.assert_array_almost_equal(motif_mdls_ref, motif_mdls_cmp)