DCWIR-Demo / textattack /loggers /json_summary_logger.py
PFEemp2024's picture
add necessary file
63775f2
"""
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()