# Path: third_party/xiuminglib/xiuminglib/imprt.py
# def preset_import(name, assert_success=False):
#     """A unified importer for both regular and ``google3`` modules, according
#     to specified presets/profiles (e.g., ignoring ``ModuleNotFoundError``).
#     """
#     if name in ('cv2', 'opencv'):
#         try:
#             # BUILD dep:
#             # "//third_party/py/cvx2",
#             from cvx2 import latest as mod
#             # Or
#             # BUILD dep:
#             # "//third_party/OpenCVX:cvx2",
#             # from google3.third_party.OpenCVX import cvx2 as cv2
#         except ModuleNotFoundError:
#             mod = import_module_404ok('cv2')
# 
#     elif name in ('tf', 'tensorflow'):
#         mod = import_module_404ok('tensorflow')
# 
#     elif name == 'gfile':
#         # BUILD deps:
#         # "//pyglib:gfile",
#         # "//file/colossus/cns",
#         mod = import_module_404ok('google3.pyglib.gfile')
# 
#     elif name == 'video_api':
#         # BUILD deps:
#         # "//learning/deepmind/video/python:video_api",
#         mod = import_module_404ok(
#             'google3.learning.deepmind.video.python.video_api')
# 
#     elif name in ('bpy', 'bmesh', 'OpenEXR', 'Imath'):
#         # BUILD deps:
#         # "//third_party/py/Imath",
#         # "//third_party/py/OpenEXR",
#         mod = import_module_404ok(name)
# 
#     elif name in ('Vector', 'Matrix', 'Quaternion'):
#         mod = import_module_404ok('mathutils')
#         mod = _get_module_class(mod, name)
# 
#     elif name == 'BVHTree':
#         mod = import_module_404ok('mathutils.bvhtree')
#         mod = _get_module_class(mod, name)
# 
#     else:
#         raise NotImplementedError(name)
# 
#     if assert_success:
#         assert mod is not None, "Failed in importing '%s'" % name
# 
#     return mod
# 
# Path: third_party/xiuminglib/xiuminglib/log.py
# def get_logger(level=None):
#     """Creates a logger for functions in the library.
# 
#     Args:
#         level (str, optional): Logging level. Defaults to ``logging.INFO``.
# 
#     Returns:
#         logging.Logger: Logger created.
#     """
#     if level is None:
#         level = logging.INFO
#     logging.basicConfig(level=level)
#     logger = logging.getLogger()
#     return logger


from copy import deepcopy
from .imprt import preset_import
from .log import get_logger
    from scipy.interpolate import RectBivariateSpline, interp2d
        from scipy.interpolate import griddata
        from scipy.interpolate import Rbf
    from scipy.ndimage.filters import minimum_filter, maximum_filter
import numpy as np
    Returns:
        numpy.ndarray: Converted image in linear RGB.
    """
    if clip:
        im = np.clip(im, 0, 1)
    _assert_float_0to1(im)
    im_ = deepcopy(im)
    # Guaranteed to be [0, 1] floats

    gamma = (
        (im_ + srgb_exponential_coeff - 1) / srgb_exponential_coeff
    ) ** srgb_exponent
    scale = im_ / srgb_linear_coeff
    im_ = np.where(im_ > srgb_linear_thres * srgb_linear_coeff, gamma, scale)

    return im_


def tonemap(hdr, method='gamma', gamma=2.2):
    r"""Tonemaps an HDR image.

    Args:
        hdr (numpy.ndarray): HDR image.
        method (str, optional): Values accepted: ``'gamma'`` and ``'reinhard'``.
        gamma (float, optional): Gamma value used if method is ``'gamma'``.

    Returns:
        numpy.ndarray: Tonemapped image :math:`\in [0, 1]`.
    """
    if method == 'reinhard':

# Path: third_party/xiuminglib/xiuminglib/imprt.py
# def preset_import(name, assert_success=False):
#     """A unified importer for both regular and ``google3`` modules, according
#     to specified presets/profiles (e.g., ignoring ``ModuleNotFoundError``).
#     """
#     if name in ('cv2', 'opencv'):
#         try:
#             # BUILD dep:
#             # "//third_party/py/cvx2",
#             from cvx2 import latest as mod
#             # Or
#             # BUILD dep:
#             # "//third_party/OpenCVX:cvx2",
#             # from google3.third_party.OpenCVX import cvx2 as cv2
#         except ModuleNotFoundError:
#             mod = import_module_404ok('cv2')
# 
#     elif name in ('tf', 'tensorflow'):
#         mod = import_module_404ok('tensorflow')
# 
#     elif name == 'gfile':
#         # BUILD deps:
#         # "//pyglib:gfile",
#         # "//file/colossus/cns",
#         mod = import_module_404ok('google3.pyglib.gfile')
# 
#     elif name == 'video_api':
#         # BUILD deps:
#         # "//learning/deepmind/video/python:video_api",
#         mod = import_module_404ok(
#             'google3.learning.deepmind.video.python.video_api')
# 
#     elif name in ('bpy', 'bmesh', 'OpenEXR', 'Imath'):
#         # BUILD deps:
#         # "//third_party/py/Imath",
#         # "//third_party/py/OpenEXR",
#         mod = import_module_404ok(name)
# 
#     elif name in ('Vector', 'Matrix', 'Quaternion'):
#         mod = import_module_404ok('mathutils')
#         mod = _get_module_class(mod, name)
# 
#     elif name == 'BVHTree':
#         mod = import_module_404ok('mathutils.bvhtree')
#         mod = _get_module_class(mod, name)
# 
#     else:
#         raise NotImplementedError(name)
# 
#     if assert_success:
#         assert mod is not None, "Failed in importing '%s'" % name
# 
#     return mod
# 
# Path: third_party/xiuminglib/xiuminglib/log.py
# def get_logger(level=None):
#     """Creates a logger for functions in the library.
# 
#     Args:
#         level (str, optional): Logging level. Defaults to ``logging.INFO``.
# 
#     Returns:
#         logging.Logger: Logger created.
#     """
#     if level is None:
#         level = logging.INFO
#     logging.basicConfig(level=level)
#     logger = logging.getLogger()
#     return logger


# Path: third_party/xiuminglib/xiuminglib/img.py
from copy import deepcopy
from .imprt import preset_import
from .log import get_logger
    from scipy.interpolate import RectBivariateSpline, interp2d
        from scipy.interpolate import griddata
        from scipy.interpolate import Rbf
    from scipy.ndimage.filters import minimum_filter, maximum_filter
import numpy as np

    Returns:
        numpy.ndarray: Converted image in linear RGB.
    """
    if clip:
        im = np.clip(im, 0, 1)
    _assert_float_0to1(im)
    im_ = deepcopy(im)
    # Guaranteed to be [0, 1] floats

    gamma = (
        (im_ + srgb_exponential_coeff - 1) / srgb_exponential_coeff
    ) ** srgb_exponent
    scale = im_ / srgb_linear_coeff
    im_ = np.where(im_ > srgb_linear_thres * srgb_linear_coeff, gamma, scale)

    return im_


def tonemap(hdr, method='gamma', gamma=2.2):
    r"""Tonemaps an HDR image.

    Args:
        hdr (numpy.ndarray): HDR image.
        method (str, optional): Values accepted: ``'gamma'`` and ``'reinhard'``.
        gamma (float, optional): Gamma value used if method is ``'gamma'``.

    Returns:
        numpy.ndarray: Tonemapped image :math:`\in [0, 1]`.
    """
    if method == 'reinhard':

        cv2 = preset_import('cv2', assert_success=True)