Skip to content

Commit 9a1f616

Browse files
authored
fix late binding and proper reversal for funcs (#296)
1 parent 4000eff commit 9a1f616

File tree

2 files changed

+24
-11
lines changed

2 files changed

+24
-11
lines changed

ultraplot/colors.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1271,16 +1271,17 @@ def reversed(self, name=None, **kwargs):
12711271
--------
12721272
matplotlib.colors.LinearSegmentedColormap.reversed
12731273
"""
1274+
12741275
# Reverse segments
1276+
def _reverse_data(data):
1277+
if callable(data):
1278+
return lambda x, func=data: func(1 - x)
1279+
else:
1280+
return [(1.0 - x, y1, y0) for x, y0, y1 in reversed(data)]
1281+
12751282
segmentdata = {
1276-
key: (
1277-
(lambda x, func=data: func(x))
1278-
if callable(data)
1279-
else [(1.0 - x, y1, y0) for x, y0, y1 in reversed(data)]
1280-
)
1281-
for key, data in self._segmentdata.items()
1283+
key: _reverse_data(data) for key, data in self._segmentdata.items()
12821284
}
1283-
12841285
# Reverse gammas
12851286
if name is None:
12861287
name = self._make_name(suffix="r")
@@ -3137,7 +3138,7 @@ def _translate_key(self, original_key, mirror=True):
31373138
# Handle reversal
31383139
reverse = key.endswith("_r")
31393140
if reverse:
3140-
key = key.rstrip("_r")
3141+
key = key.removesuffix("_r")
31413142

31423143
# Check if the key exists in builtin colormaps
31433144
if self._has_item(key):
@@ -3156,7 +3157,7 @@ def _translate_key(self, original_key, mirror=True):
31563157

31573158
# Try mirroring the non-lowered key
31583159
if reverse:
3159-
original_key = original_key.strip("_r")
3160+
original_key = original_key.removesuffix("_r")
31603161
half = len(original_key) // 2
31613162
mirrored_key = original_key[half:] + original_key[:half]
31623163
if self._has_item(mirrored_key):
@@ -3182,11 +3183,11 @@ def __getitem__(self, key):
31823183
key = self._translate_key(key, mirror=True)
31833184
shift = key.endswith("_s") and not self._has_item(key)
31843185
if shift:
3185-
key = key.rstrip("_s")
3186+
key = key.removesuffix("_s")
31863187
reverse = key.endswith("_r") and not self._has_item(key)
31873188

31883189
if reverse:
3189-
key = key.rstrip("_r")
3190+
key = key.removesuffix("_r")
31903191
# Retrieve colormap
31913192
if self._has_item(key):
31923193
value = self._cmaps[key].copy()

ultraplot/tests/test_colormap.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import ultraplot as uplt, pytest, numpy as np
2+
3+
4+
def test_colormap_reversal():
5+
# Rainbow uses a callable which went wrong see
6+
# https://github.com/Ultraplot/UltraPlot/issues/294#issuecomment-3016653770
7+
cmap = uplt.Colormap("rainbow")
8+
cmap_r = cmap.reversed()
9+
for i in range(256):
10+
assert np.allclose(
11+
cmap(i), cmap_r(255 - i)
12+
), f"Reversed colormap mismatch at index {i}"

0 commit comments

Comments
 (0)