diff --git a/python/helpers/pydev/_pydevd_bundle/tables/pydevd_pandas.py b/python/helpers/pydev/_pydevd_bundle/tables/pydevd_pandas.py index 013021faaeef..b1990fdc150f 100644 --- a/python/helpers/pydev/_pydevd_bundle/tables/pydevd_pandas.py +++ b/python/helpers/pydev/_pydevd_bundle/tables/pydevd_pandas.py @@ -36,7 +36,7 @@ def get_column_types(table): # used by pydevd # noinspection PyUnresolvedReferences def get_data(table, use_csv_serialization, start_index=None, end_index=None, format=None): - # type: (Union[pd.DataFrame, pd.Series], int, int) -> str + # type: (Union[pd.DataFrame, pd.Series], bool, int, int) -> str def convert_data_to_csv(data): return repr(__convert_to_df(data).to_csv(na_rep = "NaN", float_format=format, sep=CSV_FORMAT_SEPARATOR)) diff --git a/python/helpers/pydev/pydev_tests_tables/test_data/numpy/2d_np_array_2_7_after.txt b/python/helpers/pydev/pydev_tests_tables/test_data/numpy/2d_np_array_2_7_after.txt new file mode 100644 index 000000000000..80653b33afbe --- /dev/null +++ b/python/helpers/pydev/pydev_tests_tables/test_data/numpy/2d_np_array_2_7_after.txt @@ -0,0 +1,7 @@ + +__pydev_val__ +(3, 3) +__pydev_val__ +None +__pydev_val__ +int64__pydev_table_column_type_val__int64__pydev_table_column_type_val__int64__pydev_table_column_type_val__int64 \ No newline at end of file diff --git a/python/helpers/pydev/pydev_tests_tables/test_data/numpy/2d_np_array_3_12_after.txt b/python/helpers/pydev/pydev_tests_tables/test_data/numpy/2d_np_array_3_12_after.txt new file mode 100644 index 000000000000..a869398553c3 --- /dev/null +++ b/python/helpers/pydev/pydev_tests_tables/test_data/numpy/2d_np_array_3_12_after.txt @@ -0,0 +1,7 @@ + +__pydev_val__ +(3, 3) +__pydev_val__ +None +__pydev_val__ +int64__pydev_table_column_type_val__int64__pydev_table_column_type_val__int64__pydev_table_column_type_val__int64 \ No newline at end of file diff --git a/python/helpers/pydev/pydev_tests_tables/test_data/numpy/2d_np_array_3_8_after.txt b/python/helpers/pydev/pydev_tests_tables/test_data/numpy/2d_np_array_3_8_after.txt new file mode 100644 index 000000000000..a869398553c3 --- /dev/null +++ b/python/helpers/pydev/pydev_tests_tables/test_data/numpy/2d_np_array_3_8_after.txt @@ -0,0 +1,7 @@ + +__pydev_val__ +(3, 3) +__pydev_val__ +None +__pydev_val__ +int64__pydev_table_column_type_val__int64__pydev_table_column_type_val__int64__pydev_table_column_type_val__int64 \ No newline at end of file diff --git a/python/helpers/pydev/pydev_tests_tables/test_data/numpy/2d_np_array_after.txt b/python/helpers/pydev/pydev_tests_tables/test_data/numpy/2d_np_array_after.txt deleted file mode 100644 index 3cf8862c670e..000000000000 --- a/python/helpers/pydev/pydev_tests_tables/test_data/numpy/2d_np_array_after.txt +++ /dev/null @@ -1,7 +0,0 @@ - -__pydev_val__ -3 -__pydev_val__ -'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
012
0123
1456
2789
\n' -__pydev_val__ -int64__pydev_table_column_type_val__int64__pydev_table_column_type_val__int64__pydev_table_column_type_val__int64 \ No newline at end of file diff --git a/python/helpers/pydev/pydev_tests_tables/test_data/numpy/np_array_with_dtype_2_7_after.txt b/python/helpers/pydev/pydev_tests_tables/test_data/numpy/np_array_with_dtype_2_7_after.txt new file mode 100644 index 000000000000..19d8d823ea0e --- /dev/null +++ b/python/helpers/pydev/pydev_tests_tables/test_data/numpy/np_array_with_dtype_2_7_after.txt @@ -0,0 +1,7 @@ + +__pydev_val__ +(2, 1) +__pydev_val__ +None +__pydev_val__ +int64__pydev_table_column_type_val__int32__pydev_table_column_type_val__float32__pydev_table_column_type_val__ +__pydev_val__ +(2, 1) +__pydev_val__ +None +__pydev_val__ +int64__pydev_table_column_type_val__int32__pydev_table_column_type_val__float32__pydev_table_column_type_val__ +__pydev_val__ +(2, 1) +__pydev_val__ +None +__pydev_val__ +int64__pydev_table_column_type_val__int32__pydev_table_column_type_val__float32__pydev_table_column_type_val__ -__pydev_val__ -2 -__pydev_val__ -'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
cicfcscb
0103.140000104904175HelloTrue
1202.7100000381469727WorldFalse
\n' -__pydev_val__ -int64__pydev_table_column_type_val__int32__pydev_table_column_type_val__float32__pydev_table_column_type_val__ +__pydev_val__ +(2, 3) +__pydev_val__ +None +__pydev_val__ +int64__pydev_table_column_type_val__|S5__pydev_table_column_type_val__|S5__pydev_table_column_type_val__|S5 \ No newline at end of file diff --git a/python/helpers/pydev/pydev_tests_tables/test_data/numpy/simple_2d_np_array_3_12_after.txt b/python/helpers/pydev/pydev_tests_tables/test_data/numpy/simple_2d_np_array_3_12_after.txt new file mode 100644 index 000000000000..19a1f38d513b --- /dev/null +++ b/python/helpers/pydev/pydev_tests_tables/test_data/numpy/simple_2d_np_array_3_12_after.txt @@ -0,0 +1,7 @@ + +__pydev_val__ +(2, 3) +__pydev_val__ +None +__pydev_val__ +int64__pydev_table_column_type_val__ +__pydev_val__ +(2, 3) +__pydev_val__ +None +__pydev_val__ +int64__pydev_table_column_type_val__ -__pydev_val__ -2 -__pydev_val__ -'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
012
0TrueFalseTrue
1TrueTrueFalse
\n' -__pydev_val__ -int64__pydev_table_column_type_val__ +__pydev_val__ +(3, 1) +__pydev_val__ +None +__pydev_val__ +int64__pydev_table_column_type_val__int64 \ No newline at end of file diff --git a/python/helpers/pydev/pydev_tests_tables/test_data/numpy/simple_np_array_3_12_after.txt b/python/helpers/pydev/pydev_tests_tables/test_data/numpy/simple_np_array_3_12_after.txt new file mode 100644 index 000000000000..38d3ef691a7d --- /dev/null +++ b/python/helpers/pydev/pydev_tests_tables/test_data/numpy/simple_np_array_3_12_after.txt @@ -0,0 +1,7 @@ + +__pydev_val__ +(3, 1) +__pydev_val__ +None +__pydev_val__ +int64__pydev_table_column_type_val__int64 \ No newline at end of file diff --git a/python/helpers/pydev/pydev_tests_tables/test_data/numpy/simple_np_array_3_8_after.txt b/python/helpers/pydev/pydev_tests_tables/test_data/numpy/simple_np_array_3_8_after.txt new file mode 100644 index 000000000000..38d3ef691a7d --- /dev/null +++ b/python/helpers/pydev/pydev_tests_tables/test_data/numpy/simple_np_array_3_8_after.txt @@ -0,0 +1,7 @@ + +__pydev_val__ +(3, 1) +__pydev_val__ +None +__pydev_val__ +int64__pydev_table_column_type_val__int64 \ No newline at end of file diff --git a/python/helpers/pydev/pydev_tests_tables/test_data/numpy/simple_np_array_after.txt b/python/helpers/pydev/pydev_tests_tables/test_data/numpy/simple_np_array_after.txt deleted file mode 100644 index 47591b4b2cff..000000000000 --- a/python/helpers/pydev/pydev_tests_tables/test_data/numpy/simple_np_array_after.txt +++ /dev/null @@ -1,7 +0,0 @@ - -__pydev_val__ -3 -__pydev_val__ -'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
0
01
12
23
\n' -__pydev_val__ -int64__pydev_table_column_type_val__int64 \ No newline at end of file diff --git a/python/helpers/pydev/pydev_tests_tables/test_data/pandas/getInfo_result.txt b/python/helpers/pydev/pydev_tests_tables/test_data/pandas/getInfo_result.txt index b593f6f676a0..f87ee7afe202 100644 --- a/python/helpers/pydev/pydev_tests_tables/test_data/pandas/getInfo_result.txt +++ b/python/helpers/pydev/pydev_tests_tables/test_data/pandas/getInfo_result.txt @@ -2,6 +2,6 @@ __pydev_val__ 4 __pydev_val__ -'
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
ABCDEFGHIJKLdatetime64[ns]datetime64[ns, <tz>]periodcategory
01.0fooNone1.0+20.0j1.0+20.0jNoneNoneTrue2013-01-021.00test2001-01-022013-01-01 00:00:00+01:002012-01-01A
11.0fooNone1.0+20.0j1.0+20.0jbarbarFalse2013-01-021.01train2001-01-022013-01-02 00:00:00+01:002012-01-01B
21.0fooNone1.0+20.0j1.0+20.0j2.02.0True2013-01-021.02test2001-01-022013-01-03 00:00:00+01:002012-01-01C
31.0fooNone1.0+20.0j1.0+20.0j(1+10j)(1+10j)False2013-01-021.03train2001-01-022013-01-04 00:00:00+01:002012-01-01D
\n
' +'
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
ABCDEFGHIJKLdatetime64[ns]datetime64[ns, <tz>]periodcategory
01.0fooNone1.0+20.0j1.0+20.0jNoneNoneTrue2013-01-021.00test2001-01-022013-01-01 00:00:00+01:002012-01-01A
\n
' __pydev_val__ int64__pydev_table_column_type_val__float64__pydev_table_column_type_val__object__pydev_table_column_type_val__object__pydev_table_column_type_val__complex128__pydev_table_column_type_val__complex128__pydev_table_column_type_val__object__pydev_table_column_type_val__object__pydev_table_column_type_val__bool__pydev_table_column_type_val__datetime64[ns]__pydev_table_column_type_val__float32__pydev_table_column_type_val__int32__pydev_table_column_type_val__category__pydev_table_column_type_val__datetime64[ns]__pydev_table_column_type_val__datetime64[ns, CET]__pydev_table_column_type_val__period[D]__pydev_table_column_type_val__category \ No newline at end of file diff --git a/python/helpers/pydev/pydev_tests_tables/test_data/pandas/series_describe_3_9.txt b/python/helpers/pydev/pydev_tests_tables/test_data/pandas/series_describe_3_12.txt similarity index 100% rename from python/helpers/pydev/pydev_tests_tables/test_data/pandas/series_describe_3_9.txt rename to python/helpers/pydev/pydev_tests_tables/test_data/pandas/series_describe_3_12.txt diff --git a/python/helpers/pydev/pydev_tests_tables/test_pydev_nparray.py b/python/helpers/pydev/pydev_tests_tables/test_pydev_nparray.py index ffa43b0f7c5d..8c113fc1ebd1 100644 --- a/python/helpers/pydev/pydev_tests_tables/test_pydev_nparray.py +++ b/python/helpers/pydev/pydev_tests_tables/test_pydev_nparray.py @@ -1,40 +1,48 @@ # Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -import pytest import numpy as np -import _pydevd_bundle.tables.pydevd_numpy as pandas_tables_helpers +import pytest +import sys +import _pydevd_bundle.tables.pydevd_numpy as numpy_tables_helpers from _pydevd_bundle.pydevd_constants import NEXT_VALUE_SEPARATOR def check_info_np_array(arr, file): - actual = [pandas_tables_helpers.get_type(arr), + actual = [numpy_tables_helpers.get_type(arr), NEXT_VALUE_SEPARATOR, - pandas_tables_helpers.get_shape(arr), + numpy_tables_helpers.get_shape(arr), NEXT_VALUE_SEPARATOR, - pandas_tables_helpers.get_head(arr), + numpy_tables_helpers.get_head(arr), NEXT_VALUE_SEPARATOR, - pandas_tables_helpers.get_column_types(arr)] + numpy_tables_helpers.get_column_types(arr)] actual = '\n'.join(actual) read_expected_from_file_and_compare_with_actual( actual=actual, expected_file=file ) +def _get_python_version_info(): + # () -> str + return str(sys.version_info[0]) + '_' + str(sys.version_info[1]) + def test_simple_array(): arr = np.array([1, 2, 3]) - check_info_np_array(arr, 'test_data/numpy/simple_np_array_after.txt') + exp_file_python_ver = _get_python_version_info() + check_info_np_array(arr, 'test_data/numpy/simple_np_array_' + exp_file_python_ver + '_after.txt') def test_simple_2d_array(): arr = np.array([[True, "False", True], [True, True, False]]) - check_info_np_array(arr, 'test_data/numpy/simple_2d_np_array_after.txt') + exp_file_python_ver = _get_python_version_info() + check_info_np_array(arr, 'test_data/numpy/simple_2d_np_array_' + exp_file_python_ver + '_after.txt') def test_2d_array(): arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) - check_info_np_array(arr, 'test_data/numpy/2d_np_array_after.txt') + exp_file_python_ver = _get_python_version_info() + check_info_np_array(arr, 'test_data/numpy/2d_np_array_' + exp_file_python_ver + '_after.txt') def test_array_with_dtype(): @@ -45,7 +53,8 @@ def test_array_with_dtype(): ("cf", "f4"), ("cs", "U16"), ("cb", "?")]) - check_info_np_array(arr, 'test_data/numpy/np_array_with_dtype_after.txt') + exp_file_python_ver = _get_python_version_info() + check_info_np_array(arr, 'test_data/numpy/np_array_with_dtype_' + exp_file_python_ver + '_after.txt') def test_sorting_simple_array(): @@ -98,17 +107,23 @@ def read_expected_from_file_and_compare_with_actual(actual, expected_file): with open(expected_file, 'r') as in_f: expected = in_f.read() + + print("expected: ", expected) + print() + print("actual: ", actual) # for a more convenient assertion fails messages here we compare string char by char for ind, (act, exp) in enumerate(zip(actual, expected)): assert act == exp, \ - ("index is %s, act part = %s, exp part = %s" % + ("index is %s, act part = %s,\n\nexp part = %s" % (ind, - actual[max(0, ind - 20): min(len(actual) - 1, ind + 20)], - expected[max(0, ind - 20): min(len(actual) - 1, ind + 20)])) +# actual[max(0, ind - 20): min(len(actual) - 1, ind + 20)], +# expected[max(0, ind - 20): min(len(actual) - 1, ind + 20)])) + actual, + expected)) def _sort_array(arr, cols, orders): - return pandas_tables_helpers._NpTable(arr).sort((cols, orders)) + return numpy_tables_helpers._NpTable(arr).sort((cols, orders)) def _is_equals(arr_a, arr_b): diff --git a/python/helpers/pydev/pydev_tests_tables/test_pydev_pandas.py b/python/helpers/pydev/pydev_tests_tables/test_pydev_pandas.py index d3d59e65db20..18d31297cf4e 100644 --- a/python/helpers/pydev/pydev_tests_tables/test_pydev_pandas.py +++ b/python/helpers/pydev/pydev_tests_tables/test_pydev_pandas.py @@ -48,7 +48,7 @@ def setup_dataframe(): ) df['datetime64[ns]'] = df['datetime64[ns]'].astype("datetime64[ns]") df['I'] = df['I'].astype("datetime64[ns]") - df_html = repr(df.head().to_html(notebook=True, max_cols=None)) + df_html = repr(df.head(1).to_html(notebook=True, max_cols=None)) columns_types = [str(df.index.dtype)] + [str(t) for t in df.dtypes] return rows_number, df, df_html, columns_types @@ -112,7 +112,7 @@ def test_get_data_saves_display_options(setup_dataframe): max_colwidth_before = pd.get_option('display.max_colwidth') max_rows_before = pd.get_option('display.max_rows') - pandas_tables_helpers.get_data(df) + pandas_tables_helpers.get_data(df, False) max_columns_after = pd.get_option('display.max_columns') max_colwidth_after = pd.get_option('display.max_colwidth') @@ -134,7 +134,7 @@ def test_display_saves_display_options(setup_dataframe): max_colwidth_before = pd.get_option('display.max_colwidth') max_rows_before = pd.get_option('display.max_rows') - pandas_tables_helpers.display_data(df, start_index=0, end_index=2) + pandas_tables_helpers.display_data_html(df, start_index=0, end_index=2) max_columns_after = pd.get_option('display.max_columns') max_colwidth_after = pd.get_option('display.max_colwidth') @@ -184,6 +184,7 @@ def test_get_info_format(setup_dataframe): print('$NEXT_VALUE_SEPARATOR') print(get_head(initCommandResult)) print('$NEXT_VALUE_SEPARATOR') + print('$NEXT_VALUE_SEPARATOR') print(get_column_types(initCommandResult)) Here we check that with pandas_tables_helpers methods can compose expected result @@ -206,6 +207,13 @@ def test_get_info_format(setup_dataframe): pandas_tables_helpers.get_column_types(df)] actual = '\n'.join(actual) + print("GET INFO: START") + print() + pandas_tables_helpers.get_head(df) + print() + print("GET INFO: END") + print() + read_expected_from_file_and_compare_with_actual( actual=actual, expected_file='test_data/pandas/getInfo_result.txt' diff --git a/python/helpers/pydev/pydev_tests_tables/tox.ini b/python/helpers/pydev/pydev_tests_tables/tox.ini index 0c528a8eaf62..20974a285d68 100644 --- a/python/helpers/pydev/pydev_tests_tables/tox.ini +++ b/python/helpers/pydev/pydev_tests_tables/tox.ini @@ -1,25 +1,59 @@ [tox] -envlist = python2.7, python3.8, python3.9, numpy_only2.7, numpy_only3.8, numpy_only3.9 +envlist = python2.7, python3.8, python3.12, no_pandas_python2.7, no_pandas_python3.8, no_pandas_python3.12 isolated_build = True skipsdist = True -[testenv] +[testenv:python2.7] deps = pytest teamcity-messages - python2.7: pandas - python3.8: pandas - python3.9: pandas ipython - python3.8: polars - python3.9: polars + numpy + pandas commands = pytest -s test_pydev_pandas.py test_ds_sorting_commands/test_pandas.py -[testenv:numpy_only{2.7,3.8,3.9}] +[testenv:python3.8] deps = pytest - numpy teamcity-messages + ipython + numpy + pandas + polars +commands = pytest -s test_pydev_pandas.py test_ds_sorting_commands/test_pandas.py + +[testenv:python3.12] +deps = + pytest + teamcity-messages + ipython + numpy + pandas + polars +commands = pytest -s test_pydev_pandas.py test_ds_sorting_commands/test_pandas.py + +[testenv:no_pandas_python2.7] +deps = + pytest + teamcity-messages + ipython + numpy +commands = pytest -s test_pydev_nparray.py + +[testenv:no_pandas_python3.8] +deps = + pytest + teamcity-messages + ipython + numpy +commands = pytest -s test_pydev_nparray.py + +[testenv:no_pandas_python3.12] +deps = + pytest + teamcity-messages + ipython + numpy commands = pytest -s test_pydev_nparray.py setenv = PYTHONPATH = {toxinidir}/../third_party/thriftpy