From 11816033a5d6df6322a67fa730fcf123e7b9abce Mon Sep 17 00:00:00 2001 From: Jonathan Foster Date: Mon, 3 Apr 2023 12:38:44 -0400 Subject: [PATCH 1/4] Allow cmap and size to take cateogricals --- glue_jupyter/bqplot/scatter/layer_artist.py | 16 ++++++++-------- glue_jupyter/bqplot/tests/test_bqplot.py | 16 ++++++++++++++-- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/glue_jupyter/bqplot/scatter/layer_artist.py b/glue_jupyter/bqplot/scatter/layer_artist.py index 54476874..e184580e 100755 --- a/glue_jupyter/bqplot/scatter/layer_artist.py +++ b/glue_jupyter/bqplot/scatter/layer_artist.py @@ -1,16 +1,15 @@ -import numpy as np import bqplot -from ..compatibility import ScatterGL, ImageGL - +import numpy as np +from echo import CallbackProperty from glue.core.data import Subset -from glue.viewers.scatter.state import ScatterLayerState from glue.core.exceptions import IncompatibleAttribute +from glue.utils import color2hex, ensure_numerical from glue.viewers.common.layer_artist import LayerArtist +from glue.viewers.scatter.state import ScatterLayerState from ...link import dlink, on_change from ...utils import colormap_to_hexlist, debounced, float_or_none -from echo import CallbackProperty -from glue.utils import ensure_numerical, color2hex +from ..compatibility import ImageGL, ScatterGL __all__ = ['BqplotScatterLayerState', 'BqplotScatterLayerArtist'] EMPTY_IMAGE = np.zeros((10, 10, 4), dtype=np.uint8) @@ -106,7 +105,8 @@ def _update_xy_att(self, *args): def _on_change_cmap_mode_or_att(self, ignore=None): if self.state.cmap_mode == 'Linear' and self.state.cmap_att is not None: - self.scatter.color = self.layer.data[self.state.cmap_att].astype(np.float32).ravel() + self.scatter.color = (ensure_numerical(self.layer.data[self.state.cmap_att]) + .astype(np.float32).ravel()) else: self.scatter.color = None @@ -244,7 +244,7 @@ def _update_size(self): scale = self.state.size_scaling if self.state.size_mode == 'Linear' and self.state.size_att is not None: self.scatter.default_size = int(scale * 25) - self.scatter.size = self.layer.data[self.state.size_att].ravel() + self.scatter.size = ensure_numerical(self.layer.data[self.state.size_att].ravel()) self.scale_size.min = float_or_none(self.state.size_vmin) self.scale_size.max = float_or_none(self.state.size_vmax) self._workaround_unselected_style() diff --git a/glue_jupyter/bqplot/tests/test_bqplot.py b/glue_jupyter/bqplot/tests/test_bqplot.py index e9f8435f..9ed01159 100644 --- a/glue_jupyter/bqplot/tests/test_bqplot.py +++ b/glue_jupyter/bqplot/tests/test_bqplot.py @@ -1,10 +1,11 @@ import os + import nbformat import numpy as np -from numpy.testing import assert_allclose -from nbconvert.preprocessors import ExecutePreprocessor from glue.core import Data from glue.core.roi import EllipticalROI +from nbconvert.preprocessors import ExecutePreprocessor +from numpy.testing import assert_allclose DATA = os.path.join(os.path.dirname(__file__), 'data') @@ -234,6 +235,17 @@ def test_scatter2d_cmap_mode(app, dataxyz): assert l1.scatter.color is not None +def test_scatter2d_cmap_mode_categorical(app, datacat): + s = app.scatter2d(a='a', a='b', data=datacat) + l1 = s.layers[0] + l1.state.cmap_att = 'a' + l1.state.cmap_mode = 'Linear' + assert l1.state.cmap_name == 'Gray' + l1.state.cmap_vmin = 0 + l1.state.cmap_vmax = 10 + assert l1.scatter.color is not None + + def test_scatter2d_and_histogram(app, dataxyz): s = app.scatter2d(x='x', y='y', data=dataxyz) h = app.histogram1d(x='x', data=dataxyz) # noqa From 7278d9551d28181e46cedfea74b7033be51a95eb Mon Sep 17 00:00:00 2001 From: Jonathan Foster Date: Mon, 3 Apr 2023 16:10:28 -0400 Subject: [PATCH 2/4] Replace pkg_resources with importlib.metadata --- glue_jupyter/__init__.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/glue_jupyter/__init__.py b/glue_jupyter/__init__.py index cf8acb99..1b4078f5 100755 --- a/glue_jupyter/__init__.py +++ b/glue_jupyter/__init__.py @@ -1,6 +1,6 @@ from __future__ import absolute_import -from pkg_resources import get_distribution, DistributionNotFound +import importlib.metadata from IPython.display import display @@ -10,11 +10,7 @@ 'JupyterApplication', 'set_layout_factory', 'get_layout_factory', '__version__'] -try: - __version__ = get_distribution(__name__).version -except DistributionNotFound: - # package is not installed - pass +__version__ = importlib.metadata.version(__name__) LAYOUT_FACTORY = None From f8df69943924cb25349f1b27f6fa4a84a01e67d7 Mon Sep 17 00:00:00 2001 From: Jonathan Foster Date: Tue, 4 Apr 2023 09:18:40 -0400 Subject: [PATCH 3/4] Revert "Allow cmap and size to take cateogricals" This reverts commit 11816033a5d6df6322a67fa730fcf123e7b9abce. --- glue_jupyter/bqplot/scatter/layer_artist.py | 16 ++++++++-------- glue_jupyter/bqplot/tests/test_bqplot.py | 16 ++-------------- 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/glue_jupyter/bqplot/scatter/layer_artist.py b/glue_jupyter/bqplot/scatter/layer_artist.py index e184580e..54476874 100755 --- a/glue_jupyter/bqplot/scatter/layer_artist.py +++ b/glue_jupyter/bqplot/scatter/layer_artist.py @@ -1,15 +1,16 @@ -import bqplot import numpy as np -from echo import CallbackProperty +import bqplot +from ..compatibility import ScatterGL, ImageGL + from glue.core.data import Subset +from glue.viewers.scatter.state import ScatterLayerState from glue.core.exceptions import IncompatibleAttribute -from glue.utils import color2hex, ensure_numerical from glue.viewers.common.layer_artist import LayerArtist -from glue.viewers.scatter.state import ScatterLayerState from ...link import dlink, on_change from ...utils import colormap_to_hexlist, debounced, float_or_none -from ..compatibility import ImageGL, ScatterGL +from echo import CallbackProperty +from glue.utils import ensure_numerical, color2hex __all__ = ['BqplotScatterLayerState', 'BqplotScatterLayerArtist'] EMPTY_IMAGE = np.zeros((10, 10, 4), dtype=np.uint8) @@ -105,8 +106,7 @@ def _update_xy_att(self, *args): def _on_change_cmap_mode_or_att(self, ignore=None): if self.state.cmap_mode == 'Linear' and self.state.cmap_att is not None: - self.scatter.color = (ensure_numerical(self.layer.data[self.state.cmap_att]) - .astype(np.float32).ravel()) + self.scatter.color = self.layer.data[self.state.cmap_att].astype(np.float32).ravel() else: self.scatter.color = None @@ -244,7 +244,7 @@ def _update_size(self): scale = self.state.size_scaling if self.state.size_mode == 'Linear' and self.state.size_att is not None: self.scatter.default_size = int(scale * 25) - self.scatter.size = ensure_numerical(self.layer.data[self.state.size_att].ravel()) + self.scatter.size = self.layer.data[self.state.size_att].ravel() self.scale_size.min = float_or_none(self.state.size_vmin) self.scale_size.max = float_or_none(self.state.size_vmax) self._workaround_unselected_style() diff --git a/glue_jupyter/bqplot/tests/test_bqplot.py b/glue_jupyter/bqplot/tests/test_bqplot.py index 9ed01159..e9f8435f 100644 --- a/glue_jupyter/bqplot/tests/test_bqplot.py +++ b/glue_jupyter/bqplot/tests/test_bqplot.py @@ -1,11 +1,10 @@ import os - import nbformat import numpy as np +from numpy.testing import assert_allclose +from nbconvert.preprocessors import ExecutePreprocessor from glue.core import Data from glue.core.roi import EllipticalROI -from nbconvert.preprocessors import ExecutePreprocessor -from numpy.testing import assert_allclose DATA = os.path.join(os.path.dirname(__file__), 'data') @@ -235,17 +234,6 @@ def test_scatter2d_cmap_mode(app, dataxyz): assert l1.scatter.color is not None -def test_scatter2d_cmap_mode_categorical(app, datacat): - s = app.scatter2d(a='a', a='b', data=datacat) - l1 = s.layers[0] - l1.state.cmap_att = 'a' - l1.state.cmap_mode = 'Linear' - assert l1.state.cmap_name == 'Gray' - l1.state.cmap_vmin = 0 - l1.state.cmap_vmax = 10 - assert l1.scatter.color is not None - - def test_scatter2d_and_histogram(app, dataxyz): s = app.scatter2d(x='x', y='y', data=dataxyz) h = app.histogram1d(x='x', data=dataxyz) # noqa From 8656816464dfad5de9688d45e32d60be363b70cb Mon Sep 17 00:00:00 2001 From: Jonathan Foster Date: Tue, 4 Apr 2023 09:45:10 -0400 Subject: [PATCH 4/4] Suppress pkg_resources warnings until 3rd party updates are available --- setup.cfg | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/setup.cfg b/setup.cfg index 13e951f7..e4d08c6d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -100,6 +100,11 @@ filterwarnings = ignore:Widget.widgets is deprecated:DeprecationWarning # deprecated in numpy 1.24, to be fixed in scikit-image 0.20: ignore:`np.bool8` is a deprecated alias for `np.bool_`.:DeprecationWarning:skimage.util.dtype.*: + # Many glue plug-ins will trigger this until updated. Remove when common ones (e.g. vispy) have updated + ignore:pkg_resources is deprecated as an API:DeprecationWarning + # This catched a warning on mpl_toolkits which is currently unresolved + # https://github.com/matplotlib/matplotlib/pull/25381 + ignore:Deprecated call to `pkg_resources.declare_namespace(.*)`:DeprecationWarning [flake8] max-line-length = 100