From 91da40e2ffc0f547fd7f5224208d656370d78832 Mon Sep 17 00:00:00 2001 From: Isak Samsten Date: Wed, 7 Dec 2022 19:39:01 +0000 Subject: [PATCH] Check that SAX and PAA are fitted (#69) --- docs/more/versions/v1.1.rst | 12 ++++++++++++ src/wildboar/transform/_sax.py | 6 +++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/docs/more/versions/v1.1.rst b/docs/more/versions/v1.1.rst index bf7b668b3f..80771a5ca5 100644 --- a/docs/more/versions/v1.1.rst +++ b/docs/more/versions/v1.1.rst @@ -16,6 +16,10 @@ Wildboar 1.1 requires Python 3.8+, numpy 1.17.3+, scipy 1.3.2+ and scikit-learn Version 1.1.1 ============= +Major changes +------------- +Correctly depend on the oldest supported Numpy release. + Changelog --------- @@ -28,6 +32,14 @@ Changelog - |Fix| Correctly return ``max_motif`` motifs from :func:`annotate.motifs`. + .. grid-item-card:: + + :mod:`wildboar.transform` + ^^^ + + - |Fix| Check that :class:`transform.SAX` and :class:`transform.PAA` is fitted + before ``transform``. + Version 1.1.0 ============= diff --git a/src/wildboar/transform/_sax.py b/src/wildboar/transform/_sax.py index e23b6c2c7e..d33efb4b4f 100644 --- a/src/wildboar/transform/_sax.py +++ b/src/wildboar/transform/_sax.py @@ -7,7 +7,7 @@ import numpy as np from scipy.stats import norm, uniform from sklearn.base import TransformerMixin -from sklearn.utils.validation import check_scalar +from sklearn.utils.validation import check_is_fitted, check_scalar from wildboar.utils.validation import check_array, check_option @@ -147,6 +147,7 @@ def fit(self, x, y=None): return self def transform(self, x): + check_is_fitted(self) x = self._validate_data(x, reset=False, dtype=float) x_paa = self.paa_.transform(x) thresholds = self.binning_.get_thresholds(x, estimate=self.estimate) @@ -156,6 +157,7 @@ def transform(self, x): return x_out def inverse_transform(self, x): + check_is_fitted(self) if self.estimate: raise ValueError("Unable to inverse_transform with estimate=True") @@ -208,10 +210,12 @@ def fit(self, x, y=None): return self def transform(self, x): + check_is_fitted(self) x = self._validate_data(x, dtype=float, reset=False) return self.interval_transform_.transform(x) def inverse_transform(self, x): + check_is_fitted(self) x = check_array(x, dtype=float) x_inverse = np.empty((x.shape[0], self.n_timesteps_in_), dtype=float)