(self, t)
| 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): |
nothing calls this directly
no test coverage detected