From 6d343a372846fe46b552b7e0f1fb46a7841e51a6 Mon Sep 17 00:00:00 2001 From: Kevin Date: Fri, 11 Aug 2023 13:12:49 -0700 Subject: [PATCH 1/3] mend --- pandas/_libs/testing.pyx | 8 +++++++- pandas/tests/dtypes/test_inference.py | 3 +++ pandas/tests/util/test_assert_almost_equal.py | 14 ++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/pandas/_libs/testing.pyx b/pandas/_libs/testing.pyx index 4ba7bce51ed64..ea01e55792a67 100644 --- a/pandas/_libs/testing.pyx +++ b/pandas/_libs/testing.pyx @@ -24,7 +24,13 @@ from pandas.core.dtypes.missing import array_equivalent cdef bint isiterable(obj): - return hasattr(obj, "__iter__") + if hasattr(obj, "__iter__"): + try: + iter(obj) + return True + except (TypeError, IndexError) as e: + return False + return False cdef bint has_length(obj): diff --git a/pandas/tests/dtypes/test_inference.py b/pandas/tests/dtypes/test_inference.py index 375003e58c21a..8602813879368 100644 --- a/pandas/tests/dtypes/test_inference.py +++ b/pandas/tests/dtypes/test_inference.py @@ -113,6 +113,9 @@ def __len__(self) -> int: def __array__(self, t=None): return np.asarray(self._values, dtype=t) + def __getitem__(self, item): + return self._values[item] + @property def ndim(self): return self._values.ndim diff --git a/pandas/tests/util/test_assert_almost_equal.py b/pandas/tests/util/test_assert_almost_equal.py index a86302f158005..bc35f1af0c683 100644 --- a/pandas/tests/util/test_assert_almost_equal.py +++ b/pandas/tests/util/test_assert_almost_equal.py @@ -10,6 +10,7 @@ Timestamp, ) import pandas._testing as tm +from pandas.tests.dtypes.test_inference import MockNumpyLikeArray def _assert_almost_equal_both(a, b, **kwargs): @@ -454,6 +455,19 @@ def test_assert_almost_equal_shape_mismatch_override(): tm.assert_almost_equal(np.array([1, 2]), np.array([3, 4, 5]), obj="Index") +@pytest.mark.parametrize( + "obj", + [ + MockNumpyLikeArray(np.ndarray((2,) * 1)), + MockNumpyLikeArray(np.array([])), + MockNumpyLikeArray(np.array(2)), + ], + ids=["duck-ndarray-1d", "duck-ndarray-1d-empty", "duck-ndarray-0d"], +) +def test_assert_almost_equal_not_iterable(obj): + tm.assert_almost_equal(obj, obj) + + def test_assert_almost_equal_unicode(): # see gh-20503 msg = """numpy array are different From 9fd93b85601ad7a4ec2de91acd3663778fb5c78e Mon Sep 17 00:00:00 2001 From: Kevin Date: Thu, 24 Aug 2023 15:30:20 -0700 Subject: [PATCH 2/3] mmend --- example | Bin 0 -> 7032 bytes pandas/_libs/testing.pyx | 1 + 2 files changed, 1 insertion(+) create mode 100644 example diff --git a/example b/example new file mode 100644 index 0000000000000000000000000000000000000000..442ae1a5f1591896b6ccf13a4c9948bec17a6158 GIT binary patch literal 7032 zcmeHLPfrs;6rXMRvp^LPiT^Id6BnD7Xu{D2T1%{yw1q%C)RnHVfo_}KLg3~RJG2Q31s?#ekSl zpZxce%HacS;X3!fq7Q@UG0~3+{4m6jfWEubK0)$llGyN#+N2w=OO$u zxgn<4$^wO)wF(Q~pj9(UPY7phj9uqQeKH;k+;K@dNqCLoIwfXE&yWDGsV-NG62M|g zP7HL*X{ni|#B7Mq6pKZxQX#%UNqL^n%B3|}pyoHFTvM#)%9Z8PijoU1!~EHFM%I9T zUQt7O81S!dR;`6%u2RdF$}g;Ht=IUube6_VDw$FLl%YVCAEfYi{wc&5Hylsj z_;v$&Qi8{ghsPZ_e&9AejMo4S#!DuheUhFFj~h|r9B->xcfD<;O#VgntyS}n0P{M2 z592uBZ~79+z#rBVw0(E09o93bR_4{+2I!cOfJRI|g=%MheB9}E-Bfy%Ur9IeU8fBv zAm|$ojq{!D{XN^4a>h{>EtvPca2vD;af+n#pOn&pbxQt#4pKdlNGJ&=Wp+uUkitQf z*kMK7qE!I%!>`}#+CFe@_C61-a@pFHV>CZ-_dXBj(vOwKi{h20Cop~tNXb}EN4Tdu zm1b4tnEa$Wm!MN$h!6LAabP>2m!IyO&)4t0*1{rBQQ<;Xm@;G;7`@sDF$?7E&B*)0!;tUk)`;q^h~y^z4L+?6!y=e&7`^0rlM zmU1%c%Mdy*&t51mPbnQ=NKw?DoJ28A%6BPXjouS_=jYEUKj#bWb?pyEHr z&r8A&;+v-5xA(iN#t**}N8g)t9Gg~gh~B%@`&K9{oO55txNy?h=kw$2#qaCy|Ev4@ MRqv Date: Fri, 25 Aug 2023 11:55:48 -0700 Subject: [PATCH 3/3] mmend --- pandas/tests/util/test_assert_almost_equal.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pandas/tests/util/test_assert_almost_equal.py b/pandas/tests/util/test_assert_almost_equal.py index bc35f1af0c683..6341fc57dba20 100644 --- a/pandas/tests/util/test_assert_almost_equal.py +++ b/pandas/tests/util/test_assert_almost_equal.py @@ -458,11 +458,9 @@ def test_assert_almost_equal_shape_mismatch_override(): @pytest.mark.parametrize( "obj", [ - MockNumpyLikeArray(np.ndarray((2,) * 1)), - MockNumpyLikeArray(np.array([])), MockNumpyLikeArray(np.array(2)), ], - ids=["duck-ndarray-1d", "duck-ndarray-1d-empty", "duck-ndarray-0d"], + ids=["duck-ndarray-0d"], ) def test_assert_almost_equal_not_iterable(obj): tm.assert_almost_equal(obj, obj)