diff --git a/stemflow/model/AdaSTEM.py b/stemflow/model/AdaSTEM.py index b8b030f..148ceb6 100644 --- a/stemflow/model/AdaSTEM.py +++ b/stemflow/model/AdaSTEM.py @@ -953,7 +953,10 @@ def assign_feature_importances_by_points( # assign input spatio-temporal points to stixels - if not njobs > 1: + if njobs > 1: + raise NotImplementedError("Multi-threading is not implemented yet") + + else: # Single processing round_res_list = [] iter_func_ = ( @@ -973,25 +976,6 @@ def assign_feature_importances_by_points( ) round_res_list.append(res_list) - else: - # multi-processing - with Pool(njobs) as p: - plain_args_iterator = zip( - repeat(self.ensemble_df), - list(self.ensemble_df.ensemble_index.unique()), - repeat(Sample_ST_df), - repeat(self.Temporal1), - repeat(self.Spatio1), - repeat(self.Spatio2), - repeat(self.feature_importances_), - ) - if verbosity > 0: - args_iterator = tqdm(plain_args_iterator, total=len(list(self.ensemble_df.ensemble_index.unique()))) - else: - args_iterator = plain_args_iterator - - round_res_list = p.starmap(assign_points_to_one_ensemble, args_iterator) - round_res_df = pd.concat(round_res_list, axis=0) ensemble_available_count = round_res_df.groupby("sample_index").count().iloc[:, 0] diff --git a/stemflow/model/static_func_AdaSTEM.py b/stemflow/model/static_func_AdaSTEM.py index 1c4b646..13b0bee 100644 --- a/stemflow/model/static_func_AdaSTEM.py +++ b/stemflow/model/static_func_AdaSTEM.py @@ -379,7 +379,8 @@ def get_model_by_name(model_dict: dict, ensemble: str, grid_index: str) -> Union model = model_dict[f"{ensemble}_{grid_index}_model"] return model except Exception as e: - warnings.warn(f"Cannot find model: {e}") + if not isinstance(e, KeyError): + warnings.warn(f"Cannot find model: {e}") return None diff --git a/tests/make_models.py b/tests/make_models.py index 88a18ed..7828de6 100644 --- a/tests/make_models.py +++ b/tests/make_models.py @@ -23,7 +23,7 @@ min_req = 1 -def make_STEMClassifier(fold_, min_req, ensemble_models_disk_saver, ensemble_models_disk_saving_dir): +def make_STEMClassifier(fold_=2, min_req=1, ensemble_models_disk_saver=False, ensemble_models_disk_saving_dir=""): model = STEMClassifier( base_model=XGBClassifier(tree_method="hist", random_state=42, verbosity=0, n_jobs=1), save_gridding_plot=True, @@ -49,7 +49,7 @@ def make_STEMClassifier(fold_, min_req, ensemble_models_disk_saver, ensemble_mod return model -def make_STEMRegressor(fold_, min_req, ensemble_models_disk_saver, ensemble_models_disk_saving_dir): +def make_STEMRegressor(fold_=2, min_req=1, ensemble_models_disk_saver=False, ensemble_models_disk_saving_dir=""): model = STEMRegressor( base_model=Hurdle( classifier=XGBClassifier(tree_method="hist", random_state=42, verbosity=0, n_jobs=1), @@ -78,8 +78,8 @@ def make_STEMRegressor(fold_, min_req, ensemble_models_disk_saver, ensemble_mode return model -def make_AdaSTEMClassifier(fold_, min_req, ensemble_models_disk_saver, ensemble_models_disk_saving_dir): - model = make_AdaSTEMClassifier( +def make_AdaSTEMClassifier(fold_=2, min_req=1, ensemble_models_disk_saver=False, ensemble_models_disk_saving_dir=""): + model = AdaSTEMClassifier( base_model=XGBClassifier(tree_method="hist", random_state=42, verbosity=0, n_jobs=1), save_gridding_plot=True, ensemble_fold=fold_, @@ -104,7 +104,7 @@ def make_AdaSTEMClassifier(fold_, min_req, ensemble_models_disk_saver, ensemble_ return model -def make_AdaSTEMRegressor(fold_, min_req, ensemble_models_disk_saver, ensemble_models_disk_saving_dir): +def make_AdaSTEMRegressor(fold_=2, min_req=1, ensemble_models_disk_saver=False, ensemble_models_disk_saving_dir=""): model = AdaSTEMRegressor( base_model=Hurdle( classifier=XGBClassifier(tree_method="hist", random_state=42, verbosity=0, n_jobs=1), @@ -133,7 +133,9 @@ def make_AdaSTEMRegressor(fold_, min_req, ensemble_models_disk_saver, ensemble_m return model -def make_SphereAdaSTEMRegressor(fold_, min_req, ensemble_models_disk_saver, ensemble_models_disk_saving_dir): +def make_SphereAdaSTEMRegressor( + fold_=2, min_req=1, ensemble_models_disk_saver=False, ensemble_models_disk_saving_dir="" +): model = SphereAdaSTEMRegressor( base_model=Hurdle( classifier=XGBClassifier(tree_method="hist", random_state=42, verbosity=0, n_jobs=1), @@ -161,7 +163,7 @@ def make_SphereAdaSTEMRegressor(fold_, min_req, ensemble_models_disk_saver, ense return model -def make_SphereAdaClassifier(fold_, min_req, ensemble_models_disk_saver, ensemble_models_disk_saving_dir): +def make_SphereAdaClassifier(fold_=2, min_req=1, ensemble_models_disk_saver=False, ensemble_models_disk_saving_dir=""): model = SphereAdaSTEMClassifier( base_model=XGBClassifier(tree_method="hist", random_state=42, verbosity=0, n_jobs=1), save_gridding_plot=True, diff --git a/tests/test_model.py b/tests/test_model.py index 394f33b..2a8c63a 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -30,7 +30,7 @@ def test_STEMClassifier(): pred = model.predict(X_test) assert len(pred) == len(X_test) - assert np.isnan(pred) / len(pred) <= 0.3 + assert np.sum(np.isnan(pred)) / len(pred) <= 0.3 pred_df = pd.DataFrame( {"y_true": y_test.flatten(), "y_pred": np.where(pred.flatten() < 0, 0, pred.flatten())} @@ -47,7 +47,7 @@ def test_STEMClassifier(): importances_by_points = model.assign_feature_importances_by_points(verbosity=0, njobs=1) assert importances_by_points.shape[0] > 0 - assert importances_by_points.shape[1] == len(x_names) + 1 + assert importances_by_points.shape[1] == len(x_names) + 3 def test_STEMRegressor(): @@ -60,7 +60,7 @@ def test_STEMRegressor(): pred = model.predict(X_test) assert len(pred) == len(X_test) - assert np.isnan(pred) / len(pred) <= 0.3 + assert np.sum(np.isnan(pred)) / len(pred) <= 0.3 pred_df = pd.DataFrame( {"y_true": y_test.flatten(), "y_pred": np.where(pred.flatten() < 0, 0, pred.flatten())} @@ -77,7 +77,7 @@ def test_STEMRegressor(): importances_by_points = model.assign_feature_importances_by_points(verbosity=0, njobs=1) assert importances_by_points.shape[0] > 0 - assert importances_by_points.shape[1] == len(x_names) + 1 + assert importances_by_points.shape[1] == len(x_names) + 3 def test_AdaSTEMClassifier(): @@ -90,7 +90,7 @@ def test_AdaSTEMClassifier(): pred = model.predict(X_test) assert len(pred) == len(X_test) - assert np.isnan(pred) / len(pred) <= 0.3 + assert np.sum(np.isnan(pred)) / len(pred) <= 0.3 pred_df = pd.DataFrame( {"y_true": y_test.flatten(), "y_pred": np.where(pred.flatten() < 0, 0, pred.flatten())} @@ -107,7 +107,7 @@ def test_AdaSTEMClassifier(): importances_by_points = model.assign_feature_importances_by_points(verbosity=0, njobs=1) assert importances_by_points.shape[0] > 0 - assert importances_by_points.shape[1] == len(x_names) + 1 + assert importances_by_points.shape[1] == len(x_names) + 3 def test_AdaSTEMRegressor(): @@ -137,7 +137,7 @@ def test_AdaSTEMRegressor(): importances_by_points = model.assign_feature_importances_by_points(verbosity=0, njobs=1) assert importances_by_points.shape[0] > 0 - assert importances_by_points.shape[1] == len(x_names) + 1 + assert importances_by_points.shape[1] == len(x_names) + 3 def test_SphereAdaClassifier(): @@ -150,7 +150,7 @@ def test_SphereAdaClassifier(): pred = model.predict(X_test) assert len(pred) == len(X_test) - assert np.isnan(pred) / len(pred) <= 0.3 + assert np.sum(np.isnan(pred)) / len(pred) <= 0.3 pred_df = pd.DataFrame( {"y_true": y_test.flatten(), "y_pred": np.where(pred.flatten() < 0, 0, pred.flatten())} @@ -167,7 +167,7 @@ def test_SphereAdaClassifier(): importances_by_points = model.assign_feature_importances_by_points(verbosity=0, njobs=1) assert importances_by_points.shape[0] > 0 - assert importances_by_points.shape[1] == len(x_names) + 1 + assert importances_by_points.shape[1] == len(x_names) + 3 def test_SphereAdaSTEMRegressor(): @@ -180,7 +180,7 @@ def test_SphereAdaSTEMRegressor(): pred = model.predict(X_test) assert len(pred) == len(X_test) - assert np.isnan(pred) / len(pred) <= 0.3 + assert np.sum(np.isnan(pred)) / len(pred) <= 0.3 pred_df = pd.DataFrame( {"y_true": y_test.flatten(), "y_pred": np.where(pred.flatten() < 0, 0, pred.flatten())} @@ -197,4 +197,4 @@ def test_SphereAdaSTEMRegressor(): importances_by_points = model.assign_feature_importances_by_points(verbosity=0, njobs=1) assert importances_by_points.shape[0] > 0 - assert importances_by_points.shape[1] == len(x_names) + 1 + assert importances_by_points.shape[1] == len(x_names) + 3