Source code for pe.logger.matplotlib_pdf

import os

from .logger import Logger
from pe.metric_item import MatplotlibMetricItem


[docs]class MatplotlibPDF(Logger): """The logger that saves Matplotlib figures to PDF files."""
[docs] def __init__( self, output_folder, path_separator="-", iteration_format="09d", ): """Constructor. :param output_folder: The output folder that will be used to save the PDF files :type output_folder: str :param path_separator: The string that will be used to replace '\' and '/' in log names, defaults to "-" :type path_separator: str, optional :param iteration_format: The format of the iteration number, defaults to "09d" :type iteration_format: str, optional """ self._output_folder = output_folder os.makedirs(self._output_folder, exist_ok=True) self._path_separator = path_separator self._iteration_format = iteration_format
[docs] def log(self, iteration, metric_items): """Log the Matplotlib figures to PDF files. :param iteration: The PE iteration number :type iteration: int :param metric_items: The Matplotlib figures to log :type metric_items: list[:py:class:`pe.metric_item.MatplotlibMetricItem`] """ for item in metric_items: if not isinstance(item, (MatplotlibMetricItem,)): continue pdf_path = self._get_pdf_path(iteration, item) item.value.savefig(pdf_path)
[docs] def _get_pdf_path(self, iteration, item): """Get the PDF save path. :param iteration: The PE iteration number :type iteration: int :param item: The Matplotlib figure metric item :type item: :py:class:`pe.metric_item.MatplotlibMetricItem` :return: The PDF save path :rtype: str """ image_name = item.name image_name = image_name.replace("/", self._path_separator) image_name = image_name.replace("\\", self._path_separator) image_folder = os.path.join(self._output_folder, image_name) os.makedirs(image_folder, exist_ok=True) iteration_string = format(iteration, self._iteration_format) image_file_name = f"{iteration_string}.pdf" image_path = os.path.join( image_folder, image_file_name, ) return image_path