| 875 | |
| 876 | class aampi_egress(object): |
| 877 | def __init__(self, T, m, excl_zone=None, p=2.0, k=1, mp=None): |
| 878 | self._T = np.asarray(T) |
| 879 | self._T = self._T.copy() |
| 880 | self._T_isfinite = np.isfinite(self._T) |
| 881 | self._m = m |
| 882 | self._p = p |
| 883 | self._k = k |
| 884 | |
| 885 | self._excl_zone = excl_zone |
| 886 | if self._excl_zone is None: |
| 887 | self._excl_zone = int(np.ceil(self._m / config.STUMPY_EXCL_ZONE_DENOM)) |
| 888 | |
| 889 | self._l = self._T.shape[0] - m + 1 |
| 890 | if mp is None: |
| 891 | mp = aamp(self._T, self._m, exclusion_zone=self._excl_zone, p=p, k=self._k) |
| 892 | else: |
| 893 | mp = mp.copy() |
| 894 | self._P = mp[:, :k].astype(np.float64) |
| 895 | self._I = mp[:, k : 2 * k].astype(np.int64) |
| 896 | |
| 897 | self._left_I = mp[:, 2 * k].astype(np.int64) |
| 898 | self._left_P = np.full_like(self._left_I, np.inf, dtype=np.float64) |
| 899 | for idx, nn_idx in enumerate(self._left_I): |
| 900 | if nn_idx >= 0: |
| 901 | self._left_P[idx] = np.linalg.norm( |
| 902 | self._T[idx : idx + self._m] - self._T[nn_idx : nn_idx + self._m], |
| 903 | ord=self._p, |
| 904 | ) |
| 905 | |
| 906 | self._n_appended = 0 |
| 907 | |
| 908 | def update(self, t): |
| 909 | self._T[:] = np.roll(self._T, -1) |