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

Method update

tests/naive.py:1036–1090  ·  view source on GitHub ↗
(self, t)

Source from the content-addressed store, hash-verified

1034 self._n_appended = 0
1035
1036 def update(self, t):
1037 self._T[:] = np.roll(self._T, -1)
1038 self._T_isfinite[:] = np.roll(self._T_isfinite, -1)
1039 if np.isfinite(t):
1040 self._T_isfinite[-1] = True
1041 self._T[-1] = t
1042 else:
1043 self._T_isfinite[-1] = False
1044 self._T[-1] = 0
1045
1046 self._T_subseq_isconstant[:] = np.roll(self._T_subseq_isconstant, -1)
1047 self._T_subseq_isconstant[-1] = rolling_isconstant(
1048 self._T[-self._m :], self._m, self._T_subseq_isconstant_func
1049 ) & np.all(self._T_isfinite[-self._m :])
1050
1051 self._n_appended += 1
1052
1053 self._P = np.roll(self._P, -1, axis=0)
1054 self._I = np.roll(self._I, -1, axis=0)
1055 self._left_P[:] = np.roll(self._left_P, -1)
1056 self._left_I[:] = np.roll(self._left_I, -1)
1057
1058 D = core.mass(
1059 self._T[-self._m :],
1060 self._T,
1061 T_subseq_isconstant=self._T_subseq_isconstant,
1062 Q_subseq_isconstant=self._T_subseq_isconstant[[-1]],
1063 )
1064 T_subseq_isfinite = np.all(
1065 core.rolling_window(self._T_isfinite, self._m), axis=1
1066 )
1067 D[~T_subseq_isfinite] = np.inf
1068 if np.any(~self._T_isfinite[-self._m :]):
1069 D[:] = np.inf
1070
1071 apply_exclusion_zone(D, D.shape[0] - 1, self._excl_zone, np.inf)
1072 # update top-k matrix profile using newly calculated distance profile `D`
1073 for j in range(D.shape[0]):
1074 if D[j] < self._P[j, -1]:
1075 pos = np.searchsorted(self._P[j], D[j], side="right")
1076 self._P[j] = np.insert(self._P[j], pos, D[j])[:-1]
1077 self._I[j] = np.insert(
1078 self._I[j], pos, D.shape[0] - 1 + self._n_appended
1079 )[:-1]
1080
1081 # update top-k for the last, newly-updated index
1082 I_last_topk = np.argsort(D, kind="mergesort")[: self._k]
1083 self._P[-1] = D[I_last_topk]
1084 self._I[-1] = I_last_topk + self._n_appended
1085 self._I[-1][self._P[-1] == np.inf] = -1
1086
1087 # for the last index, the left matrix profile value is self.P_[-1, 0]
1088 # and the same goes for the left matrix profile index
1089 self._left_P[-1] = self._P[-1, 0]
1090 self._left_I[-1] = self._I[-1, 0]
1091
1092 @property
1093 def P_(self):

Callers

nothing calls this directly

Calls 2

rolling_isconstantFunction · 0.70
apply_exclusion_zoneFunction · 0.70

Tested by

no test coverage detected