-
-
Notifications
You must be signed in to change notification settings - Fork 18.5k
COMPAT: np 1.18 wants explicit dtype=object) #30035
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
bd1b261
af573eb
fa5df88
1c6c7ff
8f10b6a
4be57a6
77c592f
1ba69b1
5ebff2e
52ae9df
3584dab
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -74,10 +74,20 @@ def cat_core(list_of_columns: List, sep: str): | |
""" | ||
if sep == "": | ||
# no need to interleave sep if it is empty | ||
return np.sum(list_of_columns, axis=0) | ||
with warnings.catch_warnings(): | ||
# See https://github.com/numpy/numpy/issues/15041 | ||
warnings.filterwarnings("ignore", ".*with automatic object dtype.*") | ||
out = np.sum(list_of_columns, axis=0) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. can these be replaced with a There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. maybe? ATM im just trying to get a handle on the scope of the problem There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We will revert this for 1.18. PRobably also on master (but probably only temporarily to pacify downstream testsuits for a bit!). The interesting thing would be if there are cases where it cannot be fixed easily. I.e. adding a warning filter should not be necessary except for specific tests. (I am sure you are aware, but the filter context manager is not a good solution in this code, since it is not thread safe at all.) |
||
return out | ||
|
||
list_with_sep = [sep] * (2 * len(list_of_columns) - 1) | ||
list_with_sep[::2] = list_of_columns | ||
return np.sum(list_with_sep, axis=0) | ||
|
||
with warnings.catch_warnings(): | ||
# See https://github.com/numpy/numpy/issues/15041 | ||
warnings.filterwarnings("ignore", ".*with automatic object dtype.*") | ||
out = np.sum(list_with_sep, axis=0) | ||
return out | ||
|
||
|
||
def cat_safe(list_of_columns: List, sep: str): | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1482,6 +1482,11 @@ def _format_strings(self) -> List[str]: | |
if is_categorical_dtype(values.dtype): | ||
# Categorical is special for now, so that we can preserve tzinfo | ||
array = values._internal_get_values() | ||
elif values.dtype.kind == "O": | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. prefer to use is_object_dtype There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. i didnt check whether that works on JSONArray, just that |
||
# numpy>=1.18 wants object dtype passed explicitly | ||
# Note: dtype.kind check works for json extension tests, while | ||
# dtype == object check does not. | ||
array = np.asarray(values, dtype=object) | ||
else: | ||
array = np.asarray(values) | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -51,7 +51,7 @@ def data_missing(allow_in_pandas, dtype): | |
if dtype.numpy_dtype == "object": | ||
if _np_version_under1p16: | ||
raise pytest.skip("Skipping for NumPy <1.16") | ||
return PandasArray(np.array([np.nan, (1,)])) | ||
return PandasArray(np.array([np.nan, (1,)], dtype=object)) | ||
return PandasArray(np.array([np.nan, 1.0])) | ||
|
||
|
||
|
@@ -78,7 +78,7 @@ def data_for_sorting(allow_in_pandas, dtype): | |
if dtype.numpy_dtype == "object": | ||
# Use an empty tuple for first element, then remove, | ||
# to disable np.array's shape inference. | ||
return PandasArray(np.array([(), (2,), (3,), (1,)])[1:]) | ||
return PandasArray(np.array([(), (2,), (3,), (1,)], dtype=object)[1:]) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @TomAugspurger does the comment above about shape inference have any bearing on the inference here? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think using If we want to get rid of the empty tuple / shape stuff, we could probably allocate the array with the right shape and set the values later In [6]: a = np.empty((3,), dtype=object)
In [7]: a[:] = (2,), (3,), (1,) |
||
return PandasArray(np.array([1, 2, 0])) | ||
|
||
|
||
|
@@ -90,7 +90,7 @@ def data_missing_for_sorting(allow_in_pandas, dtype): | |
A < B and NA missing. | ||
""" | ||
if dtype.numpy_dtype == "object": | ||
return PandasArray(np.array([(1,), np.nan, (0,)])) | ||
return PandasArray(np.array([(1,), np.nan, (0,)], dtype=object)) | ||
return PandasArray(np.array([1, np.nan, 0])) | ||
|
||
|
||
|
@@ -106,7 +106,9 @@ def data_for_grouping(allow_in_pandas, dtype): | |
a, b, c = (1,), (2,), (3,) | ||
else: | ||
a, b, c = np.arange(3) | ||
return PandasArray(np.array([b, b, np.nan, np.nan, a, a, b, c])) | ||
return PandasArray( | ||
np.array([b, b, np.nan, np.nan, a, a, b, c], dtype=dtype.numpy_dtype) | ||
) | ||
|
||
|
||
@pytest.fixture | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -761,8 +761,9 @@ def test_array_list(self): | |
["a", "b"], | ||
{"key": "val"}, | ||
] | ||
arr = np.array(arr_list) | ||
tm.assert_numpy_array_equal(np.array(ujson.decode(ujson.encode(arr))), arr) | ||
arr = np.array(arr_list, dtype=object) | ||
result = np.array(ujson.decode(ujson.encode(arr)), dtype=object) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. can you create an expected here |
||
tm.assert_numpy_array_equal(result, arr) | ||
|
||
def test_array_float(self): | ||
dtype = np.float32 | ||
|
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since this is documented as being 1d only, this should be:
which will work correctly even if
values == [[1, 2], [3, 4]]