holoviz / datashader

Quickly and accurately render even the largest data.
http://datashader.org
BSD 3-Clause "New" or "Revised" License
3.26k stars 363 forks source link

Numpy error on rasterize #1225

Closed itsgifnotjiff closed 1 year ago

itsgifnotjiff commented 1 year ago

Thanks for contacting us! Please read and follow these instructions carefully, then delete this introductory text to keep your issue easy to read. Note that the issue tracker is NOT the place for usage questions and technical assistance; post those at Discourse instead. Issues without the required information below may be closed immediately.

ALL software version info

xarray - [ 2023.5.0 ]
hvplot - [ 0.8.3 ]
numpy - [ 1.24.3 ]
holoviews - [ 1.16.0 ]
geoviews - [ 1.10.0 ]
panel - [ 1.0.3 ]
bokeh - [ 3.1.1 ]
Python - 3.10.11
JupyterLab - 3.6.3

Description of expected behavior and the observed behavior

Well the expectation is to see the rasterized image of the example dataset.

Complete, minimal, self-contained example code that reproduces the issue

import xarray as xr

ds = xr.tutorial.open_dataset('rasm')
ds.Tair.hvplot.quadmesh(x='xc', y='yc', geo=True, widget_location='bottom', rasterize=True)

Stack traceback and/or browser JavaScript console output

WARNING:param.dynamic_operation: Callable raised "AttributeError("module 'numpy' has no attribute 'warnings'")".
Invoked as dynamic_operation(cftime.DatetimeNoLeap(1980, 9, 16, 12, 0, 0, 0, has_year_zero=True), height=400, scale=1.0, width=400, x_range=None, y_range=None)
WARNING:param.dynamic_operation: Callable raised "AttributeError("module 'numpy' has no attribute 'warnings'")".
Invoked as dynamic_operation(cftime.DatetimeNoLeap(1980, 9, 16, 12, 0, 0, 0, has_year_zero=True), height=400, scale=1.0, width=400, x_range=None, y_range=None)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
File /mamba/envs/dev/lib/python3.10/site-packages/IPython/core/formatters.py:974, in MimeBundleFormatter.__call__(self, obj, include, exclude)
    971     method = get_real_method(obj, self.print_method)
    973     if method is not None:
--> 974         return method(include=include, exclude=exclude)
    975     return None
    976 else:

File /mamba/envs/dev/lib/python3.10/site-packages/panel/viewable.py:808, in Viewable._repr_mimebundle_(self, include, exclude)
    806 doc = Document()
    807 comm = state._comm_manager.get_server_comm()
--> 808 model = self._render_model(doc, comm)
    809 if config.embed:
    810     return render_model(model)

File /mamba/envs/dev/lib/python3.10/site-packages/panel/viewable.py:726, in Viewable._render_model(self, doc, comm)
    724 if comm is None:
    725     comm = state._comm_manager.get_server_comm()
--> 726 model = self.get_root(doc, comm)
    728 if self._design and self._design.theme.bokeh_theme:
    729     doc.theme = self._design.theme.bokeh_theme

File /mamba/envs/dev/lib/python3.10/site-packages/panel/layout/base.py:279, in Panel.get_root(self, doc, comm, preprocess)
    275 def get_root(
    276     self, doc: Optional[Document] = None, comm: Optional[Comm] = None,
    277     preprocess: bool = True
    278 ) -> Model:
--> 279     root = super().get_root(doc, comm, preprocess)
    280     # ALERT: Find a better way to handle this
    281     if hasattr(root, 'styles') and 'overflow-x' in root.styles:

File /mamba/envs/dev/lib/python3.10/site-packages/panel/viewable.py:648, in Renderable.get_root(self, doc, comm, preprocess)
    646 wrapper = self._design._wrapper(self)
    647 if wrapper is self:
--> 648     root = self._get_model(doc, comm=comm)
    649     if preprocess:
    650         self._preprocess(root)

File /mamba/envs/dev/lib/python3.10/site-packages/panel/layout/base.py:164, in Panel._get_model(self, doc, root, parent, comm)
    162 root = root or model
    163 self._models[root.ref['id']] = (model, parent)
--> 164 objects = self._get_objects(model, [], doc, root, comm)
    165 props = self._get_properties(doc)
    166 props[self._property_mapping['objects']] = objects

File /mamba/envs/dev/lib/python3.10/site-packages/panel/layout/base.py:149, in Panel._get_objects(self, model, old_objects, doc, root, comm)
    147 else:
    148     try:
--> 149         child = pane._get_model(doc, root, model, comm)
    150     except RerenderError:
    151         return self._get_objects(model, current_objects[:i], doc, root, comm)

File /mamba/envs/dev/lib/python3.10/site-packages/panel/pane/holoviews.py:380, in HoloViews._get_model(self, doc, root, parent, comm)
    378     plot = self.object
    379 else:
--> 380     plot = self._render(doc, comm, root)
    382 plot.pane = self
    383 backend = plot.renderer.backend

