v01
This commit is contained in:
143
python/basalt/generate_tables.py
Normal file
143
python/basalt/generate_tables.py
Normal file
@@ -0,0 +1,143 @@
|
||||
#
|
||||
# BSD 3-Clause License
|
||||
#
|
||||
# This file is part of the Basalt project.
|
||||
# https://gitlab.com/VladyslavUsenko/basalt.git
|
||||
#
|
||||
# Copyright (c) 2019-2021, Vladyslav Usenko and Nikolaus Demmel.
|
||||
# All rights reserved.
|
||||
#
|
||||
import argparse
|
||||
import os
|
||||
|
||||
from pylatex import Document, Section, Package, NewPage
|
||||
from pylatex import Command
|
||||
from pylatex.base_classes import Arguments
|
||||
|
||||
from .experiments import load_experiments_config
|
||||
from .experiments import Experiment
|
||||
from .latex.templates import screenread_sty
|
||||
from .util import os_open_file
|
||||
from .latex.results_table import ResultsTable
|
||||
from .latex.summarize_sequences_table import SummarizeSequencesTable
|
||||
from .latex.plot import Plot
|
||||
|
||||
|
||||
def generate_tables(args):
|
||||
|
||||
if args.change_directory:
|
||||
os.chdir(args.change_directory)
|
||||
|
||||
config = load_experiments_config(args.config, args)
|
||||
|
||||
exps = Experiment.load_all(config.experiments,
|
||||
config_file=args.config,
|
||||
base_path=config.options.base_path,
|
||||
cache_dir=config.options.cache_dir,
|
||||
seq_name_mapping=config.seq_name_mapping)
|
||||
|
||||
doc = Document(geometry_options={"tmargin": "1cm", "lmargin": "1cm"})
|
||||
|
||||
export_basepath = "{}-export".format(config.options.output_path)
|
||||
|
||||
curr = doc
|
||||
|
||||
hide_all = False
|
||||
for spec in config.results:
|
||||
if spec.show:
|
||||
|
||||
if spec["class"] == "section":
|
||||
if spec.clearpage:
|
||||
curr.append(NewPage())
|
||||
if spec.pagewidth:
|
||||
curr.append(Command("SetPageScreenWidth", Arguments(spec.pagewidth)))
|
||||
else:
|
||||
curr.append(Command("RestorePageScreenWidth"))
|
||||
hide_all = False
|
||||
curr = Section(spec.name)
|
||||
doc.append(curr)
|
||||
continue
|
||||
|
||||
if hide_all:
|
||||
continue
|
||||
|
||||
if spec.clearpage:
|
||||
curr.append(NewPage())
|
||||
|
||||
elif spec["class"] == "results_table":
|
||||
elem = ResultsTable(exps,
|
||||
spec,
|
||||
show_values_failed_runs=config.options.show_values_failed_runs,
|
||||
seq_displayname_mapping=config.seq_displayname_mapping,
|
||||
export_basepath=export_basepath)
|
||||
elif spec["class"] == "summarize_sequences_table":
|
||||
elem = SummarizeSequencesTable(exps,
|
||||
spec,
|
||||
show_values_failed_runs=config.options.show_values_failed_runs,
|
||||
seq_displayname_mapping=config.seq_displayname_mapping,
|
||||
export_basepath=export_basepath)
|
||||
elif spec["class"] == "plot":
|
||||
elem = Plot(exps,
|
||||
spec,
|
||||
seq_displayname_mapping=config.seq_displayname_mapping,
|
||||
export_basepath=export_basepath)
|
||||
else:
|
||||
raise RuntimeError("Invalid results class {}".format(spec["class"]))
|
||||
|
||||
curr.append(elem)
|
||||
else:
|
||||
if spec["class"] == "section":
|
||||
hide_all = True
|
||||
continue
|
||||
|
||||
# generate auxiliary tex files
|
||||
if config.options.screenread:
|
||||
output_dir = os.path.dirname(config.options.output_path)
|
||||
screenread_path = output_dir + "/screenread.sty"
|
||||
with open(screenread_path, "w") as f:
|
||||
f.write(screenread_sty)
|
||||
doc.packages.add(Package('screenread'))
|
||||
|
||||
# create nofloatfigure environment
|
||||
doc.preamble.append(
|
||||
Command("newenvironment", Arguments("nofloatfigure", Command("captionsetup", Arguments(type="figure")), "")))
|
||||
doc.packages.add(Package('caption'))
|
||||
doc.packages.add(Package('mathtools'))
|
||||
|
||||
# render latex
|
||||
doc.generate_pdf(config.options.output_path, clean_tex=not args.dont_clean_tex)
|
||||
|
||||
# cleanup
|
||||
if config.options.screenread and not args.dont_clean_tex:
|
||||
os.remove(screenread_path)
|
||||
|
||||
# open the generated pdf
|
||||
if args.open:
|
||||
os_open_file(config.options.output_path + ".pdf")
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
parser = argparse.ArgumentParser("Load basalt experiment logs and generate result tables and plots.")
|
||||
parser.add_argument("-C",
|
||||
"--change-directory",
|
||||
default=None,
|
||||
help="Change directory to this folder before doing anything else")
|
||||
parser.add_argument("--config", default="experiments.toml", help="specs for experiments to load")
|
||||
parser.add_argument("--base-path", default=None, help="overwrite basepath for loading logs defined in the config")
|
||||
parser.add_argument("--output-path", default=None, help="output filepath")
|
||||
parser.add_argument("--dont-clean-tex", action="store_true", help="don't remove tex file after generation")
|
||||
parser.add_argument("--cache-dir", default=None, help="load/save experiments cache from/to give folder")
|
||||
parser.add_argument("--overwrite-cache", action="store_true", help="reload all experiments independent of cache")
|
||||
parser.add_argument("--dont-show-values-failed-runs",
|
||||
action="store_true",
|
||||
help="don't attempt to show values for failed logs based on partial logs")
|
||||
parser.add_argument("--open", action="store_true", help="open after generation")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
generate_tables(args)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user