From 31fb9221899585318beeca0d0adc7e9a02de2f7c Mon Sep 17 00:00:00 2001 From: Denis Date: Tue, 19 May 2020 14:46:36 +0300 Subject: [PATCH] Re-implement df.pct_change based on new structure --- sdc/datatypes/hpat_pandas_dataframe_functions.py | 10 ++++++---- sdc/tests/test_dataframe.py | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/sdc/datatypes/hpat_pandas_dataframe_functions.py b/sdc/datatypes/hpat_pandas_dataframe_functions.py index 8640cebeb..c003611d9 100644 --- a/sdc/datatypes/hpat_pandas_dataframe_functions.py +++ b/sdc/datatypes/hpat_pandas_dataframe_functions.py @@ -640,13 +640,15 @@ def copy_overload(df, deep=True): return sdc_pandas_dataframe_copy_codegen(df, params, series_params) -def _dataframe_apply_columns_codegen(func_name, func_params, series_params, columns): +def _dataframe_apply_columns_codegen(func_name, func_params, series_params, columns, column_loc): result_name = [] joined = ', '.join(func_params) func_lines = [f'def _df_{func_name}_impl({joined}):'] for i, c in enumerate(columns): + col_loc = column_loc[c] + type_id, col_id = col_loc.type_id, col_loc.col_id result_c = f'result_{i}' - func_lines += [f' series_{i} = pandas.Series({func_params[0]}._data[{i}])', + func_lines += [f' series_{i} = pandas.Series({func_params[0]}._data[{type_id}][{col_id}])', f' {result_c} = series_{i}.{func_name}({series_params})'] result_name.append((result_c, c)) @@ -673,8 +675,8 @@ def sdc_pandas_dataframe_apply_columns(df, func_name, params, ser_params): df_func_name = f'_df_{func_name}_impl' - func_text, global_vars = _dataframe_apply_columns_codegen(func_name, all_params, s_par, df.columns) - + func_text, global_vars = _dataframe_apply_columns_codegen(func_name, all_params, s_par, + df.columns, df.column_loc) loc_vars = {} exec(func_text, global_vars, loc_vars) _reduce_impl = loc_vars[df_func_name] diff --git a/sdc/tests/test_dataframe.py b/sdc/tests/test_dataframe.py index f7f595b63..d83a6c3e9 100644 --- a/sdc/tests/test_dataframe.py +++ b/sdc/tests/test_dataframe.py @@ -1347,7 +1347,7 @@ def test_impl(df, deep): with self.subTest(index=idx, deep=deep): pd.testing.assert_frame_equal(sdc_func(df, deep), test_impl(df, deep)) - @dfRefactoringNotImplemented + @dfRefactoringNotImplemented # required re-implementing DataFrame boxing def test_pct_change1(self): def test_impl(n): df = pd.DataFrame({'A': np.arange(n) + 1.0, 'B': np.arange(n) + 1})