File /mamba/envs/dev/lib/python3.10/site-packages/panel/pane/holoviews.py:461, in HoloViews._render(self, doc, comm, root)
    458     if comm:
    459         kwargs['comm'] = comm
--> 461 return renderer.get_plot(self.object, **kwargs)

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/plotting/bokeh/renderer.py:70, in BokehRenderer.get_plot(self_or_cls, obj, doc, renderer, **kwargs)
     63 @bothmethod
     64 def get_plot(self_or_cls, obj, doc=None, renderer=None, **kwargs):
     65     """
     66     Given a HoloViews Viewable return a corresponding plot instance.
     67     Allows supplying a document attach the plot to, useful when
     68     combining the bokeh model with another plot.
     69     """
---> 70     plot = super().get_plot(obj, doc, renderer, **kwargs)
     71     if plot.document is None:
     72         plot.document = Document() if self_or_cls.notebook_context else curdoc()

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/plotting/renderer.py:218, in Renderer.get_plot(self_or_cls, obj, doc, renderer, comm, **kwargs)
    215     raise SkipRendering(msg.format(dims=dims))
    217 # Initialize DynamicMaps with first data item
--> 218 initialize_dynamic(obj)
    220 if not renderer:
    221     renderer = self_or_cls

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/plotting/util.py:257, in initialize_dynamic(obj)
    255     continue
    256 if not len(dmap):
--> 257     dmap[dmap._initial_key()]

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/core/spaces.py:1213, in DynamicMap.__getitem__(self, key)
   1211 # Not a cross product and nothing cached so compute element.
   1212 if cache is not None: return cache
-> 1213 val = self._execute_callback(*tuple_key)
   1214 if data_slice:
   1215     val = self._dataslice(val, data_slice)

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/core/spaces.py:980, in DynamicMap._execute_callback(self, *args)
    977     kwargs['_memoization_hash_'] = hash_items
    979 with dynamicmap_memoization(self.callback, self.streams):
--> 980     retval = self.callback(*args, **kwargs)
    981 return self._style(retval)

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/core/spaces.py:580, in Callable.__call__(self, *args, **kwargs)
    577     args, kwargs = (), dict(pos_kwargs, **kwargs)
    579 try:
--> 580     ret = self.callable(*args, **kwargs)
    581 except KeyError:
    582     # KeyError is caught separately because it is used to signal
    583     # invalid keys on DynamicMap and should not warn
    584     raise

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/util/__init__.py:1025, in Dynamic._dynamic_operation.<locals>.dynamic_operation(*key, **kwargs)
   1024 def dynamic_operation(*key, **kwargs):
-> 1025     key, obj = resolve(key, kwargs)
   1026     return apply(obj, *key, **kwargs)

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/util/__init__.py:1014, in Dynamic._dynamic_operation.<locals>.resolve(key, kwargs)
   1012 elif isinstance(map_obj, DynamicMap) and map_obj._posarg_keys and not key:
   1013     key = tuple(kwargs[k] for k in map_obj._posarg_keys)
-> 1014 return key, map_obj[key]

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/core/spaces.py:1213, in DynamicMap.__getitem__(self, key)
   1211 # Not a cross product and nothing cached so compute element.
   1212 if cache is not None: return cache
-> 1213 val = self._execute_callback(*tuple_key)
   1214 if data_slice:
   1215     val = self._dataslice(val, data_slice)

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/core/spaces.py:980, in DynamicMap._execute_callback(self, *args)
    977     kwargs['_memoization_hash_'] = hash_items
    979 with dynamicmap_memoization(self.callback, self.streams):
--> 980     retval = self.callback(*args, **kwargs)
    981 return self._style(retval)

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/core/spaces.py:580, in Callable.__call__(self, *args, **kwargs)
    577     args, kwargs = (), dict(pos_kwargs, **kwargs)
    579 try:
--> 580     ret = self.callable(*args, **kwargs)
    581 except KeyError:
    582     # KeyError is caught separately because it is used to signal
    583     # invalid keys on DynamicMap and should not warn
    584     raise

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/util/__init__.py:1026, in Dynamic._dynamic_operation.<locals>.dynamic_operation(*key, **kwargs)
   1024 def dynamic_operation(*key, **kwargs):
   1025     key, obj = resolve(key, kwargs)
-> 1026     return apply(obj, *key, **kwargs)

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/util/__init__.py:1018, in Dynamic._dynamic_operation.<locals>.apply(element, *key, **kwargs)
   1016 def apply(element, *key, **kwargs):
   1017     kwargs = dict(util.resolve_dependent_kwargs(self.p.kwargs), **kwargs)
-> 1018     processed = self._process(element, key, kwargs)
   1019     if (self.p.link_dataset and isinstance(element, Dataset) and
   1020         isinstance(processed, Dataset) and processed._dataset is None):
   1021         processed._dataset = element.dataset

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/util/__init__.py:1000, in Dynamic._process(self, element, key, kwargs)
    998 elif isinstance(self.p.operation, Operation):
    999     kwargs = {k: v for k, v in kwargs.items() if k in self.p.operation.param}
