LightDiffusion-Next / tests /unit /test_autohdr.py
Aatricks's picture
Deploy ZeroGPU Gradio Space snapshot
b701455
import torch
from unittest.mock import patch
from src.Processors.AutoHDRProcessor import AutoHDRProcessor
def _make_image(batch=1, h=64, w=64, c=3):
# Image expected shape for the processor (B, H, W, C)
return torch.rand(batch, h, w, c)
def test_autohdr_fallback_on_profile_error(monkeypatch):
img = _make_image()
# Simulate ImageCms.profileToProfile raising an error
import src.AutoHDR.ahdr as ahdr_module
def fake_profile_to_profile(*args, **kwargs):
raise OSError("cannot build transform")
monkeypatch.setattr('PIL.ImageCms.profileToProfile', fake_profile_to_profile)
# Should not raise and should return a tensor of same batch shape
out = AutoHDRProcessor.apply(img, ctx=None)
assert isinstance(out, torch.Tensor)
assert out.shape[0] == img.shape[0]
def test_autohdr_detects_lcms_missing_on_import(monkeypatch, caplog):
"""When ImageCms.profileToProfile is unavailable at import time, module sets _HAVE_LCMS=False and logs a warning."""
import importlib
from PIL import ImageCms as ImageCmsPIL
import src.AutoHDR.ahdr as ahdr_module
orig = ImageCmsPIL.profileToProfile
try:
monkeypatch.setattr(ImageCmsPIL, 'profileToProfile', lambda *a, **k: (_ for _ in ()).throw(OSError('cannot build transform')))
caplog.set_level('WARNING')
importlib.reload(ahdr_module)
assert ahdr_module._HAVE_LCMS is False
assert any('LCMS profile transform not available' in rec.getMessage() for rec in caplog.records)
finally:
# Restore clean module state for other tests
monkeypatch.setattr(ImageCmsPIL, 'profileToProfile', orig)
importlib.reload(ahdr_module)
def test_autohdr_handles_rgba_image(monkeypatch):
"""AutoHDR should accept RGBA images and preserve the alpha channel."""
img = _make_image(batch=1, h=64, w=64, c=4)
out = AutoHDRProcessor.apply(img, ctx=None)
assert isinstance(out, torch.Tensor)
assert out.shape[0] == img.shape[0]
# Ensure output still has 4 channels
assert out.shape[-1] == 4
def test_autohdr_rgba_fallback_on_profile_error(monkeypatch):
"""When ImageCms.profileToProfile raises for RGBA input, AutoHDR should fallback without raising."""
img = _make_image(batch=1, h=64, w=64, c=4)
import src.AutoHDR.ahdr as ahdr_module
def fake_profile_to_profile(*args, **kwargs):
raise OSError("cannot build transform")
monkeypatch.setattr('PIL.ImageCms.profileToProfile', fake_profile_to_profile)
out = AutoHDRProcessor.apply(img, ctx=None)
assert isinstance(out, torch.Tensor)
assert out.shape[0] == img.shape[0]
assert out.shape[-1] == 4
def test_autohdr_disables_lcms_on_runtime_failure(monkeypatch):
"""When ImageCms.profileToProfile fails at runtime, AutoHDR should set _HAVE_LCMS=False."""
import src.AutoHDR.ahdr as ahdr_module
# Simulate LCMS being available at import time
ahdr_module._HAVE_LCMS = True
# But make profileToProfile raise during runtime
def fake_profile_to_profile(*args, **kwargs):
raise OSError("cannot build transform")
monkeypatch.setattr('PIL.ImageCms.profileToProfile', fake_profile_to_profile)
img = _make_image()
out = AutoHDRProcessor.apply(img, ctx=None)
assert isinstance(out, torch.Tensor)
assert ahdr_module._HAVE_LCMS is False