Skip to content

Commit b3ab167

Browse files
CLN: consolidate arrow roundtrip tests for nullable dtypes in base masked tests (#34308)
1 parent 1f71d30 commit b3ab167

File tree

4 files changed

+53
-69
lines changed

4 files changed

+53
-69
lines changed

pandas/tests/arrays/boolean/test_construction.py

-30
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import numpy as np
22
import pytest
33

4-
import pandas.util._test_decorators as td
5-
64
import pandas as pd
75
import pandas._testing as tm
86
from pandas.arrays import BooleanArray
@@ -346,31 +344,3 @@ def test_to_numpy_copy():
346344
# mask = pd.array([True, False, True, None], dtype="boolean")
347345
# with pytest.raises(IndexError):
348346
# result = arr[mask]
349-
350-
351-
@td.skip_if_no("pyarrow", min_version="0.15.0")
352-
def test_arrow_array(data):
353-
# protocol added in 0.15.0
354-
import pyarrow as pa
355-
356-
arr = pa.array(data)
357-
358-
# TODO use to_numpy(na_value=None) here
359-
data_object = np.array(data, dtype=object)
360-
data_object[data.isna()] = None
361-
expected = pa.array(data_object, type=pa.bool_(), from_pandas=True)
362-
assert arr.equals(expected)
363-
364-
365-
@td.skip_if_no("pyarrow", min_version="0.15.1.dev")
366-
def test_arrow_roundtrip():
367-
# roundtrip possible from arrow 1.0.0
368-
import pyarrow as pa
369-
370-
data = pd.array([True, False, None], dtype="boolean")
371-
df = pd.DataFrame({"a": data})
372-
table = pa.table(df)
373-
assert table.field("a").type == "bool"
374-
result = table.to_pandas()
375-
assert isinstance(result["a"].dtype, pd.BooleanDtype)
376-
tm.assert_frame_equal(result, df)

pandas/tests/arrays/integer/test_construction.py

-39
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import numpy as np
22
import pytest
33

4-
import pandas.util._test_decorators as td
5-
64
import pandas as pd
75
import pandas._testing as tm
86
from pandas.api.types import is_integer
@@ -199,40 +197,3 @@ def test_to_integer_array(values, to_dtype, result_dtype):
199197
assert result.dtype == result_dtype()
200198
expected = integer_array(values, dtype=result_dtype())
201199
tm.assert_extension_array_equal(result, expected)
202-
203-
204-
@td.skip_if_no("pyarrow", min_version="0.15.0")
205-
def test_arrow_array(data):
206-
# protocol added in 0.15.0
207-
import pyarrow as pa
208-
209-
arr = pa.array(data)
210-
expected = np.array(data, dtype=object)
211-
expected[data.isna()] = None
212-
expected = pa.array(expected, type=data.dtype.name.lower(), from_pandas=True)
213-
assert arr.equals(expected)
214-
215-
216-
@td.skip_if_no("pyarrow", min_version="0.16.0")
217-
def test_arrow_roundtrip(data):
218-
# roundtrip possible from arrow 0.16.0
219-
import pyarrow as pa
220-
221-
df = pd.DataFrame({"a": data})
222-
table = pa.table(df)
223-
assert table.field("a").type == str(data.dtype.numpy_dtype)
224-
result = table.to_pandas()
225-
tm.assert_frame_equal(result, df)
226-
227-
228-
@td.skip_if_no("pyarrow", min_version="0.16.0")
229-
def test_arrow_from_arrow_uint():
230-
# https://github.com/pandas-dev/pandas/issues/31896
231-
# possible mismatch in types
232-
import pyarrow as pa
233-
234-
dtype = pd.UInt32Dtype()
235-
result = dtype.__from_arrow__(pa.array([1, 2, 3, 4, None], type="int64"))
236-
expected = pd.array([1, 2, 3, 4, None], dtype="UInt32")
237-
238-
tm.assert_extension_array_equal(result, expected)

pandas/tests/arrays/masked/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import pytest
2+
3+
import pandas.util._test_decorators as td
4+
5+
import pandas as pd
6+
import pandas._testing as tm
7+
8+
arrays = [pd.array([1, 2, 3, None], dtype=dtype) for dtype in tm.ALL_EA_INT_DTYPES]
9+
arrays += [pd.array([True, False, True, None], dtype="boolean")]
10+
11+
12+
@pytest.fixture(params=arrays, ids=[a.dtype.name for a in arrays])
13+
def data(request):
14+
return request.param
15+
16+
17+
@td.skip_if_no("pyarrow", min_version="0.15.0")
18+
def test_arrow_array(data):
19+
# protocol added in 0.15.0
20+
import pyarrow as pa
21+
22+
arr = pa.array(data)
23+
expected = pa.array(
24+
data.to_numpy(object, na_value=None),
25+
type=pa.from_numpy_dtype(data.dtype.numpy_dtype),
26+
)
27+
assert arr.equals(expected)
28+
29+
30+
@td.skip_if_no("pyarrow", min_version="0.16.0")
31+
def test_arrow_roundtrip(data):
32+
# roundtrip possible from arrow 0.16.0
33+
import pyarrow as pa
34+
35+
df = pd.DataFrame({"a": data})
36+
table = pa.table(df)
37+
assert table.field("a").type == str(data.dtype.numpy_dtype)
38+
result = table.to_pandas()
39+
assert result["a"].dtype == data.dtype
40+
tm.assert_frame_equal(result, df)
41+
42+
43+
@td.skip_if_no("pyarrow", min_version="0.16.0")
44+
def test_arrow_from_arrow_uint():
45+
# https://github.com/pandas-dev/pandas/issues/31896
46+
# possible mismatch in types
47+
import pyarrow as pa
48+
49+
dtype = pd.UInt32Dtype()
50+
result = dtype.__from_arrow__(pa.array([1, 2, 3, 4, None], type="int64"))
51+
expected = pd.array([1, 2, 3, 4, None], dtype="UInt32")
52+
53+
tm.assert_extension_array_equal(result, expected)

0 commit comments

Comments
 (0)