frogarized: Improve typing

This commit is contained in:
Geoffrey Frogeye 2025-05-09 13:42:45 +02:00
parent ea9a75d495
commit d157e374e6

View file

@ -8,6 +8,7 @@ import json
import colorspacious
import numpy as np
import numpy.typing as npt
# Original values for the Solarized color scheme,
# created by Ethan Schoonover (https://ethanschoonover.com/solarized/)
@ -59,43 +60,50 @@ SOLARIZED_RGB = np.array(
parser = argparse.ArgumentParser(
description="Generate a base16-theme based derived from Solarized"
)
parser.add_argument("--source", choices=["lab", "rgb"], default="lab")
parser.add_argument("--lightness_factor", type=float, default=1.0)
parser.add_argument("--chroma-factor", type=float, default=1.0)
parser.add_argument("--hue_shift", type=float, default=-75.0)
parser.add_argument("--polarity", choices=["dark", "light"], default="dark")
parser.add_argument(
_ = parser.add_argument("--source", choices=["lab", "rgb"], default="lab")
_ = parser.add_argument("--lightness_factor", type=float, default=1.0)
_ = parser.add_argument("--chroma-factor", type=float, default=1.0)
_ = parser.add_argument("--hue_shift", type=float, default=-75.0)
_ = parser.add_argument(
"--polarity", choices=["dark", "light"], default="dark"
)
_ = parser.add_argument(
"--output", choices=["json", "truecolor"], default="truecolor"
)
args = parser.parse_args()
def cspace_convert(
array: npt.NDArray[np.float64], src: str, dst: str
) -> npt.NDArray[np.float64]:
return colorspacious.cspace_convert(array, src, dst)
# Convert source to JCh color space
if args.source == "lab":
solarized_jch = colorspacious.cspace_convert(
SOLARIZED_LAB, "CIELab", "JCh"
)
elif args.source == "rgb":
solarized_jch = colorspacious.cspace_convert(
SOLARIZED_RGB, "sRGB255", "JCh"
)
solarized_jch = cspace_convert(SOLARIZED_LAB, "CIELab", "JCh")
else: # rgb
solarized_jch = cspace_convert(SOLARIZED_RGB, "sRGB255", "JCh")
# Build frogarized theme
jch_factor = [args.lightness_factor, args.chroma_factor, 1]
jch_shift = [0, 0, args.hue_shift]
frogarzied_jch = np.vstack(
jch_factor: list[float] = [args.lightness_factor, args.chroma_factor, 1]
jch_shift: list[float] = [0, 0, args.hue_shift]
frogarized_jch = np.vstack(
[solarized_jch[:8] * jch_factor + jch_shift, solarized_jch[8:]]
)
# Convert frogarized to RGB
frogarized_srgb = colorspacious.cspace_convert(
frogarzied_jch, "JCh", "sRGB255"
frogarized_srgb = cspace_convert(frogarized_jch, "JCh", "sRGB255")
frogarized_rgb = np.asarray(
np.rint(np.clip(frogarized_srgb, 0, 255)), dtype=np.uint8
)
frogarized_rgb = np.uint8(np.rint(np.clip(frogarized_srgb, 0, 255)))
if args.polarity == "light":
frogarized_rgb = np.vstack([frogarized_rgb[7::-1], frogarized_rgb[8:]])
# Output
palette = {}
palette: dict[str, str] = {}
for i in range(16):
rgb = frogarized_rgb[i]
r, g, b = rgb