From c527bc36ed41d332a0a40f426d50340300296b9b Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Mon, 21 Sep 2026 10:38:41 +0200 Subject: [PATCH 01/16] Fix for deprecated generic units --- python/pyarrow/tests/test_array.py | 13 +++++++++---- python/pyarrow/tests/test_pandas.py | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/python/pyarrow/tests/test_array.py b/python/pyarrow/tests/test_array.py index 38a131f5d953..74ff837e16e8 100644 --- a/python/pyarrow/tests/test_array.py +++ b/python/pyarrow/tests/test_array.py @@ -36,6 +36,7 @@ import pyarrow as pa import pyarrow.tests.strategies as past import pyarrow.compute as pc +from pyarrow.vendored.version import Version @pytest.mark.processes @@ -2737,6 +2738,8 @@ def test_array_from_list_of_timestamps(unit): @pytest.mark.numpy def test_array_from_timestamp_with_generic_unit(): + if Version(np.__version__) >= Version("2.5.0"): + pytest.skip("generic units of timedelta64 deprecated") n = np.datetime64('NaT') x = np.datetime64('2017-01-01 01:01:01.111111111') y = np.datetime64('2018-11-22 12:24:48.111111111') @@ -2778,11 +2781,13 @@ def test_array_from_numpy_timedelta(dtype, type): @pytest.mark.numpy def test_array_from_numpy_timedelta_incorrect_unit(): # generic (no unit) - td = np.timedelta64(1) + if Version(np.__version__) < Version("2.5.0"): + # Generic units of timedelta64 deprecated in NumPy 2.5 + td = np.timedelta64(1) - for data in [[td], np.array([td])]: - with pytest.raises(NotImplementedError): - pa.array(data) + for data in [[td], np.array([td])]: + with pytest.raises(NotImplementedError): + pa.array(data) # unsupported unit td = np.timedelta64(1, 'M') diff --git a/python/pyarrow/tests/test_pandas.py b/python/pyarrow/tests/test_pandas.py index 6fc9925eb012..c928919a87ad 100644 --- a/python/pyarrow/tests/test_pandas.py +++ b/python/pyarrow/tests/test_pandas.py @@ -5016,7 +5016,7 @@ def test_does_not_mutate_timedelta_dtype(): assert np.dtype(np.timedelta64) == expected - df = pd.DataFrame({"a": [np.timedelta64()]}) + df = pd.DataFrame({"a": [np.timedelta64(0, "s")]}) t = pa.Table.from_pandas(df) t.to_pandas() From 7008b962e9755dd7a38309c95d506313e3d5b1d4 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Mon, 21 Sep 2026 12:01:05 +0200 Subject: [PATCH 02/16] Fix dlpack warnings --- python/pyarrow/array.pxi | 2 +- python/pyarrow/tensor.pxi | 2 +- python/pyarrow/tests/test_compute.py | 3 ++- python/pyarrow/tests/test_dlpack.py | 14 ++++++++++---- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/python/pyarrow/array.pxi b/python/pyarrow/array.pxi index bf9a6d672280..a0a89fd9a6cd 100644 --- a/python/pyarrow/array.pxi +++ b/python/pyarrow/array.pxi @@ -2388,13 +2388,13 @@ cdef class Array(_PandasConvertible): raise BufferError( f"The copy argument is not supported with legacy (pre 1.0) DLPack version." ) + legacy_tensor = GetResultValue(ExportArrayToDLPack(self.sp_array)) # Note: from March 2025 onwards, it's okay to raise BufferError here. # Still we keep the V0 version as the V1 was only added in August 2026. warnings.warn( "Exporting an unversioned DLPack capsule is deprecated, " "pass max_version=(1, 0) or higher.", DeprecationWarning, stacklevel=2) - legacy_tensor = GetResultValue(ExportArrayToDLPack(self.sp_array)) return PyCapsule_New(legacy_tensor, 'dltensor', dlpack_pycapsule_deleter) # Currently no major version other than legacy 0 and current 1.3 diff --git a/python/pyarrow/tensor.pxi b/python/pyarrow/tensor.pxi index 7f006f294175..b41309d19a85 100644 --- a/python/pyarrow/tensor.pxi +++ b/python/pyarrow/tensor.pxi @@ -399,13 +399,13 @@ strides: {self.strides}""" raise BufferError( f"The copy argument is not supported with legacy (pre 1.0) DLPack version." ) + legacy_tensor = GetResultValue(ExportTensorToDLPack(self.sp_tensor)) # Note: from March 2025 onwards, it's okay to raise BufferError here. # Still we keep the V0 version as the V1 was only added in August 2026. warnings.warn( "Exporting an unversioned DLPack capsule is deprecated, " "pass max_version=(1, 0) or higher.", DeprecationWarning, stacklevel=2) - legacy_tensor = GetResultValue(ExportTensorToDLPack(self.sp_tensor)) return PyCapsule_New(legacy_tensor, 'dltensor', dlpack_pycapsule_deleter) # Currently no major version other than legacy 0 and current 1.3 diff --git a/python/pyarrow/tests/test_compute.py b/python/pyarrow/tests/test_compute.py index a146278a8b14..4f63b10cd3c2 100644 --- a/python/pyarrow/tests/test_compute.py +++ b/python/pyarrow/tests/test_compute.py @@ -138,7 +138,8 @@ def test_exported_option_classes(): @pytest.mark.filterwarnings( - "ignore:pyarrow.CumulativeSumOptions is deprecated as of 14.0" + "ignore:pyarrow.CumulativeSumOptions is deprecated as of 14.0", + "ignore:null_placement in RankOptions is deprecated as of 25.0.0" ) def test_option_class_equality(request): options = [ diff --git a/python/pyarrow/tests/test_dlpack.py b/python/pyarrow/tests/test_dlpack.py index 0c3c082fd6ed..bf93c431feca 100644 --- a/python/pyarrow/tests/test_dlpack.py +++ b/python/pyarrow/tests/test_dlpack.py @@ -267,6 +267,9 @@ def immutable_tensor(): @check_bytes_allocated +@pytest.mark.filterwarnings( + "ignore:Exporting an unversioned DLPack capsule is deprecated" +) @pytest.mark.parametrize('max_version', [None, (0, 8)]) def test_dlpack_legacy_capsule_immutable_tensor(max_version): tensor = immutable_tensor() @@ -305,6 +308,9 @@ def test_dlpack_versioned_capsule(obj, max_version, copy): @requires_numpy_version("2.1.0") @check_bytes_allocated +@pytest.mark.filterwarnings( + "ignore:Exporting an unversioned DLPack capsule is deprecated" +) @pytest.mark.parametrize('obj', dlpack_objects()) def test_dlpack_versioned_roundtrip(obj): expected = np.from_dlpack(DLPackForwarder(obj, max_version=None)) @@ -335,24 +341,24 @@ def test_dlpack_not_supported(): arr = pa.array([1, None, 3]) with pytest.raises(TypeError, match="Can only use DLPack " "on arrays with no nulls."): - np.from_dlpack(arr) + np.from_dlpack(DLPackForwarder(arr, max_version=(1, 0))) arr = pa.array( [[0, 1], [3, 4]], type=pa.list_(pa.int32()) ) with pytest.raises(TypeError, match="DataType is not compatible with DLPack spec"): - np.from_dlpack(arr) + np.from_dlpack(DLPackForwarder(arr, max_version=(1, 0))) arr = pa.array([]) with pytest.raises(TypeError, match="DataType is not compatible with DLPack spec"): - np.from_dlpack(arr) + np.from_dlpack(DLPackForwarder(arr, max_version=(1, 0))) # DLPack doesn't support bit-packed boolean values arr = pa.array([True, False, True]) with pytest.raises(TypeError, match="Bit-packed boolean data type " "not supported by DLPack."): - np.from_dlpack(arr) + np.from_dlpack(DLPackForwarder(arr, max_version=(1, 0))) def test_dlpack_cuda_not_supported(): From 1d3d8c979b9b60f9bfe4abb7eff8b704e2651cdc Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Mon, 21 Sep 2026 12:14:08 +0200 Subject: [PATCH 03/16] Fix null_placement warnings --- python/pyarrow/tests/test_compute.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/python/pyarrow/tests/test_compute.py b/python/pyarrow/tests/test_compute.py index 4f63b10cd3c2..c5ae12aa6c2f 100644 --- a/python/pyarrow/tests/test_compute.py +++ b/python/pyarrow/tests/test_compute.py @@ -139,7 +139,7 @@ def test_exported_option_classes(): @pytest.mark.filterwarnings( "ignore:pyarrow.CumulativeSumOptions is deprecated as of 14.0", - "ignore:null_placement in RankOptions is deprecated as of 25.0.0" + "ignore:Specifying null_placement in RankOptions" ) def test_option_class_equality(request): options = [ @@ -2957,6 +2957,9 @@ def _check_temporal_rounding(ts, values, unit): @pytest.mark.parametrize('unit', ("nanosecond", "microsecond", "millisecond", "second", "minute", "hour", "day")) @pytest.mark.pandas +@pytest.mark.filterwarnings( + "ignore:Specifying null_placement in RankOptions" +) def test_round_temporal(unit): values = (1, 2, 3, 4, 5, 6, 7, 10, 15, 24, 60, 250, 500, 750) timestamps = [ @@ -3975,6 +3978,9 @@ def test_random(): pc.random(100, initializer=[]) +@pytest.mark.filterwarnings( + "ignore:Specifying null_placement in RankOptions" +) @pytest.mark.parametrize( "tiebreaker,expected_values", [("min", [3, 1, 4, 6, 4, 6, 1]), @@ -3991,6 +3997,9 @@ def test_rank_options_tiebreaker(tiebreaker, expected_values): assert result.equals(expected) +@pytest.mark.filterwarnings( + "ignore:Specifying null_placement in RankOptions" +) def test_rank_options(): arr = pa.array([1.2, 0.0, 5.3, None, 5.3, None, 0.0]) expected = pa.array([3, 1, 4, 6, 5, 7, 2], type=pa.uint64()) @@ -4023,6 +4032,9 @@ def test_rank_options(): tiebreaker="NonExisting") +@pytest.mark.filterwarnings( + "ignore:Specifying null_placement in RankOptions" +) def test_rank_quantile_options(): arr = pa.array([None, 1, None, 2, None]) expected = pa.array([0.7, 0.1, 0.7, 0.3, 0.7], type=pa.float64()) @@ -4053,6 +4065,9 @@ def test_rank_quantile_options(): pc.rank_quantile(arr, sort_keys="XXX") +@pytest.mark.filterwarnings( + "ignore:Specifying null_placement in RankOptions" +) def test_rank_normal_options(): arr = pa.array([None, 1, None, 2, None]) From 7087e6f123586a9973cbe5bbc2cef2a269b701b5 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Mon, 21 Sep 2026 12:20:10 +0200 Subject: [PATCH 04/16] Fix unit keyward warning in pd.timestamp --- python/pyarrow/tests/test_compute.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/pyarrow/tests/test_compute.py b/python/pyarrow/tests/test_compute.py index c5ae12aa6c2f..3a96fc3c96ad 100644 --- a/python/pyarrow/tests/test_compute.py +++ b/python/pyarrow/tests/test_compute.py @@ -2984,7 +2984,7 @@ def test_round_temporal(unit): if sys.platform == "win32": timestamps = timestamps[:3] + timestamps[5:] - ts = pd.Series([pd.Timestamp(x, unit="ns") for x in timestamps]) + ts = pd.Series([pd.Timestamp(x).as_unit("ns") for x in timestamps]) _check_temporal_rounding(ts, values, unit) timezones = ["Asia/Kolkata", "America/New_York", "Etc/GMT-4", "Etc/GMT+4", From 49cda66cc6acd7ef88d66943d24655dfb5577b3f Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Tue, 22 Sep 2026 10:44:02 +0200 Subject: [PATCH 05/16] Revert "Fix null_placement warnings" This reverts commit 180c88109caa84788491041e22e66775d576f89d. --- python/pyarrow/tests/test_compute.py | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/python/pyarrow/tests/test_compute.py b/python/pyarrow/tests/test_compute.py index 3a96fc3c96ad..c0e2b3db95d8 100644 --- a/python/pyarrow/tests/test_compute.py +++ b/python/pyarrow/tests/test_compute.py @@ -138,8 +138,7 @@ def test_exported_option_classes(): @pytest.mark.filterwarnings( - "ignore:pyarrow.CumulativeSumOptions is deprecated as of 14.0", - "ignore:Specifying null_placement in RankOptions" + "ignore:pyarrow.CumulativeSumOptions is deprecated as of 14.0" ) def test_option_class_equality(request): options = [ @@ -2957,9 +2956,6 @@ def _check_temporal_rounding(ts, values, unit): @pytest.mark.parametrize('unit', ("nanosecond", "microsecond", "millisecond", "second", "minute", "hour", "day")) @pytest.mark.pandas -@pytest.mark.filterwarnings( - "ignore:Specifying null_placement in RankOptions" -) def test_round_temporal(unit): values = (1, 2, 3, 4, 5, 6, 7, 10, 15, 24, 60, 250, 500, 750) timestamps = [ @@ -3978,9 +3974,6 @@ def test_random(): pc.random(100, initializer=[]) -@pytest.mark.filterwarnings( - "ignore:Specifying null_placement in RankOptions" -) @pytest.mark.parametrize( "tiebreaker,expected_values", [("min", [3, 1, 4, 6, 4, 6, 1]), @@ -3997,9 +3990,6 @@ def test_rank_options_tiebreaker(tiebreaker, expected_values): assert result.equals(expected) -@pytest.mark.filterwarnings( - "ignore:Specifying null_placement in RankOptions" -) def test_rank_options(): arr = pa.array([1.2, 0.0, 5.3, None, 5.3, None, 0.0]) expected = pa.array([3, 1, 4, 6, 5, 7, 2], type=pa.uint64()) @@ -4032,9 +4022,6 @@ def test_rank_options(): tiebreaker="NonExisting") -@pytest.mark.filterwarnings( - "ignore:Specifying null_placement in RankOptions" -) def test_rank_quantile_options(): arr = pa.array([None, 1, None, 2, None]) expected = pa.array([0.7, 0.1, 0.7, 0.3, 0.7], type=pa.float64()) @@ -4065,9 +4052,6 @@ def test_rank_quantile_options(): pc.rank_quantile(arr, sort_keys="XXX") -@pytest.mark.filterwarnings( - "ignore:Specifying null_placement in RankOptions" -) def test_rank_normal_options(): arr = pa.array([None, 1, None, 2, None]) From ed26b99485dcb0ae4a0a06cf4040d64dbeace81e Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Tue, 22 Sep 2026 14:38:33 +0200 Subject: [PATCH 06/16] Revert the change on __dlpack__ --- python/pyarrow/array.pxi | 2 +- python/pyarrow/tensor.pxi | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/pyarrow/array.pxi b/python/pyarrow/array.pxi index a0a89fd9a6cd..bf9a6d672280 100644 --- a/python/pyarrow/array.pxi +++ b/python/pyarrow/array.pxi @@ -2388,13 +2388,13 @@ cdef class Array(_PandasConvertible): raise BufferError( f"The copy argument is not supported with legacy (pre 1.0) DLPack version." ) - legacy_tensor = GetResultValue(ExportArrayToDLPack(self.sp_array)) # Note: from March 2025 onwards, it's okay to raise BufferError here. # Still we keep the V0 version as the V1 was only added in August 2026. warnings.warn( "Exporting an unversioned DLPack capsule is deprecated, " "pass max_version=(1, 0) or higher.", DeprecationWarning, stacklevel=2) + legacy_tensor = GetResultValue(ExportArrayToDLPack(self.sp_array)) return PyCapsule_New(legacy_tensor, 'dltensor', dlpack_pycapsule_deleter) # Currently no major version other than legacy 0 and current 1.3 diff --git a/python/pyarrow/tensor.pxi b/python/pyarrow/tensor.pxi index b41309d19a85..7f006f294175 100644 --- a/python/pyarrow/tensor.pxi +++ b/python/pyarrow/tensor.pxi @@ -399,13 +399,13 @@ strides: {self.strides}""" raise BufferError( f"The copy argument is not supported with legacy (pre 1.0) DLPack version." ) - legacy_tensor = GetResultValue(ExportTensorToDLPack(self.sp_tensor)) # Note: from March 2025 onwards, it's okay to raise BufferError here. # Still we keep the V0 version as the V1 was only added in August 2026. warnings.warn( "Exporting an unversioned DLPack capsule is deprecated, " "pass max_version=(1, 0) or higher.", DeprecationWarning, stacklevel=2) + legacy_tensor = GetResultValue(ExportTensorToDLPack(self.sp_tensor)) return PyCapsule_New(legacy_tensor, 'dltensor', dlpack_pycapsule_deleter) # Currently no major version other than legacy 0 and current 1.3 From 67d36d75a8211d0584f9895906358606523cfdbf Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Thu, 24 Sep 2026 08:04:40 +0200 Subject: [PATCH 07/16] Revert all dplack related changes --- python/pyarrow/tests/test_dlpack.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/python/pyarrow/tests/test_dlpack.py b/python/pyarrow/tests/test_dlpack.py index bf93c431feca..0c3c082fd6ed 100644 --- a/python/pyarrow/tests/test_dlpack.py +++ b/python/pyarrow/tests/test_dlpack.py @@ -267,9 +267,6 @@ def immutable_tensor(): @check_bytes_allocated -@pytest.mark.filterwarnings( - "ignore:Exporting an unversioned DLPack capsule is deprecated" -) @pytest.mark.parametrize('max_version', [None, (0, 8)]) def test_dlpack_legacy_capsule_immutable_tensor(max_version): tensor = immutable_tensor() @@ -308,9 +305,6 @@ def test_dlpack_versioned_capsule(obj, max_version, copy): @requires_numpy_version("2.1.0") @check_bytes_allocated -@pytest.mark.filterwarnings( - "ignore:Exporting an unversioned DLPack capsule is deprecated" -) @pytest.mark.parametrize('obj', dlpack_objects()) def test_dlpack_versioned_roundtrip(obj): expected = np.from_dlpack(DLPackForwarder(obj, max_version=None)) @@ -341,24 +335,24 @@ def test_dlpack_not_supported(): arr = pa.array([1, None, 3]) with pytest.raises(TypeError, match="Can only use DLPack " "on arrays with no nulls."): - np.from_dlpack(DLPackForwarder(arr, max_version=(1, 0))) + np.from_dlpack(arr) arr = pa.array( [[0, 1], [3, 4]], type=pa.list_(pa.int32()) ) with pytest.raises(TypeError, match="DataType is not compatible with DLPack spec"): - np.from_dlpack(DLPackForwarder(arr, max_version=(1, 0))) + np.from_dlpack(arr) arr = pa.array([]) with pytest.raises(TypeError, match="DataType is not compatible with DLPack spec"): - np.from_dlpack(DLPackForwarder(arr, max_version=(1, 0))) + np.from_dlpack(arr) # DLPack doesn't support bit-packed boolean values arr = pa.array([True, False, True]) with pytest.raises(TypeError, match="Bit-packed boolean data type " "not supported by DLPack."): - np.from_dlpack(DLPackForwarder(arr, max_version=(1, 0))) + np.from_dlpack(arr) def test_dlpack_cuda_not_supported(): From 6481e51df4715c4b390f2d932b310fa748fba7db Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Thu, 24 Sep 2026 08:25:23 +0200 Subject: [PATCH 08/16] Update test_does_not_mutate_timedelta_dtype --- python/pyarrow/tests/test_pandas.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/python/pyarrow/tests/test_pandas.py b/python/pyarrow/tests/test_pandas.py index c928919a87ad..cb20d42e2066 100644 --- a/python/pyarrow/tests/test_pandas.py +++ b/python/pyarrow/tests/test_pandas.py @@ -5012,15 +5012,15 @@ def test_threaded_pandas_import(): def test_does_not_mutate_timedelta_dtype(): - expected = np.dtype('m8') + expected = np.dtype(' Date: Thu, 24 Sep 2026 12:28:36 +0200 Subject: [PATCH 09/16] Add missing deprecation fixes --- python/pyarrow/tests/test_compute.py | 6 ++++-- python/pyarrow/tests/test_dataset.py | 2 +- python/pyarrow/tests/test_pandas.py | 7 ++++--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/python/pyarrow/tests/test_compute.py b/python/pyarrow/tests/test_compute.py index c0e2b3db95d8..a1492bcc225d 100644 --- a/python/pyarrow/tests/test_compute.py +++ b/python/pyarrow/tests/test_compute.py @@ -2656,8 +2656,8 @@ def _check_datetime_components(timestamps, timezone=None): year = ts.dt.year.astype("int64") month = ts.dt.month.astype("int64") day = ts.dt.day.astype("int64") - dayofweek = ts.dt.dayofweek.astype("int64") - dayofyear = ts.dt.dayofyear.astype("int64") + dayofweek = pd.DatetimeIndex(ts).day_of_week.astype("int64") + dayofyear = pd.DatetimeIndex(ts).day_of_year.astype("int64") quarter = ts.dt.quarter.astype("int64") hour = ts.dt.hour.astype("int64") minute = ts.dt.minute.astype("int64") @@ -2669,7 +2669,9 @@ def _check_datetime_components(timestamps, timezone=None): assert pc.is_leap_year(tsa).equals(pa.array(ts.dt.is_leap_year)) assert pc.month(tsa).equals(pa.array(month)) assert pc.day(tsa).equals(pa.array(day)) + assert pc.day_of_week(tsa).equals(pa.array(dayofweek)) + assert pc.day_of_year(tsa).equals(pa.array(dayofyear)) assert pc.iso_year(tsa).equals(pa.array(iso_year)) assert pc.iso_week(tsa).equals(pa.array(iso_week)) diff --git a/python/pyarrow/tests/test_dataset.py b/python/pyarrow/tests/test_dataset.py index 0a94c0bd9875..086550d2c74a 100644 --- a/python/pyarrow/tests/test_dataset.py +++ b/python/pyarrow/tests/test_dataset.py @@ -240,7 +240,7 @@ def multisourcefs(request): # create one with schema partitioning by weekday and color mockfs.create_dir('schema') - for part, chunk in df_b.groupby([df_b.date.dt.dayofweek, df_b.color]): + for part, chunk in df_b.groupby([pd.DatetimeIndex(df_b.date).day_of_week, df_b.color]): folder = f'schema/{part[0]}/{part[1]}' path = f'{folder}/chunk.parquet' mockfs.create_dir(folder) diff --git a/python/pyarrow/tests/test_pandas.py b/python/pyarrow/tests/test_pandas.py index cb20d42e2066..fd12b183e285 100644 --- a/python/pyarrow/tests/test_pandas.py +++ b/python/pyarrow/tests/test_pandas.py @@ -99,8 +99,8 @@ def _alltypes_example(size=100): def _check_pandas_roundtrip(df, expected=None, use_threads=False, expected_schema=None, - check_dtype=True, schema=None, - preserve_index=False, + check_dtype=True, check_freq=False, + schema=None,preserve_index=False, as_batch=False): klass = pa.RecordBatch if as_batch else pa.Table table = klass.from_pandas(df, schema=schema, @@ -125,7 +125,8 @@ def _check_pandas_roundtrip(df, expected=None, use_threads=False, "ignore", "elementwise comparison failed", DeprecationWarning) tm.assert_frame_equal(result, expected, check_dtype=check_dtype, check_index_type=('equiv' if preserve_index - else False)) + else False), + check_freq=check_freq) def _check_series_roundtrip(s, type_=None, expected_pa_type=None): From c4ac041bd10ae6d34d08772fc71c7cab8c11f851 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Fri, 25 Sep 2026 10:08:33 +0200 Subject: [PATCH 10/16] Run linter --- python/pyarrow/tests/test_pandas.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/pyarrow/tests/test_pandas.py b/python/pyarrow/tests/test_pandas.py index fd12b183e285..116358d3c96d 100644 --- a/python/pyarrow/tests/test_pandas.py +++ b/python/pyarrow/tests/test_pandas.py @@ -100,7 +100,7 @@ def _alltypes_example(size=100): def _check_pandas_roundtrip(df, expected=None, use_threads=False, expected_schema=None, check_dtype=True, check_freq=False, - schema=None,preserve_index=False, + schema=None, preserve_index=False, as_batch=False): klass = pa.RecordBatch if as_batch else pa.Table table = klass.from_pandas(df, schema=schema, From c5d17d5ca9d4c65a902b1c3cb6349bff6053f078 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Fri, 25 Sep 2026 10:35:24 +0200 Subject: [PATCH 11/16] Line too long --- python/pyarrow/tests/test_dataset.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/pyarrow/tests/test_dataset.py b/python/pyarrow/tests/test_dataset.py index 086550d2c74a..a08ef8d21efa 100644 --- a/python/pyarrow/tests/test_dataset.py +++ b/python/pyarrow/tests/test_dataset.py @@ -240,7 +240,8 @@ def multisourcefs(request): # create one with schema partitioning by weekday and color mockfs.create_dir('schema') - for part, chunk in df_b.groupby([pd.DatetimeIndex(df_b.date).day_of_week, df_b.color]): + for part, chunk in df_b.groupby([pd.DatetimeIndex(df_b.date).day_of_week, + df_b.color]): folder = f'schema/{part[0]}/{part[1]}' path = f'{folder}/chunk.parquet' mockfs.create_dir(folder) From 6fc2263c8798e9d5739435a76372aea707050738 Mon Sep 17 00:00:00 2001 From: Alenka Frim Date: Wed, 30 Sep 2026 10:48:00 +0200 Subject: [PATCH 12/16] Apply suggestion from @rok Co-authored-by: Rok Mihevc --- python/pyarrow/tests/test_compute.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/python/pyarrow/tests/test_compute.py b/python/pyarrow/tests/test_compute.py index a1492bcc225d..d0d60f56b52e 100644 --- a/python/pyarrow/tests/test_compute.py +++ b/python/pyarrow/tests/test_compute.py @@ -2669,9 +2669,7 @@ def _check_datetime_components(timestamps, timezone=None): assert pc.is_leap_year(tsa).equals(pa.array(ts.dt.is_leap_year)) assert pc.month(tsa).equals(pa.array(month)) assert pc.day(tsa).equals(pa.array(day)) - assert pc.day_of_week(tsa).equals(pa.array(dayofweek)) - assert pc.day_of_year(tsa).equals(pa.array(dayofyear)) assert pc.iso_year(tsa).equals(pa.array(iso_year)) assert pc.iso_week(tsa).equals(pa.array(iso_week)) From 8c3eec749c1afcaee04aa420cfae89250bf8bc89 Mon Sep 17 00:00:00 2001 From: Alenka Frim Date: Wed, 30 Sep 2026 10:49:05 +0200 Subject: [PATCH 13/16] Apply batched suggestions from code review Co-authored-by: Joris Van den Bossche --- python/pyarrow/tests/test_compute.py | 4 ++-- python/pyarrow/tests/test_dataset.py | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/python/pyarrow/tests/test_compute.py b/python/pyarrow/tests/test_compute.py index d0d60f56b52e..d4d44e9347e0 100644 --- a/python/pyarrow/tests/test_compute.py +++ b/python/pyarrow/tests/test_compute.py @@ -2656,8 +2656,8 @@ def _check_datetime_components(timestamps, timezone=None): year = ts.dt.year.astype("int64") month = ts.dt.month.astype("int64") day = ts.dt.day.astype("int64") - dayofweek = pd.DatetimeIndex(ts).day_of_week.astype("int64") - dayofyear = pd.DatetimeIndex(ts).day_of_year.astype("int64") + dayofweek = ts.dt.day_of_week.astype("int64") + dayofyear = ts.dt.day_of_year.astype("int64") quarter = ts.dt.quarter.astype("int64") hour = ts.dt.hour.astype("int64") minute = ts.dt.minute.astype("int64") diff --git a/python/pyarrow/tests/test_dataset.py b/python/pyarrow/tests/test_dataset.py index a08ef8d21efa..fc6da92461bb 100644 --- a/python/pyarrow/tests/test_dataset.py +++ b/python/pyarrow/tests/test_dataset.py @@ -240,8 +240,7 @@ def multisourcefs(request): # create one with schema partitioning by weekday and color mockfs.create_dir('schema') - for part, chunk in df_b.groupby([pd.DatetimeIndex(df_b.date).day_of_week, - df_b.color]): + for part, chunk in df_b.groupby(df_b.date.dt.day_of_week, df_b.color]): folder = f'schema/{part[0]}/{part[1]}' path = f'{folder}/chunk.parquet' mockfs.create_dir(folder) From 9edb241283fd295448d869972830be2341e5b61e Mon Sep 17 00:00:00 2001 From: Alenka Frim Date: Wed, 30 Sep 2026 11:01:01 +0200 Subject: [PATCH 14/16] Fix groupby syntax for partitioning by weekday and color Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- python/pyarrow/tests/test_dataset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/pyarrow/tests/test_dataset.py b/python/pyarrow/tests/test_dataset.py index fc6da92461bb..9ddfdfdc9c49 100644 --- a/python/pyarrow/tests/test_dataset.py +++ b/python/pyarrow/tests/test_dataset.py @@ -240,7 +240,7 @@ def multisourcefs(request): # create one with schema partitioning by weekday and color mockfs.create_dir('schema') - for part, chunk in df_b.groupby(df_b.date.dt.day_of_week, df_b.color]): + for part, chunk in df_b.groupby([df_b.date.dt.day_of_week, df_b.color]): folder = f'schema/{part[0]}/{part[1]}' path = f'{folder}/chunk.parquet' mockfs.create_dir(folder) From 8020466beb452d109f48d8577acf0e46f6b922a0 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Mon, 5 Oct 2026 07:43:28 +0200 Subject: [PATCH 15/16] Update check_freq --- python/pyarrow/tests/test_pandas.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/pyarrow/tests/test_pandas.py b/python/pyarrow/tests/test_pandas.py index 116358d3c96d..df86392965e7 100644 --- a/python/pyarrow/tests/test_pandas.py +++ b/python/pyarrow/tests/test_pandas.py @@ -99,7 +99,7 @@ def _alltypes_example(size=100): def _check_pandas_roundtrip(df, expected=None, use_threads=False, expected_schema=None, - check_dtype=True, check_freq=False, + check_dtype=True, check_freq=True, schema=None, preserve_index=False, as_batch=False): klass = pa.RecordBatch if as_batch else pa.Table @@ -224,7 +224,7 @@ def test_column_index_names_datetime(self, tz): np.random.randn(5, 3), columns=pd.date_range("2021-01-01", periods=3, freq="50D", tz=tz) ) - _check_pandas_roundtrip(df, preserve_index=True) + _check_pandas_roundtrip(df, preserve_index=True, check_freq=False) def test_column_index_names_with_decimal(self): # GH-41503: Test valid roundtrip with decimal value in column index From 40997f0a073cd89d8bba912e4ee29b2b5072e296 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Tue, 6 Oct 2026 06:33:57 +0200 Subject: [PATCH 16/16] Revert changes on test_does_not_mutate_timedelta_dtype --- python/pyarrow/tests/test_pandas.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/python/pyarrow/tests/test_pandas.py b/python/pyarrow/tests/test_pandas.py index df86392965e7..9421b3452696 100644 --- a/python/pyarrow/tests/test_pandas.py +++ b/python/pyarrow/tests/test_pandas.py @@ -5013,15 +5013,15 @@ def test_threaded_pandas_import(): def test_does_not_mutate_timedelta_dtype(): - expected = np.dtype('