fix by review

This commit is contained in:
moririn2528
2023-09-12 17:43:23 +09:00
parent 63ac4996e5
commit ba82fadad9
6 changed files with 132 additions and 51 deletions
+34 -14
View File
@@ -8,6 +8,9 @@ from optuna import get_all_study_summaries
from optuna.study import StudyDirection
from optuna_dashboard._app import create_app
from optuna_dashboard._app import create_new_study
from optuna_dashboard._preferential_history import NewHistory
from optuna_dashboard._preferential_history import remove_history
from optuna_dashboard._preferential_history import report_history
from optuna_dashboard._serializer import serialize_preference_history
from optuna_dashboard.preferential import create_study
@@ -204,7 +207,7 @@ class APITestCase(TestCase):
assert len(best_trials) == 1
assert best_trials[0].number == 2
def test_undo_redo_history(self) -> None:
def test_remove_history(self) -> None:
storage = optuna.storages.InMemoryStorage()
study = create_study(storage=storage, n_generate=3)
for _ in range(3):
@@ -212,25 +215,19 @@ class APITestCase(TestCase):
app = create_app(storage)
study_id = study._study._study_id
status, _, _ = send_request(
app,
f"/api/studies/{study_id}/preference",
"POST",
body=json.dumps(
{
"mode": "ChooseWorst",
"candidates": [0, 1, 2],
"clicked": 2,
}
history_id = report_history(
study_id,
storage,
NewHistory(
mode="ChooseWorst",
candidates=[0, 1, 2],
clicked=2,
),
content_type="application/json",
)
self.assertEqual(status, 204)
histories = serialize_preference_history(storage.get_study_system_attrs(study_id))
assert len(histories) == 1
assert not histories[0]["is_removed"]
history_id = histories[0]["id"]
status, _, _ = send_request(
app,
f"/api/studies/{study_id}/preference/{history_id}",
@@ -243,6 +240,29 @@ class APITestCase(TestCase):
assert histories[0]["is_removed"]
assert len(study.get_preferences()) == 0
def test_restore_history(self) -> None:
storage = optuna.storages.InMemoryStorage()
study = create_study(storage=storage, n_generate=3)
for _ in range(3):
study.ask()
app = create_app(storage)
study_id = study._study._study_id
history_id = report_history(
study_id,
storage,
NewHistory(
mode="ChooseWorst",
candidates=[0, 1, 2],
clicked=2,
),
)
remove_history(study_id, storage, history_id)
histories = serialize_preference_history(storage.get_study_system_attrs(study_id))
assert len(histories) == 1
assert histories[0]["is_removed"]
assert len(study.get_preferences()) == 0
status, _, _ = send_request(
app,
f"/api/studies/{study_id}/preference/{history_id}",
+44 -20
View File
@@ -4,6 +4,7 @@ import json
from typing import Callable
from typing import TYPE_CHECKING
from optuna.storages import BaseStorage
from optuna_dashboard._preferential_history import _SYSTEM_ATTR_PREFIX_HISTORY
from optuna_dashboard._preferential_history import NewHistory
from optuna_dashboard._preferential_history import remove_history
@@ -44,17 +45,17 @@ def test_report_and_get_choices(storage_supplier: Callable[[], StorageSupplier])
history = serialize_preference_history(storage.get_study_system_attrs(study_id))
sys_attrs = storage.get_study_system_attrs(study_id)
assert len(history) == 2
assert history[0]["candidates"] == [0, 1, 2]
assert history[0]["clicked"] == 1
preferences = sys_attrs[_SYSTEM_ATTR_PREFIX_PREFERENCE + history[0]["id"]]
assert history[0]["history"]["candidates"] == [0, 1, 2]
assert history[0]["history"]["clicked"] == 1
preferences = sys_attrs[_SYSTEM_ATTR_PREFIX_PREFERENCE + history[0]["history"]["id"]]
assert len(preferences) == 2
for i, (best, worst) in enumerate([(0, 1), (2, 1)]):
assert len(preferences[i]) == 2
assert preferences[i][0] == best
assert preferences[i][1] == worst
assert history[1]["candidates"] == [0, 2, 3, 4]
assert history[1]["clicked"] == 0
preferences = sys_attrs[_SYSTEM_ATTR_PREFIX_PREFERENCE + history[1]["id"]]
assert history[1]["history"]["candidates"] == [0, 2, 3, 4]
assert history[1]["history"]["clicked"] == 0
preferences = sys_attrs[_SYSTEM_ATTR_PREFIX_PREFERENCE + history[1]["history"]["id"]]
assert len(preferences) == 3
for i, (best, worst) in enumerate([(2, 0), (3, 0), (4, 0)]):
assert len(preferences[i]) == 2
@@ -62,42 +63,65 @@ def test_report_and_get_choices(storage_supplier: Callable[[], StorageSupplier])
assert preferences[i][1] == worst
def get_preferences_history(
study_id: int,
storage: BaseStorage,
history_id: str,
) -> tuple[list[tuple[int, int]], History]:
system_attrs = storage.get_study_system_attrs(study_id)
history: History = json.loads(system_attrs.get(_SYSTEM_ATTR_PREFIX_HISTORY + history_id, ""))
preference: list[tuple[int, int]] = system_attrs.get(
_SYSTEM_ATTR_PREFIX_PREFERENCE + history_id, []
)
return preference, history
@parametrize_storages
def test_undo_redo_history(storage_supplier: Callable[[], StorageSupplier]) -> None:
def test_remove_history(storage_supplier: Callable[[], StorageSupplier]) -> None:
with storage_supplier() as storage:
study = create_study(storage=storage, n_generate=5)
for _ in range(5):
trial = study.ask()
trial.suggest_float("x", 0, 1)
study_id = study._study._study_id
def get_preferences_history(id: str) -> tuple[list[tuple[int, int]], History]:
system_attrs = storage.get_study_system_attrs(study_id)
history: History = json.loads(system_attrs.get(_SYSTEM_ATTR_PREFIX_HISTORY + id, ""))
preference: list[tuple[int, int]] = system_attrs.get(
_SYSTEM_ATTR_PREFIX_PREFERENCE + id, []
)
return preference, history
history_id = report_history(
study_id=study_id,
storage=storage,
input_data=NewHistory(mode="ChooseWorst", candidates=[0, 1, 2], clicked=1),
)
remove_history(study_id, storage, history_id)
preference, history = get_preferences_history(history_id)
preference, history = get_preferences_history(study_id, storage, history_id)
assert history["mode"] == "ChooseWorst"
assert history["candidates"] == [0, 1, 2]
assert history["clicked"] == 1
assert len(preference) == 0
remove_history(study_id, storage, history_id)
preference, history = get_preferences_history(history_id)
preference, history = get_preferences_history(study_id, storage, history_id)
assert len(preference) == 0
@parametrize_storages
def test_restore_history(storage_supplier: Callable[[], StorageSupplier]) -> None:
with storage_supplier() as storage:
study = create_study(storage=storage, n_generate=5)
for _ in range(5):
trial = study.ask()
trial.suggest_float("x", 0, 1)
study_id = study._study._study_id
history_id = report_history(
study_id=study_id,
storage=storage,
input_data=NewHistory(mode="ChooseWorst", candidates=[0, 1, 2], clicked=1),
)
remove_history(study_id, storage, history_id)
preference, history = get_preferences_history(study_id, storage, history_id)
assert len(preference) == 0
restore_history(study_id, storage, history_id)
preference, history = get_preferences_history(history_id)
preference, history = get_preferences_history(study_id, storage, history_id)
assert history["mode"] == "ChooseWorst"
assert history["candidates"] == [0, 1, 2]
assert history["clicked"] == 1
@@ -108,5 +132,5 @@ def test_undo_redo_history(storage_supplier: Callable[[], StorageSupplier]) -> N
assert preference[i][1] == worst
restore_history(study_id, storage, history_id)
preference, history = get_preferences_history(history_id)
preference, history = get_preferences_history(study_id, storage, history_id)
assert len(preference) == 2