#!/usr/bin/env python
# -*- coding, utf-8 -*-
"""Colormap objects and utilities.
"""
import json
import logging
import os
from collections import OrderedDict
import numpy as np
from vispy.color.colormap import BaseColormap, Colormap, _colormaps, _mix_simple
from uwsift.util import get_package_data_dir
CMAP_BASE_DIR = os.path.join(get_package_data_dir(), "colormaps")
AWIPS_DIR = os.path.join(CMAP_BASE_DIR, "OAX", "GOES-R")
LOG = logging.getLogger(__name__)
def _get_awips_colors(cmap_file):
from defusedxml import ElementTree
tree = ElementTree.parse(cmap_file)
colors = np.array([(float(c.get("r")), float(c.get("g")), float(c.get("b"))) for c in tree.findall("color")])
return colors
[docs]
class SquareRootColormap(BaseColormap):
colors = [(0.0, 0.0, 0.0, 1.0), (1.0, 1.0, 1.0, 1.0)]
glsl_map = """
vec4 sqrt_cmap(float t) {
return mix($color_0, $color_1, sqrt(t));
}
"""
[docs]
def map(self, t):
a, b = self.colors.rgba
return _mix_simple(a, b, np.sqrt(t))
[docs]
class FlippedColormap(Colormap):
"""Simple wrapper to flip the provided colors and colormaps."""
def __init__(self, colors, controls=None, **kwargs):
colors = colors[::-1]
if controls is not None:
controls = [1 - x for x in controls][::-1]
super().__init__(colors, controls=controls, **kwargs)
[docs]
class BlockedColormap(Colormap):
"""Remove gradients from colormap."""
def __init__(self, colors, controls, **kwargs):
colors_new = []
controls_new = []
for c in colors[:-1]:
colors_new.append(c)
colors_new.append(c)
colors_new.append(colors[-1])
controls_new.append(controls[0])
for c in controls[1:]:
controls_new.append(c - 1.0 / len(controls))
controls_new.append(c)
super().__init__(colors_new, controls=controls_new, **kwargs)
[docs]
class AWIPSColormap(Colormap):
def __init__(self, awips_file, flipped=False, interpolation="linear"):
colors = _get_awips_colors(awips_file)
if flipped:
colors = colors[::-1]
assert isinstance(colors, np.ndarray) # nosec B101
super(AWIPSColormap, self).__init__(colors, interpolation=interpolation)
[docs]
class PyQtGraphColormap(Colormap):
def __init__(self, json_file_or_pqg_cmap, **kwargs):
if isinstance(json_file_or_pqg_cmap, str):
file_data = json.load(open(json_file_or_pqg_cmap, "r"))
else:
file_data = json_file_or_pqg_cmap
self.sqrt = file_data.get("sqrt", False)
controls, rgb_colors = self._convert_pyqtgraph_to_vispy(file_data)
super(PyQtGraphColormap, self).__init__(colors=rgb_colors, controls=controls)
def _convert_pyqtgraph_to_vispy(self, color_item):
points = color_item["ticks"]
# make sure end points are 0 and 1
if points[0][0] != 0:
points = [[0, points[0][1]]] + points
if points[-1][0] != 1:
points.append([1, points[-1][1]])
# must convert color elements to tuples (list and tuple can't be sorted)
controls, rgb_colors = zip(*sorted((tuple(x) for x in points)))
rgb_colors = np.array(rgb_colors) / 255.0
return controls, rgb_colors
# Hand made colormap for the CIRA IR Default colormap
# The XML file from AWIPS doesn't separate things very well or in a way that can be easily automated
# we have to include every break point
cira_ir_colors = [
(0.0, 0.0, 0.0, 1.0), # Black
(0.980392156862745, 0.980392156862745, 0.980392156862745, 1.0), # White
(0.972549019607843, 0.949019607843137, 0, 1.0), # Bright Yellow
(0.372549019607843, 0.372549019607843, 0.0, 1.0), # Dark Yellow
(0.564705882352941, 0.0, 0.0, 1.0), # Dark Red
(0.929411764705882, 0.0, 0.0, 1.0), # Bright Red
(0.949019607843137, 0.0, 0.972549019607843, 1.0), # Bright magenta
(0.549019607843137, 0.0, 0.552941176470588, 1.0), # Dark magenta
(0.0, 0.372549019607843, 0.564705882352941, 1.0), # Dark Cyan
(0.0, 0.780392156862745, 0.815686274509804, 1.0), # Bright Cyan
(0.0470588235294118, 0.972549019607843, 0.0, 1.0), # Bright Green
(0.0, 0.435294117647059, 0.0, 1.0), # Dark Green
(0.0235294117647059, 0.0, 0.0, 1.0), # Black
(0.847058823529412, 0.847058823529412, 0.847058823529412, 1.0), # white-ish
(0.00392156862745098, 0.0, 0.972549019607843, 1.0), # Bright Blue
(0.0, 0.0, 0.4, 1.0), # Dark Blue
(0.972549019607843, 0.0, 0.466666666666667, 1.0), # Bright Red
(0.0980392156862745, 0.0, 0.0392156862745098, 1.0), # Dark Red
(1.0, 1.0, 1.0, 1.0),
(1.0, 1.0, 1.0, 1.0),
]
cira_ir_segment_indexes = [
55,
-30,
-40,
-50,
-60,
-70,
-80,
-90,
-100,
-108,
-109,
]
cira_ir_controls = [(y - 55) / (-109 - 55) for x in cira_ir_segment_indexes for y in [x, x]][1:-1]
cira_ir_default = FlippedColormap(cira_ir_colors, controls=cira_ir_controls)
# Modified cloud_amount_default with 1.0 bounds value
_cloud_amount_default_control_points = (
0.0,
0.03137254901960784,
0.2196078431372549,
0.23137254901960785,
0.2627450980392157,
0.29411764705882354,
0.2980392156862745,
0.996078431372549,
1.0,
)
_cloud_amount_default_colors = (
"#000000",
"#181818",
"#bababa",
"#c4c4c4",
"#e0e0e0",
"#fbfbfb",
"#ffa67d",
"#ffff00",
"#ffff00",
)
cloud_amount_default = Colormap(colors=_cloud_amount_default_colors, controls=_cloud_amount_default_control_points)
_cloud_top_height_control_points = (
0.0,
0.2901960784313726,
0.4549019607843137,
0.611764705882353,
0.7843137254901961,
0.8,
0.8156862745098039,
0.8235294117647058,
0.8627450980392157,
0.9019607843137255,
1.0,
)
_cloud_top_height_colors = (
"#000000",
"#020202",
"#ac7070",
"#a18331",
"#41a166",
"#211d8a",
"#211d89",
"#05f7fb",
"#fbf702",
"#fb0000",
"#ffffff",
)
cloud_top_height = Colormap(colors=_cloud_top_height_colors, controls=_cloud_top_height_control_points)
# Modified low_cloud_base with 1.0 bounds value
_low_cloud_base_control_points = (
0.0,
0.11764705882352941,
0.12549019607843137,
0.1450980392156863,
0.21176470588235294,
0.30196078431372547,
0.3058823529411765,
0.4980392156862745,
0.5450980392156862,
0.5490196078431373,
0.7843137254901961,
1.0,
)
_low_cloud_base_colors = (
"#00aac7",
"#008cab",
"#ffffff",
"#0087a6",
"#007597",
"#005a82",
"#005981",
"#7f7f7f",
"#8a8a8a",
"#8b8b8b",
"#ff0000",
"#ff0000",
)
low_cloud_base = Colormap(colors=_low_cloud_base_colors, controls=_low_cloud_base_control_points)
_rain_rate_control_points = (
0.0,
0.5215686274509804,
0.6,
0.6470588235294118,
0.6980392156862745,
0.7490196078431373,
0.8,
0.8392156862745098,
0.8431372549019608,
0.8941176470588236,
1.0,
)
_rain_rate_colors = (
"#000000",
"#c7c7c7",
"#00ffff",
"#0000ff",
"#00ff00",
"#ffff00",
"#ff9500",
"#e20000",
"#f00000",
"#ff00ff",
"#ffffff",
)
rain_rate = Colormap(colors=_rain_rate_colors, controls=_rain_rate_control_points)
_color11new_control_points = (
0.0,
0.0024425989252564728,
0.064484611626770882,
0.12701514411333659,
0.189057156814851,
0.25158768930141673,
0.31411822178798243,
0.37616023448949681,
0.43869076697606252,
0.50122129946262828,
0.56375183194919398,
0.62579384465070831,
0.68832437713727401,
0.75085490962383972,
0.87542745481191986,
1.0,
)
_color11new_colors = [
"#7e0000",
"#000000",
"#7e3e1f",
"#ff0000",
"#ff7e7e",
"#ffff00",
"#7eff7e",
"#00ff00",
"#007e7e",
"#00ffff",
"#7e7eff",
"#0000ff",
"#7e007e",
"#ff00ff",
"#ffffff",
"#000000",
]
color11new = FlippedColormap(colors=_color11new_colors, controls=_color11new_control_points)
_fog_control_points = (
0.0,
0.027450980392156862,
0.17647058823529413,
0.24313725490196078,
0.3254901960784314,
0.3764705882352941,
1.0,
)
_fog_colors = ("#000000", "#0c0c0c", "#4e4e4e", "#6d6d6d", "#919191", "#a9a9a9", "#ffffff")
fog = Colormap(colors=_fog_colors, controls=_fog_control_points)
_ir_wv_control_points = (
0.0,
0.6431372549019608,
0.7607843137254902,
0.8,
0.803921568627451,
0.8470588235294118,
0.8901960784313725,
0.9215686274509803,
0.9568627450980393,
0.9921568627450981,
1.0,
)
_ir_wv_colors = (
"#000000",
"#f5f5f5",
"#df0000",
"#94009a",
"#8a008a",
"#00c4ce",
"#006d00",
"#d5d5d5",
"#000076",
"#350016",
"#ffffff",
)
ir_wv = FlippedColormap(colors=_ir_wv_colors, controls=_ir_wv_control_points)
_lifted_index__new_cimss_table_control_points = (
0.0,
0.4823529411764706,
0.5607843137254902,
0.5647058823529412,
0.6392156862745098,
0.6431372549019608,
0.7176470588235294,
0.7215686274509804,
0.7843137254901961,
0.9921568627450981,
1.0,
)
_lifted_index__new_cimss_table_colors = (
"#000000",
"#412a0e",
"#7876cf",
"#7b79d4",
"#767502",
"#706f02",
"#ea0000",
"#f10000",
"#f575c7",
"#c6c6c5",
"#ffffff",
)
lifted_index__new_cimss_table = Colormap(
colors=_lifted_index__new_cimss_table_colors, controls=_lifted_index__new_cimss_table_control_points
)
_lifted_index_default_control_points = (
0.0,
0.20392156862745098,
0.2901960784313726,
0.29411764705882354,
0.34901960784313724,
0.35294117647058826,
0.40784313725490196,
0.4627450980392157,
0.4666666666666667,
0.5215686274509804,
0.6392156862745098,
0.6431372549019608,
0.6941176470588235,
0.7803921568627451,
1.0,
)
_lifted_index_default_colors = (
"#000000",
"#7f1818",
"#0abf06",
"#07c405",
"#7382c3",
"#7b8cc6",
"#ca9444",
"#bac005",
"#bec403",
"#ca84c0",
"#c37801",
"#c67b01",
"#b200b6",
"#c27ec4",
"#ffffff",
)
lifted_index_default = Colormap(colors=_lifted_index_default_colors, controls=_lifted_index_default_control_points)
# Modified blended_total_precip_water with 1.0 bounds value
_blended_total_precip_water_control_points = (
0.0,
0.011764705882352941,
0.7372549019607844,
0.7764705882352941,
0.7843137254901961,
0.8313725490196079,
0.8352941176470589,
0.8588235294117647,
0.8823529411764706,
0.9294117647058824,
0.9333333333333333,
0.9803921568627451,
0.9882352941176471,
1.0,
)
_blended_total_precip_water_colors = (
"#000000",
"#db9270",
"#0000c4",
"#00e7e7",
"#00ffff",
"#00f300",
"#00ff00",
"#b9b900",
"#ffff00",
"#f30000",
"#ff0000",
"#f300f3",
"#ffffff",
"#ffffff",
)
blended_total_precip_water = Colormap(
colors=_blended_total_precip_water_colors, controls=_blended_total_precip_water_control_points
)
# Modified percent_of_normal_tpw with 1.0 bounds value
_percent_of_normal_tpw_control_points = (
0.0,
0.12156862745098039,
0.13333333333333333,
0.17254901960784313,
0.29411764705882354,
0.5843137254901961,
0.6431372549019608,
0.7019607843137254,
0.7098039215686275,
0.7450980392156863,
0.7764705882352941,
0.7803921568627451,
0.984313725490196,
1.0,
)
_percent_of_normal_tpw_colors = (
"#000000",
"#875a45",
"#94634c",
"#c08062",
"#ecc9b7",
"#05ffff",
"#00dbdb",
"#00b4b4",
"#00b0b0",
"#009999",
"#008484",
"#008181",
"#ffffff",
"#ffffff",
)
percent_of_normal_tpw = Colormap(colors=_percent_of_normal_tpw_colors, controls=_percent_of_normal_tpw_control_points)
_precip_water__new_cimss_table_control_points = (
0.0,
0.10980392156862745,
0.23137254901960785,
0.34901960784313724,
0.4627450980392157,
0.5764705882352941,
0.5803921568627451,
0.6941176470588235,
0.788235294117647,
0.9921568627450981,
1.0,
)
_precip_water__new_cimss_table_colors = (
"#000000",
"#4c3516",
"#9390f2",
"#0a675e",
"#9fc33c",
"#f3775c",
"#f77a5e",
"#700071",
"#ffc2fc",
"#c6c6c6",
"#ffffff",
)
precip_water__new_cimss_table = Colormap(
colors=_precip_water__new_cimss_table_colors, controls=_precip_water__new_cimss_table_control_points
)
_precip_water__polar_control_points = (
0.0,
0.6862745098039216,
0.7333333333333333,
0.7372549019607844,
0.796078431372549,
0.8156862745098039,
0.8509803921568627,
0.8745098039215686,
0.9294117647058824,
1.0,
)
_precip_water__polar_colors = (
"#000000",
"#ffffff",
"#f1f100",
"#ffff00",
"#00bbef",
"#00ffff",
"#aa0000",
"#ff0000",
"#c7ffc7",
"#ffffff",
)
precip_water__polar = Colormap(colors=_precip_water__polar_colors, controls=_precip_water__polar_control_points)
_precip_water_default_control_points = (
0.0,
0.09411764705882353,
0.21176470588235294,
0.25098039215686274,
0.2901960784313726,
0.32941176470588235,
0.3686274509803922,
0.40784313725490196,
0.4823529411764706,
0.48627450980392156,
0.49411764705882355,
0.4980392156862745,
0.7803921568627451,
1.0,
)
_precip_water_default_colors = (
"#000000",
"#850200",
"#ca2b00",
"#ca9117",
"#6bac1f",
"#22ac4a",
"#279fa1",
"#821ba1",
"#2629a6",
"#1e1fa1",
"#ca4205",
"#ca8203",
"#070355",
"#ffffff",
)
precip_water_default = Colormap(colors=_precip_water_default_colors, controls=_precip_water_default_control_points)
_skin_temp__new_cimss_table_control_points = (
0.0,
0.17254901960784313,
0.17647058823529413,
0.25098039215686274,
0.2549019607843137,
0.3333333333333333,
0.40784313725490196,
0.48627450980392156,
0.49019607843137253,
0.6431372549019608,
0.7764705882352941,
0.7803921568627451,
1.0,
)
_skin_temp__new_cimss_table_colors = (
"#000000",
"#cc5111",
"#cc5211",
"#f6e207",
"#faeb07",
"#1aaf03",
"#03edd9",
"#0523ff",
"#0517ff",
"#fcedff",
"#1afcff",
"#13fcff",
"#ffffff",
)
skin_temp__new_cimss_table = Colormap(
colors=_skin_temp__new_cimss_table_colors, controls=_skin_temp__new_cimss_table_control_points
)
_skin_temp_default_control_points = (
0.0,
0.2901960784313726,
0.2980392156862745,
0.3764705882352941,
0.5333333333333333,
0.6901960784313725,
0.8,
0.8156862745098039,
0.8235294117647058,
0.8627450980392157,
0.9019607843137255,
1.0,
)
_skin_temp_default_colors = (
"#000000",
"#020202",
"#9d3c5e",
"#9d4c00",
"#9d9900",
"#1a8c63",
"#211d8b",
"#211d8a",
"#05f8fc",
"#fcf802",
"#fc0000",
"#ffffff",
)
skin_temp_default = Colormap(colors=_skin_temp_default_colors, controls=_skin_temp_default_control_points)
_ca_low_light_vis_control_points = (
0.0,
0.3333333333333333,
0.6901960784313725,
0.7333333333333333,
0.7764705882352941,
1.0,
)
_ca_low_light_vis_colors = ("#000000", "#818181", "#ffffff", "#9b9b9b", "#464646", "#777777")
ca_low_light_vis = Colormap(colors=_ca_low_light_vis_colors, controls=_ca_low_light_vis_control_points)
_linear_control_points = (
0.0,
0.2980392156862745,
0.4980392156862745,
0.6980392156862745,
0.7058823529411765,
0.8862745098039215,
1.0,
)
_linear_colors = ("#000000", "#4c4c4c", "#7f7f7f", "#b1b1b1", "#b4b4b4", "#e2e2e2", "#ffffff")
linear = Colormap(colors=_linear_colors, controls=_linear_control_points)
# Modified za_vis_default with 1.0 bounds value
_za_vis_default_control_points = (
0.0,
0.23921568627450981,
0.2627450980392157,
0.34901960784313724,
0.5176470588235295,
0.8627450980392157,
1.0,
)
_za_vis_default_colors = ("#000000", "#0b0b0b", "#181818", "#4c4c4c", "#848484", "#ffffff", "#ffffff")
za_vis_default = Colormap(colors=_za_vis_default_colors, controls=_za_vis_default_control_points)
_gray_scale_water_vapor_control_points = (
0.0,
0.6274509803921569,
0.7176470588235294,
0.7803921568627451,
0.9803921568627451,
0.9921568627450981,
1.0,
)
_gray_scale_water_vapor_colors = ("#000000", "#2e2e2e", "#606060", "#838383", "#f0f0f0", "#f6f6f6", "#ffffff")
gray_scale_water_vapor = FlippedColormap(
colors=_gray_scale_water_vapor_colors, controls=_gray_scale_water_vapor_control_points
)
_nssl_vas_wv_alternate_control_points = (
0.0,
0.42745098039215684,
0.47058823529411764,
0.5490196078431373,
0.6274509803921569,
0.6588235294117647,
0.6745098039215687,
0.6901960784313725,
0.7058823529411765,
0.7843137254901961,
0.9098039215686274,
1.0,
)
_nssl_vas_wv_alternate_colors = (
"#000000",
"#9e0000",
"#7f0000",
"#9e3f00",
"#9e7f00",
"#529e00",
"#2bad00",
"#00be45",
"#009e6a",
"#006a9e",
"#a6a6a6",
"#ffffff",
)
nssl_vas_wv_alternate = FlippedColormap(
colors=_nssl_vas_wv_alternate_colors, controls=_nssl_vas_wv_alternate_control_points
)
_ramsdis_wv_control_points = (
0.0,
0.7450980392156863,
0.8,
0.8392156862745098,
0.8745098039215686,
0.9019607843137255,
0.9098039215686274,
0.9137254901960784,
0.9568627450980393,
1.0,
)
_ramsdis_wv_colors = (
"#000000",
"#e5e5e5",
"#0200ee",
"#02ee02",
"#df0000",
"#ac4801",
"#ffffff",
"#626148",
"#606060",
"#ffffff",
)
ramsdis_wv = FlippedColormap(colors=_ramsdis_wv_colors, controls=_ramsdis_wv_control_points)
_slc_wv_control_points = (
0.0,
0.5529411764705883,
0.6431372549019608,
0.7686274509803922,
0.8196078431372549,
0.8235294117647058,
0.8274509803921568,
0.8627450980392157,
0.8862745098039215,
0.8901960784313725,
0.9137254901960784,
0.9254901960784314,
1.0,
)
_slc_wv_colors = (
"#000000",
"#995c35",
"#3a3835",
"#759285",
"#166f4c",
"#076a44",
"#036842",
"#008484",
"#00b0b0",
"#00b6b6",
"#009300",
"#006c00",
"#ffffff",
)
slc_wv = FlippedColormap(colors=_slc_wv_colors, controls=_slc_wv_control_points)
# TOWRS
_actp_control_points = (0.0, 0.16666666666666666, 0.3333333333333333, 0.5, 0.6666666666666666, 0.8333333333333334, 1.0)
_actp_colors = ("#000000", "#00ffff", "#00ff00", "#007f00", "#ff0000", "#ffffff", "#000000")
actp = BlockedColormap(colors=_actp_colors, controls=_actp_control_points)
_adp_control_points = (0.0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0)
_adp_colors = ("#000000", "#000000", "#0000ff", "#0000ff", "#ff0000", "#ff0000", "#ffae17", "#ffae17", "#000000")
adp = BlockedColormap(colors=_adp_colors, controls=_adp_control_points)
_rrqpe_control_points = (
0.0,
0.001669449081803005,
0.1652754590984975,
0.1686143572621035,
0.332220367278798,
0.335559265442404,
0.4991652754590985,
0.5025041736227045,
0.666110183639399,
0.669449081803005,
0.8330550918196995,
0.8363939899833055,
1.0,
)
_rrqpe_colors = (
"#000000",
"#fd7efd",
"#9a1a9a",
"#7ecafd",
"#1a679a",
"#7efd7e",
"#1a9a1a",
"#fdfd7e",
"#9a9a1a",
"#fdca7e",
"#9a671a",
"#fd7e7e",
"#9a1a1a",
)
rrqpe = Colormap(colors=_rrqpe_colors, controls=_rrqpe_control_points)
_vtrsb_control_points = (0.0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.0)
_vtrsb_colors = ("#000000", "#7f00ff", "#0000ff", "#00ffff", "#00ff00", "#ffff00", "#ff0000")
vtrsb = Colormap(colors=_vtrsb_colors, controls=_vtrsb_control_points)
_colorhcapeh10_control_points = (
0.0,
0.1270772238514174,
0.25024437927663734,
0.3421309872922776,
0.4975562072336266,
0.6119257086999023,
0.7302052785923754,
0.8719452590420332,
1.0,
)
_colorhcapeh10_colors = (
"#4d3719",
"#d7aa75",
"#b3b3ff",
"#5a5a99",
"#ffff00",
"#ff8270",
"#ff0000",
"#630066",
"#ef00f4",
)
colorhcapeh10 = Colormap(colors=_colorhcapeh10_colors, controls=_colorhcapeh10_control_points)
_colorhlih10_control_points = (
0.0,
0.09872922776148582,
0.17595307917888564,
0.2785923753665689,
0.4525904203323558,
0.5434995112414467,
0.6920821114369502,
0.7917888563049853,
0.8807429130009775,
1.0,
)
_colorhlih10_colors = (
"#f80000",
"#770000",
"#636d00",
"#e8ff00",
"#7f8bfd",
"#3e4478",
"#ffbb8f",
"#7d898d",
"#3b2b0b",
"#d7b482",
)
colorhlih10 = Colormap(colors=_colorhlih10_colors, controls=_colorhlih10_control_points)
_colorhpw10h10_control_points = (
0.0,
0.11632453567937438,
0.21407624633431085,
0.2883675464320626,
0.34701857282502446,
0.43206256109481916,
0.4555229716520039,
0.5356793743890518,
0.6275659824046921,
0.7047898338220919,
0.7497556207233627,
0.852394916911046,
1.0,
)
_colorhpw10h10_colors = (
"#3b2709",
"#d9a675",
"#9696fa",
"#4f4f96",
"#006363",
"#73a427",
"#92bf3a",
"#ffff00",
"#ff8263",
"#962727",
"#630063",
"#ef00ef",
"#fec7fe",
)
colorhpw10h10 = Colormap(colors=_colorhpw10h10_colors, controls=_colorhpw10h10_control_points)
_colorhpw8h10_control_points = (
0.0,
0.093841642228739,
0.176930596285435,
0.23949169110459434,
0.2883675464320626,
0.3597262952101662,
0.3782991202346041,
0.4467253176930596,
0.5249266862170088,
0.5904203323558163,
0.6275659824046921,
0.7145650048875856,
0.8387096774193549,
0.8582600195503421,
0.9345063538611925,
1.0,
)
_colorhpw8h10_colors = (
"#422c0d",
"#d9a675",
"#9595f8",
"#4f5095",
"#006363",
"#73a427",
"#90be3b",
"#ffff00",
"#ff8263",
"#952728",
"#630063",
"#ef00ef",
"#ffc7ff",
"#e1b3df",
"#fe8265",
"#962727",
)
colorhpw8h10 = Colormap(colors=_colorhpw8h10_colors, controls=_colorhpw8h10_control_points)
_ir_color_clouds_summer_control_points = (
0.0,
0.48168050806057644,
0.48265754763067903,
0.5490962383976551,
0.646800195407914,
0.6951636541279922,
0.7625793844650708,
0.8236443575964827,
0.8847093307278945,
0.9574987787005373,
0.9960918417195896,
0.9970688812896922,
1.0,
)
_ir_color_clouds_summer_colors = (
"#000000",
"#c1c1c1",
"#00fcfd",
"#000073",
"#00ff00",
"#ffff00",
"#ff0000",
"#000000",
"#e6e6e6",
"#7f007f",
"#13daec",
"#06ced4",
"#000000",
)
ir_color_clouds_summer = FlippedColormap(
colors=_ir_color_clouds_summer_colors, controls=_ir_color_clouds_summer_control_points
)
_ir_color_clouds_winter_control_points = (
0.0,
0.12261846604787494,
0.48216902784562776,
0.48314606741573035,
0.5490962383976551,
0.646800195407914,
0.6951636541279922,
0.7625793844650708,
0.8236443575964827,
0.8847093307278945,
0.9574987787005373,
0.9960918417195896,
0.9970688812896922,
1.0,
)
_ir_color_clouds_winter_colors = (
"#000000",
"#010101",
"#c1c1c1",
"#00fafc",
"#000073",
"#00ff00",
"#ffff00",
"#ff0000",
"#000000",
"#e6e6e6",
"#7f007f",
"#13daec",
"#06ced4",
"#000000",
)
ir_color_clouds_winter = FlippedColormap(
colors=_ir_color_clouds_winter_colors, controls=_ir_color_clouds_winter_control_points
)
_rainbow_11_bit_control_points = (
0.0,
0.002442598925256473,
0.06497313141182218,
0.1270151441133366,
0.189057156814851,
0.25158768930141673,
0.31411822178798243,
0.3761602344894968,
0.4386907669760625,
0.5012212994626283,
0.563751831949194,
0.6257938446507083,
0.688324377137274,
0.7513434294088911,
0.8754274548119199,
1.0,
)
_rainbow_11_bit_colors = (
"#7e0000",
"#000000",
"#803e1e",
"#ff0000",
"#ff7e7e",
"#ffff00",
"#7eff7e",
"#00ff00",
"#007e7e",
"#00ffff",
"#7e7eff",
"#0000ff",
"#7e007e",
"#ff00ff",
"#ffffff",
"#000000",
)
rainbow_11_bit = FlippedColormap(colors=_rainbow_11_bit_colors, controls=_rainbow_11_bit_control_points)
_wv_dry_yellow_control_points = (
0.0,
0.21299462628236443,
0.3048363458720078,
0.4211040547142159,
0.48216902784562776,
0.6101612115290669,
0.701514411333659,
1.0,
)
_wv_dry_yellow_colors = ("#000000", "#6c6c6c", "#ff0000", "#ffff00", "#000073", "#ffffff", "#438323", "#000000")
wv_dry_yellow = FlippedColormap(colors=_wv_dry_yellow_colors, controls=_wv_dry_yellow_control_points)
_dust_and_moisture_split_window_control_points = (
0.0,
0.0014655593551538837,
0.002442598925256473,
0.2994626282364436,
0.46555935515388375,
0.46653639472398634,
0.5002442598925256,
0.5339521250610649,
0.6170004885197851,
0.767953102100635,
0.8334147532975086,
1.0,
)
_dust_and_moisture_split_window_colors = (
"#000000",
"#5f5f5f",
"#824513",
"#834614",
"#fddcb1",
"#ffdeae",
"#ffffff",
"#0000ff",
"#ffff00",
"#ff0000",
"#ff00ff",
"#ff00ff",
)
dust_and_moisture_split_window = Colormap(
colors=_dust_and_moisture_split_window_colors, controls=_dust_and_moisture_split_window_control_points
)
_enhancedhrainbowh11_control_points = (
0.0,
0.002442598925256473,
0.06497313141182218,
0.1270151441133366,
0.252076209086468,
0.3146067415730337,
0.37664875427454814,
0.5012212994626283,
0.5642403517342452,
0.626770884220811,
0.6888128969223254,
0.7513434294088911,
0.8754274548119199,
1.0,
)
_enhancedhrainbowh11_colors = (
"#7e0000",
"#000000",
"#803e1e",
"#ff0000",
"#feff00",
"#7efe00",
"#007e00",
"#00ffff",
"#007efe",
"#00007e",
"#800080",
"#ff00ff",
"#ffffff",
"#000000",
)
enhancedhrainbowh11 = FlippedColormap(colors=_enhancedhrainbowh11_colors, controls=_enhancedhrainbowh11_control_points)
_enhancedhrainbow_warmer_yellow_control_points = (
0.0,
0.30685675492192804,
0.35030549898167007,
0.39341479972844534,
0.4803122878479294,
0.5237610319076714,
0.5668703326544468,
0.653428377460964,
0.6972165648336728,
0.7406653088934148,
0.7837746096401901,
0.8272233536999322,
0.9134419551934827,
1.0,
)
_enhancedhrainbow_warmer_yellow_colors = (
"#ffff00",
"#000000",
"#803e1f",
"#ff0000",
"#fdff00",
"#7efd00",
"#007f00",
"#00ffff",
"#007efd",
"#01007f",
"#800080",
"#ff01ff",
"#ffffff",
"#000000",
)
enhancedhrainbow_warmer_yellow = FlippedColormap(
colors=_enhancedhrainbow_warmer_yellow_colors, controls=_enhancedhrainbow_warmer_yellow_control_points
)
_fire_detection_3p9_control_points = (0.0, 0.36590131900341966, 0.36687835857352225, 1.0)
_fire_detection_3p9_colors = ("#ff0000", "#fffc00", "#141414", "#ffffff")
fire_detection_3p9 = FlippedColormap(colors=_fire_detection_3p9_colors, controls=_fire_detection_3p9_control_points)
_ramsdis_ir_12bit_control_points = (
0.0,
0.505982905982906,
0.5064713064713064,
0.5794871794871795,
0.5851037851037851,
0.5855921855921856,
0.6463980463980464,
0.6468864468864469,
0.702075702075702,
0.7074481074481075,
0.768986568986569,
0.7746031746031746,
0.7777777777777778,
0.7841269841269841,
0.7882783882783883,
0.7914529914529914,
0.7963369963369963,
0.8024420024420025,
0.8083028083028083,
0.8146520146520146,
0.819047619047619,
0.8219780219780219,
0.8268620268620268,
0.832967032967033,
0.8412698412698413,
0.8417582417582418,
0.8844932844932845,
0.8901098901098901,
0.8905982905982905,
0.9455433455433455,
0.9514041514041514,
0.9518925518925518,
1.0,
)
_ramsdis_ir_12bit_colors = (
"#080808",
"#ffffff",
"#fdfd00",
"#646400",
"#8c6400",
"#8e0000",
"#f1007b",
"#f100f6",
"#8b008c",
"#005e90",
"#00cad0",
"#0bf800",
"#0bf100",
"#0ae200",
"#09d900",
"#08d200",
"#07c700",
"#06b900",
"#05ac00",
"#049e00",
"#039400",
"#028d00",
"#018200",
"#007500",
"#006f00",
"#000000",
"#d8d8d8",
"#d8d8f6",
"#0000f8",
"#000066",
"#7b0076",
"#f50076",
"#010000",
)
ramsdis_ir_12bit = FlippedColormap(colors=_ramsdis_ir_12bit_colors, controls=_ramsdis_ir_12bit_control_points)
_ramsdis_wv_12bit_control_points = (
0.0,
0.0761904761904762,
0.07765567765567766,
0.07936507936507936,
0.11282051282051282,
0.3474969474969475,
0.34798534798534797,
0.39023199023199023,
0.3934065934065934,
0.43614163614163615,
0.43907203907203907,
0.4818070818070818,
0.4822954822954823,
0.48473748473748474,
0.6156288156288157,
0.6161172161172161,
0.64004884004884,
0.6405372405372405,
0.701098901098901,
0.7015873015873015,
0.7621489621489621,
0.7626373626373626,
0.8234432234432234,
0.8656898656898657,
0.8661782661782662,
0.8717948717948718,
0.8722832722832723,
0.884004884004884,
0.8844932844932845,
0.945054945054945,
0.9455433455433455,
1.0,
)
_ramsdis_wv_12bit_colors = (
"#050500",
"#313100",
"#181800",
"#000000",
"#454500",
"#c8c800",
"#fd4a4a",
"#211212",
"#4b0000",
"#e20000",
"#ff7e00",
"#4b0000",
"#430606",
"#222222",
"#ffffff",
"#6496c8",
"#4d7eb1",
"#000064",
"#0000fe",
"#006400",
"#00fe00",
"#640000",
"#ffff00",
"#8a8a35",
"#ffffff",
"#ffffff",
"#636347",
"#4e4e50",
"#ffffff",
"#4e4e33",
"#000031",
"#000031",
)
ramsdis_wv_12bit = FlippedColormap(colors=_ramsdis_wv_12bit_colors, controls=_ramsdis_wv_12bit_control_points)
white_trans = Colormap(colors=np.array([[0.0, 0.0, 0.0, 0.0], [1.0, 1.0, 1.0, 1.0]]))
red_trans = Colormap(colors=np.array([[0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 1.0]]))
green_trans = Colormap(colors=np.array([[0.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 1.0]]))
blue_trans = Colormap(colors=np.array([[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 1.0, 1.0]]))
[docs]
class LazyColormap(object):
def __init__(self, cmap_class, cmap_file, **kwargs):
self.cmap_class = cmap_class
self.cmap_file = cmap_file
self.kwargs = kwargs
assert os.path.isfile(self.cmap_file) # nosec B101
[docs]
def load(self):
LOG.debug("Loading colormap from file: {}".format(self.cmap_file))
return self.cmap_class(self.cmap_file, **self.kwargs)
VIS_COLORMAPS = OrderedDict(
[
("CA (Low Light Vis)", LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "VIS", "CA (Low Light Vis).cmap"))),
# ('CA (Low Light Vis) (legacy)', ca_low_light_vis),
("Linear", LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "VIS", "Linear.cmap"))),
# ('Linear (legacy)', linear),
("ZA", LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "VIS", "ZA (Vis Default).cmap"))),
# ('ZA (legacy)', za_vis_default),
("Square Root (Vis Default)", SquareRootColormap()),
]
)
IR_COLORMAPS = OrderedDict(
[
(
"Rainbow (IR Default)",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "IR", "Rainbow_11_bit.cmap"), flipped=True),
),
# ('Rainbow (legacy)', color11new),
("CIRA IR", LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "IR", "CIRA (IR Default).cmap"))),
# ('CIRA IR (legacy)', cira_ir_default),
("Fog", LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "IR", "fogdiff_blue.cmap"))),
# ('Fog (legacy)', fog),
("IR WV", LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "IR", "IR WV.cmap"))),
# ('IR WV (legacy)', ir_wv),
(
"Dust and Moisture Split Window",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "IR", "dust_and_moisture_split_window.cmap")),
),
# ('Dust and Moisture Split Window (legacy)', dust_and_moisture_split_window),
]
)
LIFTED_INDEX_COLORMAPS = OrderedDict(
[
(
"Lifted Index (New CIMSS)",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "Lifted Index", "Lifted Index - New CIMSS Table.cmap")),
),
# ('Lifted Index (New CIMSS) (legacy)', lifted_index__new_cimss_table),
(
"Lifted Index",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "Lifted Index", "Lifted Index Default.cmap")),
),
# ('Lifted Index (legacy)', lifted_index_default),
]
)
PRECIP_COLORMAPS = OrderedDict(
[
(
"Blended TPW",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "Precip", "Blended Total Precip Water.cmap")),
),
# ('Blended TPW (legacy)', blended_total_precip_water),
(
"Percent of Normal TPW",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "Precip", "Percent of Normal TPW.cmap")),
),
# ('Percent of Normal TPW (legacy)', percent_of_normal_tpw),
(
"Precipitable Water (New CIMSS)",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "Precip", "Precip Water - New CIMSS Table.cmap")),
),
# ('Precipitable Water (New CIMSS) (legacy)', precip_water__new_cimss_table),
(
"Precipitable Water (Polar)",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "Precip", "Precip Water - Polar.cmap")),
),
# ('Precipitable Water (Polar) (legacy)', precip_water__polar),
(
"Precipitable Water",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "Precip", "Precip Water Default.cmap")),
),
# ('Precipitable Water (legacy)', precip_water_default),
]
)
SKIN_TEMP_COLORMAPS = OrderedDict(
[
(
"Skin Temp (New CIMSS)",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "Skin Temp", "Skin Temp - New CIMSS Table.cmap")),
),
# ('Skin Temp (New CIMSS) (legacy)', skin_temp__new_cimss_table),
("Skin Temp", LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "Skin Temp", "Skin Temp Default.cmap"))),
# ('Skin Temp (legacy)', skin_temp_default),
]
)
WV_COLORMAPS = OrderedDict(
[
(
"Gray Scale Water Vapor",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "WV", "Gray Scale Water Vapor.cmap")),
),
# ('Gray Scale Water Vapor (legacy)', gray_scale_water_vapor),
(
"NSSL VAS (WV Alternate)",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "WV", "NSSL VAS (WV Alternate).cmap")),
),
# ('NSSL VAS (WV Alternate) (legacy)', nssl_vas_wv_alternate),
# ('RAMSDIS WV', ramsdis_wv),
("SLC WV", LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "WV", "SLC WV.cmap"))),
# ('SLC WV (legacy)', slc_wv),
]
)
TOWRS_COLORMAPS = OrderedDict(
[
("ACTP", LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "GOESR-L2", "ACTP.cmap"))),
# ('ACTP (legacy)', actp),
("ADP", LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "GOESR-L2", "ADP.cmap"))),
# ('ADP (legacy)', adp),
("RRQPE", LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "GOESR-L2", "RRQPE.cmap"))),
# ('RRQPE (legacy)', rrqpe),
("VTRSB", LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "GOESR-L2", "VTRSB.cmap"))),
# ('VTRSB (legacy)', vtrsb),
("CAPE", LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "GOESR-L2", "color-cape-10.cmap"))),
# ('CAPE (legacy)', colorhcapeh10),
("LI", LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "GOESR-L2", "color-li-10.cmap"))),
# ('LI (legacy)', colorhlih10),
("PW10", LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "GOESR-L2", "color-pw10-10.cmap"))),
# ('PW10 (legacy)', colorhpw10h10),
("PW8", LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "GOESR-L2", "color-pw8-10.cmap"))),
# ('PW8 (legacy)', colorhpw8h10),
(
"IR Color Clouds Summer",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "IR", "IR_Color_Clouds_Summer.cmap"), flipped=True),
),
# ('IR Color Clouds Summer (legacy)', ir_color_clouds_summer),
(
"IR Color Clouds Winter",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "IR", "IR_Color_Clouds_Winter.cmap"), flipped=True),
),
# ('IR Color Clouds Winter (legacy)', ir_color_clouds_winter),
(
"WV Dry Yellow",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "IR", "WV_Dry_Yellow.cmap"), flipped=True),
),
# ('WV Dry Yellow (legacy)', wv_dry_yellow),
(
"Enhanced Rainbow",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "IR", "enhanced-rainbow-11.cmap"), flipped=True),
),
# ('Enhanced Rainbow (legacy)', enhancedhrainbowh11),
(
"Enhanced RB Warmer Yellow",
LazyColormap(
AWIPSColormap, os.path.join(AWIPS_DIR, "IR", "enhanced-rainbow_warmer_yellow.cmap"), flipped=True
),
),
# ('Enhanced RB Warmer Yellow (legacy)', enhancedhrainbow_warmer_yellow),
(
"Fire Detection",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "IR", "fire_detection_3.9.cmap"), flipped=True),
),
# ('Fire Detection (legacy)', fire_detection_3p9),
(
"RAMSDIS IR",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "IR", "ramsdis_IR_12bit.cmap"), flipped=True),
),
# ('RAMSDIS IR (legacy)', ramsdis_ir_12bit),
(
"RAMSDIS WV",
LazyColormap(AWIPSColormap, os.path.join(AWIPS_DIR, "IR", "ramsdis_WV_12bit.cmap"), flipped=True),
),
# ('RAMSDIS WV (legacy)', ramsdis_wv_12bit),
]
)
OTHER_COLORMAPS = OrderedDict(
[
("Rain Rate", LazyColormap(AWIPSColormap, os.path.join(CMAP_BASE_DIR, "OAX", "Rain Rate.cmap"))),
# ('Rain Rate (legacy)', rain_rate),
("Low Cloud Base", LazyColormap(AWIPSColormap, os.path.join(CMAP_BASE_DIR, "OAX", "Low Cloud Base.cmap"))),
# ('Low Cloud Base (legacy)', low_cloud_base),
("Cloud Amount", LazyColormap(AWIPSColormap, os.path.join(CMAP_BASE_DIR, "OAX", "Cloud Amount Default.cmap"))),
# ('Cloud Amount (legacy)', cloud_amount_default),
("Cloud Top Height", LazyColormap(AWIPSColormap, os.path.join(CMAP_BASE_DIR, "OAX", "Cloud Top Height.cmap"))),
# ('Cloud Top Height (legacy)', cloud_top_height),
("White Transparency", white_trans),
("Red Transparency", red_trans),
("Green Transparency", green_trans),
("Blue Transparency", blue_trans),
("Prob Severe", LazyColormap(AWIPSColormap, os.path.join(CMAP_BASE_DIR, "OAX", "prob_severe.cmap"))),
]
)
USER_COLORMAPS: OrderedDict = OrderedDict()
USER_CATEGORY = "User"
SITE_COLORMAPS: OrderedDict = OrderedDict()
SITE_CATEGORY = "Site"
useable_vispy_cmaps = {k: v for k, v in _colormaps.items() if isinstance(v, BaseColormap)}
CATEGORIZED_COLORMAPS = OrderedDict(
[
(USER_CATEGORY, USER_COLORMAPS),
(SITE_CATEGORY, SITE_COLORMAPS),
("Visible", VIS_COLORMAPS),
("IR", IR_COLORMAPS),
("Lifted Index", LIFTED_INDEX_COLORMAPS),
("Precipitable Water", PRECIP_COLORMAPS),
("Skin Temperature", SKIN_TEMP_COLORMAPS),
("Water Vapor", WV_COLORMAPS),
("TOWR-S", TOWRS_COLORMAPS),
("Other", OTHER_COLORMAPS),
("VisPy", useable_vispy_cmaps),
]
)
DEFAULT_UNKNOWN = "viridis"
DEFAULT_VIS = "Square Root (Vis Default)"
DEFAULT_IR = "Rainbow (IR Default)"
[docs]
class ColormapManager(OrderedDict):
colormap_classes = {
".json": PyQtGraphColormap,
".cmap": AWIPSColormap,
}
# only these files can be overwritten
writeable_extensions = [".json"]
def __init__(self, categories=None):
super(ColormapManager, self).__init__()
# ColormapManager stores things a single level dictionary
# cmap_name -> Colormap object
# _category_dict stores them as cat_name -> {cmap_name -> Colormap}
self._category_dict = OrderedDict()
self._writeable_cmaps = set()
if isinstance(categories, dict):
categories = categories.items()
for item in categories:
if isinstance(item, str):
# must be the name of a category
self._category_dict[item] = []
continue
# must be a dictionary key -> val
key, val = item
if isinstance(val, (LazyColormap, BaseColormap)):
raise ValueError("ColormapManager expects dictionary of " "categories, not colormaps.")
self._category_dict[key] = list(val.keys())
for k, v in val.items():
assert isinstance(v, (LazyColormap, BaseColormap)) # nosec B101
super(ColormapManager, self).__setitem__(k, v)
def __iter__(self):
for cat_dict in self._category_dict.values():
for cmap_name in cat_dict:
yield cmap_name
[docs]
def keys(self):
return iter(self)
[docs]
def iter_colormaps(self, writeable_first=True):
all_cmaps = [(self.is_writeable_colormap(name), name) for name in self]
all_cmaps = sorted(all_cmaps, reverse=writeable_first) # writeable first
for _, cmap in all_cmaps:
try:
cmap_obj = self[cmap]
except KeyError:
# couldn't load a lazy colormap
continue
# check for _controls in vispy colormaps, can't use in gradient
# editor otherwise
if cmap_obj.colors and hasattr(cmap_obj, "_controls"):
yield cmap
def _files_for_dir(self, base_dir, recursive=True):
for subdir, _, files in os.walk(base_dir):
for file_to_import in files:
nfp = os.path.join(subdir, file_to_import)
file_stem, file_ext = os.path.splitext(file_to_import)
yield nfp, file_stem, file_ext
if not recursive:
break
[docs]
def import_colormaps(self, base_dir_or_files, read_only=False, recursive=True, category=USER_CATEGORY):
added_colormaps = []
if not isinstance(base_dir_or_files, (list, tuple)):
files = self._files_for_dir(base_dir_or_files, recursive=recursive)
else:
files = [(pathname, *os.path.splitext(os.path.basename(pathname))) for pathname in base_dir_or_files]
for pathname, file_stem, file_ext in files:
if file_ext not in self.colormap_classes:
continue
ro = read_only or file_ext not in self.writeable_extensions
try:
cmap_class = self.colormap_classes[file_ext]
self._add_colormap(file_stem, LazyColormap(cmap_class, pathname), category=category, read_only=ro)
added_colormaps.append(file_stem)
except (ValueError, IOError, KeyError):
LOG.error("Error importing colormap: {}".format(pathname))
raise
return added_colormaps
[docs]
def is_writeable_colormap(self, name):
return name in self._writeable_cmaps
def _add_colormap(self, name, colormap, category=USER_CATEGORY, read_only=True):
assert isinstance(colormap, (LazyColormap, BaseColormap)) # nosec B101
cat_dict = self._category_dict.setdefault(category, [])
if name not in cat_dict:
cat_dict.append(name)
if not read_only:
self._writeable_cmaps.add(name)
super(ColormapManager, self).__setitem__(name, colormap)
def __getitem__(self, key):
val = super(ColormapManager, self).__getitem__(key)
if isinstance(val, LazyColormap):
try:
val = val.load()
except (ValueError, IOError, KeyError):
LOG.error("Could not load colormap '{}' from file " "'{}'".format(key, val.cmap_file))
LOG.debug("Colormap import error: ", exc_info=True)
del self[key]
raise KeyError("Failed to load lazy colormap '{}'".format(key))
super(ColormapManager, self).__setitem__(key, val)
return val
[docs]
def get(self, key, default=None):
# need to override this otherwise `get` never calls `__getitem__`
if key in self:
return self[key]
else:
return default
def __setitem__(self, key, value):
self._add_colormap(key, value)
def __delitem__(self, key):
super(ColormapManager, self).__delitem__(key)
for cat_list in self._category_dict.values():
try:
cat_list.remove(key)
except ValueError:
continue
COLORMAP_MANAGER = ColormapManager(CATEGORIZED_COLORMAPS)