Source code for dubfi

# Copyright 2025 DWD
# SPDX-License-Identifier: BSD-3-Clause

"""Package for Bayesian inversion with multiple linear algebra backends.

.. codeauthor:: Valentin Bruch, DWD <valentin.bruch@dwd.de>
.. versionadded:: 0.1.0 (initial release)
"""

import logging
import os

try:
    from ._version import __version__ as __version__
except ImportError:
    __version__ = "unknown"


# create logger
_debug_level = os.environ.get("LOG_LEVEL", logging.INFO)
logging.basicConfig(
    level=_debug_level,
    format="%(asctime)s %(levelname)s %(message)s",
    datefmt="%H:%M:%S",
)

colorlog = logging
if not os.environ.get("NOCOLOR", False):
    try:
        import colorlog

        colorlog.basicConfig(
            level=_debug_level,
            format="%(purple)s%(asctime)s%(reset)s %(log_color)s%(levelname)s%(reset)s %(message)s",
            datefmt="%H:%M:%S",
        )
    except ImportError:
        pass

log = colorlog.getLogger("DUBFI")


[docs] def set_log_file(log_file: str, level: str | None): """Set given file path as log file, replacing all other log handlers.""" log_handler = logging.FileHandler(log_file) if level is not None: log_handler.setLevel(level) log_handler.setFormatter( logging.Formatter( fmt="%(asctime)s %(levelname)s %(message)s", datefmt="%H:%M:%S" ) ) # remove existing handlers for handler in log.handlers: log.removeHandler(handler) log.addHandler(log_handler) log.debug(f"Added handler for {log_file}")
[docs] def quit_clean(): """Quit MPI processes if a connection to such processes exists. This light-weight function will check if an MPI context has been created and sends a quit signal through this context. Always call this function before exiting the program to avoid dangling MPI processes on exit of the parent process. .. versionadded:: 0.1.1 """ import sys if "dubfi.linalg.mpi_parent" in sys.modules: from .linalg.mpi_parent import CTX CTX.quit()