From 1f4bcd75eb4736aa886742e5712635126878ec8f Mon Sep 17 00:00:00 2001 From: Arnaud Van Looveren Date: Thu, 28 Apr 2022 14:59:20 +0100 Subject: [PATCH 1/3] fix types multidim scaling --- alibi/explainers/cfproto.py | 8 ++++++-- alibi/utils/distance.py | 6 +++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/alibi/explainers/cfproto.py b/alibi/explainers/cfproto.py index 112614112..3a27def24 100644 --- a/alibi/explainers/cfproto.py +++ b/alibi/explainers/cfproto.py @@ -38,7 +38,7 @@ def __init__(self, shape: tuple, kappa: float = 0., beta: float = .1, - feature_range: tuple = (-1e10, 1e10), + feature_range: Tuple[Union[float, np.ndarray], Union[float, np.ndarray]] = (-1e10, 1e10), gamma: float = 0., ae_model: Optional[tf.keras.Model] = None, enc_model: Optional[tf.keras.Model] = None, @@ -178,7 +178,11 @@ def __init__(self, self.max_iterations = max_iterations self.c_init = c_init self.c_steps = c_steps - self.feature_range = feature_range + self.feature_range = list(feature_range) + for _ in range(2): + if isinstance(feature_range[_], float): + self.feature_range[_] = (np.ones(shape[1:]) * feature_range[_])[None, :] + self.feature_range = tuple(self.feature_range) self.update_num_grad = update_num_grad self.eps = eps self.clip = clip diff --git a/alibi/utils/distance.py b/alibi/utils/distance.py index 3ba457d33..150965e7d 100644 --- a/alibi/utils/distance.py +++ b/alibi/utils/distance.py @@ -162,7 +162,7 @@ def abdm(X: np.ndarray, def multidim_scaling(d_pair: dict, - feature_range: tuple, + feature_range: Tuple[np.ndarray, np.ndarray], n_components: int = 2, use_metric: bool = True, standardize_cat_vars: bool = True, @@ -178,8 +178,8 @@ def multidim_scaling(d_pair: dict, Dict with as keys the column index of the categorical variables and as values a pairwise distance matrix for the categories of the variable. feature_range - Tuple with `min` and `max` ranges to allow for perturbed instances. `Min` and `max` ranges can be `float` or - `numpy` arrays with dimension (`1 x nb of features`) for feature-wise ranges. + Tuple with `min` and `max` ranges to allow for perturbed instances. `Min` and `max` ranges are + `numpy` arrays with dimension (`1 x nb of features`). n_components Number of dimensions in which to immerse the dissimilarities. use_metric From 91a5bf781e6f9c6451934b2fb47edabbbd10aba7 Mon Sep 17 00:00:00 2001 From: Arnaud Van Looveren Date: Thu, 28 Apr 2022 17:18:00 +0100 Subject: [PATCH 2/3] fix types --- alibi/explainers/cfproto.py | 14 ++++++-------- alibi/utils/distance.py | 2 +- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/alibi/explainers/cfproto.py b/alibi/explainers/cfproto.py index 3a27def24..64ef7b934 100644 --- a/alibi/explainers/cfproto.py +++ b/alibi/explainers/cfproto.py @@ -178,11 +178,9 @@ def __init__(self, self.max_iterations = max_iterations self.c_init = c_init self.c_steps = c_steps - self.feature_range = list(feature_range) - for _ in range(2): - if isinstance(feature_range[_], float): - self.feature_range[_] = (np.ones(shape[1:]) * feature_range[_])[None, :] - self.feature_range = tuple(self.feature_range) + self.feature_range = tuple([(np.ones(shape[1:]) * feature_range[_])[None, :] + if isinstance(feature_range[_], float) else feature_range[_] + for _ in range(2)]) self.update_num_grad = update_num_grad self.eps = eps self.clip = clip @@ -758,13 +756,13 @@ def fit(self, # multidim scaled distances d_abs_abdm, _ = multidim_scaling(d_abdm, n_components=2, use_metric=True, - feature_range=self.feature_range, + feature_range=self.feature_range, # type: ignore standardize_cat_vars=standardize_cat_vars, smooth=smooth, center=center, update_feature_range=False) d_abs_mvdm, _ = multidim_scaling(d_mvdm, n_components=2, use_metric=True, - feature_range=self.feature_range, + feature_range=self.feature_range, # type: ignore standardize_cat_vars=standardize_cat_vars, smooth=smooth, center=center, update_feature_range=False) @@ -783,7 +781,7 @@ def fit(self, self.feature_range = new_feature_range else: # apply multidimensional scaling for the abdm or mvdm distances self.d_abs, self.feature_range = multidim_scaling(d_pair, n_components=2, use_metric=True, - feature_range=self.feature_range, + feature_range=self.feature_range, # type: ignore standardize_cat_vars=standardize_cat_vars, smooth=smooth, center=center, update_feature_range=update_feature_range) diff --git a/alibi/utils/distance.py b/alibi/utils/distance.py index 150965e7d..3bd5709f3 100644 --- a/alibi/utils/distance.py +++ b/alibi/utils/distance.py @@ -240,6 +240,6 @@ def multidim_scaling(d_pair: dict, d_abs_scaled[k] = d_scaled # scaled distance from the origin for each category if update_feature_range: - feature_range = new_feature_range + feature_range = new_feature_range # type: ignore return d_abs_scaled, feature_range From 143a5a919ea593fff2f93ab25888d08cabec4e05 Mon Sep 17 00:00:00 2001 From: Arnaud Van Looveren Date: Wed, 4 May 2022 10:23:14 +0100 Subject: [PATCH 3/3] add error type --- alibi/explainers/cfproto.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/alibi/explainers/cfproto.py b/alibi/explainers/cfproto.py index 64ef7b934..9769061bf 100644 --- a/alibi/explainers/cfproto.py +++ b/alibi/explainers/cfproto.py @@ -756,13 +756,13 @@ def fit(self, # multidim scaled distances d_abs_abdm, _ = multidim_scaling(d_abdm, n_components=2, use_metric=True, - feature_range=self.feature_range, # type: ignore + feature_range=self.feature_range, # type: ignore[arg-type] standardize_cat_vars=standardize_cat_vars, smooth=smooth, center=center, update_feature_range=False) d_abs_mvdm, _ = multidim_scaling(d_mvdm, n_components=2, use_metric=True, - feature_range=self.feature_range, # type: ignore + feature_range=self.feature_range, # type: ignore[arg-type] standardize_cat_vars=standardize_cat_vars, smooth=smooth, center=center, update_feature_range=False)