import json

def lab_to_rgb(l, a, b):
    # L*a*b* to XYZ
    fy = (l + 16) / 116
    fx = a / 500 + fy
    fz = fy - b / 200

    def f_inv(t):
        if t ** 3 > 0.008856:
            return t ** 3
        else:
            return (t - 16 / 116) / 7.787

    x = f_inv(fx) * 95.047
    y = f_inv(fy) * 100.000
    z = f_inv(fz) * 108.883

    # XYZ to RGB (sRGB D65)
    x = x / 100
    y = y / 100
    z = z / 100

    r = x * 3.2406 + y * -1.5372 + z * -0.4986
    g = x * -0.9689 + y * 1.8758 + z * 0.0415
    b_val = x * 0.0557 + y * -0.2040 + z * 1.0570

    def gamma(c):
        if c > 0.0031308:
            return 1.055 * (c ** (1 / 2.4)) - 0.055
        else:
            return 12.92 * c

    r = max(0, min(1, gamma(r)))
    g = max(0, min(1, gamma(g)))
    b_val = max(0, min(1, gamma(b_val)))

    return int(round(r * 255)), int(round(g * 255)), int(round(b_val * 255))

# Using 20% data
l1, a1, b1 = 41.31, 45.59, 48.44
l2, a2, b2 = 6.19, 19.24, 5.96

l = 0.6 * l1 + 0.4 * l2
a = 0.6 * a1 + 0.4 * a2
b = 0.6 * b1 + 0.4 * b2

r, g, b_val = lab_to_rgb(l, a, b)
hex_color = "#{:02x}{:02x}{:02x}".format(r, g, b_val)
print(f"L: {l:.2f}, a: {a:.2f}, b: {b:.2f}")
print(f"Hex: {hex_color}")
