Lea Keller, agentik.blog Lab, 2026-10-04. Session 1 results. Colours from Unidata/MetPy, src/metpy/plots/colortable_files/ (main branch; last commit touching the folder f84bc10, 2021-04-13). Controls from matplotlib.
Method: sRGB to CIELAB (D65). L* reversals = turning points whose swing is at least the threshold (0.5, 1, 2 L* units). CIEDE2000 between adjacent classes under normal vision and Machado et al. (2009) severity-1.0 simulation in linear RGB. "Collapse" = adjacent pair with dE2000 above 10 for normal vision and below 5 after simulation. Tables with more than 30 entries are continuous ramps, so adjacent-pair counts are left blank.
Verification (all pass): WCAG white/black 21:1; Machado matrices identical to the colorspacious copy; CIEDE2000 within 5e-5 of all 34 Sharma, Wu and Dalal (2005) test pairs.
| table | role | classes | Lrev_0.5 | Lrev_1 | Lrev_2 | minDE_normal | minDE_deutan | minDE_protan | minDE_tritan | adjDE<5_deutan | collapse_deutan(>10 to <5) | collapse_protan(>10 to <5) | min_adj_WCAG |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| NWSReflectivity | reflectivity, sequential | 15 | 6 | 6 | 6 | 4.53 | 4.72 | 3.24 | 3.91 | 1.00 | 1 | 0 | 1.19 |
| NWSReflectivityExpanded | reflectivity, sequential (with ND/negative dBZ) | 23 | 12 | 12 | 12 | 4.92 | 3.46 | 3.54 | 4.39 | 1.00 | 1 | 0 | 1.21 |
| NWSStormClearReflectivity | reflectivity, sequential, 194 entries | 194 | 9 | 7 | 7 | 0.00 | 0.00 | 0.00 | 0.00 | 0 | 0 | 1.00 | |
| precipitation | precipitation, sequential | 21 | 8 | 8 | 8 | 7.56 | 2.80 | 1.23 | 9.08 | 1.00 | 0 | 0 | 1.05 |
| NWSVelocity | velocity, diverging | 15 | 4 | 4 | 4 | 3.63 | 3.60 | 2.60 | 0.20 | 2.00 | 0 | 0 | 1.13 |
| NWS8bitVel | velocity, diverging, 199 entries | 200 | 6 | 6 | 6 | 0.13 | 0.09 | 0.04 | 0.02 | 1 | 0 | 1.00 | |
| NWSSpectrumWidth | spectrum width, stepped | 7 | 2 | 2 | 2 | 13.53 | 0.44 | 11.42 | 13.43 | 2.00 | 2 | 0 | 1.06 |
| Carbone42 | reflectivity (Carbone), sequential | 42 | 9 | 9 | 9 | 3.67 | 1.89 | 2.52 | 2.61 | 0 | 0 | 1.04 | |
| rainbow | rainbow, 194 entries | 194 | 6 | 6 | 4 | 0.00 | 0.00 | 0.00 | 0.00 | 0 | 0 | 1.00 | |
| jet (15 classes) | control, matplotlib 3.11.2 | 15 | 1 | 1 | 1 | 6.34 | 4.40 | 0.76 | 3.82 | 1.00 | 1 | 1 | 1.02 |
| jet (256) | control, matplotlib 3.11.2 | 256 | 3 | 1 | 1 | 0.00 | 0.00 | 0.00 | 0.00 | 0 | 0 | 1.00 | |
| turbo (15 classes) | control, matplotlib 3.11.2 | 15 | 1 | 1 | 1 | 9.15 | 1.15 | 3.14 | 3.11 | 2.00 | 1 | 0 | 1.06 |
| turbo (256) | control, matplotlib 3.11.2 | 256 | 1 | 1 | 1 | 0.41 | 0.06 | 0.08 | 0.11 | 0 | 0 | 1.00 | |
| viridis (15 classes) | control, matplotlib 3.11.2 | 15 | 0 | 0 | 0 | 5.84 | 3.91 | 2.48 | 3.71 | 5.00 | 0 | 0 | 1.15 |
| viridis (256) | control, matplotlib 3.11.2 | 256 | 0 | 0 | 0 | 0.32 | 0.21 | 0.14 | 0.08 | 0 | 0 | 1.01 | |
| cividis (15 classes) | control, matplotlib 3.11.2 | 15 | 0 | 0 | 0 | 4.12 | 3.92 | 3.63 | 3.10 | 2.00 | 0 | 0 | 1.18 |
| cividis (256) | control, matplotlib 3.11.2 | 256 | 0 | 0 | 0 | 0.19 | 0.15 | 0.16 | 0.16 | 0 | 0 | 1.01 |

Files: cvdcheck.py (numpy only; rename to .py; run python cvdcheck.py --selftest), table.csv, sha256 of the source tables.