From 4209eb13bcf2884bcf631e77ffc2f9054f5ddb11 Mon Sep 17 00:00:00 2001 From: c-bata Date: Fri, 9 Apr 2021 15:28:34 +0900 Subject: [PATCH] Speed-up GraphControur plot --- .../static/components/GraphContour.tsx | 45 +++++++++++-------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/optuna_dashboard/static/components/GraphContour.tsx b/optuna_dashboard/static/components/GraphContour.tsx index 335c90e2..aad82327 100644 --- a/optuna_dashboard/static/components/GraphContour.tsx +++ b/optuna_dashboard/static/components/GraphContour.tsx @@ -32,26 +32,33 @@ export const GraphContour: FC<{ study: StudyDetail | null }> = ({ study = null }) => { const trials: Trial[] = study !== null ? study.trials : [] - const filteredTrials = trials.filter( - (t) => t.state === "Complete" || t.state === "Pruned" - ) - - const paramNames = getParamNames(filteredTrials) - const classes = useStyles() + const [paramNames, setParamNames] = useState([]) const [objectiveId, setObjectiveId] = useState(0) const [xAxis, setXAxis] = useState(null) const [yAxis, setYAxis] = useState(null) - if (xAxis === null && paramNames.length !== 0) { - setXAxis(paramNames[0]) - } - if (yAxis === null && paramNames.length !== 0) { - setYAxis(paramNames[0]) - } - if (yAxis === null && paramNames.length > 1) { - setYAxis(paramNames[1]) - } + useEffect(() => { + if (trials.length === 0 || paramNames.length !== 0) { + return + } + const filteredTrials = trials.filter( + (t) => + t.state === "Complete" || + (t.state === "Pruned" && t.values && t.values.length > 0) + ) + + const p = getParamNames(filteredTrials) + if (p.length === 0 || p.length === paramNames.length) { + return + } + setParamNames(p) + if (p.length < 2 && xAxis !== null && yAxis !== null) { + return + } + setXAxis(p[0]) + setYAxis(p[1]) + }, [trials]) const handleObjectiveChange = ( event: React.ChangeEvent<{ value: unknown }> @@ -91,7 +98,7 @@ export const GraphContour: FC<{ ) : null} X Axis Parameter - {paramNames.map((x) => ( {x} @@ -101,7 +108,7 @@ export const GraphContour: FC<{ Y Axis Parameter - {paramNames.map((x) => ( {x} @@ -153,7 +160,9 @@ const plotContour = ( const trials: Trial[] = study !== null ? study.trials : [] const filteredTrials = trials.filter( - (t) => t.state === "Complete" || (t.state === "Pruned" && t.values && t.values.length > 0) + (t) => + t.state === "Complete" || + (t.state === "Pruned" && t.values && t.values.length > 0) ) if (filteredTrials.length === 0 || xAxis === null || yAxis === null) {