From cf2448d7deefc7cb1f6261960e4502d550804d12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Montan=CC=83ana?= Date: Tue, 13 Jun 2023 15:29:10 +0200 Subject: [PATCH] begin experiment option --- beflask/interactive/forms.py | 19 ++++++- beflask/interactive/main_interactive.py | 54 ++++++++++++++++--- beflask/interactive/templates/experiment.html | 12 +++++ beflask/templates/_header.html | 1 + 4 files changed, 78 insertions(+), 8 deletions(-) create mode 100644 beflask/interactive/templates/experiment.html diff --git a/beflask/interactive/forms.py b/beflask/interactive/forms.py index 5b3ab86..51efcc2 100644 --- a/beflask/interactive/forms.py +++ b/beflask/interactive/forms.py @@ -1,8 +1,25 @@ from flask_wtf import FlaskForm -from wtforms import SubmitField, SelectField, TextAreaField +from wtforms import ( + SubmitField, + SelectField, + TextAreaField, + BooleanField, + IntegerField, +) from benchmark.Arguments import ALL_METRICS +class BenchmarkDatasetForm(FlaskForm): + score = SelectField("Score", choices=ALL_METRICS) + model = SelectField("Model") + dataset = SelectField("Dataset") + discretize = BooleanField("Discretize") + stratified = BooleanField("Stratified") + ignore_nan = BooleanField("Ignore NaN") + n_folds = IntegerField("# Folds") + hyperparameters = TextAreaField("Hyperparameters") + + # ----- NOT USED ----- # class RankingForm(FlaskForm): score = SelectField("Score", choices=ALL_METRICS) diff --git a/beflask/interactive/main_interactive.py b/beflask/interactive/main_interactive.py index 4317f6d..33672b3 100644 --- a/beflask/interactive/main_interactive.py +++ b/beflask/interactive/main_interactive.py @@ -1,10 +1,16 @@ import os import shutil from pathlib import Path -from flask import Blueprint, render_template, url_for, current_app + +import dotenv +from benchmark.Datasets import Datasets +from benchmark.Models import Models from benchmark.ResultsFiles import Benchmark +from flask import Blueprint, current_app, render_template, url_for from flask_login import current_user, login_required +from .forms import BenchmarkDatasetForm + interactive = Blueprint("interactive", __name__, template_folder="templates") @@ -15,15 +21,49 @@ def ranking(): return render_template("ranking.html") +@interactive.route("/experiment", methods=["GET", "POST"]) +@login_required +def experiment(): + os.chdir(current_user.benchmark.folder) + env = dotenv.dotenv_values(".env") + models = Models.define_models(random_state=0).keys() + form = BenchmarkDatasetForm() + form.dataset.choices = [(d, d) for d in list(Datasets())] + form.model.choices = [(b, b) for b in models] + if form.validate_on_submit(): + model = form.model.data + score = form.score.data + dataset = form.dataset.data + n_folds = form.n_folds.data + stratified = "1" if form.stratified.data else "0" + discretize = "1" if form.discretize.data else "0" + ignore_nan = "1" if form.ignore_nan.data else "0" + hyperparameters = form.hyperparameters.data + + return redirect(url_for("interactive.ranking")) + + form.model.data = env.get("model") + form.score.data = env.get("score") + form.n_folds.data = env.get("n_folds", 5) + form.stratified.data = env.get("stratified", "0") == "1" + form.discretize.data = env.get("discretize", "0") == "1" + return render_template("experiment.html", form=form, title="Experiment") + + @current_app.socket.on("client") def handle_client(message): current_app.logger.info(message) - if message.get("action") == "ReadyToRock!": - get_benchmark( - score=message.get("score"), - excel=message.get("excel", False), - html=message.get("html", False), - ) + match message.get("action"): + case "ReadyToRock!": + # Benchmark + get_benchmark( + score=message.get("score"), + excel=message.get("excel", False), + html=message.get("html", False), + ) + case "ReadyToRoll!": + # Experiment + pass current_app.socket.emit("server", {"message": "Ready!", "percentage": 0}) diff --git a/beflask/interactive/templates/experiment.html b/beflask/interactive/templates/experiment.html new file mode 100644 index 0000000..0cc3938 --- /dev/null +++ b/beflask/interactive/templates/experiment.html @@ -0,0 +1,12 @@ +{% extends "iobase.html" %} +{% from 'bootstrap5/form.html' import render_form %} +{% block content %} + +{% endblock %} diff --git a/beflask/templates/_header.html b/beflask/templates/_header.html index 8730dfd..8f86e0c 100644 --- a/beflask/templates/_header.html +++ b/beflask/templates/_header.html @@ -21,6 +21,7 @@
  • {{ render_nav_item('results.select', 'Results') }}
  • {{ render_nav_item('results.datasets', 'Datasets') }}
  • {{ render_nav_item('interactive.ranking', 'Ranking') }}
  • +
  • {{ render_nav_item('interactive.experiment', 'Experiment') }}
  • {{ render_nav_item('main.config', 'Config') }}
  • {% endif %}