Skip to content

halocat.utils

utils

Logging, timing, and filesystem helpers.

ensure_dir

ensure_dir(path: str) -> str
Source code in halocat/utils.py
def ensure_dir(path: str) -> str:
    os.makedirs(path, exist_ok=True)
    return path

get_logger

get_logger(name: str = 'halocat', level: int = logging.INFO, logfile: str | None = None) -> logging.Logger
Source code in halocat/utils.py
def get_logger(name: str = "halocat", level: int = logging.INFO,
               logfile: str | None = None) -> logging.Logger:
    logger = logging.getLogger(name)
    if logger.handlers:
        return logger
    logger.setLevel(level)
    fmt = logging.Formatter(
        "[%(asctime)s] %(levelname)s %(name)s: %(message)s",
        datefmt="%Y-%m-%d %H:%M:%S",
    )
    sh = logging.StreamHandler()
    sh.setFormatter(fmt)
    logger.addHandler(sh)
    if logfile is not None:
        ensure_dir(os.path.dirname(logfile))
        fh = logging.FileHandler(logfile)
        fh.setFormatter(fmt)
        logger.addHandler(fh)
    return logger

timer

timer(label: str, logger: Logger | None = None)
Source code in halocat/utils.py
@contextmanager
def timer(label: str, logger: logging.Logger | None = None):
    t0 = time.perf_counter()
    yield
    dt = time.perf_counter() - t0
    msg = f"{label}: {dt:.2f} s"
    if logger is not None:
        logger.info(msg)
    else:
        print(msg)