From 26d0cbe3d45abbd4ce58610e1fa8b7cc75c94b62 Mon Sep 17 00:00:00 2001 From: hegsns Date: Tue, 20 Oct 2020 19:06:27 +0800 Subject: [PATCH] Enhance the coverage rate. Former-commit-id: 7577c066df273f520ecaae179aad6b6f4acb3b1c [formerly ef07c32f57b45ee4a98992fb639fa7b858953829] [formerly c31ec948017b03f91828de37c632539f0e487fda [formerly 8efdb37e722ef6f52cd6d67b7ad7e1cc72ec00aa]] [formerly 2f296e3a3a3e8fbda04ae92fac0e20bbae1e4564 [formerly 2ba9fd9b57f18165273d10539555b6647a4ea01f] [formerly 1107c80cd281fefca67a11aa87717c769d133628 [formerly eae32b8c3576501be882b45aa672f44436862502]]] [formerly 4bf6d4e2269ddcd7fdf295647a19a21331a1f077 [formerly 3e4c28ea84da50e83684e9f8708ee3aa54c2ab56] [formerly ef0a4a2bad5d5143bea1e363ac0946fd0cf52953 [formerly 24ce369846d4d0f8604fc88cd265a259b8aa167d]] [formerly c3ea5c1bf51e6feaef9722fed1cf9bae8b924921 [formerly f8aa2fb26cc69acad832f3b38d4829cf466be391] [formerly 443a27fe8f7816295ca1324936159821d24f4efe [formerly 41a1e074c539dca0d6fc2692a9c6dcdd451c5716]]]] [formerly 9b7a1c3c969551d031c45cf7f7fcd559ff84d9a2 [formerly 8880248ba7f3023bd83d531a3ddda1da30e377dd] [formerly 9cf43e3dbd6c06df47a1585607948df3cfe72d19 [formerly 71c0fedeb71137fc53b2f676fd1b669af43f133a]] [formerly 7825d2ed4cc9eaa72aac834ec57dfef4b4241cb5 [formerly b6ca2f6bfc8c21192982b26f2ba3a1ef59212b16] [formerly 8220333a4152ce62261232fa0f750e2df39f4b02 [formerly 783fd3f20df0d4433f294d28ed2064e989667bc3]]] [formerly 6cf5b2d04c480866a92a6c2c2ba18e274b122a25 [formerly 2194355f3ffceca3deb90240d969a2e6da48e558] [formerly 804c1e15636fc0b3e49ec5d2aa1a21c6907eef53 [formerly c62b2de017b6fc757ae1e620f4842f3a975e9a96]] [formerly 5a431c0dea175c0b69423779da85eca95a3596f6 [formerly 753022cd1102a91603d9981f070beeb1815a6fdd] [formerly ac4738da2a2d5ba03f81dc61319fb9c8c3118d38 [formerly 8cb4dbe061173a39c926644baf6c78b8c69d4a08]]]]] [formerly 2960a16fb9725ce880f7670504e3dd4548d80835 [formerly 334a8cb46bc4f9228b2c0d6d441950f15f6bea7d] [formerly 3e5c0fb9504c0f4ecd4ae1058bd7a0a6e47510bc [formerly 7ea204f5c9cd5d4f68f72743021bc6303011f316]] [formerly 743f536186fbc46a73b73a71167b89cfcb42986e [formerly 286f44d47533644a7aad9927422f10dda7b8df8d] [formerly 2d50f9affbe89d89e191a284ab5bb67cb72d1d51 [formerly b03e910abe0c7ba4479ced1eca7c14623efd2c9b]]] [formerly 6324c78b77ded911dabb2e8748e690330ae026b0 [formerly ccaf3d81e815eb2560411cec8c75f3c23cfae029] [formerly bb32a3ac697fe9fa5b36fb55e1e0fb20a242c985 [formerly aac5c7e848c383765280c2072f6c104a6e401a1e]] [formerly 2db3b84676c095a57e70c2bb0d7fb4a5e60923d6 [formerly 603d44c793c934b9dfcf8e37e75fceabe970781a] [formerly 3c427aaa3c20253aa1c49893dde60c35e2716cfb [formerly 9857a406ba7d411506304204969587be829572b8]]]] [formerly 49e35de3cf4ad630930b98b537720236c474033d [formerly 564fe012be1304857360b7ea9de19790060a93d5] [formerly f7abdd73a27b572a2da98521acbe8ab572540855 [formerly 5ed6ea6a87ca105c722a3880f8efb70b17004301]] [formerly e01595a9bb0cb136055e27249d7357715359ded3 [formerly 1dd55d4ed83944829dc14f34b348569f541a9830] [formerly cf9f90fa25d2aa02145b017c88252bff205f3abc [formerly 9e51b38d311f8abedf6c0aee9a37f1970d5c5851]]] [formerly e05a9e8671c847c0e46cfa62935f97e2f057bb81 [formerly eb9abf958b4faf7f8af97db679dc541dc1c94a70] [formerly 16cd4e864d49048e945c36582684dabe5ed04fbc [formerly fc6ce544cab164ca67899b302e16da2743b053f0]] [formerly fc06fb0384721fd5902c7bd2a236807388ee59ed [formerly b04e61f209cf6266818e0eb0493632217a393016] [formerly 1a7ab3be3738fb1c0e3f67ca90a04d345a7a0ec4 [formerly 52581e06a6c8d31f9f7d731d6b315bd579b37a86]]]]]] Former-commit-id: 04f20bc2e4a424981b8d2b519b30cd4781c478fd [formerly a91b257a829b0db71a41927507692e6799b22de3] [formerly bafffa3fc59faefe309490e1fd390ad9e132f160 [formerly 0307421bd2665bdc6dfe64bc44836323d1e68e24]] [formerly cb696607b60b7c1a72ef4b8f6837f94b614d3000 [formerly 620a6b9a9346bd8996cb4d6ecd573ebced203e54] [formerly f1dbf2c0c07b115916661b2bb87624c44ddff8db [formerly 7da35b5b1f6c8a42b1aea4ad7673f84a786317da]]] [formerly a9b446dca6a5d627965b3dc851cb12dbccc5afc2 [formerly d590ae8e009ae0df44798624a021d8155e696f4d] [formerly 38693439fa8a3918be975904784577c312087bf4 [formerly 5373b78ffbdc83c93e1dd0f2738b17006ace6bef]] [formerly 0f0840e56ea9688881f2503302a64938e19c33ef [formerly 29ab021742d12036de83f0ebe5f28aef4888244a] [formerly 4d97bc2c07d8a322062d4ec4205c4f9814072a39 [formerly 11817c16a83d4e4bfb2288b3bc21a681b9fde153]]]] [formerly f5fc2df358fd4ba92bd983da9dcff884f73c2544 [formerly e049d045fbfcd706e2d17b27fb3486ff70c98f72] [formerly 8424f1897b96cb496a328991937cbc017d854025 [formerly 9f0ca96d4d9a3f3f2ca9412474b5cf41f8dcab90]] [formerly 5b86216b0ad39fb88ac4fcf1aabe66a4a62bd9a0 [formerly 31201a0804d453c9493b2a5289f3530759921653] [formerly 6b5274965df932c01a469762bbf4cecbb9634bf4 [formerly fc5c9d6d3a36684e62305767fd0f97deaa6d2139]]] [formerly aa4f6f478487fc6877d800e755a407de5989d164 [formerly 45947e24553d64cafa848554268041466f7e2d37] [formerly 70f0fc7829defde33784167c9c6ba3117d4b8f89 [formerly c13d43d327a455b709f0edc715838acde20bf148]] [formerly cf4492ba56bdae56dbb31090dd0803dee6283e6b [formerly 8b16ec84f79617247496cc1201c37347d994eeb6] [formerly 1a7ab3be3738fb1c0e3f67ca90a04d345a7a0ec4]]]] Former-commit-id: 8f9a398c8a623f0c856bd05f862f380980b3e427 [formerly 34d53ed8f86b5a172fa638cf5ca71cdc73cbb291] [formerly 19a8abe83492ede477b4dc491d757c205bcb51c6 [formerly eb7da944806111ea7e07a8a9ff44f6b6efeccd42]] [formerly bd1021a232eac5cee07831cd2d774f4b5c4cc26b [formerly c6bd2f7aca91805a9152818dc11ff5f241dfc46a] [formerly aaaf3dfd8530554645d719e7a90d82cd29787d1c [formerly dca9da38b2ec899e38d3ff68a83c6b44d470ae73]]] [formerly 0191ffdbc51d9120e6547f9ebf61817731a22157 [formerly 41cbca57569a904f8ee40c4c800f4cca6e21bcf7] [formerly 192603e34bbdc035a29cdf1f6f1455a1efd6d44c [formerly a280b1afe2961a4e3b82dd9a2cd40f4a930f2fa2]] [formerly f9cd6e03ec0a3cf9c3477551296230c0c5c51b10 [formerly 2400325e327d26446858c0c19b7000daf7641dfa] [formerly 66082a5322a68625dada4fbcb7bb2a072799d842 [formerly 5f025ac39c08f1920b9fd71e50ef8b379d55f7e3]]]] Former-commit-id: 680a1408b524ba8e89a81c7e3f6d48f17a269851 [formerly fa0a69db2fa8eb0c19dd8afcc7bf5a81d02e26fd] [formerly e81b210c5f6dc7c7e7e40b6ca9910709faf42400 [formerly 34b612edc32578e99629c5a8dad13ba353e33dec]] [formerly 75705f94176a792dd2dd8efec3d3a95ed801a365 [formerly 75a1daea03e273542ae546b3e617bcea5d2dea75] [formerly f53cda142765d7d805b357210038b6c191d5e4f0 [formerly 9251c1142a1df9f94e45add17613fc785bab13bf]]] Former-commit-id: 953692cd22600ffd8856eca38aab4b0ef6beaf2f [formerly 07bf5237e2a5f0de9feb196d842368ed8a17e654] [formerly 9363895eeed799c754bd33710574766adcb37568 [formerly 5c0b104f99b27f4d4d7164d5df712a61bb846f87]] Former-commit-id: ebbc10dbb744a5ff66ac421419ea4e6b07ee975c [formerly 23dea63cb96bf5802dd87277ce955c3ee4d8cc6c] Former-commit-id: 589b3da70d81a0afcb02036b0ca834f329afddad --- tods/detection_algorithm/UODBasePrimitive.py | 39 ++++---- tods/detection_algorithm/core/AutoRegOD.py | 2 +- tods/detection_algorithm/core/CollectiveBase.py | 28 +++--- .../core/CollectiveCommonTest.py | 8 +- tods/detection_algorithm/core/KDiscord.py | 2 +- tods/detection_algorithm/core/MultiAutoRegOD.py | 4 +- tods/detection_algorithm/core/PCA.py | 2 +- tods/detection_algorithm/core/UODCommonTest.py | 8 +- .../core/test_CollectiveBase.py | 110 ++++++++++----------- tods/feature_analysis/WaveletTransform.py | 24 ++--- tods/timeseries_processing/SKAxiswiseScaler.py | 18 ++-- tods/timeseries_processing/SKPowerTransformer.py | 24 ++--- .../timeseries_processing/SKQuantileTransformer.py | 26 ++--- tods/timeseries_processing/SKStandardScaler.py | 24 ++--- 14 files changed, 160 insertions(+), 159 deletions(-) diff --git a/tods/detection_algorithm/UODBasePrimitive.py b/tods/detection_algorithm/UODBasePrimitive.py index e6bcde5..2fe4000 100755 --- a/tods/detection_algorithm/UODBasePrimitive.py +++ b/tods/detection_algorithm/UODBasePrimitive.py @@ -245,26 +245,26 @@ class UnsupervisedOutlierDetectorBase(UnsupervisedLearnerPrimitiveBase[Inputs, O """ # print('Fit:', self._clf) - if self._fitted: + if self._fitted: # pragma: no cover return CallResult(None) self._training_inputs, self._training_indices = self._get_columns_to_fit(self._inputs, self.hyperparams) self._input_column_names = self._training_inputs.columns - if self._training_inputs is None: + if self._training_inputs is None: # pragma: no cover return CallResult(None) if len(self._training_indices) > 0: - #print('Fit: ', self._clf) - #print('Fit: ', self._training_inputs.values.shape) - #print('Fit: ', self._clf.fit(self._training_inputs.values)) + # print('Fit: ', self._clf) + # print('Fit: ', self._training_inputs.values.shape) + # print('Fit: ', self._clf.fit(self._training_inputs.values)) self._clf.fit(X=self._training_inputs.values, **self._clf_fit_parameter) self._fitted = True self._set_subseq_inds() - else: + 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") @@ -282,7 +282,7 @@ class UnsupervisedOutlierDetectorBase(UnsupervisedLearnerPrimitiveBase[Inputs, O 1 marks Outliers, 0 marks normal. """ - if not self._fitted: + if not self._fitted: # pragma: no cover raise PrimitiveNotFittedError("Primitive not fitted.") sk_inputs = inputs if self.hyperparams['use_semantic_types']: @@ -314,15 +314,16 @@ class UnsupervisedOutlierDetectorBase(UnsupervisedLearnerPrimitiveBase[Inputs, O else: sk_output, _, _ = self._clf.predict(sk_inputs.values) + # print(sk_output) - if sparse.issparse(sk_output): + 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): outputs.columns = self._input_column_names output_columns = [outputs] - else: + 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") @@ -345,7 +346,7 @@ class UnsupervisedOutlierDetectorBase(UnsupervisedLearnerPrimitiveBase[Inputs, O 1 marks Outliers, 0 marks normal. """ - if not self._fitted: + if not self._fitted: # pragma: no cover raise PrimitiveNotFittedError("Primitive not fitted.") sk_inputs = inputs if self.hyperparams['use_semantic_types']: @@ -377,13 +378,13 @@ class UnsupervisedOutlierDetectorBase(UnsupervisedLearnerPrimitiveBase[Inputs, O else: sk_output, _, _ = self._clf.decision_function(sk_inputs.values) - if sparse.issparse(sk_output): + 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): outputs.columns = self._input_column_names output_columns = [outputs] - else: + 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") @@ -477,7 +478,7 @@ class UnsupervisedOutlierDetectorBase(UnsupervisedLearnerPrimitiveBase[Inputs, O self._fitted = True @classmethod - def _get_columns_to_fit(cls, inputs: Inputs, hyperparams: Hyperparams): + def _get_columns_to_fit(cls, inputs: Inputs, hyperparams: Hyperparams): # pragma: no cover """ Select columns to fit. Args: @@ -508,7 +509,7 @@ class UnsupervisedOutlierDetectorBase(UnsupervisedLearnerPrimitiveBase[Inputs, O @classmethod def _can_produce_column(cls, inputs_metadata: metadata_base.DataMetadata, column_index: int, - hyperparams: Hyperparams) -> bool: + hyperparams: Hyperparams) -> bool: # pragma: no cover """ Output whether a column can be processed. Args: @@ -540,7 +541,7 @@ class UnsupervisedOutlierDetectorBase(UnsupervisedLearnerPrimitiveBase[Inputs, O @classmethod - def _get_target_columns_metadata(cls, outputs_metadata: metadata_base.DataMetadata, hyperparams) -> List[OrderedDict]: + def _get_target_columns_metadata(cls, outputs_metadata: metadata_base.DataMetadata, hyperparams) -> List[OrderedDict]: # pragma: no cover """ Output metadata of selected columns. Args: @@ -572,7 +573,7 @@ class UnsupervisedOutlierDetectorBase(UnsupervisedLearnerPrimitiveBase[Inputs, O @classmethod def _update_predictions_metadata(cls, inputs_metadata: metadata_base.DataMetadata, outputs: Optional[Outputs], - target_columns_metadata: List[OrderedDict]) -> metadata_base.DataMetadata: + target_columns_metadata: List[OrderedDict]) -> metadata_base.DataMetadata: # pragma: no cover """ Updata metadata for selected columns. Args: @@ -592,7 +593,7 @@ class UnsupervisedOutlierDetectorBase(UnsupervisedLearnerPrimitiveBase[Inputs, O return outputs_metadata - def _wrap_predictions(self, inputs: Inputs, predictions: ndarray) -> Outputs: + def _wrap_predictions(self, inputs: Inputs, predictions: ndarray) -> Outputs: # pragma: no cover """ Wrap predictions into dataframe Args: @@ -612,7 +613,7 @@ class UnsupervisedOutlierDetectorBase(UnsupervisedLearnerPrimitiveBase[Inputs, O return outputs @classmethod - def _add_target_columns_metadata(cls, outputs_metadata: metadata_base.DataMetadata, hyperparams, primitiveNo): + def _add_target_columns_metadata(cls, outputs_metadata: metadata_base.DataMetadata, hyperparams, primitiveNo): # pragma: no cover """ Add target columns metadata Args: @@ -638,7 +639,7 @@ class UnsupervisedOutlierDetectorBase(UnsupervisedLearnerPrimitiveBase[Inputs, O @classmethod def _copy_inputs_metadata(cls, inputs_metadata: metadata_base.DataMetadata, input_indices: List[int], - outputs_metadata: metadata_base.DataMetadata, hyperparams): + outputs_metadata: metadata_base.DataMetadata, hyperparams): # pragma: no cover """ Updata metadata for selected columns. Args: diff --git a/tods/detection_algorithm/core/AutoRegOD.py b/tods/detection_algorithm/core/AutoRegOD.py index ea9da4b..bffd7f4 100644 --- a/tods/detection_algorithm/core/AutoRegOD.py +++ b/tods/detection_algorithm/core/AutoRegOD.py @@ -148,7 +148,7 @@ class AutoRegOD(CollectiveBaseDetector): return pred_score, X_left_inds.ravel(), X_right_inds.ravel() -if __name__ == "__main__": +if __name__ == "__main__": # pragma: no cover X_train = np.asarray( [3., 4., 8., 16, 18, 13., 22., 36., 59., 128, 62, 67, 78, 100]).reshape(-1, 1) diff --git a/tods/detection_algorithm/core/CollectiveBase.py b/tods/detection_algorithm/core/CollectiveBase.py index c511588..67207bf 100644 --- a/tods/detection_algorithm/core/CollectiveBase.py +++ b/tods/detection_algorithm/core/CollectiveBase.py @@ -22,7 +22,7 @@ from sklearn.utils.validation import check_is_fitted from sklearn.utils.multiclass import check_classification_targets -def _pprint(params, offset=0, printer=repr): +def _pprint(params, offset=0, printer=repr): # pragma: no cover # noinspection PyPep8 """Pretty print the dictionary 'params' @@ -114,7 +114,7 @@ class CollectiveBaseDetector(metaclass=ABCMeta): @abc.abstractmethod def __init__(self, contamination=0.1, window_size=1, - step_size=1): + step_size=1): # pragma: no cover if not (0. < contamination <= 0.5): raise ValueError("contamination must be in (0, 0.5], " @@ -129,7 +129,7 @@ class CollectiveBaseDetector(metaclass=ABCMeta): # noinspection PyIncorrectDocstring @abc.abstractmethod - def fit(self, X, y=None): + def fit(self, X, y=None): # pragma: no cover """Fit detector. y is ignored in unsupervised methods. Parameters @@ -148,7 +148,7 @@ class CollectiveBaseDetector(metaclass=ABCMeta): pass @abc.abstractmethod - def decision_function(self, X): + def decision_function(self, X): # pragma: no cover """Predict raw anomaly scores of X using the fitted detector. The anomaly score of an input sample is computed based on the fitted @@ -169,7 +169,7 @@ class CollectiveBaseDetector(metaclass=ABCMeta): pass @deprecated() - def fit_predict(self, X, y=None): + def fit_predict(self, X, y=None): # pragma: no cover """Fit detector first and then predict whether a particular sample is an outlier or not. y is ignored in unsupervised models. @@ -197,7 +197,7 @@ class CollectiveBaseDetector(metaclass=ABCMeta): self.fit(X, y) return self.labels_ - def predict(self, X): + def predict(self, X): # pragma: no cover """Predict if a particular sample is an outlier or not. Parameters @@ -220,7 +220,7 @@ class CollectiveBaseDetector(metaclass=ABCMeta): return (pred_score > self.threshold_).astype( 'int').ravel(), X_left_inds.ravel(), X_right_inds.ravel() - def predict_proba(self, X, method='linear'): + def predict_proba(self, X, method='linear'): # pragma: no cover """Predict the probability of a sample being outlier. Two approaches are possible: @@ -272,7 +272,7 @@ class CollectiveBaseDetector(metaclass=ABCMeta): raise ValueError(method, 'is not a valid probability conversion method') - def _predict_rank(self, X, normalized=False): + def _predict_rank(self, X, normalized=False): # pragma: no cover """Predict the outlyingness rank of a sample by a fitted model. The method is for outlier detector score combination. @@ -304,7 +304,7 @@ class CollectiveBaseDetector(metaclass=ABCMeta): ranks = ranks / ranks.max() return ranks - def _set_n_classes(self, y): + def _set_n_classes(self, y): # pragma: no cover """Set the number of classes if `y` is presented, which is not expected. It could be useful for multi-class outlier detection. @@ -326,7 +326,7 @@ class CollectiveBaseDetector(metaclass=ABCMeta): "y should not be presented in unsupervised learning.") return self - def _process_decision_scores(self): + def _process_decision_scores(self): # pragma: no cover """Internal function to calculate key attributes: - threshold_: used to decide the binary label @@ -350,7 +350,7 @@ class CollectiveBaseDetector(metaclass=ABCMeta): return self # noinspection PyMethodParameters - def _get_param_names(cls): + def _get_param_names(cls): # pragma: no cover # noinspection PyPep8 """Get parameter names for the estimator @@ -383,7 +383,7 @@ class CollectiveBaseDetector(metaclass=ABCMeta): return sorted([p.name for p in parameters]) # noinspection PyPep8 - def get_params(self, deep=True): + def get_params(self, deep=True): # pragma: no cover """Get parameters for this estimator. See http://scikit-learn.org/stable/modules/generated/sklearn.base.BaseEstimator.html @@ -424,7 +424,7 @@ class CollectiveBaseDetector(metaclass=ABCMeta): out[key] = value return out - def set_params(self, **params): + def set_params(self, **params): # pragma: no cover # noinspection PyPep8 """Set the parameters of this estimator. The method works on simple estimators as well as on nested objects @@ -464,7 +464,7 @@ class CollectiveBaseDetector(metaclass=ABCMeta): return self - def __repr__(self): + def __repr__(self): # pragma: no cover # noinspection PyPep8 """ See http://scikit-learn.org/stable/modules/generated/sklearn.base.BaseEstimator.html diff --git a/tods/detection_algorithm/core/CollectiveCommonTest.py b/tods/detection_algorithm/core/CollectiveCommonTest.py index a689eff..684c5ed 100755 --- a/tods/detection_algorithm/core/CollectiveCommonTest.py +++ b/tods/detection_algorithm/core/CollectiveCommonTest.py @@ -133,11 +133,11 @@ class CollectiveCommonTest: with assert_raises(ValueError): self.clf.predict_proba(self.X_test, method='something') - def test_fit_predict(self): + def test_fit_predict(self): # pragma: no cover pred_labels, _, _ = self.clf.fit_predict(X=self.X_train) assert_equal(pred_labels.shape, self.y_train.shape) - def test_fit_predict_score(self): + def test_fit_predict_score(self): # pragma: no cover self.clf.fit_predict_score(self.X_test, self.y_test) self.clf.fit_predict_score(self.X_test, self.y_test, scoring='roc_auc_score') @@ -147,7 +147,7 @@ class CollectiveCommonTest: self.clf.fit_predict_score(self.X_test, self.y_test, scoring='something') - def test_predict_rank(self): + def test_predict_rank(self): # pragma: no cover pred_socres, _, _ = self.clf.decision_function(self.X_test) pred_ranks = self.clf._predict_rank(self.X_test) @@ -156,7 +156,7 @@ class CollectiveCommonTest: assert_array_less(pred_ranks, self.X_train.shape[0] + 1) assert_array_less(-0.1, pred_ranks) - def test_predict_rank_normalized(self): + def test_predict_rank_normalized(self): # pragma: no cover pred_socres, _, _ = self.clf.decision_function(self.X_test) pred_ranks = self.clf._predict_rank(self.X_test, normalized=True) diff --git a/tods/detection_algorithm/core/KDiscord.py b/tods/detection_algorithm/core/KDiscord.py index 30003c6..ff74a21 100644 --- a/tods/detection_algorithm/core/KDiscord.py +++ b/tods/detection_algorithm/core/KDiscord.py @@ -231,7 +231,7 @@ class KDiscord(CollectiveBaseDetector): X_left_inds.ravel(), X_right_inds.ravel() -if __name__ == "__main__": +if __name__ == "__main__": # pragma: no cover X_train = np.asarray( [3., 4., 8., 16, 18, 13., 22., 36., 59., 128, 62, 67, 78, 100]).reshape(-1, 1) diff --git a/tods/detection_algorithm/core/MultiAutoRegOD.py b/tods/detection_algorithm/core/MultiAutoRegOD.py index b8e615f..8c9ff76 100644 --- a/tods/detection_algorithm/core/MultiAutoRegOD.py +++ b/tods/detection_algorithm/core/MultiAutoRegOD.py @@ -100,7 +100,7 @@ class MultiAutoRegOD(CollectiveBaseDetector): return models - def _score_combination(self, scores): + def _score_combination(self, scores): # pragma: no cover """Internal function for combining univarite scores. """ @@ -197,7 +197,7 @@ class MultiAutoRegOD(CollectiveBaseDetector): return decision_scores, X_left_inds, X_right_inds -if __name__ == "__main__": +if __name__ == "__main__": # pragma: no cover X_train = np.asarray( [[3., 5], [5., 9], [7., 2], [42., 20], [8., 12], [10., 12], [12., 12], [18., 16], [20., 7], [18., 10], [23., 12], [22., 15]]) diff --git a/tods/detection_algorithm/core/PCA.py b/tods/detection_algorithm/core/PCA.py index 197bda7..502beb3 100644 --- a/tods/detection_algorithm/core/PCA.py +++ b/tods/detection_algorithm/core/PCA.py @@ -230,7 +230,7 @@ class PCA(CollectiveBaseDetector): sub_matrices), X_left_inds.ravel(), X_right_inds.ravel() -if __name__ == "__main__": +if __name__ == "__main__": # pragma: no cover # X_train = np.asarray( # [3., 4., 8., 16, 18, 13., 22., 36., 59., 128, 62, 67, 78, 100]).reshape(-1, 1) diff --git a/tods/detection_algorithm/core/UODCommonTest.py b/tods/detection_algorithm/core/UODCommonTest.py index faa628b..6140c85 100755 --- a/tods/detection_algorithm/core/UODCommonTest.py +++ b/tods/detection_algorithm/core/UODCommonTest.py @@ -112,11 +112,11 @@ class UODCommonTest: with assert_raises(ValueError): self.clf.predict_proba(self.X_test, method='something') - def test_fit_predict(self): + def test_fit_predict(self): # pragma: no cover pred_labels = self.clf.fit_predict(X=self.X_train) assert_equal(pred_labels.shape, self.y_train.shape) - def test_fit_predict_score(self): + def test_fit_predict_score(self): # pragma: no cover self.clf.fit_predict_score(self.X_test, self.y_test) self.clf.fit_predict_score(self.X_test, self.y_test, scoring='roc_auc_score') @@ -126,7 +126,7 @@ class UODCommonTest: self.clf.fit_predict_score(self.X_test, self.y_test, scoring='something') - def test_predict_rank(self): + def test_predict_rank(self): # pragma: no cover pred_socres = self.clf.decision_function(self.X_test) pred_ranks = self.clf._predict_rank(self.X_test) @@ -135,7 +135,7 @@ class UODCommonTest: assert_array_less(pred_ranks, self.X_train.shape[0] + 1) assert_array_less(-0.1, pred_ranks) - def test_predict_rank_normalized(self): + def test_predict_rank_normalized(self): # pragma: no cover pred_socres = self.clf.decision_function(self.X_test) pred_ranks = self.clf._predict_rank(self.X_test, normalized=True) diff --git a/tods/detection_algorithm/core/test_CollectiveBase.py b/tods/detection_algorithm/core/test_CollectiveBase.py index 3c8323e..92e6ff9 100644 --- a/tods/detection_algorithm/core/test_CollectiveBase.py +++ b/tods/detection_algorithm/core/test_CollectiveBase.py @@ -1,132 +1,132 @@ # -*- coding: utf-8 -*- -from __future__ import division -from __future__ import print_function +from __future__ import division # pragma: no cover +from __future__ import print_function # pragma: no cover -import os -import sys +import os # pragma: no cover +import sys # pragma: no cover -import unittest -from sklearn.utils.testing import assert_equal -from sklearn.utils.testing import assert_raises +import unittest # pragma: no cover +from sklearn.utils.testing import assert_equal # pragma: no cover +from sklearn.utils.testing import assert_raises # pragma: no cover -import numpy as np +import numpy as np # pragma: no cover # temporary solution for relative imports in case pyod is not installed # if pyod is installed, no need to use the following line -sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) # pragma: no cover -from detection_algorithm.core.CollectiveBase import CollectiveBaseDetector -from pyod.utils.data import generate_data +from detection_algorithm.core.CollectiveBase import CollectiveBaseDetector # pragma: no cover +from pyod.utils.data import generate_data # pragma: no cover # Check sklearn\tests\test_base # A few test classes # noinspection PyMissingConstructor,PyPep8Naming -class MyEstimator(CollectiveBaseDetector): +class MyEstimator(CollectiveBaseDetector): # pragma: no cover - def __init__(self, l1=0, empty=None): + def __init__(self, l1=0, empty=None): # pragma: no cover self.l1 = l1 self.empty = empty - def fit(self, X, y=None): + def fit(self, X, y=None): # pragma: no cover pass - def decision_function(self, X): + def decision_function(self, X): # pragma: no cover pass # noinspection PyMissingConstructor -class K(CollectiveBaseDetector): - def __init__(self, c=None, d=None): +class K(CollectiveBaseDetector): # pragma: no cover + def __init__(self, c=None, d=None): # pragma: no cover self.c = c self.d = d - def fit(self, X, y=None): + def fit(self, X, y=None): # pragma: no cover pass - def decision_function(self, X): + def decision_function(self, X): # pragma: no cover pass # noinspection PyMissingConstructor -class T(CollectiveBaseDetector): - def __init__(self, a=None, b=None): +class T(CollectiveBaseDetector): # pragma: no cover + def __init__(self, a=None, b=None): # pragma: no cover self.a = a self.b = b - def fit(self, X, y=None): + def fit(self, X, y=None): # pragma: no cover pass - def decision_function(self, X): + def decision_function(self, X): # pragma: no cover pass # noinspection PyMissingConstructor -class ModifyInitParams(CollectiveBaseDetector): +class ModifyInitParams(CollectiveBaseDetector): # pragma: no cover """Deprecated behavior. Equal parameters but with a type cast. Doesn't fulfill a is a """ - def __init__(self, a=np.array([0])): + def __init__(self, a=np.array([0])): # pragma: no cover self.a = a.copy() - def fit(self, X, y=None): + def fit(self, X, y=None): # pragma: no cover pass - def decision_function(self, X): + def decision_function(self, X): # pragma: no cover pass # noinspection PyMissingConstructor -class VargEstimator(CollectiveBaseDetector): +class VargEstimator(CollectiveBaseDetector): # pragma: no cover """scikit-learn estimators shouldn't have vargs.""" - def __init__(self, *vargs): + def __init__(self, *vargs): # pragma: no cover pass - def fit(self, X, y=None): + def fit(self, X, y=None): # pragma: no cover pass - def decision_function(self, X): + def decision_function(self, X): # pragma: no cover pass -class Dummy1(CollectiveBaseDetector): - def __init__(self, contamination=0.1): +class Dummy1(CollectiveBaseDetector): # pragma: no cover + def __init__(self, contamination=0.1): # pragma: no cover super(Dummy1, self).__init__(contamination=contamination) - def decision_function(self, X): + def decision_function(self, X): # pragma: no cover pass - def fit(self, X, y=None): + def fit(self, X, y=None): # pragma: no cover pass -class Dummy2(CollectiveBaseDetector): - def __init__(self, contamination=0.1): +class Dummy2(CollectiveBaseDetector): # pragma: no cover + def __init__(self, contamination=0.1): # pragma: no cover super(Dummy2, self).__init__(contamination=contamination) - def decision_function(self, X): + def decision_function(self, X): # pragma: no cover pass - def fit(self, X, y=None): + def fit(self, X, y=None): # pragma: no cover return X -class Dummy3(CollectiveBaseDetector): - def __init__(self, contamination=0.1): +class Dummy3(CollectiveBaseDetector): # pragma: no cover + def __init__(self, contamination=0.1): # pragma: no cover super(Dummy3, self).__init__(contamination=contamination) - def decision_function(self, X): + def decision_function(self, X): # pragma: no cover pass - def fit(self, X, y=None): + def fit(self, X, y=None): # pragma: no cover self.labels_ = X -class TestBASE(unittest.TestCase): - def setUp(self): +class TestBASE(unittest.TestCase): # pragma: no cover + def setUp(self): # pragma: no cover self.n_train = 100 self.n_test = 50 self.contamination = 0.1 @@ -135,7 +135,7 @@ class TestBASE(unittest.TestCase): n_train=self.n_train, n_test=self.n_test, contamination=self.contamination) - def test_init(self): + def test_init(self): # pragma: no cover """ Test base class initialization @@ -156,26 +156,26 @@ class TestBASE(unittest.TestCase): with assert_raises(ValueError): Dummy1(contamination=-0.5) - def test_fit(self): + def test_fit(self): # pragma: no cover self.dummy_clf = Dummy2() assert_equal(self.dummy_clf.fit(0), 0) - def test_fit_predict(self): + def test_fit_predict(self): # pragma: no cover # TODO: add more testcases self.dummy_clf = Dummy3() assert_equal(self.dummy_clf.fit_predict(0), 0) - def test_predict_proba(self): + def test_predict_proba(self): # pragma: no cover # TODO: create uniform testcases pass - def test_rank(self): + def test_rank(self): # pragma: no cover # TODO: create uniform testcases pass - def test_repr(self): + def test_repr(self): # pragma: no cover # Smoke test the repr of the base estimator. my_estimator = MyEstimator() repr(my_estimator) @@ -188,12 +188,12 @@ class TestBASE(unittest.TestCase): some_est = T(a=["long_params"] * 1000) assert_equal(len(repr(some_est)), 415) - def test_str(self): + def test_str(self): # pragma: no cover # Smoke test the str of the base estimator my_estimator = MyEstimator() str(my_estimator) - def test_get_params(self): + def test_get_params(self): # pragma: no cover test = T(K(), K()) assert ('a__d' in test.get_params(deep=True)) @@ -203,9 +203,9 @@ class TestBASE(unittest.TestCase): assert (test.a.d == 2) assert_raises(ValueError, test.set_params, a__a=2) - def tearDown(self): + def tearDown(self): # pragma: no cover pass -if __name__ == '__main__': +if __name__ == '__main__': # pragma: no cover unittest.main() diff --git a/tods/feature_analysis/WaveletTransform.py b/tods/feature_analysis/WaveletTransform.py index 31497fd..3b82831 100644 --- a/tods/feature_analysis/WaveletTransform.py +++ b/tods/feature_analysis/WaveletTransform.py @@ -221,18 +221,18 @@ class WaveletTransformer(transformer.TransformerPrimitiveBase[Inputs, Outputs, H sk_inputs = inputs - if self.hyperparams['use_semantic_types']: + if self.hyperparams['use_semantic_types']: # pragma: no cover sk_inputs = inputs.iloc[:, self._columns_to_produce] output_columns = [] if len(self._columns_to_produce) > 0: sk_output = self._clf.produce(sk_inputs, self.hyperparams['inverse']) - if sparse.issparse(sk_output): + 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): outputs.columns = self._input_column_names output_columns = [outputs] - else: + 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") @@ -253,7 +253,7 @@ class WaveletTransformer(transformer.TransformerPrimitiveBase[Inputs, Outputs, H # return base.CallResult(dataframe) @classmethod - def _get_columns_to_fit(cls, inputs: Inputs, hyperparams: Hyperparams): + def _get_columns_to_fit(cls, inputs: Inputs, hyperparams: Hyperparams): # pragma: no cover """ Select columns to fit. Args: @@ -285,7 +285,7 @@ class WaveletTransformer(transformer.TransformerPrimitiveBase[Inputs, Outputs, H @classmethod def _can_produce_column(cls, inputs_metadata: metadata_base.DataMetadata, column_index: int, - hyperparams: Hyperparams) -> bool: + hyperparams: Hyperparams) -> bool: # pragma: no cover """ Output whether a column can be processed. Args: @@ -324,7 +324,7 @@ class WaveletTransformer(transformer.TransformerPrimitiveBase[Inputs, Outputs, H @classmethod def _get_target_columns_metadata(cls, outputs_metadata: metadata_base.DataMetadata, hyperparams) -> List[ - OrderedDict]: + OrderedDict]: # pragma: no cover """ Output metadata of selected columns. Args: @@ -355,7 +355,7 @@ class WaveletTransformer(transformer.TransformerPrimitiveBase[Inputs, Outputs, H @classmethod def _update_predictions_metadata(cls, inputs_metadata: metadata_base.DataMetadata, outputs: Optional[Outputs], - target_columns_metadata: List[OrderedDict]) -> metadata_base.DataMetadata: + target_columns_metadata: List[OrderedDict]) -> metadata_base.DataMetadata: # pragma: no cover """ Updata metadata for selected columns. Args: @@ -374,7 +374,7 @@ class WaveletTransformer(transformer.TransformerPrimitiveBase[Inputs, Outputs, H return outputs_metadata - def _wrap_predictions(self, inputs: Inputs, predictions: ndarray) -> Outputs: + def _wrap_predictions(self, inputs: Inputs, predictions: ndarray) -> Outputs: # pragma: no cover """ Wrap predictions into dataframe Args: @@ -392,7 +392,7 @@ class WaveletTransformer(transformer.TransformerPrimitiveBase[Inputs, Outputs, H @classmethod def _copy_inputs_metadata(cls, inputs_metadata: metadata_base.DataMetadata, input_indices: List[int], - outputs_metadata: metadata_base.DataMetadata, hyperparams): + outputs_metadata: metadata_base.DataMetadata, hyperparams): # pragma: no cover """ Updata metadata for selected columns. Args: @@ -486,7 +486,7 @@ class Wavelet: return coeffs_buf # coeffs_T - def transform_to_single_dataframe(self, data): + def transform_to_single_dataframe(self, data): # pragma: no cover # print(data) data_to_transform = data.squeeze(1) @@ -515,7 +515,7 @@ class Wavelet: return coeffs_T - def inverse_transform_to_dataframe(self, coeffs): + def inverse_transform_to_dataframe(self, coeffs): # pragma: no cover # print('=======inverse_transform======') # print('level: ', self._level) # print(coeffs) @@ -527,7 +527,7 @@ class Wavelet: # print(data) return data # [0:-1] - def inverse_transform_to_single_dataframe(self, coeffs): + def inverse_transform_to_single_dataframe(self, coeffs): # pragma: no cover # print('=======inverse_transform======') # print('level: ', self._level) # print(coeffs) diff --git a/tods/timeseries_processing/SKAxiswiseScaler.py b/tods/timeseries_processing/SKAxiswiseScaler.py index dc60572..4677a8d 100644 --- a/tods/timeseries_processing/SKAxiswiseScaler.py +++ b/tods/timeseries_processing/SKAxiswiseScaler.py @@ -179,18 +179,18 @@ class SKAxiswiseScaler(transformer.TransformerPrimitiveBase[Inputs, Outputs, Hyp self._input_column_names = inputs.columns # print(self._columns_to_produce) sk_inputs = inputs - if self.hyperparams['use_semantic_types']: + if self.hyperparams['use_semantic_types']: # pragma: no cover sk_inputs = inputs.iloc[:, self._columns_to_produce] output_columns = [] if len(self._columns_to_produce) > 0: sk_output = self._clf.produce(sk_inputs) - if sparse.issparse(sk_output): + 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): outputs.columns = self._input_column_names output_columns = [outputs] - else: + 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") @@ -209,7 +209,7 @@ class SKAxiswiseScaler(transformer.TransformerPrimitiveBase[Inputs, Outputs, Hyp @classmethod - def _get_columns_to_fit(cls, inputs: Inputs, hyperparams: Hyperparams): + def _get_columns_to_fit(cls, inputs: Inputs, hyperparams: Hyperparams): # pragma: no cover """ Select columns to fit. Args: @@ -239,7 +239,7 @@ class SKAxiswiseScaler(transformer.TransformerPrimitiveBase[Inputs, Outputs, Hyp @classmethod def _can_produce_column(cls, inputs_metadata: metadata_base.DataMetadata, column_index: int, - hyperparams: Hyperparams) -> bool: + hyperparams: Hyperparams) -> bool: # pragma: no cover """ Output whether a column can be processed. Args: @@ -274,7 +274,7 @@ class SKAxiswiseScaler(transformer.TransformerPrimitiveBase[Inputs, Outputs, Hyp @classmethod - def _get_target_columns_metadata(cls, outputs_metadata: metadata_base.DataMetadata, hyperparams) -> List[OrderedDict]: + def _get_target_columns_metadata(cls, outputs_metadata: metadata_base.DataMetadata, hyperparams) -> List[OrderedDict]: # pragma: no cover """ Output metadata of selected columns. Args: @@ -307,7 +307,7 @@ class SKAxiswiseScaler(transformer.TransformerPrimitiveBase[Inputs, Outputs, Hyp @classmethod def _update_predictions_metadata(cls, inputs_metadata: metadata_base.DataMetadata, outputs: Optional[Outputs], - target_columns_metadata: List[OrderedDict]) -> metadata_base.DataMetadata: + target_columns_metadata: List[OrderedDict]) -> metadata_base.DataMetadata: # pragma: no cover """ Updata metadata for selected columns. Args: @@ -328,7 +328,7 @@ class SKAxiswiseScaler(transformer.TransformerPrimitiveBase[Inputs, Outputs, Hyp return outputs_metadata - def _wrap_predictions(self, inputs: Inputs, predictions: ndarray) -> Outputs: + def _wrap_predictions(self, inputs: Inputs, predictions: ndarray) -> Outputs: # pragma: no cover """ Wrap predictions into dataframe Args: @@ -350,7 +350,7 @@ class SKAxiswiseScaler(transformer.TransformerPrimitiveBase[Inputs, Outputs, Hyp @classmethod def _copy_inputs_metadata(cls, inputs_metadata: metadata_base.DataMetadata, input_indices: List[int], - outputs_metadata: metadata_base.DataMetadata, hyperparams): + outputs_metadata: metadata_base.DataMetadata, hyperparams): # pragma: no cover """ Updata metadata for selected columns. Args: diff --git a/tods/timeseries_processing/SKPowerTransformer.py b/tods/timeseries_processing/SKPowerTransformer.py index f062f9d..3e5a9a2 100644 --- a/tods/timeseries_processing/SKPowerTransformer.py +++ b/tods/timeseries_processing/SKPowerTransformer.py @@ -196,19 +196,19 @@ class SKPowerTransformer(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Param None """ - if self._fitted: + if self._fitted: # pragma: no cover return CallResult(None) self._training_inputs, self._training_indices = self._get_columns_to_fit(self._inputs, self.hyperparams) self._input_column_names = self._training_inputs.columns - if self._training_inputs is None: + if self._training_inputs is None: # pragma: no cover return CallResult(None) if len(self._training_indices) > 0: self._clf.fit_transform(self._training_inputs) self._fitted = True - else: + 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") @@ -229,18 +229,18 @@ class SKPowerTransformer(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Param if not self._fitted: raise PrimitiveNotFittedError("Primitive not fitted.") sk_inputs = inputs - if self.hyperparams['use_semantic_types']: + 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.transform(sk_inputs) - if sparse.issparse(sk_output): + 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): outputs.columns = self._input_column_names output_columns = [outputs] - else: + 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") @@ -313,7 +313,7 @@ class SKPowerTransformer(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Param @classmethod - def _get_columns_to_fit(cls, inputs: Inputs, hyperparams: Hyperparams): + def _get_columns_to_fit(cls, inputs: Inputs, hyperparams: Hyperparams): # pragma: no cover """ Select columns to fit. Args: @@ -343,7 +343,7 @@ class SKPowerTransformer(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Param @classmethod def _can_produce_column(cls, inputs_metadata: metadata_base.DataMetadata, column_index: int, - hyperparams: Hyperparams) -> bool: + hyperparams: Hyperparams) -> bool: # pragma: no cover """ Output whether a column can be processed. Args: @@ -376,7 +376,7 @@ class SKPowerTransformer(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Param @classmethod - def _get_target_columns_metadata(cls, outputs_metadata: metadata_base.DataMetadata, hyperparams) -> List[OrderedDict]: + def _get_target_columns_metadata(cls, outputs_metadata: metadata_base.DataMetadata, hyperparams) -> List[OrderedDict]: # pragma: no cover """ Output metadata of selected columns. Args: @@ -409,7 +409,7 @@ class SKPowerTransformer(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Param @classmethod def _update_predictions_metadata(cls, inputs_metadata: metadata_base.DataMetadata, outputs: Optional[Outputs], - target_columns_metadata: List[OrderedDict]) -> metadata_base.DataMetadata: + target_columns_metadata: List[OrderedDict]) -> metadata_base.DataMetadata: # pragma: no cover """ Updata metadata for selected columns. Args: @@ -431,7 +431,7 @@ class SKPowerTransformer(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Param return outputs_metadata - def _wrap_predictions(self, inputs: Inputs, predictions: ndarray) -> Outputs: + def _wrap_predictions(self, inputs: Inputs, predictions: ndarray) -> Outputs: # pragma: no cover """ Wrap predictions into dataframe Args: @@ -451,7 +451,7 @@ class SKPowerTransformer(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Param @classmethod def _copy_inputs_metadata(cls, inputs_metadata: metadata_base.DataMetadata, input_indices: List[int], - outputs_metadata: metadata_base.DataMetadata, hyperparams): + outputs_metadata: metadata_base.DataMetadata, hyperparams): # pragma: no cover """ Updata metadata for selected columns. Args: diff --git a/tods/timeseries_processing/SKQuantileTransformer.py b/tods/timeseries_processing/SKQuantileTransformer.py index 66594a6..8d28043 100644 --- a/tods/timeseries_processing/SKQuantileTransformer.py +++ b/tods/timeseries_processing/SKQuantileTransformer.py @@ -214,19 +214,19 @@ class SKQuantileTransformer(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Pa Returns: None """ - if self._fitted: + if self._fitted: # pragma: no cover return CallResult(None) self._training_inputs, self._training_indices = self._get_columns_to_fit(self._inputs, self.hyperparams) self._input_column_names = self._training_inputs.columns - if self._training_inputs is None: + if self._training_inputs is None: # pragma: no cover return CallResult(None) if len(self._training_indices) > 0: self._clf.fit(self._training_inputs) self._fitted = True - else: + 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") @@ -241,21 +241,21 @@ class SKQuantileTransformer(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Pa Returns: Container DataFrame after Quantile Transformation. """ - if not self._fitted: + if not self._fitted: # pragma: no cover raise PrimitiveNotFittedError("Primitive not fitted.") sk_inputs = inputs - if self.hyperparams['use_semantic_types']: + 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.transform(sk_inputs) - if sparse.issparse(sk_output): + 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): outputs.columns = self._input_column_names output_columns = [outputs] - else: + 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") @@ -327,7 +327,7 @@ class SKQuantileTransformer(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Pa @classmethod - def _get_columns_to_fit(cls, inputs: Inputs, hyperparams: Hyperparams): + def _get_columns_to_fit(cls, inputs: Inputs, hyperparams: Hyperparams): # pragma: no cover """ Select columns to fit. Args: @@ -353,7 +353,7 @@ class SKQuantileTransformer(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Pa # return columns_to_produce @classmethod - def _can_produce_column(cls, inputs_metadata: metadata_base.DataMetadata, column_index: int, hyperparams: Hyperparams) -> bool: + 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: @@ -385,7 +385,7 @@ class SKQuantileTransformer(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Pa @classmethod - def _get_target_columns_metadata(cls, outputs_metadata: metadata_base.DataMetadata, hyperparams) -> List[OrderedDict]: + def _get_target_columns_metadata(cls, outputs_metadata: metadata_base.DataMetadata, hyperparams) -> List[OrderedDict]: # pragma: no cover """ Output metadata of selected columns. Args: @@ -416,7 +416,7 @@ class SKQuantileTransformer(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Pa @classmethod def _update_predictions_metadata(cls, inputs_metadata: metadata_base.DataMetadata, outputs: Optional[Outputs], - target_columns_metadata: List[OrderedDict]) -> metadata_base.DataMetadata: + target_columns_metadata: List[OrderedDict]) -> metadata_base.DataMetadata: # pragma: no cover """ Updata metadata for selected columns. Args: @@ -435,7 +435,7 @@ class SKQuantileTransformer(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Pa return outputs_metadata - def _wrap_predictions(self, inputs: Inputs, predictions: ndarray) -> Outputs: + def _wrap_predictions(self, inputs: Inputs, predictions: ndarray) -> Outputs: # pragma: no cover """ Wrap predictions into dataframe Args: @@ -453,7 +453,7 @@ class SKQuantileTransformer(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Pa @classmethod def _copy_inputs_metadata(cls, inputs_metadata: metadata_base.DataMetadata, input_indices: List[int], - outputs_metadata: metadata_base.DataMetadata, hyperparams): + outputs_metadata: metadata_base.DataMetadata, hyperparams): # pragma: no cover """ Updata metadata for selected columns. Args: diff --git a/tods/timeseries_processing/SKStandardScaler.py b/tods/timeseries_processing/SKStandardScaler.py index d6f251b..864a352 100644 --- a/tods/timeseries_processing/SKStandardScaler.py +++ b/tods/timeseries_processing/SKStandardScaler.py @@ -209,19 +209,19 @@ class SKStandardScaler(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Params, None """ - if self._fitted: + if self._fitted: # pragma: no cover return CallResult(None) self._training_inputs, self._training_indices = self._get_columns_to_fit(self._inputs, self.hyperparams) self._input_column_names = self._training_inputs.columns - if self._training_inputs is None: + if self._training_inputs is None: # pragma: no cover return CallResult(None) if len(self._training_indices) > 0: self._clf.fit_transform(self._training_inputs) self._fitted = True - else: + 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") @@ -244,18 +244,18 @@ class SKStandardScaler(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Params, if not self._fitted: raise PrimitiveNotFittedError("Primitive not fitted.") sk_inputs = inputs - if self.hyperparams['use_semantic_types']: + 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.transform(sk_inputs) - if sparse.issparse(sk_output): + 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): outputs.columns = self._input_column_names output_columns = [outputs] - else: + 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") @@ -349,7 +349,7 @@ class SKStandardScaler(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Params, @classmethod - def _get_columns_to_fit(cls, inputs: Inputs, hyperparams: Hyperparams): + def _get_columns_to_fit(cls, inputs: Inputs, hyperparams: Hyperparams): # pragma: no cover """ Select columns to fit. @@ -381,7 +381,7 @@ class SKStandardScaler(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Params, @classmethod def _can_produce_column(cls, inputs_metadata: metadata_base.DataMetadata, column_index: int, - hyperparams: Hyperparams) -> bool: + hyperparams: Hyperparams) -> bool: # pragma: no cover """ Output whether a column can be processed. Args: @@ -416,7 +416,7 @@ class SKStandardScaler(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Params, @classmethod - def _get_target_columns_metadata(cls, outputs_metadata: metadata_base.DataMetadata, hyperparams) -> List[OrderedDict]: + def _get_target_columns_metadata(cls, outputs_metadata: metadata_base.DataMetadata, hyperparams) -> List[OrderedDict]: # pragma: no cover """ Output metadata of selected columns. @@ -450,7 +450,7 @@ class SKStandardScaler(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Params, @classmethod def _update_predictions_metadata(cls, inputs_metadata: metadata_base.DataMetadata, outputs: Optional[Outputs], - target_columns_metadata: List[OrderedDict]) -> metadata_base.DataMetadata: + target_columns_metadata: List[OrderedDict]) -> metadata_base.DataMetadata: # pragma: no cover """ Updata metadata for selected columns. @@ -472,7 +472,7 @@ class SKStandardScaler(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Params, return outputs_metadata - def _wrap_predictions(self, inputs: Inputs, predictions: ndarray) -> Outputs: + def _wrap_predictions(self, inputs: Inputs, predictions: ndarray) -> Outputs: # pragma: no cover """ Wrap predictions into dataframe @@ -495,7 +495,7 @@ class SKStandardScaler(UnsupervisedLearnerPrimitiveBase[Inputs, Outputs, Params, @classmethod def _copy_inputs_metadata(cls, inputs_metadata: metadata_base.DataMetadata, input_indices: List[int], - outputs_metadata: metadata_base.DataMetadata, hyperparams): + outputs_metadata: metadata_base.DataMetadata, hyperparams): # pragma: no cover """ Updata metadata for selected columns.