mirror of
https://github.com/Doctorado-ML/beflask.git
synced 2025-08-15 15:15:52 +00:00
Complete experiment
This commit is contained in:
@@ -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!")
|
||||
|
@@ -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")
|
||||
|
||||
|
||||
|
@@ -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"],
|
||||
)
|
||||
|
||||
|
||||
|
@@ -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"
|
||||
|
Reference in New Issue
Block a user