Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: kruize/hpo
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 41212e774d819e0ccea23a989527f0f11af865af
Choose a base ref
..
head repository: kruize/hpo
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: fd914967698671cea1f60099851a0bea59916b66
Choose a head ref
Showing with 185 additions and 171 deletions.
  1. +14 −14 src/hpo_service.py
  2. +2 −2 src/json_validate.py
  3. +15 −12 src/rest_service.py
  4. +51 −41 tests/scripts/hpo/constants/hpo_api_constants.sh
  5. +103 −102 tests/scripts/hpo/hpo_api_tests.sh
28 changes: 14 additions & 14 deletions src/hpo_service.py
Original file line number Diff line number Diff line change
@@ -12,15 +12,15 @@ def __init__(self):
self.experiments = {}

def newExperiment(self, id_, experiment_name, total_trials, parallel_trials, direction, hpo_algo_impl, objective_function, tunables, value_type):
if self.containsExperiment(id_):
if self.containsExperiment(experiment_name):
print("Experiment already exists")
return

self.experiments[id_] = optuna_hpo.HpoExperiment(experiment_name, total_trials, parallel_trials, direction, hpo_algo_impl, id_, objective_function, tunables, value_type)
self.experiments[experiment_name] = optuna_hpo.HpoExperiment(experiment_name, total_trials, parallel_trials, direction, hpo_algo_impl, id_, objective_function, tunables, value_type)


def startExperiment(self, id_):
experiment: optuna_hpo.HpoExperiment = self.experiments.get(id_)
def startExperiment(self, name):
experiment: optuna_hpo.HpoExperiment = self.experiments.get(name)
started: threading.Condition = experiment.start()
try:
started.acquire()
@@ -31,28 +31,28 @@ def startExperiment(self, id_):
if not value:
print("Starting experiment timed out!")

def containsExperiment(self, id_):
def containsExperiment(self, name):
if self.experiments is None or not self.experiments :
return False
return id_ in self.experiments.keys()
return name in self.experiments.keys()

def doesNotContainExperiment(self, id_):
return not self.containsExperiment(id_)
def doesNotContainExperiment(self, name):
return not self.containsExperiment(name)

def getExperimentsList(self):
return self.experiments.keys()

def getExperiment(self, id_) -> optuna_hpo.HpoExperiment:
if self.doesNotContainExperiment(id_):
print("Experiment " + id_ + " does not exist")
def getExperiment(self, name) -> optuna_hpo.HpoExperiment:
if self.doesNotContainExperiment(name):
print("Experiment " + name + " does not exist")
raise ExperimentNotFoundError

return self.experiments.get(id_)
return self.experiments.get(name)


def get_trial_number(self, id_):
def get_trial_number(self, name):

experiment: optuna_hpo.HpoExperiment = self.getExperiment(id_)
experiment: optuna_hpo.HpoExperiment = self.getExperiment(name)
"""Return the trial number."""
if experiment.hpo_algo_impl in ("optuna_tpe", "optuna_tpe_multivariate", "optuna_skopt"):
try:
4 changes: 2 additions & 2 deletions src/json_validate.py
Original file line number Diff line number Diff line change
@@ -4,14 +4,14 @@
subs_trial_generate_schema = {
"type": "object",
"properties": {
"experiment_id": {"type": "string"},
"experiment_name": {"type": "string"},
"operation": {
"enum": [
"EXP_TRIAL_GENERATE_SUBSEQUENT"
]
}
},
"required": ["experiment_id", "operation"],
"required": ["experiment_name", "operation"],
"additionalProperties": False
}

27 changes: 15 additions & 12 deletions src/rest_service.py
Original file line number Diff line number Diff line change
@@ -86,9 +86,9 @@ def do_GET(self):
if re.search(api_endpoint, self.path):
query = parse_qs(urlparse(self.path).query)

if ("experiment_id" in query and "trial_number" in query and hpo_service.instance.containsExperiment(query["experiment_id"][0]) and
query["trial_number"][0] == str(hpo_service.instance.get_trial_number(query["experiment_id"][0]))):
data = hpo_service.instance.get_trial_json_object(query["experiment_id"][0])
if ("experiment_name" in query and "trial_number" in query and hpo_service.instance.containsExperiment(query["experiment_name"][0]) and
query["trial_number"][0] == str(hpo_service.instance.get_trial_number(query["experiment_name"][0]))):
data = hpo_service.instance.get_trial_json_object(query["experiment_name"][0])
self._set_response(200, data)
else:
self._set_response(404, "-1")
@@ -108,29 +108,32 @@ def handle_generate_new_operation(self, json_object):
"""Process EXP_TRIAL_GENERATE_NEW operation."""
is_valid_json_object = validate_trial_generate_json(json_object)

if is_valid_json_object and hpo_service.instance.doesNotContainExperiment(json_object["search_space"]["experiment_id"]):
if is_valid_json_object and hpo_service.instance.doesNotContainExperiment(json_object["search_space"]["experiment_name"]):
search_space_json = json_object["search_space"]
if str(search_space_json["experiment_name"]).isspace() or not str(search_space_json["experiment_name"]):
self._set_response(400, "-1")
return
get_search_create_study(search_space_json, json_object["operation"])
trial_number = hpo_service.instance.get_trial_number(json_object["search_space"]["experiment_id"])
trial_number = hpo_service.instance.get_trial_number(json_object["search_space"]["experiment_name"])
self._set_response(200, str(trial_number))
else:
self._set_response(400, "-1")

def handle_generate_subsequent_operation(self, json_object):
"""Process EXP_TRIAL_GENERATE_SUBSEQUENT operation."""
is_valid_json_object = validate_trial_generate_json(json_object)
experiment_id = json_object["experiment_id"]
if is_valid_json_object and hpo_service.instance.containsExperiment(experiment_id):
trial_number = hpo_service.instance.get_trial_number(experiment_id)
experiment_name = json_object["experiment_name"]
if is_valid_json_object and hpo_service.instance.containsExperiment(experiment_name):
trial_number = hpo_service.instance.get_trial_number(experiment_name)
self._set_response(200, str(trial_number))
else:
self._set_response(400, "-1")

def handle_result_operation(self, json_object):
"""Process EXP_TRIAL_RESULT operation."""
if (hpo_service.instance.containsExperiment(json_object["experiment_id"]) and
json_object["trial_number"] == hpo_service.instance.get_trial_number(json_object["experiment_id"])):
hpo_service.instance.set_result(json_object["experiment_id"], json_object["trial_result"], json_object["result_value_type"],
if (hpo_service.instance.containsExperiment(json_object["experiment_name"]) and
json_object["trial_number"] == hpo_service.instance.get_trial_number(json_object["experiment_name"])):
hpo_service.instance.set_result(json_object["experiment_name"], json_object["trial_result"], json_object["result_value_type"],
json_object["result_value"])
self._set_response(200, "0")
else:
@@ -157,7 +160,7 @@ def get_search_create_study(search_space_json, operation):
hpo_service.instance.newExperiment(id_, experiment_name, total_trials, parallel_trials, direction, hpo_algo_impl, objective_function,
tunables, value_type)
print("Starting Experiment: " + experiment_name)
hpo_service.instance.startExperiment(id_)
hpo_service.instance.startExperiment(experiment_name)


def get_search_space(id_, url):
Loading