mirror of
https://github.com/Doctorado-ML/benchmark.git
synced 2025-08-18 00:45:54 +00:00
Refactor be_list
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
|
from types import SimpleNamespace
|
||||||
import math
|
import math
|
||||||
import json
|
import json
|
||||||
import abc
|
import abc
|
||||||
@@ -22,8 +23,8 @@ from .Utils import (
|
|||||||
from ._version import __version__
|
from ._version import __version__
|
||||||
|
|
||||||
|
|
||||||
def get_input(is_test):
|
def get_input(is_test=False, message=""):
|
||||||
return "test" if is_test else input()
|
return "test" if is_test else input(message)
|
||||||
|
|
||||||
|
|
||||||
class BestResultsEver:
|
class BestResultsEver:
|
||||||
@@ -1402,18 +1403,15 @@ class Summary:
|
|||||||
self.data.append(entry)
|
self.data.append(entry)
|
||||||
|
|
||||||
def get_results_criteria(
|
def get_results_criteria(
|
||||||
self,
|
self, score, model, input_data, sort_key, number, nan=False
|
||||||
score,
|
|
||||||
model,
|
|
||||||
input_data,
|
|
||||||
sort_key,
|
|
||||||
number,
|
|
||||||
):
|
):
|
||||||
data = self.data.copy() if input_data is None else input_data
|
data = self.data.copy() if input_data is None else input_data
|
||||||
if score:
|
if score:
|
||||||
data = [x for x in data if x["score"] == score]
|
data = [x for x in data if x["score"] == score]
|
||||||
if model:
|
if model:
|
||||||
data = [x for x in data if x["model"] == model]
|
data = [x for x in data if x["model"] == model]
|
||||||
|
if nan:
|
||||||
|
data = [x for x in data if x["metric"] != x["metric"]]
|
||||||
keys = (
|
keys = (
|
||||||
itemgetter(sort_key, "time")
|
itemgetter(sort_key, "time")
|
||||||
if sort_key == "date"
|
if sort_key == "date"
|
||||||
@@ -1431,11 +1429,12 @@ class Summary:
|
|||||||
input_data=None,
|
input_data=None,
|
||||||
sort_key="date",
|
sort_key="date",
|
||||||
number=0,
|
number=0,
|
||||||
|
nan=False,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Print the list of results"""
|
"""Print the list of results"""
|
||||||
if self.data_filtered == []:
|
if self.data_filtered == []:
|
||||||
self.data_filtered = self.get_results_criteria(
|
self.data_filtered = self.get_results_criteria(
|
||||||
score, model, input_data, sort_key, number
|
score, model, input_data, sort_key, number, nan=nan
|
||||||
)
|
)
|
||||||
if self.data_filtered == []:
|
if self.data_filtered == []:
|
||||||
raise ValueError(NO_RESULTS)
|
raise ValueError(NO_RESULTS)
|
||||||
@@ -1477,37 +1476,79 @@ class Summary:
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
def manage_results(self, excel, is_test):
|
def manage_results(self, is_test):
|
||||||
"""Manage results showed in the summary
|
"""Manage results showed in the summary
|
||||||
return True if excel file is created False otherwise
|
return True if excel file is created False otherwise
|
||||||
"""
|
"""
|
||||||
num = ""
|
|
||||||
book = None
|
def process_file(num, command, path):
|
||||||
while True:
|
num = int(num)
|
||||||
print(
|
name = self.data_filtered[num]["file"]
|
||||||
"Which result do you want to report? (q to quit, r to list "
|
file_name_result = os.path.join(path, name)
|
||||||
"again, number to report): ",
|
verb1, verb2 = (
|
||||||
end="",
|
("delete", "Deleting")
|
||||||
|
if command == cmd.delete
|
||||||
|
else (
|
||||||
|
"hide",
|
||||||
|
"Hiding",
|
||||||
|
)
|
||||||
)
|
)
|
||||||
num = get_input(is_test)
|
conf_message = (
|
||||||
if num == "r":
|
TextColor.RED
|
||||||
|
+ f"Are you sure to {verb1} {file_name_result} (y/n)? "
|
||||||
|
)
|
||||||
|
confirm = get_input(message=conf_message, is_test=is_test)
|
||||||
|
if confirm == "y":
|
||||||
|
print(TextColor.YELLOW + f"{verb2} {file_name_result}")
|
||||||
|
if command == cmd.delete:
|
||||||
|
os.unlink(file_name_result)
|
||||||
|
else:
|
||||||
|
os.rename(
|
||||||
|
os.path.join(Folders.results, name),
|
||||||
|
os.path.join(Folders.hidden_results, name),
|
||||||
|
)
|
||||||
|
self.data_filtered.pop(num)
|
||||||
|
get_input(message="Press enter to continue")
|
||||||
self.list_results()
|
self.list_results()
|
||||||
if num == "q":
|
|
||||||
if excel:
|
cmd = SimpleNamespace(quit="q", relist="r", delete="d", excel="e")
|
||||||
|
if not self.hidden:
|
||||||
|
cmd.hide = "h"
|
||||||
|
message = (
|
||||||
|
TextColor.ENDC
|
||||||
|
+ f"Choose option {str(cmd).replace('namespace', '')}: "
|
||||||
|
)
|
||||||
|
path = Folders.hidden_results if self.hidden else Folders.results
|
||||||
|
book = None
|
||||||
|
max_value = len(self.data)
|
||||||
|
while True:
|
||||||
|
match get_input(message=message, is_test=is_test).split():
|
||||||
|
case [cmd.relist]:
|
||||||
|
self.list_results()
|
||||||
|
case [cmd.quit]:
|
||||||
if book is not None:
|
if book is not None:
|
||||||
book.close()
|
book.close()
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
if num.isdigit() and int(num) < len(self.data) and int(num) >= 0:
|
case [
|
||||||
path = (
|
cmd.hide,
|
||||||
Folders.hidden_results if self.hidden else Folders.results
|
num,
|
||||||
)
|
] if not self.hidden and num.isdigit() and int(
|
||||||
file_name_result = os.path.join(
|
num
|
||||||
path, self.data_filtered[int(num)]["file"]
|
) < max_value:
|
||||||
)
|
process_file(num, path=path, command=cmd.hide)
|
||||||
rep = Report(file_name_result, compare=self.compare)
|
|
||||||
rep.report()
|
case [cmd.delete, num] if num.isdigit() and int(
|
||||||
if excel:
|
num
|
||||||
|
) < max_value:
|
||||||
|
process_file(num=num, path=path, command=cmd.delete)
|
||||||
|
case [cmd.excel, num] if num.isdigit() and int(
|
||||||
|
num
|
||||||
|
) < max_value:
|
||||||
|
# Add to excel file result #num
|
||||||
|
file_name_result = os.path.join(
|
||||||
|
path, self.data_filtered[num]["file"]
|
||||||
|
)
|
||||||
if book is None:
|
if book is None:
|
||||||
file_name = Files.be_list_excel
|
file_name = Files.be_list_excel
|
||||||
book = xlsxwriter.Workbook(
|
book = xlsxwriter.Workbook(
|
||||||
@@ -1519,9 +1560,16 @@ class Summary:
|
|||||||
compare=self.compare,
|
compare=self.compare,
|
||||||
)
|
)
|
||||||
excel.report()
|
excel.report()
|
||||||
else:
|
print(f"Added {file_name_result} to {Files.be_list_excel}")
|
||||||
if num not in ("r", "q"):
|
case [num] if num.isdigit() and int(num) < max_value:
|
||||||
print(f"Invalid option {num}. Try again!")
|
# Report the result #num
|
||||||
|
file_name_result = os.path.join(
|
||||||
|
path, self.data_filtered[num]["file"]
|
||||||
|
)
|
||||||
|
rep = Report(file_name_result, compare=self.compare)
|
||||||
|
rep.report()
|
||||||
|
case _:
|
||||||
|
print("Invalid option. Try again!")
|
||||||
|
|
||||||
def show_result(self, data: dict, title: str = "") -> None:
|
def show_result(self, data: dict, title: str = "") -> None:
|
||||||
def whites(n: int) -> str:
|
def whites(n: int) -> str:
|
||||||
|
@@ -113,8 +113,7 @@ class Files:
|
|||||||
if os.path.isdir(result_path):
|
if os.path.isdir(result_path):
|
||||||
files_list = os.listdir(result_path)
|
files_list = os.listdir(result_path)
|
||||||
else:
|
else:
|
||||||
os.makedirs(result_path)
|
raise ValueError(f"{result_path} does not exist")
|
||||||
files_list = []
|
|
||||||
result = []
|
result = []
|
||||||
prefix, suffix = self.results_suffixes()
|
prefix, suffix = self.results_suffixes()
|
||||||
for result_file in files_list:
|
for result_file in files_list:
|
||||||
@@ -147,3 +146,7 @@ class TextColor:
|
|||||||
ENDC = "\033[0m"
|
ENDC = "\033[0m"
|
||||||
BOLD = "\033[1m"
|
BOLD = "\033[1m"
|
||||||
UNDERLINE = "\033[4m"
|
UNDERLINE = "\033[4m"
|
||||||
|
WHITE = "\033[97m"
|
||||||
|
GREY = "\033[90m"
|
||||||
|
BLACK = "\033[90m"
|
||||||
|
DEFAULT = "\033[99m"
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
#! /usr/bin/env python
|
#! /usr/bin/env python
|
||||||
import os
|
|
||||||
from benchmark.Results import Summary
|
from benchmark.Results import Summary
|
||||||
from benchmark.Utils import Folders, Files
|
from benchmark.Utils import Files
|
||||||
from benchmark.Arguments import Arguments
|
from benchmark.Arguments import Arguments
|
||||||
|
|
||||||
"""List experiments of a model
|
"""List experiments of a model
|
||||||
@@ -9,10 +8,10 @@ from benchmark.Arguments import Arguments
|
|||||||
|
|
||||||
|
|
||||||
def main(args_test=None):
|
def main(args_test=None):
|
||||||
|
is_test = args_test is not None
|
||||||
arguments = Arguments(prog="be_list")
|
arguments = Arguments(prog="be_list")
|
||||||
arguments.xset("number").xset("model", required=False).xset("key")
|
arguments.xset("number").xset("model", required=False).xset("key")
|
||||||
arguments.add_exclusive(["hidden", "nan"])
|
arguments.xset("score", required=False).xset("compare").xset("hidden")
|
||||||
arguments.xset("score", required=False).xset("compare").xset("excel")
|
|
||||||
args = arguments.parse(args_test)
|
args = arguments.parse(args_test)
|
||||||
data = Summary(hidden=args.hidden, compare=args.compare)
|
data = Summary(hidden=args.hidden, compare=args.compare)
|
||||||
data.acquire()
|
data.acquire()
|
||||||
@@ -23,38 +22,10 @@ def main(args_test=None):
|
|||||||
sort_key=args.key,
|
sort_key=args.key,
|
||||||
number=args.number,
|
number=args.number,
|
||||||
)
|
)
|
||||||
is_test = args_test is not None
|
|
||||||
excel_generated = data.manage_results(args.excel, is_test)
|
|
||||||
if args.excel and excel_generated:
|
|
||||||
print(f"Generated file: {Files.be_list_excel}")
|
|
||||||
Files.open(Files.be_list_excel, is_test)
|
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
print(e)
|
print(e)
|
||||||
return
|
return
|
||||||
if args.nan:
|
excel_generated = data.manage_results(is_test=is_test)
|
||||||
results_nan = []
|
if excel_generated:
|
||||||
results = data.get_results_criteria(
|
print(f"Generated file: {Files.be_list_excel}")
|
||||||
score=args.score,
|
Files.open(Files.be_list_excel, is_test)
|
||||||
model=args.model,
|
|
||||||
input_data=None,
|
|
||||||
sort_key=args.key,
|
|
||||||
number=args.number,
|
|
||||||
)
|
|
||||||
for result in results:
|
|
||||||
if result["metric"] != result["metric"]:
|
|
||||||
results_nan.append(result)
|
|
||||||
if results_nan != []:
|
|
||||||
print(
|
|
||||||
"\n"
|
|
||||||
+ "*" * 30
|
|
||||||
+ " Results with nan moved to hidden "
|
|
||||||
+ "*" * 30
|
|
||||||
)
|
|
||||||
data.data_filtered = []
|
|
||||||
data.list_results(input_data=results_nan)
|
|
||||||
for result in results_nan:
|
|
||||||
name = result["file"]
|
|
||||||
os.rename(
|
|
||||||
os.path.join(Folders.results, name),
|
|
||||||
os.path.join(Folders.hidden_results, name),
|
|
||||||
)
|
|
||||||
|
Reference in New Issue
Block a user