Skip to content

Commit 22ecf06

Browse files
committed
feat: add py.typed marker and fix strict mypy errors
1 parent f7f66af commit 22ecf06

5 files changed

Lines changed: 10 additions & 6 deletions

File tree

packages/python/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ classifiers = [
2323
"Programming Language :: Python :: 3.12",
2424
"Programming Language :: Python :: 3.13",
2525
"Topic :: Multimedia :: Graphics",
26+
"Typing :: Typed",
2627
]
2728

2829
dependencies = [

packages/python/src/epaper_dithering/algorithms.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from __future__ import annotations
44

55
from dataclasses import dataclass
6+
from typing import cast
67

78
import numpy as np
89
from PIL import Image
@@ -195,7 +196,7 @@ def error_diffusion_dither(
195196
if tone_compression == "auto":
196197
pixels_linear = auto_compress_dynamic_range(pixels_linear, palette_linear)
197198
else:
198-
pixels_linear = compress_dynamic_range(pixels_linear, palette_linear, tone_compression)
199+
pixels_linear = compress_dynamic_range(pixels_linear, palette_linear, cast(float, tone_compression))
199200

200201
# Pre-compute palette LAB components for scalar per-pixel matching
201202
palette_L, palette_a, palette_b, palette_C = precompute_palette_lab(palette_linear)
@@ -485,7 +486,7 @@ def direct_palette_map(
485486
if tone_compression == "auto":
486487
pixels_linear = auto_compress_dynamic_range(pixels_linear, palette_linear)
487488
else:
488-
pixels_linear = compress_dynamic_range(pixels_linear, palette_linear, tone_compression)
489+
pixels_linear = compress_dynamic_range(pixels_linear, palette_linear, cast(float, tone_compression))
489490

490491
# Find closest palette color for ALL pixels at once using LAB
491492
output_pixels = find_closest_palette_color_lab(pixels_linear, palette_linear)
@@ -555,7 +556,7 @@ def ordered_dither(
555556
if tone_compression == "auto":
556557
pixels_linear = auto_compress_dynamic_range(pixels_linear, palette_linear)
557558
else:
558-
pixels_linear = compress_dynamic_range(pixels_linear, palette_linear, tone_compression)
559+
pixels_linear = compress_dynamic_range(pixels_linear, palette_linear, cast(float, tone_compression))
559560

560561
# ===== VECTORIZED ORDERED DITHERING =====
561562

packages/python/src/epaper_dithering/color_space_lab.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ def find_closest_palette_color_lab(
143143
def _lab_f(t: float) -> float:
144144
"""CIE LAB nonlinear function (scalar version)."""
145145
if t > _EPSILON:
146-
return t ** (1.0 / 3.0)
146+
return float(t ** (1.0 / 3.0))
147147
return (_KAPPA * t + 16.0) / 116.0
148148

149149

packages/python/src/epaper_dithering/py.typed

Whitespace-only changes.

packages/python/src/epaper_dithering/tone_map.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
from __future__ import annotations
1111

12+
from typing import cast
13+
1214
import numpy as np
1315

1416
# ITU-R BT.709 luminance coefficients (same as sRGB)
@@ -83,7 +85,7 @@ def compress_dynamic_range(
8385
result[near_black, 1] = black_level
8486
result[near_black, 2] = black_level
8587

86-
return np.clip(result, 0.0, 1.0)
88+
return cast(np.ndarray, np.clip(result, 0.0, 1.0))
8789

8890

8991
def auto_compress_dynamic_range(
@@ -153,4 +155,4 @@ def auto_compress_dynamic_range(
153155
result[near_black, 1] = black_Y
154156
result[near_black, 2] = black_Y
155157

156-
return np.clip(result, 0.0, 1.0)
158+
return cast(np.ndarray, np.clip(result, 0.0, 1.0))

0 commit comments

Comments
 (0)