From 9dec183b539cf6c9cdf090fece72e6a085d0aac9 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 8 Mar 2017 15:00:18 -0600 Subject: [PATCH] Replace use of matplotlib.colors with _SVG_NAMES dictionary --- .travis.yml | 2 +- docs/source/conf.py | 3 +- openmc/plots.py | 170 +++++++++++++++++++++++++++++++++++++++++--- openmc/plotter.py | 4 +- openmc/universe.py | 15 +++- 5 files changed, 176 insertions(+), 18 deletions(-) diff --git a/.travis.yml b/.travis.yml index b601d1036d..e80ab4a9c1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,7 +29,7 @@ before_install: - conda config --set always_yes yes --set changeps1 no - conda update -q conda - conda info -a - - conda create -q -n test-environment python=$TRAVIS_PYTHON_VERSION six numpy scipy h5py=2.5 pandas matplotlib + - conda create -q -n test-environment python=$TRAVIS_PYTHON_VERSION six numpy scipy h5py=2.5 pandas - source activate test-environment # Install GCC, MPICH, HDF5, PHDF5 diff --git a/docs/source/conf.py b/docs/source/conf.py index fbbc7cf8b0..89dd585d70 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -25,8 +25,7 @@ except ImportError: MOCK_MODULES = ['numpy', 'numpy.polynomial', 'numpy.polynomial.polynomial', - 'h5py', 'pandas', 'uncertainties', 'matplotlib.colors', - 'openmoc'] + 'h5py', 'pandas', 'uncertainties', 'openmoc'] sys.modules.update((mod_name, MagicMock()) for mod_name in MOCK_MODULES) import numpy as np diff --git a/openmc/plots.py b/openmc/plots.py index 9e69bf7f89..d95bc59058 100644 --- a/openmc/plots.py +++ b/openmc/plots.py @@ -6,7 +6,6 @@ import warnings from six import string_types import numpy as np -from matplotlib.colors import is_color_like, to_rgb import openmc import openmc.checkvalue as cv @@ -25,6 +24,156 @@ def reset_auto_plot_id(): _BASES = ['xy', 'xz', 'yz'] +_SVG_COLORS = { + 'aliceblue': (240, 248, 255), + 'antiquewhite': (250, 235, 215), + 'aqua': (0, 255, 255), + 'aquamarine': (127, 255, 212), + 'azure': (240, 255, 255), + 'beige': (245, 245, 220), + 'bisque': (255, 228, 196), + 'black': (0, 0, 0), + 'blanchedalmond': (255, 235, 205), + 'blue': (0, 0, 255), + 'blueviolet': (138, 43, 226), + 'brown': (165, 42, 42), + 'burlywood': (222, 184, 135), + 'cadetblue': (95, 158, 160), + 'chartreuse': (127, 255, 0), + 'chocolate': (210, 105, 30), + 'coral': (255, 127, 80), + 'cornflowerblue': (100, 149, 237), + 'cornsilk': (255, 248, 220), + 'crimson': (220, 20, 60), + 'cyan': (0, 255, 255), + 'darkblue': (0, 0, 139), + 'darkcyan': (0, 139, 139), + 'darkgoldenrod': (184, 134, 11), + 'darkgray': (169, 169, 169), + 'darkgreen': (0, 100, 0), + 'darkgrey': (169, 169, 169), + 'darkkhaki': (189, 183, 107), + 'darkmagenta': (139, 0, 139), + 'darkolivegreen': (85, 107, 47), + 'darkorange': (255, 140, 0), + 'darkorchid': (153, 50, 204), + 'darkred': (139, 0, 0), + 'darksalmon': (233, 150, 122), + 'darkseagreen': (143, 188, 143), + 'darkslateblue': (72, 61, 139), + 'darkslategray': (47, 79, 79), + 'darkslategrey': (47, 79, 79), + 'darkturquoise': (0, 206, 209), + 'darkviolet': (148, 0, 211), + 'deeppink': (255, 20, 147), + 'deepskyblue': (0, 191, 255), + 'dimgray': (105, 105, 105), + 'dimgrey': (105, 105, 105), + 'dodgerblue': (30, 144, 255), + 'firebrick': (178, 34, 34), + 'floralwhite': (255, 250, 240), + 'forestgreen': (34, 139, 34), + 'fuchsia': (255, 0, 255), + 'gainsboro': (220, 220, 220), + 'ghostwhite': (248, 248, 255), + 'gold': (255, 215, 0), + 'goldenrod': (218, 165, 32), + 'gray': (128, 128, 128), + 'green': (0, 128, 0), + 'greenyellow': (173, 255, 47), + 'grey': (128, 128, 128), + 'honeydew': (240, 255, 240), + 'hotpink': (255, 105, 180), + 'indianred': (205, 92, 92), + 'indigo': (75, 0, 130), + 'ivory': (255, 255, 240), + 'khaki': (240, 230, 140), + 'lavender': (230, 230, 250), + 'lavenderblush': (255, 240, 245), + 'lawngreen': (124, 252, 0), + 'lemonchiffon': (255, 250, 205), + 'lightblue': (173, 216, 230), + 'lightcoral': (240, 128, 128), + 'lightcyan': (224, 255, 255), + 'lightgoldenrodyellow': (250, 250, 210), + 'lightgray': (211, 211, 211), + 'lightgreen': (144, 238, 144), + 'lightgrey': (211, 211, 211), + 'lightpink': (255, 182, 193), + 'lightsalmon': (255, 160, 122), + 'lightseagreen': (32, 178, 170), + 'lightskyblue': (135, 206, 250), + 'lightslategray': (119, 136, 153), + 'lightslategrey': (119, 136, 153), + 'lightsteelblue': (176, 196, 222), + 'lightyellow': (255, 255, 224), + 'lime': (0, 255, 0), + 'limegreen': (50, 205, 50), + 'linen': (250, 240, 230), + 'magenta': (255, 0, 255), + 'maroon': (128, 0, 0), + 'mediumaquamarine': (102, 205, 170), + 'mediumblue': (0, 0, 205), + 'mediumorchid': (186, 85, 211), + 'mediumpurple': (147, 112, 219), + 'mediumseagreen': (60, 179, 113), + 'mediumslateblue': (123, 104, 238), + 'mediumspringgreen': (0, 250, 154), + 'mediumturquoise': (72, 209, 204), + 'mediumvioletred': (199, 21, 133), + 'midnightblue': (25, 25, 112), + 'mintcream': (245, 255, 250), + 'mistyrose': (255, 228, 225), + 'moccasin': (255, 228, 181), + 'navajowhite': (255, 222, 173), + 'navy': (0, 0, 128), + 'oldlace': (253, 245, 230), + 'olive': (128, 128, 0), + 'olivedrab': (107, 142, 35), + 'orange': (255, 165, 0), + 'orangered': (255, 69, 0), + 'orchid': (218, 112, 214), + 'palegoldenrod': (238, 232, 170), + 'palegreen': (152, 251, 152), + 'paleturquoise': (175, 238, 238), + 'palevioletred': (219, 112, 147), + 'papayawhip': (255, 239, 213), + 'peachpuff': (255, 218, 185), + 'peru': (205, 133, 63), + 'pink': (255, 192, 203), + 'plum': (221, 160, 221), + 'powderblue': (176, 224, 230), + 'purple': (128, 0, 128), + 'red': (255, 0, 0), + 'rosybrown': (188, 143, 143), + 'royalblue': (65, 105, 225), + 'saddlebrown': (139, 69, 19), + 'salmon': (250, 128, 114), + 'sandybrown': (244, 164, 96), + 'seagreen': (46, 139, 87), + 'seashell': (255, 245, 238), + 'sienna': (160, 82, 45), + 'silver': (192, 192, 192), + 'skyblue': (135, 206, 235), + 'slateblue': (106, 90, 205), + 'slategray': (112, 128, 144), + 'slategrey': (112, 128, 144), + 'snow': (255, 250, 250), + 'springgreen': (0, 255, 127), + 'steelblue': (70, 130, 180), + 'tan': (210, 180, 140), + 'teal': (0, 128, 128), + 'thistle': (216, 191, 216), + 'tomato': (255, 99, 71), + 'turquoise': (64, 224, 208), + 'violet': (238, 130, 238), + 'wheat': (245, 222, 179), + 'white': (255, 255, 255), + 'whitesmoke': (245, 245, 245), + 'yellow': (255, 255, 0), + 'yellowgreen': (154, 205, 50) +} + class Plot(object): """Definition of a finite region of space to be plotted. @@ -216,7 +365,7 @@ class Plot(object): def background(self, background): cv.check_type('plot background', background, Iterable) if isinstance(background, string_types): - if not is_color_like(background): + if background.lower() not in _SVG_COLORS: raise ValueError("'{}' is not a valid color.".format(background)) else: cv.check_length('plot background', background, 3) @@ -232,7 +381,7 @@ class Plot(object): cv.check_type('plot color key', key, (openmc.Cell, openmc.Material)) cv.check_type('plot color value', value, Iterable) if isinstance(value, string_types): - if not is_color_like(value): + if value.lower() not in _SVG_COLORS: raise ValueError("'{}' is not a valid color.".format(value)) else: cv.check_length('plot color (RGB)', value, 3) @@ -253,7 +402,7 @@ class Plot(object): def mask_background(self, mask_background): cv.check_type('plot mask background', mask_background, Iterable) if isinstance(mask_background, string_types): - if not is_color_like(mask_background): + if mask_background.lower() not in _SVG_COLORS: raise ValueError("'{}' is not a valid color.".format(mask_background)) else: cv.check_length('plot mask_background', mask_background, 3) @@ -431,10 +580,9 @@ class Plot(object): # Get a background (R,G,B) tuple to apply in alpha compositing if isinstance(background, string_types): - try: - background = to_rgb(background) - except ValueError: + if background.lower() not in _SVG_COLORS: raise ValueError("'{}' is not a valid color.".format(background)) + background = _SVG_COLORS[background.lower()] # Generate a color scheme self.colorize(geometry, seed) @@ -444,7 +592,7 @@ class Plot(object): for domain, color in self.colors.items(): if domain not in domains: if isinstance(color, string_types): - color = [int(255*x) for x in to_rgb(color)] + color = _SVG_COLORS[color.lower()] r, g, b = color r = int(((1-alpha) * background[0]) + (alpha * r)) g = int(((1-alpha) * background[1]) + (alpha * g)) @@ -484,7 +632,7 @@ class Plot(object): subelement = ET.SubElement(element, "background") color = self._background if isinstance(color, string_types): - color = [int(255*x) for x in to_rgb(color)] + color = _SVG_COLORS[color.lower()] subelement.text = ' '.join(str(x) for x in color) if self._colors: @@ -492,7 +640,7 @@ class Plot(object): subelement = ET.SubElement(element, "color") subelement.set("id", str(domain.id)) if isinstance(color, string_types): - color = [int(255*x) for x in to_rgb(color)] + color = _SVG_COLORS[color.lower()] subelement.set("rgb", ' '.join(str(x) for x in color)) if self._mask_components is not None: @@ -502,7 +650,7 @@ class Plot(object): color = self._mask_background if color is not None: if isinstance(color, string_types): - color = [int(255*x) for x in to_rgb(color)] + color = _SVG_COLORS[color.lower()] subelement.set("background", ' '.join( str(x) for x in color)) diff --git a/openmc/plotter.py b/openmc/plotter.py index 488de56d87..9e356b1eda 100644 --- a/openmc/plotter.py +++ b/openmc/plotter.py @@ -3,7 +3,6 @@ from six import string_types from itertools import chain import numpy as np -import matplotlib.pyplot as plt import openmc.checkvalue as cv import openmc.data @@ -122,6 +121,9 @@ def plot_xs(this, types, divisor_types=None, temperature=294., axis=None, generated. """ + + from matplotlib import pyplot as plt + cv.check_type("plot_CE", plot_CE, bool) if isinstance(this, openmc.Nuclide): diff --git a/openmc/universe.py b/openmc/universe.py index 718825db97..71bb2ab624 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -1,3 +1,4 @@ +from __future__ import division from copy import copy from collections import OrderedDict, Iterable from numbers import Integral, Real @@ -6,11 +7,10 @@ import sys from six import string_types import numpy as np -import matplotlib.pyplot as plt -from matplotlib.colors import to_rgba import openmc import openmc.checkvalue as cv +from openmc.plots import _SVG_COLORS # A static variable for auto-generated Lattice (Universe) IDs @@ -259,6 +259,8 @@ class Universe(object): :func:`matplotlib.pyplot.imshow`. """ + import matplotlib.pyplot as plt + # Seed the random number generator if seed is not None: random.seed(seed) @@ -270,7 +272,14 @@ class Universe(object): # Convert to RGBA if necessary colors = copy(colors) for obj, color in colors.items(): - colors[obj] = to_rgba(color) + if isinstance(color, string_types): + if color.lower() not in _SVG_COLORS: + raise ValueError("'{}' is not a valid color." + .format(color)) + colors[obj] = [x/255 for x in + _SVG_COLORS[color.lower()]] + [1.0] + elif len(color) == 3: + colors[obj] = list(color) + [1.0] if basis == 'xy': x_min = center[0] - 0.5*width[0]