Skip to content

Commit 345680c

Browse files
committed
Fix issue where trailing _r/_s cmaps cannot be registered
1 parent 0e93b7f commit 345680c

1 file changed

Lines changed: 17 additions & 7 deletions

File tree

proplot/colors.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3012,13 +3012,12 @@ def _translate_deprecated(self, key):
30123012
test = self._regex_suffix.sub('', key)
30133013
else:
30143014
test = None
3015-
found = dict.__contains__(self, test)
3016-
if not found and test in CMAPS_REMOVED:
3015+
if not self._has_item(test) and test in CMAPS_REMOVED:
30173016
version = CMAPS_REMOVED[test]
30183017
raise ValueError(
30193018
f'Proplot colormap {key!r} was removed in version {version}.'
30203019
)
3021-
if not found and test in CMAPS_RENAMED:
3020+
if not self._has_item(test) and test in CMAPS_RENAMED:
30223021
test_new, version = CMAPS_RENAMED[test]
30233022
warnings._warn_proplot(
30243023
f'Colormap {test!r} was renamed in version {version} and will be '
@@ -3031,34 +3030,44 @@ def _translate_key(self, key, mirror=True):
30313030
"""
30323031
Return the sanitized colormap name. Used for lookups and assignments.
30333032
"""
3033+
# Sanitize key
30343034
if not isinstance(key, str):
30353035
raise KeyError(f'Invalid key {key!r}. Key must be a string.')
30363036
key = key.lower()
30373037
key = self._regex_grays.sub(r'greys\2', key)
3038+
# Mirror diverging
30383039
reverse = key[-2:] == '_r'
30393040
if reverse:
30403041
key = key[:-2]
3041-
if mirror and not dict.__contains__(self, key): # avoid recursion here
3042+
if mirror and not self._has_item(key): # avoid recursion here
30423043
key_mirror = CMAPS_DIVERGING.get(key, None)
3043-
if key_mirror and dict.__contains__(self, key_mirror):
3044+
if key_mirror and self._has_item(key_mirror):
30443045
reverse = not reverse
30453046
key = key_mirror
30463047
if reverse:
30473048
key = key + '_r'
30483049
return key
30493050

3051+
def _has_item(self, key):
3052+
"""
3053+
Redirect to unsanitized `dict.__contains__`.
3054+
"""
3055+
return dict.__contains__(self, key)
3056+
30503057
def _get_item(self, key):
30513058
"""
30523059
Get the colormap with flexible input keys.
30533060
"""
3061+
# Sanitize key
30543062
key = self._translate_deprecated(key)
30553063
key = self._translate_key(key, mirror=True)
3056-
shift = key[-2:] == '_s'
3064+
shift = key[-2:] == '_s' and not self._has_item(key)
30573065
if shift:
30583066
key = key[:-2]
3059-
reverse = key[-2:] == '_r'
3067+
reverse = key[-2:] == '_r' and not self._has_item(key)
30603068
if reverse:
30613069
key = key[:-2]
3070+
# Retrieve colormap
30623071
try:
30633072
value = dict.__getitem__(self, key) # may raise keyerror
30643073
except KeyError:
@@ -3067,6 +3076,7 @@ def _get_item(self, key):
30673076
+ ', '.join(map(repr, self))
30683077
+ '.'
30693078
)
3079+
# Modify colormap
30703080
if reverse:
30713081
value = value.reversed()
30723082
if shift:

0 commit comments

Comments
 (0)