Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions materialyoucolor/temperature/temperature_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,13 @@ def complement(self) -> Hct:
warmest_hue = self.warmest.hue
warmest_temp = self.temps_by_hct.get(self.warmest, 0.0)
range_temp = warmest_temp - coldest_temp

# At a tone extreme every hue resolves to the same color, leaving no range to
# divide by; return the input, as relative_temperature does in that case.
if range_temp == 0.0:
self.complement_cache = self.hcts_by_hue[round(self.input.hue)]
return self.complement_cache

start_hue_is_coldest_to_warmest = TemperatureCache.is_between(
self.input.hue, coldest_hue, warmest_hue
)
Expand Down
16 changes: 16 additions & 0 deletions tests/test_all.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
from materialyoucolor.scheme.scheme import Scheme
from materialyoucolor.scheme.scheme_android import SchemeAndroid
from materialyoucolor.score.score import Score
from materialyoucolor.temperature.temperature_cache import TemperatureCache
from materialyoucolor.utils.color_utils import hex_from_rgba, rgba_from_argb


Expand Down Expand Up @@ -119,6 +120,21 @@ def get_current_rss_mb():

selected = Score.score(colors)


# Regression: tone extremes leave TemperatureCache with a zero temperature range,
# which used to make complement raise ZeroDivisionError (issue #28).
def check_tone_extremes():
for argb in [0xFFFFFFFF, 0xFF000000, 0xFF010101]:
source = Hct.from_int(argb)
assert TemperatureCache(source).complement.to_int() == source.to_int()
for spec_version in ["2021", "2025"]:
for is_dark in [False, True]:
# SchemeFidelity reaches complement via get_tertiary_palette.
SchemeFidelity(source, is_dark, 0.0, spec_version=spec_version)


check_tone_extremes()

if os.name == "nt":
exit(0)

Expand Down
Loading