From f3dbdb57f325fe7d06628256f371ab0848297c6b Mon Sep 17 00:00:00 2001 From: keisuke-umezawa Date: Thu, 2 Mar 2023 23:36:18 +0900 Subject: [PATCH 1/6] Separete tell api into complete and fail --- optuna_dashboard/ts/action.ts | 45 +++++++++++++++---- .../ts/components/ObjectiveForm.tsx | 4 +- optuna_dashboard/ts/components/TrialTable.tsx | 4 +- 3 files changed, 41 insertions(+), 12 deletions(-) diff --git a/optuna_dashboard/ts/action.ts b/optuna_dashboard/ts/action.ts index e8f2aa35..46089d33 100644 --- a/optuna_dashboard/ts/action.ts +++ b/optuna_dashboard/ts/action.ts @@ -444,16 +444,44 @@ export const actionCreator = () => { }) } - const tellTrial = ( + const makeTrialFail = (studyId: number, trialId: number): void => { + const state = "Fail" + const message = `id=${trialId}, state=${state}` + tellTrialAPI(trialId, state) + .then(() => { + const index = studyDetails[studyId].trials.findIndex( + (t) => t.trial_id === trialId + ) + if (index === -1) { + enqueueSnackbar(`Unexpected error happens. Please reload the page.`, { + variant: "error", + }) + return + } + setTrialStateValues(studyId, index, state) + enqueueSnackbar(`Successfully updated trial (${message})`, { + variant: "success", + }) + }) + .catch((err) => { + const reason = err.response?.data.reason + enqueueSnackbar( + `Failed to update trial (${message}). Reason: ${reason}`, + { + variant: "error", + } + ) + console.log(err) + }) + } + + const makeTrialComplete = ( studyId: number, trialId: number, - state: TrialStateFinished, - values?: number[] + values: number[] ): void => { - const message = - values === undefined - ? `id=${trialId}, state=${state}` - : `id=${trialId}, state=${state}, values=${values}` + const state = "Complete" + const message = `id=${trialId}, state=${state}, values=${values}` tellTrialAPI(trialId, state, values) .then(() => { const index = studyDetails[studyId].trials.findIndex( @@ -498,7 +526,8 @@ export const actionCreator = () => { saveTrialNote, uploadArtifact, deleteArtifact, - tellTrial, + makeTrialComplete, + makeTrialFail, } } diff --git a/optuna_dashboard/ts/components/ObjectiveForm.tsx b/optuna_dashboard/ts/components/ObjectiveForm.tsx index ae8b2ae8..0e61ce09 100644 --- a/optuna_dashboard/ts/components/ObjectiveForm.tsx +++ b/optuna_dashboard/ts/components/ObjectiveForm.tsx @@ -69,7 +69,7 @@ export const ObjectiveForm: FC<{ if (filtered.length !== directions.length) { return } - action.tellTrial(trial.study_id, trial.trial_id, "Complete", filtered) + action.makeTrialComplete(trial.study_id, trial.trial_id, filtered) } const getObjectiveName = (i: number): string => { @@ -264,7 +264,7 @@ export const ObjectiveForm: FC<{ variant="outlined" color="error" onClick={() => { - action.tellTrial(trial.study_id, trial.trial_id, "Fail") + action.makeTrialFail(trial.study_id, trial.trial_id) }} > Fail Trial diff --git a/optuna_dashboard/ts/components/TrialTable.tsx b/optuna_dashboard/ts/components/TrialTable.tsx index 3ea8e14a..32206e8a 100644 --- a/optuna_dashboard/ts/components/TrialTable.tsx +++ b/optuna_dashboard/ts/components/TrialTable.tsx @@ -295,7 +295,7 @@ export const TrialTable: FC<{ return } - action.tellTrial(studyId, trialId, "Complete", objectiveValues) + action.makeTrialComplete(studyId, trialId, objectiveValues) } const handleFailTrial = (e: MouseEvent): void => { @@ -304,7 +304,7 @@ export const TrialTable: FC<{ } const studyId = studyDetail.id const trialId = trials[index].trial_id - action.tellTrial(studyId, trialId, "Fail") + action.makeTrialFail(studyId, trialId) } return ( From 41a4349b83ffcaea97aaf5464af9bde2689db099 Mon Sep 17 00:00:00 2001 From: keisuke-umezawa Date: Sat, 4 Mar 2023 11:30:34 +0900 Subject: [PATCH 2/6] Delete state variable --- optuna_dashboard/ts/action.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/optuna_dashboard/ts/action.ts b/optuna_dashboard/ts/action.ts index 46089d33..9f8db581 100644 --- a/optuna_dashboard/ts/action.ts +++ b/optuna_dashboard/ts/action.ts @@ -445,9 +445,8 @@ export const actionCreator = () => { } const makeTrialFail = (studyId: number, trialId: number): void => { - const state = "Fail" - const message = `id=${trialId}, state=${state}` - tellTrialAPI(trialId, state) + const message = `id=${trialId}, state=Fail` + tellTrialAPI(trialId, "Fail") .then(() => { const index = studyDetails[studyId].trials.findIndex( (t) => t.trial_id === trialId @@ -458,7 +457,7 @@ export const actionCreator = () => { }) return } - setTrialStateValues(studyId, index, state) + setTrialStateValues(studyId, index, "Fail") enqueueSnackbar(`Successfully updated trial (${message})`, { variant: "success", }) @@ -480,9 +479,8 @@ export const actionCreator = () => { trialId: number, values: number[] ): void => { - const state = "Complete" - const message = `id=${trialId}, state=${state}, values=${values}` - tellTrialAPI(trialId, state, values) + const message = `id=${trialId}, state=Complete, values=${values}` + tellTrialAPI(trialId, "Complete", values) .then(() => { const index = studyDetails[studyId].trials.findIndex( (t) => t.trial_id === trialId @@ -493,7 +491,7 @@ export const actionCreator = () => { }) return } - setTrialStateValues(studyId, index, state, values) + setTrialStateValues(studyId, index, "Complete", values) enqueueSnackbar(`Successfully updated trial (${message})`, { variant: "success", }) From cd485c14733e3147abacec09902f6912712c0704 Mon Sep 17 00:00:00 2001 From: Kenshin Abe Date: Tue, 14 Mar 2023 15:57:39 +0900 Subject: [PATCH 3/6] Add values0 != values1 condition to dominatedTrials --- optuna_dashboard/ts/dominatedTrials.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/optuna_dashboard/ts/dominatedTrials.ts b/optuna_dashboard/ts/dominatedTrials.ts index 632e2cf7..06afb15f 100644 --- a/optuna_dashboard/ts/dominatedTrials.ts +++ b/optuna_dashboard/ts/dominatedTrials.ts @@ -27,7 +27,7 @@ export const getDominatedTrials = ( const dominatedTrials: boolean[] = [] normalizedValues.forEach((values0: number[], i: number) => { const dominated = normalizedValues.some((values1: number[], j: number) => { - if (i === j) { + if (i === j || values0.every((v, i) => v == values1[i])) { return false } return values0.every((value0: number, k: number) => { From cad88705c6d7ea5db94285ba22b83018f3dfa1dd Mon Sep 17 00:00:00 2001 From: c-bata Date: Fri, 3 Mar 2023 10:26:40 +0900 Subject: [PATCH 4/6] Minor improvements on human-in-the-loop UI --- .../ts/components/BestTrialsCard.tsx | 26 ++++++++++++------- optuna_dashboard/ts/components/TrialList.tsx | 2 +- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/optuna_dashboard/ts/components/BestTrialsCard.tsx b/optuna_dashboard/ts/components/BestTrialsCard.tsx index ad18418e..fe375604 100644 --- a/optuna_dashboard/ts/components/BestTrialsCard.tsx +++ b/optuna_dashboard/ts/components/BestTrialsCard.tsx @@ -32,16 +32,22 @@ export const BestTrialsCard: FC<{ header = `Best Trial (number=${bestTrial.number})` content = ( <> - - {bestTrial.values} - + {bestTrial.values === undefined || bestTrial.values.length === 1 ? ( + + {bestTrial.values} + + ) : ( + + Objective Values = [{bestTrial.values?.join(", ")}] + + )} Params = [ {bestTrial.params diff --git a/optuna_dashboard/ts/components/TrialList.tsx b/optuna_dashboard/ts/components/TrialList.tsx index 7ef89d73..72089183 100644 --- a/optuna_dashboard/ts/components/TrialList.tsx +++ b/optuna_dashboard/ts/components/TrialList.tsx @@ -158,7 +158,7 @@ const TrialListDetail: FC<{ const params = trial.state === "Waiting" ? trial.fixed_params : trial.params const info: [string, string | null | ReactNode][] = [ - ["Value", trial.values?.map((v) => v.toString()).join(" ") || "None"], + ["Value", trial.values?.map((v) => v.toString()).join(", ") || "None"], [ "Intermediate Values", From bb2cdc3c98fb2cfb2945a2e3dc89c1059b661c16 Mon Sep 17 00:00:00 2001 From: c-bata Date: Tue, 14 Mar 2023 16:42:22 +0900 Subject: [PATCH 5/6] Bump the version up to v0.9.0 --- optuna_dashboard/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/optuna_dashboard/__init__.py b/optuna_dashboard/__init__.py index 7b273ed1..ee30219e 100644 --- a/optuna_dashboard/__init__.py +++ b/optuna_dashboard/__init__.py @@ -9,4 +9,4 @@ from ._objective_form_widget import ObjectiveUserAttrRef # noqa from ._objective_form_widget import register_objective_form_widgets # noqa -__version__ = "0.9.0b6" +__version__ = "0.9.0" From 8f47745d0c2b9a6bff065254d5db9f68206fc1b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Mar 2023 09:24:09 +0000 Subject: [PATCH 6/6] Bump webpack from 5.75.0 to 5.76.0 Bumps [webpack](https://github.com/webpack/webpack) from 5.75.0 to 5.76.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.75.0...v5.76.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0a7ce562..cf383fae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,7 +49,7 @@ "ts-jest": "^29.0.3", "ts-loader": "^9.2.7", "typescript": "^4.6.2", - "webpack": "^5.70.0", + "webpack": "^5.76.0", "webpack-cli": "^4.9.2" } }, @@ -13310,9 +13310,9 @@ } }, "node_modules/webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "version": "5.76.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.0.tgz", + "integrity": "sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -23273,9 +23273,9 @@ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" }, "webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "version": "5.76.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.0.tgz", + "integrity": "sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.3", diff --git a/package.json b/package.json index ba543732..d39584c1 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "ts-jest": "^29.0.3", "ts-loader": "^9.2.7", "typescript": "^4.6.2", - "webpack": "^5.70.0", + "webpack": "^5.76.0", "webpack-cli": "^4.9.2" } }