From 4a2957769e7c1b5edd624cb700344abdac7fb478 Mon Sep 17 00:00:00 2001
From: Le Roux Erwan <erwan.le-roux@irstea.fr>
Date: Sun, 19 Apr 2020 16:57:47 +0200
Subject: [PATCH] [refactor] remove use_start_value

---
 extreme_fit/model/abstract_model.py                       | 3 +--
 extreme_fit/model/margin_model/abstract_margin_model.py   | 4 ++--
 .../abstract_temporal_linear_margin_model.py              | 5 +++--
 .../linear_margin_model/temporal_linear_margin_models.py  | 4 ++--
 extreme_fit/model/margin_model/parametric_margin_model.py | 4 ++--
 extreme_fit/model/margin_model/spline_margin_model.py     | 4 ++--
 .../model/max_stable_model/abstract_max_stable_model.py   | 8 ++++----
 extreme_fit/model/utils.py                                | 4 ++--
 .../test_estimator/test_full_estimators.py                | 3 ---
 .../test_fitmaxstab/test_fitmaxstab_with_margin.py        | 4 ++--
 .../test_fitmaxstab/test_fitmaxstab_without_margin.py     | 2 +-
 11 files changed, 21 insertions(+), 24 deletions(-)

diff --git a/extreme_fit/model/abstract_model.py b/extreme_fit/model/abstract_model.py
index ff4c43c1..bfb98d73 100644
--- a/extreme_fit/model/abstract_model.py
+++ b/extreme_fit/model/abstract_model.py
@@ -1,8 +1,7 @@
 class AbstractModel(object):
 
-    def __init__(self, use_start_value=False, params_start_fit=None, params_sample=None):
+    def __init__(self, params_start_fit=None, params_sample=None):
         self.default_params = None
-        self.use_start_value = use_start_value
         self.user_params_start_fit = params_start_fit
         self.user_params_sample = params_sample
 
diff --git a/extreme_fit/model/margin_model/abstract_margin_model.py b/extreme_fit/model/margin_model/abstract_margin_model.py
index 8b6df24d..4d657ef5 100644
--- a/extreme_fit/model/margin_model/abstract_margin_model.py
+++ b/extreme_fit/model/margin_model/abstract_margin_model.py
@@ -19,10 +19,10 @@ class AbstractMarginModel(AbstractModel, ABC):
         -margin_function_start_fit for starting to fit
     """
 
-    def __init__(self, coordinates: AbstractCoordinates, use_start_value=False,
+    def __init__(self, coordinates: AbstractCoordinates,
                  params_start_fit=None, params_sample=None,
                  params_class=GevParams):
-        super().__init__(use_start_value, params_start_fit, params_sample)
+        super().__init__(params_start_fit, params_sample)
         assert isinstance(coordinates, AbstractCoordinates), type(coordinates)
         self.coordinates = coordinates
         self.margin_function_sample = None  # type: AbstractMarginFunction
diff --git a/extreme_fit/model/margin_model/linear_margin_model/abstract_temporal_linear_margin_model.py b/extreme_fit/model/margin_model/linear_margin_model/abstract_temporal_linear_margin_model.py
index f418032c..4f00dd91 100644
--- a/extreme_fit/model/margin_model/linear_margin_model/abstract_temporal_linear_margin_model.py
+++ b/extreme_fit/model/margin_model/linear_margin_model/abstract_temporal_linear_margin_model.py
@@ -19,14 +19,15 @@ from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoo
 class AbstractTemporalLinearMarginModel(LinearMarginModel):
     """Linearity only with respect to the temporal coordinates"""
 
-    def __init__(self, coordinates: AbstractCoordinates, use_start_value=False, params_start_fit=None,
+    def __init__(self, coordinates: AbstractCoordinates,
+                 params_start_fit=None,
                  params_sample=None, starting_point=None,
                  fit_method=MarginFitMethod.is_mev_gev_fit,
                  nb_iterations_for_bayesian_fit=5000,
                  params_start_fit_bayesian=None,
                  type_for_MLE="GEV",
                  params_class=GevParams):
-        super().__init__(coordinates, use_start_value, params_start_fit, params_sample, starting_point,
+        super().__init__(coordinates, params_start_fit, params_sample, starting_point,
                          params_class)
         self.type_for_mle = type_for_MLE
         self.params_start_fit_bayesian = params_start_fit_bayesian
diff --git a/extreme_fit/model/margin_model/linear_margin_model/temporal_linear_margin_models.py b/extreme_fit/model/margin_model/linear_margin_model/temporal_linear_margin_models.py
index 94c69423..20a37d34 100644
--- a/extreme_fit/model/margin_model/linear_margin_model/temporal_linear_margin_models.py
+++ b/extreme_fit/model/margin_model/linear_margin_model/temporal_linear_margin_models.py
@@ -70,10 +70,10 @@ class NonStationaryLocationAndScaleTemporalModel(AbstractTemporalLinearMarginMod
 
 class GumbelTemporalModel(StationaryTemporalModel):
 
-    def __init__(self, coordinates: AbstractCoordinates, use_start_value=False, params_start_fit=None,
+    def __init__(self, coordinates: AbstractCoordinates, params_start_fit=None,
                  params_sample=None, starting_point=None, fit_method=MarginFitMethod.is_mev_gev_fit,
                  nb_iterations_for_bayesian_fit=5000, params_start_fit_bayesian=None):
-        super().__init__(coordinates, use_start_value, params_start_fit, params_sample, starting_point, fit_method,
+        super().__init__(coordinates, params_start_fit, params_sample, starting_point, fit_method,
                          nb_iterations_for_bayesian_fit, params_start_fit_bayesian, type_for_MLE="Gumbel")
 
 
diff --git a/extreme_fit/model/margin_model/parametric_margin_model.py b/extreme_fit/model/margin_model/parametric_margin_model.py
index 2e33984c..973dcc80 100644
--- a/extreme_fit/model/margin_model/parametric_margin_model.py
+++ b/extreme_fit/model/margin_model/parametric_margin_model.py
@@ -16,7 +16,7 @@ from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoo
 
 class ParametricMarginModel(AbstractMarginModel, ABC):
 
-    def __init__(self, coordinates: AbstractCoordinates, use_start_value=False, params_start_fit=None,
+    def __init__(self, coordinates: AbstractCoordinates, params_start_fit=None,
                  params_sample=None, starting_point=None, params_class=GevParams,
                  fit_method=MarginFitMethod.spatial_extremes_mle):
         """
