""" Attack Summary Results Logs to Json ======================== """ import json from textattack.shared import logger from .logger import Logger class JsonSummaryLogger(Logger): def __init__(self, filename="results_summary.json"): logger.info(f"Logging Summary to JSON at path {filename}") self.filename = filename self.json_dictionary = {} self._flushed = True def log_summary_rows(self, rows, title, window_id): self.json_dictionary[title] = {} for i in range(len(rows)): row = rows[i] if isinstance(row[1], str): try: row[1] = row[1].replace("%", "") row[1] = float(row[1]) except ValueError: raise ValueError( f'Unable to convert row value "{row[1]}" for Attack Result "{row[0]}" into float' ) for metric, summary in rows: self.json_dictionary[title][metric] = summary self._flushed = False def flush(self): with open(self.filename, "w") as f: json.dump(self.json_dictionary, f, indent=4) self._flushed = True def close(self): super().close()