mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 02:59:33 +07:00
Merge-request: IJ-MR-162745 Merged-by: Ekaterina Itsenko <ekaterina.itsenko@jetbrains.com> (cherry picked from commit 4481d3e22b0c597c5d72eff21100feb94182977c) GitOrigin-RevId: cb7a8bfce45fec4525e99a29e74ce342485bdf10
151 lines
6.8 KiB
Python
151 lines
6.8 KiB
Python
# Copyright 2000-2025 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
|
|
|
|
|
from _pydevd_bundle import pydevd_vars
|
|
from _pydevd_bundle.pydevd_constants import NEXT_VALUE_SEPARATOR
|
|
from _pydevd_bundle.pydevd_xml import ExceptionOnEvaluate
|
|
from _pydevd_bundle.tables.images.pydevd_image_loader import load_image_chunk
|
|
from typing import Optional
|
|
|
|
|
|
class TableCommandType:
|
|
DF_INFO = "DF_INFO"
|
|
SLICE = "SLICE"
|
|
SLICE_CSV = "SLICE_CSV"
|
|
DESCRIBE = "DF_DESCRIBE"
|
|
VISUALIZATION_DATA = "VISUALIZATION_DATA"
|
|
IMAGE_START_CHUNK_LOAD = "IMAGE_START_CHUNK_LOAD"
|
|
IMAGE_CHUNK_LOAD = "IMAGE_CHUNK_LOAD"
|
|
|
|
|
|
def is_error_on_eval(val):
|
|
try:
|
|
# This should be faster than isinstance (but we have to protect against not
|
|
# having a '__class__' attribute).
|
|
is_exception_on_eval = val.__class__ == ExceptionOnEvaluate
|
|
except:
|
|
is_exception_on_eval = False
|
|
return is_exception_on_eval
|
|
|
|
def exec_image_table_command(init_command, command_type, offset, image_id, f_globals, f_locals):
|
|
# type: (str, str, Optional[int], Optional[str], dict, dict) -> (bool, str)
|
|
table = pydevd_vars.eval_in_context(init_command, f_globals, f_locals)
|
|
is_exception_on_eval = is_error_on_eval(table)
|
|
if is_exception_on_eval:
|
|
return False, table.result
|
|
|
|
image_provider = __get_image_provider(table)
|
|
if not image_provider:
|
|
raise RuntimeError('No image provider for: {}'.format(type(table)))
|
|
|
|
if command_type == TableCommandType.IMAGE_START_CHUNK_LOAD:
|
|
return True, image_provider.create_image(table)
|
|
|
|
return True, load_image_chunk(offset, image_id)
|
|
|
|
|
|
def exec_table_command(init_command, command_type, start_index, end_index, format, f_globals,
|
|
f_locals):
|
|
# type: (str, str, [int, None], [int, None], [str, None], dict, dict) -> (bool, str)
|
|
table = pydevd_vars.eval_in_context(init_command, f_globals, f_locals)
|
|
is_exception_on_eval = is_error_on_eval(table)
|
|
if is_exception_on_eval:
|
|
return False, table.result
|
|
|
|
table_provider = __get_table_provider(table)
|
|
if not table_provider:
|
|
raise RuntimeError('No table data provider for: {}'.format(type(table)))
|
|
|
|
res = []
|
|
if command_type == TableCommandType.DF_INFO:
|
|
res.append(table_provider.get_type(table))
|
|
res.append(NEXT_VALUE_SEPARATOR)
|
|
res.append(table_provider.get_shape(table))
|
|
res.append(NEXT_VALUE_SEPARATOR)
|
|
res.append(table_provider.get_head(table))
|
|
res.append(NEXT_VALUE_SEPARATOR)
|
|
res.append(table_provider.get_column_types(table))
|
|
|
|
elif command_type == TableCommandType.DESCRIBE:
|
|
res.append(table_provider.get_column_descriptions(table))
|
|
|
|
elif command_type == TableCommandType.VISUALIZATION_DATA:
|
|
res.append(table_provider.get_value_occurrences_count(table))
|
|
res.append(NEXT_VALUE_SEPARATOR)
|
|
|
|
elif command_type == TableCommandType.SLICE:
|
|
res.append(table_provider.get_data(table, False, start_index, end_index, format))
|
|
elif command_type == TableCommandType.SLICE_CSV:
|
|
res.append(table_provider.get_data(table, True, start_index, end_index, format))
|
|
|
|
return True, ''.join(res)
|
|
|
|
|
|
def __get_type_name(table):
|
|
table_data_type = type(table)
|
|
table_data_type_name = '{}.{}'.format(table_data_type.__module__, table_data_type.__name__)
|
|
return table_data_type_name
|
|
|
|
|
|
# noinspection PyUnresolvedReferences
|
|
def __get_table_provider(output):
|
|
# type: (str) -> Any
|
|
type_qualified_name = __get_type_name(output)
|
|
numpy_based_type_qualified_names = ['tensorflow.python.framework.ops.EagerTensor',
|
|
'tensorflow.python.ops.resource_variable_ops.ResourceVariable',
|
|
'tensorflow.python.framework.sparse_tensor.SparseTensor',
|
|
'torch.Tensor']
|
|
table_provider = None
|
|
if type_qualified_name in ['pandas.core.frame.DataFrame',
|
|
'pandas.core.series.Series',
|
|
'geopandas.geoseries.GeoSeries',
|
|
'geopandas.geodataframe.GeoDataFrame',
|
|
'pandera.typing.pandas.DataFrame']:
|
|
import _pydevd_bundle.tables.pydevd_pandas as table_provider
|
|
# dict is needed for sort commands
|
|
elif type_qualified_name == 'builtins.dict':
|
|
table_type_name = __get_type_name(output['data'])
|
|
if table_type_name in numpy_based_type_qualified_names:
|
|
import _pydevd_bundle.tables.pydevd_numpy_based as table_provider
|
|
else:
|
|
import _pydevd_bundle.tables.pydevd_numpy as table_provider
|
|
elif type_qualified_name == 'numpy.ndarray' or type_qualified_name == 'numpy.rec.recarray':
|
|
import _pydevd_bundle.tables.pydevd_numpy as table_provider
|
|
elif type_qualified_name in numpy_based_type_qualified_names:
|
|
import _pydevd_bundle.tables.pydevd_numpy_based as table_provider
|
|
elif type_qualified_name.startswith('polars') and (
|
|
type_qualified_name.endswith('DataFrame')
|
|
or type_qualified_name.endswith('Series')):
|
|
import _pydevd_bundle.tables.pydevd_polars as table_provider
|
|
elif type_qualified_name == 'datasets.arrow_dataset.Dataset':
|
|
import _pydevd_bundle.tables.pydevd_dataset as table_provider
|
|
|
|
return table_provider
|
|
|
|
|
|
# noinspection PyUnresolvedReferences
|
|
def __get_image_provider(output):
|
|
# type: (str) -> Any
|
|
type_qualified_name = __get_type_name(output)
|
|
numpy_based_type_qualified_names = ['tensorflow.python.framework.ops.EagerTensor',
|
|
'tensorflow.python.ops.resource_variable_ops.ResourceVariable',
|
|
'tensorflow.python.framework.sparse_tensor.SparseTensor',
|
|
'torch.Tensor']
|
|
image_provider = None
|
|
if type_qualified_name == 'builtins.dict':
|
|
table_type_name = __get_type_name(output['data'])
|
|
if table_type_name in numpy_based_type_qualified_names:
|
|
import _pydevd_bundle.tables.images.pydevd_numpy_based_image as image_provider
|
|
else:
|
|
import _pydevd_bundle.tables.images.pydevd_numpy_image as image_provider
|
|
elif type_qualified_name in numpy_based_type_qualified_names:
|
|
import _pydevd_bundle.tables.images.pydevd_numpy_based_image as image_provider
|
|
elif type_qualified_name == 'numpy.ndarray':
|
|
import _pydevd_bundle.tables.images.pydevd_numpy_image as image_provider
|
|
elif type_qualified_name in ['PIL.Image.Image', 'PIL.PngImagePlugin.PngImageFile', 'PIL.JpegImagePlugin.JpegImageFile']:
|
|
import _pydevd_bundle.tables.images.pydevd_pillow_image as image_provider
|
|
elif type_qualified_name == 'matplotlib.figure.Figure':
|
|
import _pydevd_bundle.tables.images.pydevd_matplotlib_image as image_provider
|
|
|
|
return image_provider
|