1+ import math
12import numpy as np
23import numpy .testing as npt
34from stumpy import aampdist , aampdisted
5+ from stumpy .aampdist import _aampdist_vect
46from dask .distributed import Client , LocalCluster
57import pytest
68import naive
@@ -28,6 +30,77 @@ def dask_cluster():
2830k = [0 , 1 , 2 , 3 , 4 ]
2931
3032
33+ @pytest .mark .parametrize ("T_A, T_B" , test_data )
34+ def test_aampdist_vect (T_A , T_B ):
35+ m = 3
36+ n_A = T_A .shape [0 ]
37+ n_B = T_B .shape [0 ]
38+ j = n_A - m + 1 # `k` is reserved for `P_ABBA` selection
39+ P_ABBA = np .empty (2 * j , dtype = np .float64 )
40+ ref_mpdist_vect = np .empty (n_B - n_A + 1 )
41+
42+ percentage = 0.05
43+ k = min (math .ceil (percentage * (2 * n_A )), 2 * j - 1 )
44+ k = min (int (k ), P_ABBA .shape [0 ] - 1 )
45+
46+ for i in range (n_B - n_A + 1 ):
47+ P_ABBA [:j ] = naive .aamp (T_A , m , T_B [i : i + n_A ])[:, 0 ]
48+ P_ABBA [j :] = naive .aamp (T_B [i : i + n_A ], m , T_A )[:, 0 ]
49+ P_ABBA .sort ()
50+ ref_mpdist_vect [i ] = P_ABBA [k ]
51+
52+ comp_mpdist_vect = _aampdist_vect (T_A , T_B , m )
53+
54+ npt .assert_almost_equal (ref_mpdist_vect , comp_mpdist_vect )
55+
56+
57+ @pytest .mark .parametrize ("T_A, T_B" , test_data )
58+ @pytest .mark .parametrize ("percentage" , percentage )
59+ def test_aampdist_vect_percentage (T_A , T_B , percentage ):
60+ m = 3
61+ n_A = T_A .shape [0 ]
62+ n_B = T_B .shape [0 ]
63+ j = n_A - m + 1 # `k` is reserved for `P_ABBA` selection
64+ P_ABBA = np .empty (2 * j , dtype = np .float64 )
65+ ref_mpdist_vect = np .empty (n_B - n_A + 1 )
66+
67+ k = min (math .ceil (percentage * (2 * n_A )), 2 * j - 1 )
68+ k = min (int (k ), P_ABBA .shape [0 ] - 1 )
69+
70+ for i in range (n_B - n_A + 1 ):
71+ P_ABBA [:j ] = naive .aamp (T_A , m , T_B [i : i + n_A ])[:, 0 ]
72+ P_ABBA [j :] = naive .aamp (T_B [i : i + n_A ], m , T_A )[:, 0 ]
73+ P_ABBA .sort ()
74+ ref_mpdist_vect [i ] = P_ABBA [min (k , P_ABBA .shape [0 ] - 1 )]
75+
76+ comp_mpdist_vect = _aampdist_vect (T_A , T_B , m , percentage = percentage )
77+
78+ npt .assert_almost_equal (ref_mpdist_vect , comp_mpdist_vect )
79+
80+
81+ @pytest .mark .parametrize ("T_A, T_B" , test_data )
82+ @pytest .mark .parametrize ("k" , k )
83+ def test_aampdist_vect_k (T_A , T_B , k ):
84+ m = 3
85+ n_A = T_A .shape [0 ]
86+ n_B = T_B .shape [0 ]
87+ j = n_A - m + 1 # `k` is reserved for `P_ABBA` selection
88+ P_ABBA = np .empty (2 * j , dtype = np .float64 )
89+ ref_mpdist_vect = np .empty (n_B - n_A + 1 )
90+
91+ k = min (int (k ), P_ABBA .shape [0 ] - 1 )
92+
93+ for i in range (n_B - n_A + 1 ):
94+ P_ABBA [:j ] = naive .aamp (T_A , m , T_B [i : i + n_A ])[:, 0 ]
95+ P_ABBA [j :] = naive .aamp (T_B [i : i + n_A ], m , T_A )[:, 0 ]
96+ P_ABBA .sort ()
97+ ref_mpdist_vect [i ] = P_ABBA [min (k , P_ABBA .shape [0 ] - 1 )]
98+
99+ comp_mpdist_vect = _aampdist_vect (T_A , T_B , m , k = k )
100+
101+ npt .assert_almost_equal (ref_mpdist_vect , comp_mpdist_vect )
102+
103+
31104@pytest .mark .parametrize ("T_A, T_B" , test_data )
32105def test_aampdist (T_A , T_B ):
33106 m = 3
@@ -39,7 +112,7 @@ def test_aampdist(T_A, T_B):
39112
40113@pytest .mark .parametrize ("T_A, T_B" , test_data )
41114@pytest .mark .parametrize ("percentage" , percentage )
42- def test_mpdist_percentage (T_A , T_B , percentage ):
115+ def test_aampdist_percentage (T_A , T_B , percentage ):
43116 m = 3
44117 ref_mpdist = naive .aampdist (T_A , T_B , m , percentage = percentage )
45118 comp_mpdist = aampdist (T_A , T_B , m , percentage = percentage )
@@ -49,7 +122,7 @@ def test_mpdist_percentage(T_A, T_B, percentage):
49122
50123@pytest .mark .parametrize ("T_A, T_B" , test_data )
51124@pytest .mark .parametrize ("k" , k )
52- def test_mpdist_k (T_A , T_B , k ):
125+ def test_aampdist_k (T_A , T_B , k ):
53126 m = 3
54127 ref_mpdist = naive .aampdist (T_A , T_B , m , k = k )
55128 comp_mpdist = aampdist (T_A , T_B , m , k = k )
@@ -62,7 +135,7 @@ def test_mpdist_k(T_A, T_B, k):
62135@pytest .mark .filterwarnings ("ignore:numpy.ndarray size changed" )
63136@pytest .mark .filterwarnings ("ignore:\\ s+Port 8787 is already in use:UserWarning" )
64137@pytest .mark .parametrize ("T_A, T_B" , test_data )
65- def test_mpdisted (T_A , T_B , dask_cluster ):
138+ def test_aampdisted (T_A , T_B , dask_cluster ):
66139 with Client (dask_cluster ) as dask_client :
67140 m = 3
68141 ref_mpdist = naive .aampdist (T_A , T_B , m )
0 commit comments