Source code for malet.merge_log
import glob
import os
from absl import app, flags
from rich import print
from rich.align import Align
from rich.panel import Panel
from malet.experiment import ExperimentLog
FLAGS = flags.FLAGS
[docs]
def merger(argv):
"""CLI handler for merging experiment log files.
Merges TSV log files from a folder or an explicit file list into a
single combined log file. Uses ``FLAGS.folder``, ``FLAGS.files``,
and ``FLAGS.save_path`` from absl flags.
Args:
argv: Command-line arguments (unused, required by absl.app.run).
"""
if not FLAGS.folder and not FLAGS.files:
raise ValueError("Either folder or files must be specified.")
print()
if FLAGS.files is None:
print(
Align(
Panel(
f"Merging all {len(glob.glob(os.path.join(FLAGS.folder, '*.tsv')))} files in folder {FLAGS.folder}.",
padding=(1, 3),
),
align="center",
)
)
FLAGS.save_path = FLAGS.save_path or os.path.join(FLAGS.folder, "log_merged.tsv")
ExperimentLog.merge_folder(FLAGS.folder, FLAGS.save_path)
else:
if FLAGS.folder:
FLAGS.save_path = FLAGS.save_path or os.path.join(FLAGS.folder, "log_merged.tsv")
files = [os.path.join(FLAGS.folder, f) for f in FLAGS.files]
else:
FLAGS.save_path = FLAGS.save_path or os.path.join(os.path.dirname(FLAGS.files[0]), "log_merged.tsv")
files = FLAGS.files
print(Align(Panel(f"Merging {len(files)} files: \n" + "\n".join(files), padding=(1, 3)), align="center"))
ExperimentLog.merge_tsv(*files, FLAGS.save_path)
print(Align(Panel(f"Merged log saved to {FLAGS.save_path}.", padding=(1, 3)), align="center"))
[docs]
def main():
flags.DEFINE_string(
"folder",
None,
"Folder containing the logs to merge. If files are specified, only the specified files in the folder will be merged.",
)
flags.DEFINE_spaceseplist(
"files", None, "Files to merge. If folder is specified, this should be relative to the folder."
)
flags.DEFINE_string("save_path", None, "Path to save the merged log file.")
app.run(merger)
if __name__ == "__main__":
main()