Source code for pyasdf.watermark

#!/usr/bin/env python
"""
Watermark of the current system to increase reproducibility and provenance
and ease debugging.

:copyright:
    Lion Krischer (lion.krischer@gmail.com), 2013-2021
:license:
    BSD 3-Clause ("BSD New" or "BSD Simplified")
"""

from multiprocessing import cpu_count
from pkg_resources import get_distribution
import platform
from socket import gethostname
from time import strftime

import h5py

try:
    from mpi4py import MPI
except ImportError:
    MPI = None

from .utils import is_multiprocessing_problematic

# Dependencies.
modules = ["numpy", "scipy", "obspy", "lxml", "h5py", "prov", "dill"]
if MPI:
    modules.append("mpi4py")


[docs]def get_watermark(): """ Return information about the current system relevant for pyasdf. """ vendor = MPI.get_vendor() if MPI else None c = h5py.get_config() if not hasattr(c, "mpi") or not c.mpi: is_parallel = False else: is_parallel = True watermark = { "python_implementation": platform.python_implementation(), "python_version": platform.python_version(), "python_compiler": platform.python_compiler(), "platform_system": platform.system(), "platform_release": platform.release(), "platform_version": platform.version(), "platform_machine": platform.machine(), "platform_processor": platform.processor(), "platform_processor_count": cpu_count(), "platform_architecture": platform.architecture()[0], "platform_hostname": gethostname(), "date": strftime("%d/%m/%Y"), "time": strftime("%H:%M:%S"), "timezone": strftime("%Z"), "hdf5_version": h5py.version.hdf5_version, "parallel_h5py": is_parallel, "mpi_vendor": vendor[0] if vendor else None, "mpi_vendor_version": ".".join(map(str, vendor[1])) if vendor else None, "problematic_multiprocessing": is_multiprocessing_problematic(), } watermark["module_versions"] = { module: get_distribution(module).version for module in modules } if MPI is None: watermark["module_versions"]["mpi4py"] = None return watermark