Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-pandas for openSUSE:Factory checked in at 2024-09-17 18:17:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pandas (Old) and /work/SRC/openSUSE:Factory/.python-pandas.new.29891 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pandas" Tue Sep 17 18:17:31 2024 rev:70 rq:1201618 version:2.2.2 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pandas/python-pandas.changes 2024-09-10 21:12:17.295674975 +0200 +++ /work/SRC/openSUSE:Factory/.python-pandas.new.29891/python-pandas.changes 2024-09-17 18:17:35.781492648 +0200 @@ -1,0 +2,10 @@ +Mon Sep 16 19:39:38 UTC 2024 - Markéta Machová <mmach...@suse.com> + +- Add bunch of patches to fix the testsuite with NumPy 2.1 + * tests-wasm.patch + * tests-nomkl.patch + * tests-timedelta.patch + * tests-npdev.patch +- Skip one test failing with new timezone, the patch would be too big + +------------------------------------------------------------------- New: ---- tests-nomkl.patch tests-npdev.patch tests-timedelta.patch tests-wasm.patch BETA DEBUG BEGIN: New: * tests-wasm.patch * tests-nomkl.patch * tests-timedelta.patch New: * tests-timedelta.patch * tests-npdev.patch - Skip one test failing with new timezone, the patch would be too big New: * tests-nomkl.patch * tests-timedelta.patch * tests-npdev.patch New:- Add bunch of patches to fix the testsuite with NumPy 2.1 * tests-wasm.patch * tests-nomkl.patch BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pandas.spec ++++++ --- /var/tmp/diff_new_pack.BXFT86/_old 2024-09-17 18:17:40.073670456 +0200 +++ /var/tmp/diff_new_pack.BXFT86/_new 2024-09-17 18:17:40.089671119 +0200 @@ -77,6 +77,14 @@ Patch3: https://github.com/pandas-dev/pandas/pull/59175.patch#/pandas-pr59175-matplotlib.patch # PATCH-FIX-UPSTREAM pandas-pr59353-np2eval.patch -- gh#pandas-dev/pandas#59144 backported to 2.2, no new tests, see gh#pandas-dev/pandas#58548, gh#pandas-dev/pandas#59353 Patch4: pandas-pr59353-np2eval.patch +# PATCH-FIX-UPSTREAM gh#pandas-dev/pandas#2536d3a7 +Patch5: tests-npdev.patch +# PATCH-FIX-UPSTREAM gh#pandas-dev/pandas#d0cb2056 +Patch6: tests-timedelta.patch +# PATCH-FIX-UPSTREAM gh#pandas-dev/pandas#1044cf44 +Patch7: tests-nomkl.patch +# PATCH-FIX-UPSTREAM tiny part of gh#pandas-dev/pandas#4f743f98 +Patch8: tests-wasm.patch %if !%{with test} BuildRequires: %{python_module Cython >= 3.0.5} BuildRequires: %{python_module devel >= 3.9} @@ -520,6 +528,8 @@ %endif # Numpy2: unexpected 'np.str_(...)' in error message SKIP_TESTS+=" or test_group_subplot_invalid_column_name" +# https://github.com/pandas-dev/pandas/pull/55901, not gonna merge this huge patch to fix one test failing with new timezone, will be included in new release +SKIP_TESTS+=" or test_array_inference[data7-expected7]" %ifarch %{ix86} %{arm32} # https://github.com/pandas-dev/pandas/issues/31856 ++++++ tests-nomkl.patch ++++++ >From 1044cf442109953987c1a47f476dc90d286b9f0f Mon Sep 17 00:00:00 2001 From: Matthew Roeschke <10647082+mroesc...@users.noreply.github.com> Date: Tue, 20 Aug 2024 10:32:23 -1000 Subject: [PATCH] CI: Uninstall nomkl & 32 bit Interval tests (#59553) * undo numpy 2 changes? * some interval 32 bit tests working * Revert "undo numpy 2 changes?" This reverts commit 39ce2229a96406edac107fc897e807251d364e2b. * nomkl? * nomkl? * Update .github/actions/build_pandas/action.yml * grep for nomkl * xfail WASM * Reverse condition --- .github/actions/build_pandas/action.yml | 7 +++++++ pandas/tests/indexes/interval/test_interval_tree.py | 7 +++++-- pandas/tests/indexing/interval/test_interval.py | 4 ++-- pandas/tests/indexing/interval/test_interval_new.py | 4 ++-- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/pandas/tests/indexes/interval/test_interval_tree.py b/pandas/tests/indexes/interval/test_interval_tree.py index 49b17f8b3d40e..df9c3b390f660 100644 --- a/pandas/tests/indexes/interval/test_interval_tree.py +++ b/pandas/tests/indexes/interval/test_interval_tree.py @@ -4,7 +4,10 @@ import pytest from pandas._libs.interval import IntervalTree -from pandas.compat import IS64 +from pandas.compat import ( + IS64, + WASM, +) import pandas._testing as tm @@ -186,7 +189,7 @@ def test_construction_overflow(self): expected = (50 + np.iinfo(np.int64).max) / 2 assert result == expected - @pytest.mark.xfail(not IS64, reason="GH 23440") + @pytest.mark.xfail(WASM, reason="GH 23440") @pytest.mark.parametrize( "left, right, expected", [ diff --git a/pandas/tests/indexing/interval/test_interval.py b/pandas/tests/indexing/interval/test_interval.py index b72ef57475305..6bcebefa6c696 100644 --- a/pandas/tests/indexing/interval/test_interval.py +++ b/pandas/tests/indexing/interval/test_interval.py @@ -2,7 +2,7 @@ import pytest from pandas._libs import index as libindex -from pandas.compat import IS64 +from pandas.compat import WASM import pandas as pd from pandas import ( @@ -210,7 +210,7 @@ def test_mi_intervalindex_slicing_with_scalar(self): expected = Series([1, 6, 2, 8, 7], index=expected_index, name="value") tm.assert_series_equal(result, expected) - @pytest.mark.xfail(not IS64, reason="GH 23440") + @pytest.mark.xfail(WASM, reason="GH 23440") @pytest.mark.parametrize( "base", [101, 1010], diff --git a/pandas/tests/indexing/interval/test_interval_new.py b/pandas/tests/indexing/interval/test_interval_new.py index 4c1efe9e4f81d..051dc7b98f2aa 100644 --- a/pandas/tests/indexing/interval/test_interval_new.py +++ b/pandas/tests/indexing/interval/test_interval_new.py @@ -3,7 +3,7 @@ import numpy as np import pytest -from pandas.compat import IS64 +from pandas.compat import WASM from pandas import ( Index, @@ -214,7 +214,7 @@ def test_loc_getitem_missing_key_error_message( obj.loc[[4, 5, 6]] -@pytest.mark.xfail(not IS64, reason="GH 23440") +@pytest.mark.xfail(WASM, reason="GH 23440") @pytest.mark.parametrize( "intervals", [ ++++++ tests-npdev.patch ++++++ >From 2536d3a736eea96b9da8b774e671516eb8f25f4a Mon Sep 17 00:00:00 2001 From: Matthew Roeschke <10647082+mroesc...@users.noreply.github.com> Date: Wed, 24 Apr 2024 07:26:56 -1000 Subject: [PATCH] CI: Fix npdev failures (#58389) * CI: Fix npdev failures * Use unique index, make array writable * Update pandas/_libs/hashtable_class_helper.pxi.in * Update pandas/tests/arrays/test_datetimelike.py * Update pandas/tests/arrays/test_datetimelike.py --- pandas/tests/arrays/test_datetimelike.py | 8 ++++++-- pandas/tests/extension/base/missing.py | 2 ++ pandas/tests/indexes/test_base.py | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/pandas/tests/arrays/test_datetimelike.py b/pandas/tests/arrays/test_datetimelike.py index 22c63af59a47c..3d8f8d791b763 100644 --- a/pandas/tests/arrays/test_datetimelike.py +++ b/pandas/tests/arrays/test_datetimelike.py @@ -661,7 +661,9 @@ def test_array_interface(self, datetime_index): assert result is expected tm.assert_numpy_array_equal(result, expected) result = np.array(arr, dtype="datetime64[ns]") - assert result is not expected + if not np_version_gt2: + # TODO: GH 57739 + assert result is not expected tm.assert_numpy_array_equal(result, expected) # to object dtype @@ -976,7 +978,9 @@ def test_array_interface(self, timedelta_index): assert result is expected tm.assert_numpy_array_equal(result, expected) result = np.array(arr, dtype="timedelta64[ns]") - assert result is not expected + if not np_version_gt2: + # TODO: GH 57739 + assert result is not expected tm.assert_numpy_array_equal(result, expected) # to object dtype diff --git a/pandas/tests/extension/base/missing.py b/pandas/tests/extension/base/missing.py index 4b9234a9904a2..cee565d4f7c1e 100644 --- a/pandas/tests/extension/base/missing.py +++ b/pandas/tests/extension/base/missing.py @@ -27,7 +27,9 @@ def test_isna_returns_copy(self, data_missing, na_func): expected = result.copy() mask = getattr(result, na_func)() if isinstance(mask.dtype, pd.SparseDtype): + # TODO: GH 57739 mask = np.array(mask) + mask.flags.writeable = True mask[:] = True tm.assert_series_equal(result, expected) diff --git a/pandas/tests/indexes/test_base.py b/pandas/tests/indexes/test_base.py index 04858643d97b1..2e94961b673f8 100644 --- a/pandas/tests/indexes/test_base.py +++ b/pandas/tests/indexes/test_base.py @@ -71,8 +71,8 @@ def test_constructor_casting(self, index): tm.assert_contains_all(arr, new_index) tm.assert_index_equal(index, new_index) - @pytest.mark.parametrize("index", ["string"], indirect=True) - def test_constructor_copy(self, index, using_infer_string): + def test_constructor_copy(self, using_infer_string): + index = Index(list("abc"), name="name") arr = np.array(index) new_index = Index(arr, copy=True, name="name") assert isinstance(new_index, Index) ++++++ tests-timedelta.patch ++++++ >From d0cb2056d0b27080b2f5cc0b88db8d263f684230 Mon Sep 17 00:00:00 2001 From: Matthew Roeschke <10647082+mroesc...@users.noreply.github.com> Date: Wed, 7 Aug 2024 10:49:25 -1000 Subject: [PATCH] COMPAT: Fix numpy 2.1 timedelta * DateOffset (#59441) --- pandas/core/arrays/timedeltas.py | 8 ++++++++ pandas/tests/arithmetic/test_timedelta64.py | 8 +++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/pandas/core/arrays/timedeltas.py b/pandas/core/arrays/timedeltas.py index 15bfe442ca87f..83cc2871f5459 100644 --- a/pandas/core/arrays/timedeltas.py +++ b/pandas/core/arrays/timedeltas.py @@ -467,6 +467,10 @@ def __mul__(self, other) -> Self: if is_scalar(other): # numpy will accept float and int, raise TypeError for others result = self._ndarray * other + if result.dtype.kind != "m": + # numpy >= 2.1 may not raise a TypeError + # and seems to dispatch to others.__rmul__? + raise TypeError(f"Cannot multiply with {type(other).__name__}") freq = None if self.freq is not None and not isna(other): freq = self.freq * other @@ -494,6 +498,10 @@ def __mul__(self, other) -> Self: # numpy will accept float or int dtype, raise TypeError for others result = self._ndarray * other + if result.dtype.kind != "m": + # numpy >= 2.1 may not raise a TypeError + # and seems to dispatch to others.__rmul__? + raise TypeError(f"Cannot multiply with {type(other).__name__}") return type(self)._simple_new(result, dtype=result.dtype) __rmul__ = __mul__ diff --git a/pandas/tests/arithmetic/test_timedelta64.py b/pandas/tests/arithmetic/test_timedelta64.py index 4583155502374..87e085fb22878 100644 --- a/pandas/tests/arithmetic/test_timedelta64.py +++ b/pandas/tests/arithmetic/test_timedelta64.py @@ -1460,7 +1460,13 @@ def test_td64arr_mul_int(self, box_with_array): def test_td64arr_mul_tdlike_scalar_raises(self, two_hours, box_with_array): rng = timedelta_range("1 days", "10 days", name="foo") rng = tm.box_expected(rng, box_with_array) - msg = "argument must be an integer|cannot use operands with types dtype" + msg = "|".join( + [ + "argument must be an integer", + "cannot use operands with types dtype", + "Cannot multiply with", + ] + ) with pytest.raises(TypeError, match=msg): rng * two_hours ++++++ tests-wasm.patch ++++++ >From 4f743f98649ce1fc17a57f7b02d81f7cc172dff6 Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetar...@users.noreply.github.com> Date: Wed, 8 May 2024 22:21:57 +0530 Subject: [PATCH] BLD, TST: Build and test Pyodide wheels for `pandas` in CI (#57896) * Create initial Pyodide workflow * Do not import pandas folder from the repo * Install hypothesis for testing * Add pytest decorator to skip tests on WASM * Skip `time.tzset()` tests on WASM platforms * Skip file system access tests on WASM * Skip two more tzset test failures * Skip two more FS failures on WASM * Resolve last two tzset failures on WASM * Add a `WASM` constant for Emscripten platform checks * Fix floating point imprecision with `np.timedelta64` * Mark tz OverflowError as xfail on WASM * Try to fix OverflowError with date ranges * Move job to unit tests workflow, withdraw env vars * Fix up a few style errors, use WASM variable * Bump Pyodide to `0.25.1` See https://github.com/pyodide/pyodide/pull/4654 for more discussion. This commit resolves a build error coming from the `pyodide build` command which broke due to a new `build` release by PyPA. * Use shorter job name * Skip test where warning is not raised properly * Don't run `test_date_time` loc check on WASM * Don't run additional loc checks in `test_sas7bdat` * Disable WASM OverflowError * Skip tests requiring fp exception support * xfail tests that require stricter tolerances * xfail test where `OverflowError`s are received * Remove upper-pin from `pydantic` * Better skip messages via `pytest.skipif` decorator * Import `WASM` var via public API where possible * Unpin `pytest` for Pyodide job * Add reason attr when using boolean to skip test * Don't xfail, skip tests that bring `OverflowError`s * Skip timedelta test that runs well only on 64-bit * Skip tests that use `np.timedelta64` --------- Co-authored-by: Matthew Roeschke <10647082+mroesc...@users.noreply.github.com> --- .github/workflows/unit-tests.yml | 61 ++++++++++++++++++- pandas/compat/__init__.py | 2 + pandas/compat/_constants.py | 2 + pandas/tests/apply/test_str.py | 3 + pandas/tests/arithmetic/test_timedelta64.py | 2 + .../datetimes/methods/test_normalize.py | 4 ++ .../datetimes/methods/test_resolution.py | 8 ++- .../io/parser/common/test_file_buffer_url.py | 3 + pandas/tests/io/parser/test_c_parser_only.py | 21 ++++--- pandas/tests/io/sas/test_sas7bdat.py | 9 ++- pandas/tests/io/test_common.py | 10 ++- pandas/tests/io/xml/test_xml.py | 2 + .../scalar/timestamp/methods/test_replace.py | 3 + .../methods/test_timestamp_method.py | 3 + pandas/tests/scalar/timestamp/test_formats.py | 3 + pandas/tests/tools/test_to_datetime.py | 6 +- pandas/tests/tools/test_to_timedelta.py | 6 +- pandas/tests/tseries/offsets/test_common.py | 8 ++- pandas/tests/tslibs/test_parsing.py | 2 + pandas/util/_test_decorators.py | 5 ++ 20 files changed, 146 insertions(+), 17 deletions(-) diff --git a/pandas/compat/__init__.py b/pandas/compat/__init__.py index 572dd8c9b61a0..4583e7edebbdc 100644 --- a/pandas/compat/__init__.py +++ b/pandas/compat/__init__.py @@ -22,6 +22,7 @@ PY311, PY312, PYPY, + WASM, ) import pandas.compat.compressors from pandas.compat.numpy import is_numpy_dev @@ -207,4 +208,5 @@ def get_bz2_file() -> type[pandas.compat.compressors.BZ2File]: "PY311", "PY312", "PYPY", + "WASM", ] diff --git a/pandas/compat/_constants.py b/pandas/compat/_constants.py index 7bc3fbaaefebf..2625389e5254a 100644 --- a/pandas/compat/_constants.py +++ b/pandas/compat/_constants.py @@ -17,6 +17,7 @@ PY311 = sys.version_info >= (3, 11) PY312 = sys.version_info >= (3, 12) PYPY = platform.python_implementation() == "PyPy" +WASM = (sys.platform == "emscripten") or (platform.machine() in ["wasm32", "wasm64"]) ISMUSL = "musl" in (sysconfig.get_config_var("HOST_GNU_TYPE") or "") REF_COUNT = 2 if PY311 else 3 @@ -27,4 +28,5 @@ "PY311", "PY312", "PYPY", + "WASM", ]