Refactor be_list

This commit is contained in:
2022-11-21 20:22:59 +01:00
parent e76366561c
commit 4e0be95a00
3 changed files with 95 additions and 73 deletions

View File

@@ -1,6 +1,7 @@
import os
import sys
from operator import itemgetter
from types import SimpleNamespace
import math
import json
import abc
@@ -22,8 +23,8 @@ from .Utils import (
from ._version import __version__
def get_input(is_test):
return "test" if is_test else input()
def get_input(is_test=False, message=""):
return "test" if is_test else input(message)
class BestResultsEver:
@@ -1402,18 +1403,15 @@ class Summary:
self.data.append(entry)
def get_results_criteria(
self,
score,
model,
input_data,
sort_key,
number,
self, score, model, input_data, sort_key, number, nan=False
):
data = self.data.copy() if input_data is None else input_data
if score:
data = [x for x in data if x["score"] == score]
if 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 = (
itemgetter(sort_key, "time")
if sort_key == "date"
@@ -1431,11 +1429,12 @@ class Summary:
input_data=None,
sort_key="date",
number=0,
nan=False,
) -> None:
"""Print the list of results"""
if self.data_filtered == []:
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 == []:
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
return True if excel file is created False otherwise
"""
num = ""
book = None
while True:
print(
"Which result do you want to report? (q to quit, r to list "
"again, number to report): ",
end="",
def process_file(num, command, path):
num = int(num)
name = self.data_filtered[num]["file"]
file_name_result = os.path.join(path, name)
verb1, verb2 = (
("delete", "Deleting")
if command == cmd.delete
else (
"hide",
"Hiding",
)
)
num = get_input(is_test)
if num == "r":
conf_message = (
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()
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:
book.close()
return True
return False
if num.isdigit() and int(num) < len(self.data) and int(num) >= 0:
path = (
Folders.hidden_results if self.hidden else Folders.results
)
file_name_result = os.path.join(
path, self.data_filtered[int(num)]["file"]
)
rep = Report(file_name_result, compare=self.compare)
rep.report()
if excel:
return False
case [
cmd.hide,
num,
] if not self.hidden and num.isdigit() and int(
num
) < max_value:
process_file(num, path=path, command=cmd.hide)
case [cmd.delete, num] if num.isdigit() and int(
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:
file_name = Files.be_list_excel
book = xlsxwriter.Workbook(
@@ -1519,9 +1560,16 @@ class Summary:
compare=self.compare,
)
excel.report()
else:
if num not in ("r", "q"):
print(f"Invalid option {num}. Try again!")
print(f"Added {file_name_result} to {Files.be_list_excel}")
case [num] if num.isdigit() and int(num) < max_value:
# 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 whites(n: int) -> str:

View File

@@ -113,8 +113,7 @@ class Files:
if os.path.isdir(result_path):
files_list = os.listdir(result_path)
else:
os.makedirs(result_path)
files_list = []
raise ValueError(f"{result_path} does not exist")
result = []
prefix, suffix = self.results_suffixes()
for result_file in files_list:
@@ -147,3 +146,7 @@ class TextColor:
ENDC = "\033[0m"
BOLD = "\033[1m"
UNDERLINE = "\033[4m"
WHITE = "\033[97m"
GREY = "\033[90m"
BLACK = "\033[90m"
DEFAULT = "\033[99m"

View File

@@ -1,7 +1,6 @@
#! /usr/bin/env python
import os
from benchmark.Results import Summary
from benchmark.Utils import Folders, Files
from benchmark.Utils import Files
from benchmark.Arguments import Arguments
"""List experiments of a model
@@ -9,10 +8,10 @@ from benchmark.Arguments import Arguments
def main(args_test=None):
is_test = args_test is not None
arguments = Arguments(prog="be_list")
arguments.xset("number").xset("model", required=False).xset("key")
arguments.add_exclusive(["hidden", "nan"])
arguments.xset("score", required=False).xset("compare").xset("excel")
arguments.xset("score", required=False).xset("compare").xset("hidden")
args = arguments.parse(args_test)
data = Summary(hidden=args.hidden, compare=args.compare)
data.acquire()
@@ -23,38 +22,10 @@ def main(args_test=None):
sort_key=args.key,
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:
print(e)
return
if args.nan:
results_nan = []
results = data.get_results_criteria(
score=args.score,
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),
)
excel_generated = data.manage_results(is_test=is_test)
if excel_generated:
print(f"Generated file: {Files.be_list_excel}")
Files.open(Files.be_list_excel, is_test)