-> 1000     return self.p.operation.process_element(element, key, **kwargs)
   1001 else:
   1002     return self.p.operation(element, **kwargs)

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/core/operation.py:194, in Operation.process_element(self, element, key, **params)
    191 else:
    192     self.p = param.ParamOverrides(self, params,
    193                                   allow_extra_keywords=self._allow_extra_keywords)
--> 194 return self._apply(element, key)

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/core/operation.py:141, in Operation._apply(self, element, key)
    139     if not in_method:
    140         element._in_method = True
--> 141 ret = self._process(element, key)
    142 if hasattr(element, '_in_method') and not in_method:
    143     element._in_method = in_method

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/operation/datashader.py:1401, in rasterize._process(self, element, key)
   1398     op = transform.instance(**{k:v for k,v in extended_kws.items()
   1399                                if k in transform.param})
   1400     op._precomputed = self._precomputed
-> 1401     element = element.map(op, predicate)
   1402     self._precomputed = op._precomputed
   1404 unused_params = list(all_supplied_kws - all_allowed_kws)

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/core/data/__init__.py:199, in PipelineMeta.pipelined.<locals>.pipelined_fn(*args, **kwargs)
    196     inst._in_method = True
    198 try:
--> 199     result = method_fn(*args, **kwargs)
    200     if PipelineMeta.disable:
    201         return result

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/core/data/__init__.py:1207, in Dataset.map(self, *args, **kwargs)
   1205 @wraps(LabelledData.map)
   1206 def map(self, *args, **kwargs):
-> 1207     return super().map(*args, **kwargs)

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/core/dimension.py:700, in LabelledData.map(self, map_fn, specs, clone)
    698     return deep_mapped
    699 else:
--> 700     return map_fn(self) if applies else self

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/core/operation.py:214, in Operation.__call__(self, element, **kwargs)
    210         return element.clone([(k, self._apply(el, key=k))
    211                               for k, el in element.items()])
    212     elif ((self._per_element and isinstance(element, Element)) or
    213           (not self._per_element and isinstance(element, ViewableElement))):
--> 214         return self._apply(element)
    215 elif 'streams' not in kwargs:
    216     kwargs['streams'] = self.p.streams

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/core/operation.py:141, in Operation._apply(self, element, key)
    139     if not in_method:
    140         element._in_method = True
--> 141 ret = self._process(element, key)
    142 if hasattr(element, '_in_method') and not in_method:
    143     element._in_method = in_method

File /mamba/envs/dev/lib/python3.10/site-packages/holoviews/operation/datashader.py:1042, in quadmesh_rasterize._process(self, element, key)
   1038 cvs = ds.Canvas(plot_width=width, plot_height=height,
   1039                 x_range=x_range, y_range=y_range)
   1041 vdim = getattr(agg_fn, 'column', element.vdims[0].name)
-> 1042 agg = cvs.quadmesh(data[vdim], x.name, y.name, agg_fn)
   1043 xdim, ydim = list(agg.dims)[:2][::-1]
   1044 if xtype == "datetime":

File /mamba/envs/dev/lib/python3.10/site-packages/datashader/core.py:850, in Canvas.quadmesh(self, source, x, y, agg)
    848         elif xarr.ndim == 2:
    849             glyph = QuadMeshCurvilinear(x, y, name)
--> 850             return bypixel(source, self, glyph, agg)
    851         else:
    852             raise ValueError("""\
    853 x- and y-coordinate arrays must have 1 or 2 dimensions.
    854     Received arrays with dimensions: {dims}""".format(
    855                 dims=list(xarr.dims)))

File /mamba/envs/dev/lib/python3.10/site-packages/datashader/core.py:1258, in bypixel(source, canvas, glyph, agg, antialias)
   1255 canvas.validate()
   1257 # All-NaN objects (e.g. chunks of arrays with no data) are valid in Datashader
-> 1258 with np.warnings.catch_warnings():
   1259     np.warnings.filterwarnings('ignore', r'All-NaN (slice|axis) encountered')
   1260     return bypixel.pipeline(source, schema, canvas, glyph, agg, antialias=antialias)

File /mamba/envs/dev/lib/python3.10/site-packages/numpy/__init__.py:320, in __getattr__(attr)
    317     from .testing import Tester
    318     return Tester
--> 320 raise AttributeError("module {!r} has no attribute "
    321                      "{!r}".format(__name__, attr))

AttributeError: module 'numpy' has no attribute 'warnings'
Column
    [0] HoloViews(DynamicMap, widget_location='bottom')
    [1] WidgetBox(align=('center', 'end'))
        [0] DiscreteSlider(margin=(20, 20, 20, 20), name='time', options=OrderedDict([('1980-09-16 ...]), value=cftime.DatetimeNoLeap(1980..., width=250)
itsgifnotjiff commented 1 year ago

I seem to have posted in the right repo but Mr. @Hoxbro is already aware of it as mentioned in this hvplot issue.