summaryrefslogtreecommitdiff
path: root/test_coverage.py
diff options
context:
space:
mode:
Diffstat (limited to 'test_coverage.py')
-rw-r--r--test_coverage.py104
1 files changed, 51 insertions, 53 deletions
diff --git a/test_coverage.py b/test_coverage.py
index ee519f4..de2d8a2 100644
--- a/test_coverage.py
+++ b/test_coverage.py
@@ -7,69 +7,67 @@ from gsoc_common import model_sd, D65, D65_xy, plot_comparison
# Solve for a specific RGB color
def optimize_RGB(linear_RGB, coeffs_0):
- RGB = eotf_inverse_sRGB(linear_RGB)
- XYZ = sRGB_to_XYZ(RGB, D65_xy)
-
- coeffs, error = coefficients_Jakob2019(
- XYZ,
- dimensionalise=False,
- coefficients_0=coeffs_0
- )
-
- if error > 1e-6:
- with open("out/bad.txt", "a") as fd:
- fd.write("\n")
- fd.write("linear_RGB=%s\n" % linear_RGB)
- fd.write("XYZ=%s\n" % XYZ)
- fd.write("coeffs_0=%s\n" % coeffs_0)
- fd.write("coeffs=%s, error=%g\n" % (coeffs, error))
-
- # A low budget graph to quickly see what's going on
- log_error = np.log10(error)
- bars = "|" * max(0, int(5 * (log_error + 9)))
-
- print("%12.5g %12.5g %12.5g %5.3f %s" % (*XYZ, log_error, bars))
- return coeffs
+ coeffs, error = coefficients_Jakob2019(
+ linear_RGB,
+ RGB_COLOURSPACES["sRGB"],
+ dimensionalise=False,
+ coefficients_0=coeffs_0
+ )
+
+ if error > 1e-6:
+ with open("out/bad.txt", "a") as fd:
+ fd.write("\n")
+ fd.write("linear_RGB=%s\n" % linear_RGB)
+ fd.write("XYZ=%s\n" % XYZ)
+ fd.write("coeffs_0=%s\n" % coeffs_0)
+ fd.write("coeffs=%s, error=%g\n" % (coeffs, error))
+
+ # A low budget graph to quickly see what's going on
+ log_error = np.log10(error)
+ bars = "|" * max(0, int(5 * (log_error + 9)))
+
+ print("%12.5g %12.5g %12.5g %5.3f %s" % (*linear_RGB, log_error, bars))
+ return coeffs
# Solve for all lightness values of a fully saturated RGB color
def optimize_chromaticity(linear_RGB):
- # alpha's aren't spaced equally (see the article)
- def smoothstep(x):
- return x**2 * (3 - 2 * x)
+ # alpha's aren't spaced equally (see the article)
+ def smoothstep(x):
+ return x**2 * (3 - 2 * x)
- steps = np.arange(0, LIGHTNESS_STEPS)
- alphas = smoothstep(smoothstep(steps / LIGHTNESS_STEPS))
+ steps = np.arange(0, LIGHTNESS_STEPS)
+ alphas = smoothstep(smoothstep(steps / LIGHTNESS_STEPS))
- i_mid = LIGHTNESS_STEPS // 5
- coeffs_mid = optimize_RGB(linear_RGB * alphas[i_mid], (0, 0, 0))
+ i_mid = LIGHTNESS_STEPS // 5
+ coeffs_mid = optimize_RGB(linear_RGB * alphas[i_mid], (0, 0, 0))
- coeffs_0 = coeffs_mid
- for i in range(i_mid + 1, LIGHTNESS_STEPS):
- coeffs_0 = optimize_RGB(linear_RGB * alphas[i], coeffs_0)
+ coeffs_0 = coeffs_mid
+ for i in range(i_mid + 1, LIGHTNESS_STEPS):
+ coeffs_0 = optimize_RGB(linear_RGB * alphas[i], coeffs_0)
- coeffs_0 = coeffs_mid
- for i in reversed(range(0, i_mid)):
- coeffs_0 = optimize_RGB(linear_RGB * alphas[i], coeffs_0)
+ coeffs_0 = coeffs_mid
+ for i in reversed(range(0, i_mid)):
+ coeffs_0 = optimize_RGB(linear_RGB * alphas[i], coeffs_0)
# This program runs XYZ_to_sd_Jakob2019 converges on a large number of inputs,
# covering an entire RGB gamut, to see if it'll diverge somewhere.
if __name__ == "__main__":
- CHROMA_STEPS = 8
- LIGHTNESS_STEPS = 64
-
- with open("out/bad.txt", "w") as fd:
- fd.write("Going through %dx%dx%d cubes\n"
- % (LIGHTNESS_STEPS, CHROMA_STEPS, CHROMA_STEPS))
-
- args = []
- for A in np.linspace(0, 1, CHROMA_STEPS):
- for B in np.linspace(0, 1, CHROMA_STEPS):
- for RGB in [np.array([1, A, B]),
- np.array([A, 1, B]),
- np.array([A, B, 1])]:
- args.append(RGB)
-
- pool = multiprocessing.Pool()
- pool.map(optimize_chromaticity, args)
+ CHROMA_STEPS = 8
+ LIGHTNESS_STEPS = 64
+
+ with open("out/bad.txt", "w") as fd:
+ fd.write("Going through %dx%dx%d cubes\n"
+ % (LIGHTNESS_STEPS, CHROMA_STEPS, CHROMA_STEPS))
+
+ args = []
+ for A in np.linspace(0, 1, CHROMA_STEPS):
+ for B in np.linspace(0, 1, CHROMA_STEPS):
+ for RGB in [np.array([1, A, B]),
+ np.array([A, 1, B]),
+ np.array([A, B, 1])]:
+ args.append(RGB)
+
+ pool = multiprocessing.Pool()
+ pool.map(optimize_chromaticity, args)