Complete experiment

This commit is contained in:
2023-06-14 18:56:54 +02:00
parent 962246d3fa
commit e367695231
4 changed files with 97 additions and 23 deletions

View File

@@ -16,6 +16,7 @@ class BenchmarkDatasetForm(FlaskForm):
discretize = BooleanField("Discretize")
stratified = BooleanField("Stratified")
ignore_nan = BooleanField("Ignore NaN")
fit_features = BooleanField("Fit Features")
n_folds = IntegerField("# Folds")
hyperparameters = TextAreaField("Hyperparameters")
submit = SubmitField("Do Experiment!")

View File

@@ -1,15 +1,19 @@
import os
import json
import shutil
from pathlib import Path
import dotenv
from benchmark.Datasets import Datasets
from benchmark.Experiments import Experiment
from benchmark.Models import Models
from benchmark.ResultsFiles import Benchmark
from benchmark.Utils import Folders
from flask import Blueprint, current_app, render_template, url_for
from flask_login import current_user, login_required
from .forms import BenchmarkDatasetForm
from ..results.main_results import prepare_report
interactive = Blueprint("interactive", __name__, template_folder="templates")
@@ -38,13 +42,79 @@ def experiment():
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
else:
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"
fit_features = "1" if form.fit_features.data else "0"
hyperparameters = form.hyperparameters.data or "{}"
back = url_for("interactive.experiment")
try:
json.loads(hyperparameters)
except json.JSONDecodeError as e:
return render_template(
"error.html",
message="Hyperparameters has to be a valid JSON",
error=str(e),
back=back,
)
try:
job = Experiment(
score_name=score,
model_name=model,
stratified=stratified,
datasets=Datasets(dataset_name=dataset, discretize=discretize),
hyperparams_dict=hyperparameters,
hyperparams_file=None,
grid_paramfile=None,
progress_bar=False,
platform="BeFlask",
ignore_nan=ignore_nan,
title="Created by the web interface",
folds=n_folds,
fit_features=fit_features,
discretize=discretize,
)
job.do_experiment()
except ValueError as e:
breakpoint()
return render_template(
"error.html",
message=f"Couldn't complete the experiment!!",
error=str(e),
back=back,
)
else:
file_name = str(Path(job.get_output_file()).name)
try:
result = prepare_report(file_name)
except FileNotFoundError as e:
return render_template(
"error.html",
message=f"This results file ({file_name}) "
"has not been found!",
error=str(e),
back=back,
)
except ValueError as e:
return render_template(
"error.html",
message=str(e),
back=url_for("results.select"),
)
os.remove(os.path.join(Folders.results, file_name))
return render_template(
"report.html",
data=result["data"],
file=file_name,
summary=result["summary"],
back=back,
back_name="Experiment",
app_config=result["app_config"],
excel=False,
)
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")

View File

@@ -100,39 +100,41 @@ def set_compare():
return AjaxResponse(True, "Ok").to_string()
def prepare_report(file_name):
app_config = dotenv_values(".env")
with open(os.path.join(Folders.results, file_name)) as f:
data = json.load(f)
summary = process_data(file_name, current_app.config["COMPARE"], data)
return dict(app_config=app_config, data=data, summary=summary)
@results.route("/report/<file_name>")
@login_required
def report(file_name):
os.chdir(current_user.benchmark.folder)
back = request.args.get("url") or ""
back_name = request.args.get("url_name") or ""
app_config = dotenv_values(".env")
try:
with open(os.path.join(Folders.results, file_name)) as f:
data = json.load(f)
try:
summary = process_data(
file_name, current_app.config["COMPARE"], data
)
except Exception as e:
return render_template(
"error.html", message=str(e), back=url_for("results.select")
)
except Exception as e:
result = prepare_report(file_name)
except FileNotFoundError as e:
return render_template(
"error.html",
message=f"This results file ({file_name}) has not been found!",
error=str(e),
back=url_for("results.select"),
)
except ValueError as e:
return render_template(
"error.html", message=str(e), back=url_for("results.select")
)
return render_template(
"report.html",
data=data,
data=result["data"],
file=file_name,
summary=summary,
summary=result["summary"],
back=back,
back_name=back_name,
app_config=app_config,
app_config=result["app_config"],
)

View File

@@ -50,7 +50,8 @@
</tr>
</thead>
</table>
<div>{{ excel_button([ file ]) }}</div>
{% set show_excel = excel| default(True) %}
{% if show_excel %}<div>{{ excel_button([ file ]) }}</div>{% endif %}
<table class="table table-striped table-hover table-bordered bg-light"
id="report-table"
data-toggle="table"