MCPcopy
hub / github.com/stumpy-dev/stumpy / mass_PI

Function mass_PI

tests/naive.py:131–194  ·  view source on GitHub ↗
(
    Q,
    T,
    m,
    trivial_idx=None,
    excl_zone=0,
    ignore_trivial=False,
    T_subseq_isconstant=None,
    Q_subseq_isconstant=None,
)

Source from the content-addressed store, hash-verified

129
130
131def mass_PI(
132 Q,
133 T,
134 m,
135 trivial_idx=None,
136 excl_zone=0,
137 ignore_trivial=False,
138 T_subseq_isconstant=None,
139 Q_subseq_isconstant=None,
140):
141 Q = np.asarray(Q)
142 T = np.asarray(T)
143
144 Q_subseq_isconstant = rolling_isconstant(Q, m, Q_subseq_isconstant)[0]
145 T_subseq_isconstant = rolling_isconstant(T, m, T_subseq_isconstant)
146
147 D = distance_profile(Q, T, m)
148 D[np.isnan(D)] = np.inf
149 for i in range(len(T) - m + 1):
150 if np.isfinite(D[i]):
151 if Q_subseq_isconstant and T_subseq_isconstant[i]:
152 D[i] = 0
153 elif Q_subseq_isconstant or T_subseq_isconstant[i]:
154 D[i] = np.sqrt(m)
155 else: # pragma: no cover
156 pass
157
158 if ignore_trivial:
159 apply_exclusion_zone(D, trivial_idx, excl_zone, np.inf)
160 start = max(0, trivial_idx - excl_zone)
161 stop = min(D.shape[0], trivial_idx + excl_zone + 1)
162
163 I = np.argmin(D)
164 P = D[I]
165
166 if P == np.inf:
167 I = -1
168
169 # Get left and right matrix profiles for self-joins
170 if ignore_trivial and trivial_idx > 0:
171 PL = np.inf
172 IL = -1
173 for i in range(trivial_idx):
174 if D[i] < PL: # pragma: no cover
175 IL = i
176 PL = D[i]
177 if start <= IL < stop: # pragma: no cover
178 IL = -1
179 else: # pragma: no cover
180 IL = -1
181
182 if ignore_trivial and trivial_idx + 1 < D.shape[0]:
183 PR = np.inf
184 IR = -1
185 for i in range(trivial_idx + 1, D.shape[0]):
186 if D[i] < PR:
187 IR = i
188 PR = D[i]

Callers 1

stampFunction · 0.85

Calls 3

distance_profileFunction · 0.85
rolling_isconstantFunction · 0.70
apply_exclusion_zoneFunction · 0.70

Tested by

no test coverage detected