File tree 2 files changed +13
-0
lines changed
2 files changed +13
-0
lines changed Original file line number Diff line number Diff line change @@ -1634,6 +1634,10 @@ def _replace_with_mask(
1634
1634
indices = pa .array (indices , type = pa .int64 ())
1635
1635
replacements = replacements .take (indices )
1636
1636
return cls ._if_else (mask , replacements , values )
1637
+ if isinstance (values , pa .ChunkedArray ) and pa .types .is_boolean (values .type ):
1638
+ # GH#52059 replace_with_mask segfaults for chunked array
1639
+ # https://github.com/apache/arrow/issues/34634
1640
+ values = values .combine_chunks ()
1637
1641
try :
1638
1642
return pc .replace_with_mask (values , mask , replacements )
1639
1643
except pa .ArrowNotImplementedError :
Original file line number Diff line number Diff line change @@ -2377,3 +2377,12 @@ def test_pickle_old_arrowextensionarray():
2377
2377
tm .assert_extension_array_equal (result , expected )
2378
2378
assert result ._pa_array == pa .chunked_array (data )
2379
2379
assert not hasattr (result , "_data" )
2380
+
2381
+
2382
+ def test_setitem_boolean_replace_with_mask_segfault ():
2383
+ # GH#52059
2384
+ N = 145_000
2385
+ arr = ArrowExtensionArray (pa .chunked_array ([np .ones ((N ,), dtype = np .bool_ )]))
2386
+ expected = arr .copy ()
2387
+ arr [np .zeros ((N ,), dtype = np .bool_ )] = False
2388
+ assert arr ._pa_array == expected ._pa_array
You can’t perform that action at this time.
0 commit comments