mirror of
https://github.com/storytold/storyteller-ml.git
synced 2026-10-29 09:18:21 +00:00
Add Animate-X (see details)
https://lucaria-academy.github.io/Animate-X/ https://github.com/antgroup/animate-x @ fdc80909f911d8e487cb4e6847f2e4c6501b62af
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
|
||||
"""Logging."""
|
||||
|
||||
import builtins
|
||||
import decimal
|
||||
import functools
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
import simplejson
|
||||
# from fvcore.common.file_io import PathManager
|
||||
|
||||
import utils.distributed as du
|
||||
|
||||
|
||||
def _suppress_print():
|
||||
"""
|
||||
Suppresses printing from the current process.
|
||||
"""
|
||||
|
||||
def print_pass(*objects, sep=" ", end="\n", file=sys.stdout, flush=False):
|
||||
pass
|
||||
|
||||
builtins.print = print_pass
|
||||
|
||||
|
||||
# @functools.lru_cache(maxsize=None)
|
||||
# def _cached_log_stream(filename):
|
||||
# return PathManager.open(filename, "a")
|
||||
|
||||
|
||||
def setup_logging(cfg, log_file):
|
||||
"""
|
||||
Sets up the logging for multiple processes. Only enable the logging for the
|
||||
master process, and suppress logging for the non-master processes.
|
||||
"""
|
||||
if du.is_master_proc():
|
||||
# Enable logging for the master process.
|
||||
logging.root.handlers = []
|
||||
else:
|
||||
# Suppress logging for non-master processes.
|
||||
_suppress_print()
|
||||
|
||||
logger = logging.getLogger()
|
||||
logger.setLevel(logging.INFO)
|
||||
logger.propagate = False
|
||||
plain_formatter = logging.Formatter(
|
||||
"[%(asctime)s][%(levelname)s] %(name)s: %(lineno)4d: %(message)s",
|
||||
datefmt="%m/%d %H:%M:%S",
|
||||
)
|
||||
|
||||
if du.is_master_proc():
|
||||
ch = logging.StreamHandler(stream=sys.stdout)
|
||||
ch.setLevel(logging.DEBUG)
|
||||
ch.setFormatter(plain_formatter)
|
||||
logger.addHandler(ch)
|
||||
|
||||
if log_file is not None and du.is_master_proc(du.get_world_size()):
|
||||
filename = os.path.join(cfg.OUTPUT_DIR, log_file)
|
||||
fh = logging.FileHandler(filename)
|
||||
fh.setLevel(logging.DEBUG)
|
||||
fh.setFormatter(plain_formatter)
|
||||
logger.addHandler(fh)
|
||||
|
||||
|
||||
def get_logger(name):
|
||||
"""
|
||||
Retrieve the logger with the specified name or, if name is None, return a
|
||||
logger which is the root logger of the hierarchy.
|
||||
Args:
|
||||
name (string): name of the logger.
|
||||
"""
|
||||
return logging.getLogger(name)
|
||||
|
||||
|
||||
def log_json_stats(stats):
|
||||
"""
|
||||
Logs json stats.
|
||||
Args:
|
||||
stats (dict): a dictionary of statistical information to log.
|
||||
"""
|
||||
stats = {
|
||||
k: decimal.Decimal("{:.6f}".format(v)) if isinstance(v, float) else v
|
||||
for k, v in stats.items()
|
||||
}
|
||||
json_stats = simplejson.dumps(stats, sort_keys=True, use_decimal=True)
|
||||
logger = get_logger(__name__)
|
||||
logger.info("{:s}".format(json_stats))
|
||||
Reference in New Issue
Block a user