From 7f6154fb823d6de10748eba7fb785d3c163163d3 Mon Sep 17 00:00:00 2001 From: moririn2528 Date: Thu, 17 Aug 2023 15:23:57 +0900 Subject: [PATCH 1/3] add is_preferential flag to study summary API --- optuna_dashboard/_serializer.py | 1 + python_tests/test_serializers.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/optuna_dashboard/_serializer.py b/optuna_dashboard/_serializer.py index 04190f59..4a804af8 100644 --- a/optuna_dashboard/_serializer.py +++ b/optuna_dashboard/_serializer.py @@ -108,6 +108,7 @@ def serialize_study_summary(summary: StudySummary) -> dict[str, Any]: "study_name": summary.study_name, "directions": [d.name.lower() for d in summary.directions], "user_attrs": serialize_attrs(summary.user_attrs), + "is_preferential": summary.system_attrs.get(_SYSTEM_ATTR_PREFERENTIAL_STUDY, False), } if summary.datetime_start is not None: diff --git a/python_tests/test_serializers.py b/python_tests/test_serializers.py index 7a038b08..a75db32d 100644 --- a/python_tests/test_serializers.py +++ b/python_tests/test_serializers.py @@ -3,6 +3,7 @@ from __future__ import annotations import optuna from optuna_dashboard._serializer import serialize_attrs from optuna_dashboard._serializer import serialize_study_detail +from optuna_dashboard._serializer import serialize_study_summary from optuna_dashboard._storage import get_study_summaries from optuna_dashboard.preferential import create_study @@ -41,3 +42,22 @@ def test_get_study_detail_is_not_preferential() -> None: study_summary = study_summaries[0] study_detail = serialize_study_detail(study_summary, [], study.trials, [], [], [], False) assert not study_detail["is_preferential"] + + +def test_get_study_summary_is_preferential() -> None: + storage = optuna.storages.InMemoryStorage() + create_study(storage=storage) + study_summaries = get_study_summaries(storage) + assert len(study_summaries) == 1 + + study_summary = serialize_study_summary(study_summaries[0]) + assert study_summary["is_preferential"] + + +def test_get_study_summary_is_not_preferential() -> None: + storage = optuna.storages.InMemoryStorage() + optuna.create_study(storage=storage) + study_summaries = get_study_summaries(storage) + assert len(study_summaries) == 1 + study_summary = serialize_study_summary(study_summaries[0]) + assert not study_summary["is_preferential"] From 9f4e333bc35ac5fdf48f1bf89bbec7c173684ed4 Mon Sep 17 00:00:00 2001 From: moririn2528 Date: Thu, 17 Aug 2023 15:31:23 +0900 Subject: [PATCH 2/3] add is_preferential flag to StudySummary in typescript --- optuna_dashboard/ts/apiClient.ts | 6 ++++++ optuna_dashboard/ts/types/index.d.ts | 1 + 2 files changed, 7 insertions(+) diff --git a/optuna_dashboard/ts/apiClient.ts b/optuna_dashboard/ts/apiClient.ts index 07c825d0..95ac15c7 100644 --- a/optuna_dashboard/ts/apiClient.ts +++ b/optuna_dashboard/ts/apiClient.ts @@ -111,6 +111,7 @@ interface StudySummariesResponse { study_name: string directions: StudyDirection[] user_attrs: Attribute[] + is_preferential: boolean datetime_start?: string }[] } @@ -125,6 +126,7 @@ export const getStudySummariesAPI = (): Promise => { study_name: study.study_name, directions: study.directions, user_attrs: study.user_attrs, + is_preferential: study.is_preferential, datetime_start: study.datetime_start ? new Date(study.datetime_start) : undefined, @@ -139,6 +141,7 @@ interface CreateNewStudyResponse { study_name: string directions: StudyDirection[] user_attrs: Attribute[] + is_preferential: boolean datetime_start?: string } } @@ -160,6 +163,7 @@ export const createNewStudyAPI = ( directions: study_summary.directions, // best_trial: undefined, user_attrs: study_summary.user_attrs, + is_preferential: study_summary.is_preferential, datetime_start: study_summary.datetime_start ? new Date(study_summary.datetime_start) : undefined, @@ -178,6 +182,7 @@ type RenameStudyResponse = { study_name: string directions: StudyDirection[] user_attrs: Attribute[] + is_prefential: boolean datetime_start?: string } @@ -195,6 +200,7 @@ export const renameStudyAPI = ( study_name: res.data.study_name, directions: res.data.directions, user_attrs: res.data.user_attrs, + is_preferential: res.data.is_prefential, datetime_start: res.data.datetime_start ? new Date(res.data.datetime_start) : undefined, diff --git a/optuna_dashboard/ts/types/index.d.ts b/optuna_dashboard/ts/types/index.d.ts index b27be14e..349f7de2 100644 --- a/optuna_dashboard/ts/types/index.d.ts +++ b/optuna_dashboard/ts/types/index.d.ts @@ -121,6 +121,7 @@ type StudySummary = { study_name: string directions: StudyDirection[] user_attrs: Attribute[] + is_preferential: boolean datetime_start?: Date } From f0c475fe03bb03dc4861062368506ca84b8320b7 Mon Sep 17 00:00:00 2001 From: moririn2528 Date: Thu, 17 Aug 2023 15:45:34 +0900 Subject: [PATCH 3/3] fix by review --- optuna_dashboard/_serializer.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/optuna_dashboard/_serializer.py b/optuna_dashboard/_serializer.py index 4a804af8..a037290e 100644 --- a/optuna_dashboard/_serializer.py +++ b/optuna_dashboard/_serializer.py @@ -108,7 +108,9 @@ def serialize_study_summary(summary: StudySummary) -> dict[str, Any]: "study_name": summary.study_name, "directions": [d.name.lower() for d in summary.directions], "user_attrs": serialize_attrs(summary.user_attrs), - "is_preferential": summary.system_attrs.get(_SYSTEM_ATTR_PREFERENTIAL_STUDY, False), + "is_preferential": getattr(summary, "_system_attrs", {}).get( + _SYSTEM_ATTR_PREFERENTIAL_STUDY, False + ), } if summary.datetime_start is not None: