From 1a46ac04fac9eae5c24a0c1d12e5db3b928f3611 Mon Sep 17 00:00:00 2001 From: MichaelTiemann <72577720+MichaelTiemannOSC@users.noreply.github.com> Date: Wed, 19 Oct 2022 08:08:36 -0400 Subject: [PATCH] Fixes needed to help Pint-Pandas pass tests when HAS_UNCERTAINTIES enabled. Signed-off-by: MichaelTiemann <72577720+MichaelTiemannOSC@users.noreply.github.com> --- pandas/core/indexing.py | 3 ++- pandas/tests/extension/base/setitem.py | 26 +++++++++++++++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 913aa2e5b0e18..53f28c1ccc813 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -1825,7 +1825,7 @@ def _setitem_with_indexer_split_path(self, indexer, value, name: str): # we need an iterable, with a ndim of at least 1 # eg. don't pass through np.array(0) - if is_list_like_indexer(value) and getattr(value, "ndim", 1) > 0: + if is_list_like_indexer(value) and np.iterable(value) and getattr(value, "ndim", 1) > 0: if isinstance(value, ABCDataFrame): self._setitem_with_indexer_frame_value(indexer, value, name) @@ -1977,6 +1977,7 @@ def _setitem_single_column(self, loc: int, value, plane_indexer): pass elif ( is_array_like(value) + and getattr(value, "shape", False) and len(value.shape) > 0 and self.obj.shape[0] == value.shape[0] and not is_empty_indexer(pi) diff --git a/pandas/tests/extension/base/setitem.py b/pandas/tests/extension/base/setitem.py index 8dbf7d47374a6..8fabacb2214c5 100644 --- a/pandas/tests/extension/base/setitem.py +++ b/pandas/tests/extension/base/setitem.py @@ -1,6 +1,15 @@ import numpy as np import pytest +try: + import uncertainties.unumpy as unp + from uncertainties import ufloat, UFloat + HAS_UNCERTAINTIES = True + _ufloat_nan = ufloat(np.nan, 0) +except ImportError: + unp = np + HAS_UNCERTAINTIES = False + from pandas.core.dtypes.dtypes import ( DatetimeTZDtype, IntervalDtype, @@ -97,7 +106,11 @@ def test_setitem_scalar(self, data, setter): assert arr[0] == data[1] def test_setitem_loc_scalar_mixed(self, data): - df = pd.DataFrame({"A": np.arange(len(data)), "B": data}) + if HAS_UNCERTAINTIES: + scalar_data = np.arange(len(data)) + ufloat(0, 0) + else: + scalar_data = np.arange(len(data)) + df = pd.DataFrame({"A": scalar_data , "B": data}) df.loc[0, "B"] = data[1] assert df.loc[0, "B"] == data[1] @@ -112,7 +125,11 @@ def test_setitem_loc_scalar_multiple_homogoneous(self, data): assert df.loc[10, "B"] == data[1] def test_setitem_iloc_scalar_mixed(self, data): - df = pd.DataFrame({"A": np.arange(len(data)), "B": data}) + if HAS_UNCERTAINTIES: + scalar_data = np.arange(len(data)) + ufloat(0, 0) + else: + scalar_data = np.arange(len(data)) + df = pd.DataFrame({"A": scalar_data , "B": data}) df.iloc[0, 1] = data[1] assert df.loc[0, "B"] == data[1] @@ -427,7 +444,10 @@ def test_delitem_series(self, data): # GH#40763 ser = pd.Series(data, name="data") - taker = np.arange(len(ser)) + if HAS_UNCERTAINTIES: + taker = np.arange(len(ser)) + ufloat(0, 0) + else: + taker = np.arange(len(ser)) taker = np.delete(taker, 1) expected = ser[taker]