Skip to content

Commit 33ae26a

Browse files
Jelena Markovic-Voronovfacebook-github-bot
Jelena Markovic-Voronov
authored andcommitted
pass constraints feasibility when the experiments or opt configs are not specified (#3244)
Summary: Pull Request resolved: #3244 Changing status from fail to pass in the constraints feasibility health check when experiment.optimization_config isn't specified. Reviewed By: danielcohenlive Differential Revision: D68279145 fbshipit-source-id: 0865dcbea6e48d248f10e2b57fc37dc340705848
1 parent 5be6f17 commit 33ae26a

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

ax/analysis/healthcheck/constraints_feasibility.py

+8-3
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,14 @@ def compute(
7777
)
7878

7979
if experiment.optimization_config is None:
80-
raise UserInputError(
81-
"ConstraintsFeasibilityAnalysis requires an Experiment with an "
82-
"optimization config."
80+
subtitle = "No optimization config is specified."
81+
return HealthcheckAnalysisCard(
82+
name="ConstraintsFeasibility",
83+
title=f"Ax Constraints Feasibility {title_status}",
84+
blob=json.dumps({"status": status}),
85+
subtitle=subtitle,
86+
df=df,
87+
level=level,
8388
)
8489

8590
if (

ax/analysis/healthcheck/tests/test_constraints_feasibility.py

+19-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
# pyre-strict
77

8+
import json
9+
810
import numpy as np
911
import pandas as pd
1012

@@ -13,6 +15,7 @@
1315
constraints_feasibility,
1416
ConstraintsFeasibilityAnalysis,
1517
)
18+
from ax.analysis.healthcheck.healthcheck_analysis import HealthcheckStatus
1619
from ax.core.batch_trial import BatchTrial
1720
from ax.core.data import Data
1821
from ax.core.experiment import Experiment
@@ -26,7 +29,10 @@
2629
from ax.modelbridge.model_spec import ModelSpec
2730
from ax.modelbridge.registry import Models
2831
from ax.utils.common.testutils import TestCase
29-
from ax.utils.testing.core_stubs import get_branin_experiment_with_multi_objective
32+
from ax.utils.testing.core_stubs import (
33+
get_branin_experiment,
34+
get_branin_experiment_with_multi_objective,
35+
)
3036
from ax.utils.testing.mock import mock_botorch_optimize
3137
from pyre_extensions import assert_is_instance, none_throws
3238

@@ -196,6 +202,7 @@ def test_compute(self) -> None:
196202
"We suggest relaxing the constraint bounds for the constraints."
197203
)
198204
self.assertEqual(card.subtitle, subtitle)
205+
self.assertEqual(json.loads(card.blob), {"status": HealthcheckStatus.WARNING})
199206

200207
# experiment with no constraints
201208
experiment.optimization_config = OptimizationConfig(
@@ -210,3 +217,14 @@ def test_compute(self) -> None:
210217
self.assertEqual(card.title, "Ax Constraints Feasibility Success")
211218
self.assertEqual(card.level, AnalysisCardLevel.LOW)
212219
self.assertEqual(card.subtitle, "No constraints are specified.")
220+
self.assertEqual(json.loads(card.blob), {"status": HealthcheckStatus.PASS})
221+
222+
def test_no_optimization_config(self) -> None:
223+
experiment = get_branin_experiment(has_optimization_config=False)
224+
cfa = ConstraintsFeasibilityAnalysis()
225+
card = cfa.compute(experiment=experiment, generation_strategy=None)
226+
self.assertEqual(card.name, "ConstraintsFeasibility")
227+
self.assertEqual(card.title, "Ax Constraints Feasibility Success")
228+
self.assertEqual(card.level, AnalysisCardLevel.LOW)
229+
self.assertEqual(card.subtitle, "No optimization config is specified.")
230+
self.assertEqual(json.loads(card.blob), {"status": HealthcheckStatus.PASS})

0 commit comments

Comments
 (0)