]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
refactor(qav3): add inputs guard to optuna MO encapsulation
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Tue, 27 May 2025 12:06:52 +0000 (14:06 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Tue, 27 May 2025 12:06:52 +0000 (14:06 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py

index 5bf530ab171366479a089fb095c23a3d56e7de00..7e0d167e7d5a9052bb503b875160b2fb010253f8 100644 (file)
@@ -399,15 +399,13 @@ class QuickAdapterRegressorV3(BaseRegressionModel):
     ) -> Optional[optuna.trial.FrozenTrial]:
         if namespace != "label":
             raise ValueError(f"Invalid namespace: {namespace}")
-
-        if not QuickAdapterRegressorV3.optuna_study_has_best_trials(study):
-            return None
-
         n_objectives = len(study.directions)
         if n_objectives < 2:
             raise ValueError(
                 f"Multi-objective study must have at least 2 objectives, but got {n_objectives}"
             )
+        if not QuickAdapterRegressorV3.optuna_study_has_best_trials(study):
+            return None
 
         label_metric = self.ft_params.get("label_metric", "euclidean")
         metrics = {
@@ -598,6 +596,12 @@ class QuickAdapterRegressorV3(BaseRegressionModel):
         direction: Optional[optuna.study.StudyDirection] = None,
         directions: Optional[list[optuna.study.StudyDirection]] = None,
     ) -> None:
+        is_study_single_objective = direction is not None and directions is None
+        if not is_study_single_objective and len(directions) < 2:
+            raise ValueError(
+                "Multi-objective study must have at least 2 directions specified"
+            )
+
         study = self.optuna_create_study(
             pair=pair,
             namespace=namespace,
@@ -610,7 +614,6 @@ class QuickAdapterRegressorV3(BaseRegressionModel):
         if self._optuna_config.get("warm_start"):
             self.optuna_enqueue_previous_best_params(pair, namespace, study)
 
-        is_study_single_objective = direction is not None and directions is None
         if is_study_single_objective is True:
             objective_type = "single"
         else: