Source code for evalml.utils.logger
"""Logging functions."""
import logging
import sys
import time
[docs]def get_logger(name):
"""Get the logger with the associated name.
Args:
name (str): Name of the logger to get.
Returns:
The logger object with the associated name.
"""
logger = logging.getLogger(name)
if not len(logger.handlers):
logger.setLevel(logging.DEBUG)
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setLevel(logging.INFO)
stdout_handler.setFormatter(logging.Formatter("%(message)s"))
logger.addHandler(stdout_handler)
return logger
[docs]def log_title(logger, title):
"""Log with a title."""
logger.info("\n" + "*" * (len(title) + 4))
logger.info("* %s *" % title)
logger.info("*" * (len(title) + 4))
logger.info("")
[docs]def log_subtitle(logger, title, underline="="):
"""Log with a subtitle."""
logger.info("")
logger.info("%s" % title)
logger.info(underline * len(title))
[docs]def time_elapsed(start_time):
"""How much time has elapsed since the search started.
Args:
start_time (int): Time when search started.
Returns:
str: elapsed time formatted as a string [H:]MM:SS
"""
time_diff = time.time() - start_time
# Source: tqdm.std.tqdm.format_interval
mins, s = divmod(int(time_diff), 60)
h, m = divmod(mins, 60)
if h:
return "{0:d}:{1:02d}:{2:02d}".format(h, m, s)
else:
return "{0:02d}:{1:02d}".format(m, s)
[docs]def log_batch_times(logger, batch_times):
"""Used to print out the batch times.
Args:
logger: the logger.
batch_times: dict with (batch number, {pipeline name, pipeline time}).
"""
log_title(logger, "Batch Time Stats")
for batch_number in batch_times:
subtitle = "Batch " + str(batch_number) + " time stats:"
log_subtitle(logger, subtitle)
for pipeline_name in batch_times[batch_number]:
logger.info(
"\n"
+ pipeline_name
+ ": "
+ f"{batch_times[batch_number][pipeline_name]:.2f} seconds",
)
logger.info("")