@@ -27,7 +27,7 @@ class ParametricMarginModel(AbstractMarginModel, ABC):
         self.margin_function_sample = None  # type: ParametricMarginFunction
         self.margin_function_start_fit = None  # type: ParametricMarginFunction
         self.drop_duplicates = True
-        super().__init__(coordinates, use_start_value, params_start_fit, params_sample, params_class)
+        super().__init__(coordinates, params_start_fit, params_sample, params_class)
 
     def fitmargin_from_maxima_gev(self, data: np.ndarray, df_coordinates_spat: pd.DataFrame,
                                   df_coordinates_temp: pd.DataFrame) -> ResultFromSpatialExtreme:
diff --git a/extreme_fit/model/margin_model/spline_margin_model.py b/extreme_fit/model/margin_model/spline_margin_model.py
index fe2252d0..ec509617 100644
--- a/extreme_fit/model/margin_model/spline_margin_model.py
+++ b/extreme_fit/model/margin_model/spline_margin_model.py
@@ -11,9 +11,9 @@ from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoo
 
 class SplineMarginModel(ParametricMarginModel):
 
-    def __init__(self, coordinates: AbstractCoordinates, use_start_value=False, params_start_fit=None,
+    def __init__(self, coordinates: AbstractCoordinates, params_start_fit=None,
                  params_sample=None):
-        super().__init__(coordinates, use_start_value, params_start_fit, params_sample)
+        super().__init__(coordinates, params_start_fit, params_sample)
 
     def load_margin_functions(self, param_name_to_dims: Dict[str, List[int]] = None,
                               param_name_to_coef: Dict[str, AbstractCoef] = None,
diff --git a/extreme_fit/model/max_stable_model/abstract_max_stable_model.py b/extreme_fit/model/max_stable_model/abstract_max_stable_model.py
index 69f5e9cb..6776d8d0 100644
--- a/extreme_fit/model/max_stable_model/abstract_max_stable_model.py
+++ b/extreme_fit/model/max_stable_model/abstract_max_stable_model.py
@@ -14,8 +14,8 @@ from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoo
 
 class AbstractMaxStableModel(AbstractModel):
 
-    def __init__(self, use_start_value=False, params_start_fit=None, params_sample=None):
-        super().__init__(use_start_value, params_start_fit, params_sample)
+    def __init__(self, params_start_fit=None, params_sample=None):
+        super().__init__(params_start_fit, params_sample)
         self.cov_mod = None
 
     @property
@@ -105,9 +105,9 @@ class CovarianceFunction(Enum):
 
 class AbstractMaxStableModelWithCovarianceFunction(AbstractMaxStableModel):
 
-    def __init__(self, use_start_value=False, params_start_fit=None, params_sample=None,
+    def __init__(self, params_start_fit=None, params_sample=None,
                  covariance_function: CovarianceFunction = None):
-        super().__init__(use_start_value, params_start_fit, params_sample)
+        super().__init__(params_start_fit, params_sample)
         assert covariance_function is not None
         self.covariance_function = covariance_function
         self.default_params = {
diff --git a/extreme_fit/model/utils.py b/extreme_fit/model/utils.py
index bec57774..03e653be 100644
--- a/extreme_fit/model/utils.py
+++ b/extreme_fit/model/utils.py
@@ -80,12 +80,12 @@ class SafeRunException(Exception):
 
 
 def safe_run_r_estimator(function, data=None, start_dict=None, max_ratio_between_two_extremes_values=10, maxit=1000000,
-                         **parameters) -> robjects.ListVector:
+                         nb_tries_for_start_value=5, **parameters) -> robjects.ListVector:
     try:
         return _safe_run_r_estimator(function, data, max_ratio_between_two_extremes_values, maxit, **parameters)
     except SafeRunException as e:
         if start_dict is not None:
-            for _ in range(5):
+            for _ in range(nb_tries_for_start_value):
                 parameters['start'] = r.list(**start_dict)
                 try:
                     return _safe_run_r_estimator(function, data, max_ratio_between_two_extremes_values, maxit, **parameters)
diff --git a/test/test_extreme_fit/test_estimator/test_full_estimators.py b/test/test_extreme_fit/test_estimator/test_full_estimators.py
index 2925c273..9322f034 100644
--- a/test/test_extreme_fit/test_estimator/test_full_estimators.py
+++ b/test/test_extreme_fit/test_estimator/test_full_estimators.py
@@ -25,9 +25,6 @@ class TestFullEstimators(unittest.TestCase):
                                                                     coordinates=coordinates,
                                                                     max_stable_model=max_stable_model)
 
-                margin_model.use_start_value = True
-                # todo: understand why it is crashing without specifying that (when not using start value was passed by default this test started crashing)
-
                 for full_estimator in load_test_full_estimators(dataset, margin_model, max_stable_model):
                     full_estimator.fit()
                     if self.DISPLAY:
diff --git a/test/test_unitary_r_packages/test_spatial_extreme/test_fitmaxstab/test_fitmaxstab_with_margin.py b/test/test_unitary_r_packages/test_spatial_extreme/test_fitmaxstab/test_fitmaxstab_with_margin.py
index 5bde5dfa..4969a598 100644
--- a/test/test_unitary_r_packages/test_spatial_extreme/test_fitmaxstab/test_fitmaxstab_with_margin.py
+++ b/test/test_unitary_r_packages/test_spatial_extreme/test_fitmaxstab/test_fitmaxstab_with_margin.py
@@ -27,7 +27,7 @@ class TestMaxStableFitWithConstantMargin(TestUnitaryAbstract):
     @property
     def python_output(self):
         dataset = TestRMaxStabWithMarginConstant.python_code()
-        max_stable_model = Schlather(covariance_function=CovarianceFunction.whitmat, use_start_value=False)
+        max_stable_model = Schlather(covariance_function=CovarianceFunction.whitmat)
         margin_model = ConstantMarginModel(dataset.coordinates)
         full_estimator = FullEstimatorInASingleStepWithSmoothMargin(dataset, margin_model,
                                                                     max_stable_model)
@@ -54,7 +54,7 @@ class TestMaxStableFitWithLinearMargin(TestUnitaryAbstract):
     @property
     def python_output(self):
         dataset = TestRMaxStabWithMarginConstant.python_code()
-        max_stable_model = Schlather(covariance_function=CovarianceFunction.whitmat, use_start_value=False)
+        max_stable_model = Schlather(covariance_function=CovarianceFunction.whitmat)
         margin_model = LinearMarginModelExample(dataset.coordinates)
         full_estimator = FullEstimatorInASingleStepWithSmoothMargin(dataset, margin_model,
                                                                     max_stable_model)
diff --git a/test/test_unitary_r_packages/test_spatial_extreme/test_fitmaxstab/test_fitmaxstab_without_margin.py b/test/test_unitary_r_packages/test_spatial_extreme/test_fitmaxstab/test_fitmaxstab_without_margin.py
index b428d7a7..e154fa04 100644
--- a/test/test_unitary_r_packages/test_spatial_extreme/test_fitmaxstab/test_fitmaxstab_without_margin.py
+++ b/test/test_unitary_r_packages/test_spatial_extreme/test_fitmaxstab/test_fitmaxstab_without_margin.py
@@ -21,7 +21,7 @@ class TestMaxStableFitWithoutMargin(TestUnitaryAbstract):
     def python_output(self):
         coordinates, max_stable_model = TestRMaxStab.python_code()
         dataset = MaxStableDataset.from_sampling(nb_obs=40, max_stable_model=max_stable_model, coordinates=coordinates)
-        max_stable_model = Schlather(covariance_function=CovarianceFunction.whitmat, use_start_value=False)
+        max_stable_model = Schlather(covariance_function=CovarianceFunction.whitmat)
         max_stable_estimator = MaxStableEstimator(dataset, max_stable_model)
         max_stable_estimator.fit()
         return max_stable_estimator.max_stable_params_fitted
-- 
GitLab