Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-datashader for
openSUSE:Factory checked in at 2022-02-02 22:40:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-datashader (Old)
and /work/SRC/openSUSE:Factory/.python-datashader.new.1898 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-datashader"
Wed Feb 2 22:40:45 2022 rev:18 rq:950552 version:0.13.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-datashader/python-datashader.changes
2021-04-06 17:31:38.747250273 +0200
+++
/work/SRC/openSUSE:Factory/.python-datashader.new.1898/python-datashader.changes
2022-02-02 22:41:53.939334494 +0100
@@ -1,0 +2,33 @@
+Mon Jan 31 21:47:35 UTC 2022 - Ben Greiner <[email protected]>
+
+- Update to 0.13.0
+ * Defined new dynspread metric based on counting the fraction of
+ non-empty pixels that have non-empty pixels within a given
+ radius. The resulting dynspread behavior is much more intuitive
+ than the old behavior, which counted already-spread pixels as
+ if they were neighbors (#1001)
+ * Added ds.count() as the default reduction for ds.by (#1004)
+ * Fixed array-bounds reading error in dynspread (#1001)
+ * Fix color_key argument for dsshow (#986)
+ * Added Matplotlib output to the 3_Interactivity getting started
+ page. (#1009)
+ * Misc docs fixes (#1007)
+ * Fix nan assignment to integer array in RaggedArray (#1008)
+ * Any usage of dynspread with datatypes other than points should
+ be replaced with spread(), which will do what was probably
+ intended by the original dynspread call, i.e. to make isolated
+ lines and shapes visible. Strictly speaking, dynspread could
+ still be useful for other glyph types if that glyph is
+ contained entirely in a pixel, e.g. if a polygon or line
+ segment is located within the pixel bounds, but that seems
+ unlikely.
+ * Dynspread may need to have the threshold or max_px arguments
+ updated to achieve the same spreading as in previous releases,
+ though the new behavior is normally going to be more useful
+ than the old.
+- Drop datashader-pr996-numpy-ragged.patch
+- Add datashader-pr1022-RaggedTests.patch
+- Add datashader-pr1025-testfixes.patch
+- Skip remaining failing ragged tests gh#holoviz/datashader#1043
+
+-------------------------------------------------------------------
Old:
----
datashader-0.12.1.tar.gz
datashader-pr996-numpy-ragged.patch
New:
----
datashader-0.13.0.tar.gz
datashader-pr1022-RaggedTests.patch
datashader-pr1025-testfixes.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-datashader.spec ++++++
--- /var/tmp/diff_new_pack.2KshX1/_old 2022-02-02 22:41:54.859328258 +0100
+++ /var/tmp/diff_new_pack.2KshX1/_new 2022-02-02 22:41:54.867328204 +0100
@@ -1,7 +1,7 @@
#
-# spec file for package python-datashader-test
+# spec file
#
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -28,21 +28,22 @@
BuildArch: noarch
%endif
%define skip_python2 1
-%define skip_python36 1
+# dask is not compatible with Python 3.10 yet
+%define skip_python310 1
Name: python-datashader%{psuffix}
-Version: 0.12.1
+Version: 0.13.0
Release: 0
Summary: Data visualization toolchain based on aggregating into a grid
License: BSD-3-Clause
URL: https://datashader.org
Source0:
https://files.pythonhosted.org/packages/source/d/datashader/datashader-%{version}.tar.gz
+Patch0: datashader-pr1022-RaggedTests.patch
+Patch1: datashader-pr1025-testfixes.patch
Source100: python-datashader-rpmlintrc
-# PATCH-FIX-UPSTREAM datashader-pr996-numpy-ragged.patch --
gh#holoviz/datashader#996
-Patch0:
https://github.com/holoviz/datashader/pull/996.patch#/datashader-pr996-numpy-ragged.patch
BuildRequires: %{python_module devel}
BuildRequires: %{python_module numpy}
-BuildRequires: %{python_module param >= 1.6.0}
-BuildRequires: %{python_module pyct}
+BuildRequires: %{python_module param >= 1.6.1}
+BuildRequires: %{python_module pyct >= 0.4.5}
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
@@ -51,17 +52,14 @@
Requires: python-PyYAML
Requires: python-bokeh
Requires: python-colorcet >= 0.9.0
-Requires: python-dask >= 0.18.0
-Requires: python-dask-bag
-Requires: python-dask-dataframe
-Requires: python-numba >= 0.37.0
+Requires: python-dask-all >= 0.18.0
+Requires: python-numba >= 0.51
Requires: python-numpy >= 1.7
Requires: python-pandas >= 0.24.1
-Requires: python-param >= 1.6.0
-Requires: python-pyct
+Requires: python-param >= 1.6.1
+Requires: python-pyct >= 0.4.5
Requires: python-scikit-image
Requires: python-scipy
-Requires: python-toolz >= 0.7.4
Requires: python-xarray >= 0.9.6
Requires(post): update-alternatives
Requires(postun):update-alternatives
@@ -71,21 +69,18 @@
BuildRequires: %{python_module PyYAML}
BuildRequires: %{python_module bokeh}
BuildRequires: %{python_module colorcet >= 0.9.0}
-BuildRequires: %{python_module dask >= 0.18.0}
-BuildRequires: %{python_module dask-bag}
-BuildRequires: %{python_module dask-dataframe}
+BuildRequires: %{python_module dask-all >= 0.18.0}
BuildRequires: %{python_module fastparquet >= 0.1.6}
BuildRequires: %{python_module holoviews >= 1.10.0}
-BuildRequires: %{python_module nbsmoke >= 0.4.0}
+BuildRequires: %{python_module nbsmoke >= 0.5.0}
BuildRequires: %{python_module netCDF4}
-BuildRequires: %{python_module numba >= 0.37.0}
+BuildRequires: %{python_module numba >= 0.51}
BuildRequires: %{python_module numpy >= 1.7}
BuildRequires: %{python_module pandas >= 0.24.1}
BuildRequires: %{python_module pytest >= 3.9.3}
BuildRequires: %{python_module pytest-benchmark >= 3.0.0}
BuildRequires: %{python_module scikit-image}
BuildRequires: %{python_module scipy}
-BuildRequires: %{python_module toolz >= 0.7.4}
BuildRequires: %{python_module xarray >= 0.9.6}
%endif
%python_subpackages
@@ -131,7 +126,11 @@
%if %{with test}
%check
export PYTHONPATH=examples
-%pytest datashader/tests --doctest-modules --doctest-ignore-import-errors
+# https://github.com/holoviz/datashader/issues/1043
+donttest="(TestRaggedGetitem and test_getitem_invalid)"
+donttest+=" or (TestRaggedInterface and test_tolist)"
+donttest+=" or (TestRaggedMethods and test_where_series)"
+%pytest datashader/tests --doctest-modules --doctest-ignore-import-errors -k
"not ($donttest)"
%endif
%if ! %{with test}
++++++ datashader-0.12.1.tar.gz -> datashader-0.13.0.tar.gz ++++++
/work/SRC/openSUSE:Factory/python-datashader/datashader-0.12.1.tar.gz
/work/SRC/openSUSE:Factory/.python-datashader.new.1898/datashader-0.13.0.tar.gz
differ: char 5, line 1
++++++ datashader-pr1022-RaggedTests.patch ++++++
>From 1e818af09e35c9cf9cefdfed3e251fc57502e877 Mon Sep 17 00:00:00 2001
From: Ian Thomas <[email protected]>
Date: Tue, 14 Sep 2021 11:26:19 +0100
Subject: [PATCH 1/3] Fix Ragged tests
---
datashader/datatypes.py | 6 +++--
datashader/tests/test_datatypes.py | 41 +++++++++++++++++++++++++++---
2 files changed, 41 insertions(+), 6 deletions(-)
diff --git a/datashader/datatypes.py b/datashader/datatypes.py
index 9a8f8488..94e4b1d3 100644
--- a/datashader/datatypes.py
+++ b/datashader/datatypes.py
@@ -442,7 +442,7 @@ def __getitem__(self, item):
# Check mask length is compatible
if len(item) != len(self):
raise IndexError(
- "boolean mask length ({}) doesn't match array length
({})"
+ "Boolean index has wrong length: {} instead of {}"
.format(len(item), len(self))
)
@@ -584,7 +584,9 @@ def take(self, indices, allow_fill=False, fill_value=None):
for i in indices]
else:
if len(self) == 0 and len(indices) > 0:
- raise IndexError("cannot do a non-empty take")
+ raise IndexError(
+ "cannot do a non-empty take from an empty axes"
+ )
sequence = [self[i] for i in indices]
diff --git a/datashader/tests/test_datatypes.py
b/datashader/tests/test_datatypes.py
index dbf2e2bd..f8b7ef7e 100644
--- a/datashader/tests/test_datatypes.py
+++ b/datashader/tests/test_datatypes.py
@@ -3,7 +3,6 @@
import numpy as np
import pandas as pd
import pandas.tests.extension.base as eb
-import pandas.util.testing as tm
from datashader.datatypes import RaggedDtype, RaggedArray
@@ -703,6 +702,13 @@ def test_item(self, data):
with pytest.raises(ValueError, match=msg):
s.item()
+ @pytest.mark.skip(
+ reason="Ellipsis not supported in RaggedArray.__getitem__"
+ )
+ def test_getitem_ellipsis_and_slice(self, data):
+ pass
+
+
class TestRaggedGroupby(eb.BaseGroupbyTests):
@pytest.mark.parametrize('op', [
lambda x: 1,
@@ -727,7 +733,18 @@ def test_groupby_extension_apply(self, data_for_grouping,
op):
@pytest.mark.skip(reason="agg not supported")
def test_groupby_agg_extension(self):
pass
-
+
+ @pytest.mark.skip(reason="numpy.ndarray unhashable")
+ def test_groupby_extension_transform(self):
+ pass
+
+ @pytest.mark.skip(reason="agg not supported")
+ def test_groupby_extension_agg(self):
+ pass
+
+ @pytest.mark.skip(reason="not supported")
+ def test_groupby_extension_apply(self):
+ pass
class TestRaggedInterface(eb.BaseInterfaceTests):
@@ -743,7 +760,7 @@ def test_array_interface(self, data):
if np.isscalar(a1):
assert np.isnan(a1) and np.isnan(a2)
else:
- tm.assert_numpy_array_equal(a2, a1)
+ np.testing.assert_array_equal(a1, a2)
# # NotImplementedError: 'RaggedArray' does not support __setitem__
@pytest.mark.skip(reason="__setitem__ not supported")
@@ -813,6 +830,10 @@ def test_combine_first(self):
def test_searchsorted(self):
pass
+ @pytest.mark.skip(reason="ragged cannot be used as categorical")
+ def test_sort_values_frame(self):
+ pass
+
class TestRaggedPrinting(eb.BasePrintingTests):
pass
@@ -830,6 +851,18 @@ def test_fillna_series(self):
def test_fillna_frame(self):
pass
+ @pytest.mark.skip(reason="Can't fill with nested sequences")
+ def test_fillna_limit_pad(self):
+ pass
+
+ @pytest.mark.skip(reason="Can't fill with nested sequences")
+ def test_fillna_limit_backfill(self):
+ pass
+
+ @pytest.mark.skip(reason="Can't fill with nested sequences")
+ def test_fillna_series_method(self):
+ pass
+
class TestRaggedReshaping(eb.BaseReshapingTests):
@pytest.mark.skip(reason="__setitem__ not supported")
@@ -843,4 +876,4 @@ def test_transpose(self):
@pytest.mark.skip(reason="transpose with numpy array elements seems not
supported")
def test_transpose_frame(self):
pass
-
+
>From 4de94d86881ddcb7febfb5d1d45554fa16baf3ac Mon Sep 17 00:00:00 2001
From: Ian Thomas <[email protected]>
Date: Wed, 29 Sep 2021 10:44:26 +0100
Subject: [PATCH 2/3] Remove duplicated test function
---
datashader/tests/test_datatypes.py | 23 ++---------------------
1 file changed, 2 insertions(+), 21 deletions(-)
diff --git a/datashader/tests/test_datatypes.py
b/datashader/tests/test_datatypes.py
index f8b7ef7e..0f142849 100644
--- a/datashader/tests/test_datatypes.py
+++ b/datashader/tests/test_datatypes.py
@@ -710,26 +710,6 @@ def test_getitem_ellipsis_and_slice(self, data):
class TestRaggedGroupby(eb.BaseGroupbyTests):
- @pytest.mark.parametrize('op', [
- lambda x: 1,
- lambda x: [1] * len(x),
- # # Op below causes a:
- # # ValueError: Names should be list-like for a MultiIndex
- # lambda x: pd.Series([1] * len(x)),
- lambda x: x,
- ], ids=[
- 'scalar',
- 'list',
- # 'series',
- 'object'])
- def test_groupby_extension_apply(self, data_for_grouping, op):
- df = pd.DataFrame({"A": [1, 1, 2, 2, 3, 3, 1, 4],
- "B": data_for_grouping})
- df.groupby("B").apply(op)
- df.groupby("B").A.apply(op)
- df.groupby("A").apply(op)
- df.groupby("A").B.apply(op)
-
@pytest.mark.skip(reason="agg not supported")
def test_groupby_agg_extension(self):
pass
@@ -742,7 +722,8 @@ def test_groupby_extension_transform(self):
def test_groupby_extension_agg(self):
pass
- @pytest.mark.skip(reason="not supported")
+ @pytest.mark.skip(
+ reason="numpy.ndarray unhashable and buffer wrong number of dims")
def test_groupby_extension_apply(self):
pass
>From d20b606bb58e4bfcad2f678c891f43188833c4ee Mon Sep 17 00:00:00 2001
From: "James A. Bednar" <[email protected]>
Date: Wed, 29 Sep 2021 11:37:45 -0500
Subject: [PATCH 3/3] Update datashader/datatypes.py
---
datashader/datatypes.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/datashader/datatypes.py b/datashader/datatypes.py
index 94e4b1d3..43fd5aa9 100644
--- a/datashader/datatypes.py
+++ b/datashader/datatypes.py
@@ -585,7 +585,7 @@ def take(self, indices, allow_fill=False, fill_value=None):
else:
if len(self) == 0 and len(indices) > 0:
raise IndexError(
- "cannot do a non-empty take from an empty axes"
+ "Cannot do a non-empty take from an empty axis"
)
sequence = [self[i] for i in indices]
++++++ datashader-pr1025-testfixes.patch ++++++
>From ed398d9507d84f345f282d5738ff58472d94c7ae Mon Sep 17 00:00:00 2001
From: Ian Thomas <[email protected]>
Date: Mon, 18 Oct 2021 11:46:44 +0100
Subject: [PATCH 01/11] Fix CI part 2
---
datashader/datatypes.py | 2 +-
datashader/tests/benchmarks/test_bundling.py | 2 +-
datashader/tests/test_bundling.py | 4 ++--
setup.py | 2 +-
4 files changed, 5 insertions(+), 5 deletions(-)
Index: datashader-0.13.0/datashader/datatypes.py
===================================================================
--- datashader-0.13.0.orig/datashader/datatypes.py
+++ datashader-0.13.0/datashader/datatypes.py
@@ -585,7 +585,7 @@ Invalid indices for take with allow_fill
else:
if len(self) == 0 and len(indices) > 0:
raise IndexError(
- "Cannot do a non-empty take from an empty axis"
+ "cannot do a non-empty take from an empty axis|out of
bounds"
)
sequence = [self[i] for i in indices]
Index: datashader-0.13.0/datashader/tests/test_bundling.py
===================================================================
--- datashader-0.13.0.orig/datashader/tests/test_bundling.py
+++ datashader-0.13.0/datashader/tests/test_bundling.py
@@ -25,7 +25,7 @@ def edges():
# Four edges originating from the center node and connected to each
# corner
edges_df = pd.DataFrame({'id': np.arange(4),
- 'source': np.zeros(4, dtype=np.int),
+ 'source': np.zeros(4, dtype=int),
'target': np.arange(1, 5)})
edges_df.set_index('id')
return edges_df
@@ -36,7 +36,7 @@ def weighted_edges():
# Four weighted edges originating from the center node and connected
# to each corner
edges_df = pd.DataFrame({'id': np.arange(4),
- 'source': np.zeros(4, dtype=np.int),
+ 'source': np.zeros(4, dtype=int),
'target': np.arange(1, 5),
'weight': np.ones(4)})
edges_df.set_index('id')
Index: datashader-0.13.0/setup.py
===================================================================
--- datashader-0.13.0.orig/setup.py
+++ datashader-0.13.0/setup.py
@@ -39,8 +39,8 @@ extras_require = {
'pytest-cov',
'codecov',
'flake8',
- 'nbconvert <6',
- 'nbsmoke[all] >=0.4.0',
+ 'nbconvert',
+ 'nbsmoke[all] >0.5',
'fastparquet >=0.1.6', # optional dependency
'holoviews >=1.10.0',
'bokeh',
Index: datashader-0.13.0/datashader/bokeh_ext.py
===================================================================
--- datashader-0.13.0.orig/datashader/bokeh_ext.py
+++ datashader-0.13.0/datashader/bokeh_ext.py
@@ -86,7 +86,8 @@ def patch_event(image):
JSON message containing patch events to update the plot
"""
if bokeh_version > '0.12.9':
- events = list(image.doc._held_events)
+ event_obj = image.doc.callbacks if bokeh_version >= '2.4' else
image.doc
+ events = list(event_obj._held_events)
if not events:
return None
if bokeh_version > '2.0.0':
@@ -94,7 +95,7 @@ def patch_event(image):
else:
protocol = Protocol("1.0")
msg = protocol.create("PATCH-DOC", events)
- image.doc._held_events = []
+ event_obj._held_events = []
return msg
data = dict(image.ds.data)
data['image'] = [data['image'][0].tolist()]
Index: datashader-0.13.0/datashader/tests/test_bokeh_ext.py
===================================================================
--- datashader-0.13.0.orig/datashader/tests/test_bokeh_ext.py
+++ datashader-0.13.0/datashader/tests/test_bokeh_ext.py
@@ -5,7 +5,7 @@ import datashader as ds
import datashader.transfer_functions as tf
from bokeh.plotting import figure, Document
-from datashader.bokeh_ext import InteractiveImage
+from datashader.bokeh_ext import InteractiveImage, bokeh_version
axis = ds.core.LinearAxis()
lincoords = axis.compute_index(axis.compute_scale_and_translate((0, 1), 2), 2)
@@ -77,4 +77,5 @@ def test_interactive_image_update():
assert image['shape'] == [1, 1]
# Ensure events are cleared after update
- assert img.doc._held_events == []
+ event_obj = img.doc.callbacks if bokeh_version >= '2.4' else img.doc
+ assert event_obj._held_events == []