From 79fd984ca7e37676518ec90c8e411e653a401871 Mon Sep 17 00:00:00 2001 From: Brock Date: Wed, 28 Jul 2021 11:39:13 -0700 Subject: [PATCH 1/3] BUG: enable test_numpy tests with ArrayManager --- pandas/core/indexing.py | 4 ++++ pandas/core/internals/array_manager.py | 8 ++++++-- pandas/tests/extension/test_numpy.py | 25 ------------------------- 3 files changed, 10 insertions(+), 27 deletions(-) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 3b42d1c4505da..09b335a59ecef 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -1699,6 +1699,10 @@ def _setitem_with_indexer_split_path(self, indexer, value, name: str): # We get here in one case via .loc with a all-False mask pass + elif self._is_scalar_access(indexer): + # We are setting nested data + self._setitem_single_column(indexer[1], value, pi) + elif len(ilocs) == len(value): # We are setting multiple columns in a single row. for loc, v in zip(ilocs, value): diff --git a/pandas/core/internals/array_manager.py b/pandas/core/internals/array_manager.py index bd049b80b281c..15988b0b8ebd7 100644 --- a/pandas/core/internals/array_manager.py +++ b/pandas/core/internals/array_manager.py @@ -44,7 +44,6 @@ ) from pandas.core.dtypes.generic import ( ABCDataFrame, - ABCPandasArray, ABCSeries, ) from pandas.core.dtypes.inference import is_inferred_bool_dtype @@ -85,6 +84,7 @@ from pandas.core.internals.blocks import ( ensure_block_shape, external_values, + extract_pandas_array, maybe_coerce_values, new_block, to_native_types, @@ -408,6 +408,8 @@ def convert( ) -> T: def _convert(arr): if is_object_dtype(arr.dtype): + # extract PandasArray for tests that patch PandasArray._typ + arr = np.asarray(arr) return soft_convert_objects( arr, datetime=datetime, @@ -706,6 +708,7 @@ def __init__( if verify_integrity: self._axes = [ensure_index(ax) for ax in axes] + arrays = [extract_pandas_array(x, None, 1)[0] for x in arrays] self.arrays = [maybe_coerce_values(arr) for arr in arrays] self._verify_integrity() @@ -1192,7 +1195,8 @@ def __init__( self._axes = [ensure_index(ax) for ax in self._axes] arr = arrays[0] arr = maybe_coerce_values(arr) - if isinstance(arr, ABCPandasArray): + arr = extract_pandas_array(arr, None, 1)[0] + if isinstance(arr, PandasArray): arr = arr.to_numpy() self.arrays = [arr] self._verify_integrity() diff --git a/pandas/tests/extension/test_numpy.py b/pandas/tests/extension/test_numpy.py index a680ae5cd695c..597495a4a6ede 100644 --- a/pandas/tests/extension/test_numpy.py +++ b/pandas/tests/extension/test_numpy.py @@ -16,8 +16,6 @@ import numpy as np import pytest -import pandas.util._test_decorators as td - from pandas.core.dtypes.cast import can_hold_element from pandas.core.dtypes.dtypes import ( ExtensionDtype, @@ -34,9 +32,6 @@ ) from pandas.tests.extension import base -# TODO(ArrayManager) PandasArray -pytestmark = td.skip_array_manager_not_yet_implemented - def _extract_array_patched(obj): if isinstance(obj, (pd.Index, pd.Series)): @@ -365,26 +360,6 @@ def test_setitem_sequence_broadcasts(self, data, box_in_series): # length than the value super().test_setitem_sequence_broadcasts(data, box_in_series) - @skip_nested - def test_setitem_loc_scalar_mixed(self, data): - # AssertionError - super().test_setitem_loc_scalar_mixed(data) - - @skip_nested - def test_setitem_loc_scalar_multiple_homogoneous(self, data): - # AssertionError - super().test_setitem_loc_scalar_multiple_homogoneous(data) - - @skip_nested - def test_setitem_iloc_scalar_mixed(self, data): - # AssertionError - super().test_setitem_iloc_scalar_mixed(data) - - @skip_nested - def test_setitem_iloc_scalar_multiple_homogoneous(self, data): - # AssertionError - super().test_setitem_iloc_scalar_multiple_homogoneous(data) - @skip_nested @pytest.mark.parametrize("setter", ["loc", None]) def test_setitem_mask_broadcast(self, data, setter): From 5366a26f57726c2b420442c2afb4a9a1e1ba9d7d Mon Sep 17 00:00:00 2001 From: Brock Date: Mon, 2 Aug 2021 07:58:03 -0700 Subject: [PATCH 2/3] catch StringArray --- pandas/core/internals/array_manager.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pandas/core/internals/array_manager.py b/pandas/core/internals/array_manager.py index 69b2242ee48cd..652112a91fa0c 100644 --- a/pandas/core/internals/array_manager.py +++ b/pandas/core/internals/array_manager.py @@ -60,6 +60,7 @@ DatetimeArray, ExtensionArray, PandasArray, + StringArray, TimedeltaArray, ) from pandas.core.arrays.sparse import SparseDtype @@ -1187,7 +1188,7 @@ def __init__( arr = arrays[0] arr = maybe_coerce_values(arr) arr = extract_pandas_array(arr, None, 1)[0] - if isinstance(arr, PandasArray): + if isinstance(arr, PandasArray) and not isinstance(arr, StringArray): arr = arr.to_numpy() self.arrays = [arr] self._verify_integrity() From 912b044a6023e7f8e44f13e27562c35b94dda136 Mon Sep 17 00:00:00 2001 From: Brock Date: Mon, 2 Aug 2021 20:51:57 -0700 Subject: [PATCH 3/3] troubleshoot --- pandas/core/internals/array_manager.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/pandas/core/internals/array_manager.py b/pandas/core/internals/array_manager.py index 652112a91fa0c..c4f6aff049ea3 100644 --- a/pandas/core/internals/array_manager.py +++ b/pandas/core/internals/array_manager.py @@ -60,7 +60,6 @@ DatetimeArray, ExtensionArray, PandasArray, - StringArray, TimedeltaArray, ) from pandas.core.arrays.sparse import SparseDtype @@ -1188,8 +1187,6 @@ def __init__( arr = arrays[0] arr = maybe_coerce_values(arr) arr = extract_pandas_array(arr, None, 1)[0] - if isinstance(arr, PandasArray) and not isinstance(arr, StringArray): - arr = arr.to_numpy() self.arrays = [arr] self._verify_integrity()