From 7329d8638b8113f04670c6c185b72bc8c247eec0 Mon Sep 17 00:00:00 2001 From: YileAllenChen1 Date: Sun, 8 Nov 2020 12:26:16 -0600 Subject: [PATCH] update matrix profile Former-commit-id: 48a3ef02e6619b56a7e5b89751c37684eb712eef [formerly 13159f8c5589d2aaf1bcfca4930d622533e6781f] [formerly 0b23e2bda92620920f61cd4b91ed2bb5b24f5bfa [formerly 05749bb5a261edab4925401c926821a62ee1ed32]] [formerly 33e05e3ff5945ac9ab1d4d7d73acbd2960b7752e [formerly 851600f2991b02a62435e72eb028d54d4d743bf5] [formerly 54a88adc36951ebfa588b0f58baecb893f1ff1c0 [formerly 340aebcbf08967e543f92ac25f74014626f0bffb]]] [formerly 070e4be2c1c167ed9951b02cf44dc517a3735f23 [formerly f95708a14c3322c2a2c195830a9076d5374aac3b] [formerly ad5c18f1084250b6d0bb3e63cfb510290708c453 [formerly 1fa9e103f6be6811675ac9457148cd4f956ae990]] [formerly 56e3b7bb843440e5b64e54353fc311fbd4c41174 [formerly 1fdcbec72de2b654f2d154518a4a955b6157f497] [formerly 67fd80f97b72e72848790afddb22f8c66334ab32 [formerly d81285967cce399f34ea94aea89bcedf5c8d9b7b]]]] [formerly 8cb16e25b0dbc646e5485120944686fc3494103e [formerly 2bf1c8def7c2fe883218c4b2e3e655498764a35e] [formerly 7b0dfbe3ca234e4b8648d10ad9b2e717d44da508 [formerly a157e85b742bf2674544345159d58e6bfc0338ad]] [formerly fbc7881e68da5084f29bcb1ce2c6e34d67bd6555 [formerly 6d71ca798d036a4172045b0f3d26dbb94e0e428e] [formerly 0e835c88527253cb3b9b2b4951e58cf24f3b1f5e [formerly d7ab4df73d42c6ad5ffbfd9d86c3de3aaf64c44d]]] [formerly 388e1633651998936f9f85795cd0ea9c70b4d0e9 [formerly 8727f79cd74bdd679712680e2395b8d79423b6f1] [formerly f1fe06ebbc34c1eaa6899695832a42b8c34d5fb9 [formerly 8390796d0e1a22fbe907a8d30eae8e5ea9c83e95]] [formerly 22c71ba89395e3bb43369898452473c48ed86a5c [formerly 1cd288e6108ff7ba957e11fd236af9318b6d2a0e] [formerly dea4be63569cf27c8d6f71f83c742ae8087511af [formerly c1084184e64ff8a793a4c7a4fa7d2d895ecf2025]]]]] [formerly a4bf41dcd887519018be6b4e93806f6d4f8679fc [formerly 9c119b31d5ec6e41cc6acf0a92ad2e5f3c8e7a11] [formerly 1ce2d949f9b349273e426294bd00939626156ce7 [formerly 0dc19863b5d4e62db47867ade9c7dabe96efa690]] [formerly ccb3a9a3f48a2d1941b50d2a65be9822861e780f [formerly 021ba1089b0c72d7b6c85bbd1f692121e4fcc578] [formerly 6f291f4f64a872f47561a79c220cebabd9732f8b [formerly 29454c501e1007f87f5c863949f3220d9cd9f6a4]]] [formerly 43d855d13f390326262ac46d14446b6243631670 [formerly 7caff10d363256d72dc3daad21bbf5e0e2cca1f1] [formerly a106a560ff93a9a91bc662a8d300baa83271f101 [formerly 5e2e05729873db6339916b6a32f5e9ef805c6e64]] [formerly 27101ce0781ecbe20fcb6135c4c6954d41f657d7 [formerly 68c0f6432725264da33edc9268e32cdc3578232f] [formerly 1a7a7f02c56bc57f5ac6e98d6ef6ae44ecd03e7d [formerly 00d827014a3448fc70d8a22019a51b294736b80c]]]] [formerly 7c6e60d7645cc7860cc34fc68847b1eafba8e656 [formerly 1119aedcf337e94c99bf3f76b58f7325ba2f6c66] [formerly 3c93c054a0f14630c0273f0f3384cd5d58fd8086 [formerly 93886e24ca1a09c947f7fa2a581040ea518951f7]] [formerly 2e87ada22760ba8f1778091ca661889ab95905ef [formerly 105045006280c9c33ec237e6c33264c423c80e98] [formerly 901c0120dc130e1343492f40f0cc855d3962115c [formerly 5a56d386202234a241c82fe508a988321f2cb53e]]] [formerly ddba674d829140fc5e21d8c663a573b4ff58ff74 [formerly ca09237b29fabc1a1338d6b13aa509201038f862] [formerly af18015e458ba0351cd4f24b55fd432eea75e90f [formerly 3156d9226ef348d69eed7698e3abcf33441e5d09]] [formerly 5c0fcc0a7907b325b1c958715436499b711df1ad [formerly a4b3cb6d8e51cbff2089cb6068441b31dca5eb93] [formerly 1a840a0a8eeabcb56036266cc2d113c7329d5fff [formerly 88bf3940edcf88435af2b2e62cb33a6029bd3ddf]]]]]] Former-commit-id: 9d524d218b71caa79ae12d7287a141e4d9241a55 [formerly 1b9abb84f2d129e86ebb6a134525e54833fa6238] [formerly 458dab5bea76a9b8418e458230b8fc7f5d03a2c1 [formerly 5c95ca1898749f4f6f0d9b08cb17981da5870393]] [formerly e34145d9fe02a86b8519a4461ff7246d01db9fdb [formerly b8153a1fc00a273f5692131e62e454f3d0b1dda9] [formerly cd1a4b90346ac1f17daec13f32f9416e6c4f2a88 [formerly d9b67164b72ba294f2bf26ae479de135fe62e3f4]]] [formerly ffd79cfec6cfbfe1c491e412a2f26aed816fec07 [formerly 97a1926e12d6d1bdba91e911c7191b60fb733f4a] [formerly 54b7795c360f00c772ffbaa8ce3aa864ed58dd4f [formerly 9c6c13005f5d731d6272edb1ba19ce9c39d7b1a6]] [formerly 960c619026c5f6540ed12acab13d5e3f12be1aa0 [formerly 28910b543becc7fc25780a64b2e431f09e56546a] [formerly c89319a0e8aac3be22f55f328a7db00a113f8138 [formerly 8c6e607f2b5ca908f0cede4f7c8e82c08a37bd1d]]]] [formerly be85e706423d9aba87447131e963db1bd623c652 [formerly fafe688986671ac09482a880283b5de292d58a30] [formerly 1cfc27a4cc2e27c607c7a3f0e6d71b2b07b0eeb1 [formerly b7b7e5aafbc18cefaa2e6b94a44d3552738f9511]] [formerly a24dc1fb54ced5b6c72c5df716f5cc67e346872f [formerly d11cd9e41f3c1b85406a3074b3dd7751f17dcf01] [formerly b6fe3d15a482fc7aca81c77c3d07a6c84f64876b [formerly fd71056602361c2feafb3bfc24d412706b471e69]]] [formerly 77ae3098df3ba0273596c7f042d848b9af59c153 [formerly d46a15b27ee6257db824412fcf8d202437eaf5c9] [formerly 6a4c0bb8a84eb7259cce3e52dd3d2876c9960b53 [formerly 915ec8070c32211aa99ac732ae677c4f7019e1d4]] [formerly 3f8aef8df3173cd2667b8d7d40fb3f28f308a697 [formerly e8080094bf5517bde38a23690764189787d9a455] [formerly 1a840a0a8eeabcb56036266cc2d113c7329d5fff]]]] Former-commit-id: cc86c728f5236ac7adf231021887a071491a5808 [formerly 28f1b98e62209f91ec598e948f825f0867774897] [formerly 88255f952e0b96cbc0652802699c25c95e493f04 [formerly e257de41c58d4c9cfdb8192477d2ccee6a804bf6]] [formerly 41f0cf18e4a507a210350918bdf0fb2ad1a45df8 [formerly abf4c65b36335dd170f80818ed245860504004b0] [formerly f63363b3045442c158d3ec451627eca3832760ad [formerly 9763cdb8654466473bffe8475802eea9fd72852c]]] [formerly 8b33e8a1381fd11e21173261f32aa94c817dca8e [formerly a39dc00ec540f7133b7cc2aa0752332fc9761e1d] [formerly 6cdb40092d4e21d314d4ce39fd3491497a13c76a [formerly d5eb09f9ea86fab794e66076e0932bfba52be259]] [formerly 3338b856a2fb40fd83a5343560013399116be74c [formerly 1fa11eba42ffc4e9d92080231dffc4ed3254ae09] [formerly be293800300a86e7c39247dfa5f8d7f3a7336290 [formerly 390808cafe8bc95bd20d98c37bfa4728b8e006ec]]]] Former-commit-id: e000d3f1fd9ab7cb1684549be98198d4ee241c2a [formerly 36dd067abf3d976efa3e97c8f90bd464aa2e00a1] [formerly 46431a8eb9c496f39f3170d76443e278ee2c8389 [formerly d05737caf1767cde1d89c8a6f69018c853a5c836]] [formerly 0621078d8557c68d11a8b56cb53859247f63222a [formerly 0eaa4d929a8cfec78c57fdf44a8a72a497e80a54] [formerly bfb9178c39738bd7086568bc121119841454efca [formerly fdea3eeb465ea1cbdb70ce6ea5f121eca8436d9d]]] Former-commit-id: 6d72f5b1ac834eb971559577414eb6e22b4f784c [formerly deaf89d33ad0fd02f2fa37481c72434a3742d815] [formerly 1efae821e576099333efc509be07e4fe167c60e8 [formerly 533fc4f1826f4b84d177145fdd24c44e95cbe607]] Former-commit-id: 6d7a45103c9a1d04b82a9f6352d6614e60764d6d [formerly 470f0e9644c97a85f94e9be12acdfb77da479717] Former-commit-id: c0b044cb5f2830e01b098e8db88ecf9025a6e99b --- tods/detection_algorithm/MatrixProfile.py | 2 +- tods/detection_algorithm/MatrixProfile2.py | 381 ------------------ .../detection_algorithm/test_MatrixProfile.py | 9 +- 3 files changed, 2 insertions(+), 390 deletions(-) delete mode 100644 tods/detection_algorithm/MatrixProfile2.py diff --git a/tods/detection_algorithm/MatrixProfile.py b/tods/detection_algorithm/MatrixProfile.py index 53c3e2f..811efc8 100644 --- a/tods/detection_algorithm/MatrixProfile.py +++ b/tods/detection_algorithm/MatrixProfile.py @@ -131,7 +131,7 @@ class MP: def predict(self, data): return self.produce(data) -class MatrixProfile(UnsupervisedOutlierDetectorBase[Inputs, Outputs, Params, Hyperparams]): +class MatrixProfilePrimitive(UnsupervisedOutlierDetectorBase[Inputs, Outputs, Params, Hyperparams]): """ A primitive that performs matrix profile on a DataFrame using Stumpy package diff --git a/tods/detection_algorithm/MatrixProfile2.py b/tods/detection_algorithm/MatrixProfile2.py deleted file mode 100644 index 7d2d244..0000000 --- a/tods/detection_algorithm/MatrixProfile2.py +++ /dev/null @@ -1,381 +0,0 @@ -import os -import sklearn -import numpy -import typing -import time -from scipy import sparse -from numpy import ndarray -from collections import OrderedDict -from typing import Any, Callable, List, Dict, Union, Optional, Sequence, Tuple - -import numpy as np -import pandas as pd -import logging, uuid -from scipy import sparse -from numpy import ndarray -from collections import OrderedDict -from common_primitives import dataframe_utils, utils - -from d3m import utils -from d3m import container -from d3m.base import utils as base_utils -from d3m.exceptions import PrimitiveNotFittedError -from d3m.container import DataFrame as d3m_dataframe -from d3m.container.numpy import ndarray as d3m_ndarray -from d3m.primitive_interfaces import base, transformer -from d3m.metadata import base as metadata_base, hyperparams -from d3m.metadata import hyperparams, params, base as metadata_base -from d3m.primitive_interfaces.base import CallResult, DockerContainer - -import stumpy - -__all__ = ('MatrixProfile',) - -Inputs = container.DataFrame -Outputs = container.DataFrame - -class PrimitiveCount: - primitive_no = 0 - - -class Hyperparams(hyperparams.Hyperparams): - window_size = hyperparams.UniformInt( - lower = 0, - upper = 100, #TODO: Define the correct the upper bound - default=50, - semantic_types=['https://metadata.datadrivendiscovery.org/types/ControlParameter'], - description="window size to calculate" - ) - - # Keep previous - dataframe_resource = hyperparams.Hyperparameter[typing.Union[str, None]]( - default=None, - semantic_types=['https://metadata.datadrivendiscovery.org/types/ControlParameter'], - description="Resource ID of a DataFrame to extract if there are multiple tabular resources inside a Dataset and none is a dataset entry point.", - ) - use_columns = hyperparams.Set( - elements=hyperparams.Hyperparameter[int](-1), - default=(2,), - semantic_types=['https://metadata.datadrivendiscovery.org/types/ControlParameter'], - description="A set of column indices to force primitive to operate on. If any specified column cannot be parsed, it is skipped.", - ) - exclude_columns = hyperparams.Set( - elements=hyperparams.Hyperparameter[int](-1), - default=(0,1,3,), - semantic_types=['https://metadata.datadrivendiscovery.org/types/ControlParameter'], - description="A set of column indices to not operate on. Applicable only if \"use_columns\" is not provided.", - ) - return_result = hyperparams.Enumeration( - values=['append', 'replace', 'new'], - default='new', - semantic_types=['https://metadata.datadrivendiscovery.org/types/ControlParameter'], - description="Should parsed columns be appended, should they replace original columns, or should only parsed columns be returned? This hyperparam is ignored if use_semantic_types is set to false.", - ) - use_semantic_types = hyperparams.UniformBool( - default=False, - semantic_types=['https://metadata.datadrivendiscovery.org/types/ControlParameter'], - description="Controls whether semantic_types metadata will be used for filtering columns in input dataframe. Setting this to false makes the code ignore return_result and will produce only the output dataframe" - ) - add_index_columns = hyperparams.UniformBool( - default=False, - semantic_types=['https://metadata.datadrivendiscovery.org/types/ControlParameter'], - description="Also include primary index columns if input data has them. Applicable only if \"return_result\" is set to \"new\".", - ) - error_on_no_input = hyperparams.UniformBool( - default=True, - semantic_types=['https://metadata.datadrivendiscovery.org/types/ControlParameter'], - description="Throw an exception if no input column is selected/provided. Defaults to true to behave like sklearn. To prevent pipelines from breaking set this to False.", - ) - return_semantic_type = hyperparams.Enumeration[str]( - values=['https://metadata.datadrivendiscovery.org/types/Attribute', - 'https://metadata.datadrivendiscovery.org/types/ConstructedAttribute'], - default='https://metadata.datadrivendiscovery.org/types/Attribute', - description='Decides what semantic type to attach to generated attributes', - semantic_types=['https://metadata.datadrivendiscovery.org/types/ControlParameter'] - ) - - -class MP: - """ - This is the class for matrix profile function - """ - def __init__(self, window_size): - self._window_size = window_size - return - - def produce(self, data): - - """ - - Args: - data: dataframe column - Returns: - nparray - - """ - transformed_columns=utils.pandas.DataFrame() - for col in data.columns: - output = stumpy.stump(data[col], m = self._window_size) - output = pd.DataFrame(output) - transformed_columns=pd.concat([transformed_columns,output],axis=1) - return transformed_columns - -class MatrixProfile(transformer.TransformerPrimitiveBase[Inputs, Outputs, Hyperparams]): - """ - A primitive that performs matrix profile on a DataFrame using Stumpy package - Stumpy documentation: https://stumpy.readthedocs.io/en/latest/index.html - - Parameters - ---------- - T_A : ndarray - The time series or sequence for which to compute the matrix profile - m : int - Window size - T_B : ndarray - The time series or sequence that contain your query subsequences - of interest. Default is `None` which corresponds to a self-join. - ignore_trivial : bool - Set to `True` if this is a self-join. Otherwise, for AB-join, set this - to `False`. Default is `True`. - Returns - ------- - out : ndarray - The first column consists of the matrix profile, the second column - consists of the matrix profile indices, the third column consists of - the left matrix profile indices, and the fourth column consists of - the right matrix profile indices. - - """ - - - metadata = metadata_base.PrimitiveMetadata({ - '__author__': "DATA Lab @Texas A&M University", - 'name': "Matrix Profile", - #'python_path': 'd3m.primitives.tods.feature_analysis.matrix_profile', - 'python_path': 'd3m.primitives.tods.detection_algorithm.matrix_profile', - 'source': {'name': "DATALAB @Taxes A&M University", 'contact': 'mailto:khlai037@tamu.edu', - 'uris': ['https://gitlab.com/lhenry15/tods/-/blob/Yile/anomaly-primitives/anomaly_primitives/MatrixProfile.py']}, - 'algorithm_types': [metadata_base.PrimitiveAlgorithmType.MATRIX_PROFILE,], - 'primitive_family': metadata_base.PrimitiveFamily.FEATURE_CONSTRUCTION, - 'id': str(uuid.uuid3(uuid.NAMESPACE_DNS, 'MatrixProfilePrimitive')), - 'hyperparams_to_tune': ['window_size'], - 'version': '0.0.2', - }) - - - def __init__(self, *, hyperparams: Hyperparams) -> None: - super().__init__(hyperparams=hyperparams) - self._clf = MP(window_size = hyperparams['window_size']) - self.primitiveNo = PrimitiveCount.primitive_no - PrimitiveCount.primitive_no+=1 - - def produce(self, *, inputs: Inputs, timeout: float = None, iterations: int = None) -> base.CallResult[Outputs]: - - """ - - Args: - - inputs: Container DataFrame - - timeout: Default - - iterations: Default - - Returns: - - Container DataFrame containing Matrix Profile of selected columns - - """ - - # Get cols to fit. - self._fitted = False - self._training_inputs, self._training_indices = self._get_columns_to_fit(inputs, self.hyperparams) - self._input_column_names = self._training_inputs.columns - - - if len(self._training_indices) > 0: - self._fitted = True - else: # pragma: no cover - if self.hyperparams['error_on_no_input']: - raise RuntimeError("No input columns were selected") - self.logger.warn("No input columns were selected") - - if not self._fitted: # pragma: no cover - raise PrimitiveNotFittedError("Primitive not fitted.") - - sk_inputs = inputs - if self.hyperparams['use_semantic_types']: # pragma: no cover - sk_inputs = inputs.iloc[:, self._training_indices] - output_columns = [] - if len(self._training_indices) > 0: - sk_output = self._clf.produce(sk_inputs) - if sparse.issparse(sk_output): # pragma: no cover - sk_output = sk_output.toarray() - outputs = self._wrap_predictions(inputs, sk_output) - - if len(outputs.columns) == len(self._input_column_names): # pragma: no cover - outputs.columns = self._input_column_names - output_columns = [outputs] - - else: # pragma: no cover - if self.hyperparams['error_on_no_input']: - raise RuntimeError("No input columns were selected") - self.logger.warn("No input columns were selected") - - outputs = base_utils.combine_columns(return_result=self.hyperparams['return_result'], - add_index_columns=self.hyperparams['add_index_columns'], - inputs=inputs, column_indices=self._training_indices, - columns_list=output_columns) - - #print(outputs.columns) - #outputs.columns = [str(x) for x in outputs.columns] - - return CallResult(outputs) - - def _update_metadata(self, outputs): # pragma: no cover - outputs.metadata = outputs.metadata.generate(outputs) - - @classmethod - def _get_columns_to_fit(cls, inputs: Inputs, hyperparams: Hyperparams): # pragma: no cover - - """ - - Select columns to fit. - Args: - inputs: Container DataFrame - hyperparams: d3m.metadata.hyperparams.Hyperparams - - Returns: - list - - """ - - if not hyperparams['use_semantic_types']: - return inputs, list(range(len(inputs.columns))) - - inputs_metadata = inputs.metadata - - - - def can_produce_column(column_index: int) -> bool: - return cls._can_produce_column(inputs_metadata, column_index, hyperparams) - - columns_to_produce, columns_not_to_produce = base_utils.get_columns_to_use(inputs_metadata, - use_columns=hyperparams['use_columns'], - exclude_columns=hyperparams['exclude_columns'], - can_use_column=can_produce_column) - - - """ - Encountered error: when hyperparams['use_columns'] = (2,3) and hyperparams['exclude_columns'] is (1,2) - columns_to_produce is still [2] - """ - return inputs.iloc[:, columns_to_produce], columns_to_produce - - - @classmethod - def _can_produce_column(cls, inputs_metadata: metadata_base.DataMetadata, column_index: int, hyperparams: Hyperparams) -> bool: # pragma: no cover - - """ - - Output whether a column can be processed. - Args: - inputs_metadata: d3m.metadata.base.DataMetadata - column_index: int - - Returns: - bool - - """ - - column_metadata = inputs_metadata.query((metadata_base.ALL_ELEMENTS, column_index)) - - accepted_structural_types = (int, float, np.integer, np.float64) #changed numpy to np - accepted_semantic_types = set() - accepted_semantic_types.add("https://metadata.datadrivendiscovery.org/types/Attribute") - - if not issubclass(column_metadata['structural_type'], accepted_structural_types): - return False - - semantic_types = set(column_metadata.get('semantic_types', [])) - - if len(semantic_types) == 0: - cls.logger.warning("No semantic types found in column metadata") - return False - - # Making sure all accepted_semantic_types are available in semantic_types - if len(accepted_semantic_types - semantic_types) == 0: - return True - - return False - - def _wrap_predictions(self, inputs: Inputs, predictions: ndarray) -> Outputs: - - """ - - Wrap predictions into dataframe - Args: - inputs: Container Dataframe - predictions: array-like data (n_samples, n_features) - - Returns: - Dataframe - - """ - - outputs = d3m_dataframe(predictions, generate_metadata=True) - target_columns_metadata = self._add_target_columns_metadata(outputs.metadata, self.hyperparams, self.primitiveNo) - outputs.metadata = self._update_predictions_metadata(inputs.metadata, outputs, target_columns_metadata) - return outputs - - - - @classmethod - def _update_predictions_metadata(cls, inputs_metadata: metadata_base.DataMetadata, outputs: Optional[Outputs], - target_columns_metadata: List[OrderedDict]) -> metadata_base.DataMetadata: - - """ - - Updata metadata for selected columns. - Args: - inputs_metadata: metadata_base.DataMetadata - outputs: Container Dataframe - target_columns_metadata: list - - Returns: - d3m.metadata.base.DataMetadata - - """ - - outputs_metadata = metadata_base.DataMetadata().generate(value=outputs) - - for column_index, column_metadata in enumerate(target_columns_metadata): - column_metadata.pop("structural_type", None) - outputs_metadata = outputs_metadata.update_column(column_index, column_metadata) - - return outputs_metadata - - - @classmethod - def _add_target_columns_metadata(cls, outputs_metadata: metadata_base.DataMetadata, hyperparams, primitiveNo): - """ - Add target columns metadata - Args: - outputs_metadata: metadata.base.DataMetadata - hyperparams: d3m.metadata.hyperparams.Hyperparams - - Returns: - List[OrderedDict] - """ - outputs_length = outputs_metadata.query((metadata_base.ALL_ELEMENTS,))['dimension']['length'] - target_columns_metadata: List[OrderedDict] = [] - for column_index in range(outputs_length): - column_name = "{0}{1}_{2}".format(cls.metadata.query()['name'], primitiveNo, column_index) - column_metadata = OrderedDict() - semantic_types = set() - semantic_types.add(hyperparams["return_semantic_type"]) - column_metadata['semantic_types'] = list(semantic_types) - - column_metadata["name"] = str(column_name) - target_columns_metadata.append(column_metadata) - return target_columns_metadata diff --git a/tods/tests/detection_algorithm/test_MatrixProfile.py b/tods/tests/detection_algorithm/test_MatrixProfile.py index 01d1c46..9af7159 100644 --- a/tods/tests/detection_algorithm/test_MatrixProfile.py +++ b/tods/tests/detection_algorithm/test_MatrixProfile.py @@ -58,17 +58,10 @@ class MatrixProfileTest(unittest.TestCase): hyperparams_class = MatrixProfilePrimitive.metadata.get_hyperparams() hyperparams = hyperparams_class.defaults() hyperparams = hyperparams.replace({'window_size': 3}) -<<<<<<< Updated upstream:tods/tests/detection_algorithm/test_MatrixProfile.py - - primitive = MatrixProfilePrimitive(hyperparams=hyperparams) - #primitive.set_training_data(inputs=main) - #primitive.fit() -======= #print(type(main)) - primitive = MatrixProfile(hyperparams=hyperparams) + primitive = MatrixProfilePrimitive(hyperparams=hyperparams) primitive.set_training_data(inputs=main) primitive.fit() ->>>>>>> Stashed changes:tods/tests/test_MatrixProfile.py new_main = primitive.produce(inputs=main).value print(new_main)