mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-CR-48239: PY-33794 Jupyter Inline Values
GitOrigin-RevId: bb4427cd03b8f30676dfc77a0f6a4859b047b221
This commit is contained in:
committed by
intellij-monorepo-bot
parent
de7748fa6c
commit
ad85d8d744
@@ -244,6 +244,10 @@ def is_numpy(x):
|
||||
or 'float' in type_name or 'complex' in type_name
|
||||
|
||||
|
||||
def is_numeric_container(var_type):
|
||||
return var_type in ("ndarray", "DataFrame", "Series")
|
||||
|
||||
|
||||
def should_evaluate_full_value(val):
|
||||
return LOAD_VALUES_POLICY == ValuesPolicy.SYNC or ((is_builtin(type(val)) or is_numpy(type(val)))
|
||||
and not isinstance(val, (list, tuple, dict, set, frozenset)))
|
||||
@@ -376,6 +380,11 @@ def var_to_xml(val, name, doTrim=True, additional_in_xml='', evaluate_full_value
|
||||
else:
|
||||
xml_value = ''
|
||||
|
||||
if is_numeric_container(typeName):
|
||||
xml_shape = ' shape="%s"' % make_valid_xml_value(str(v.shape))
|
||||
else:
|
||||
xml_shape = ''
|
||||
|
||||
if is_exception_on_eval:
|
||||
xml_container = ' isErrorOnEval="True"'
|
||||
else:
|
||||
@@ -384,5 +393,5 @@ def var_to_xml(val, name, doTrim=True, additional_in_xml='', evaluate_full_value
|
||||
else:
|
||||
xml_container = ''
|
||||
|
||||
return ''.join((xml, xml_qualifier, xml_value, xml_container, additional_in_xml, ' />\n'))
|
||||
return ''.join((xml, xml_qualifier, xml_value, xml_container, xml_shape, additional_in_xml, ' />\n'))
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ public class PyDebugValue extends XNamedValue {
|
||||
private final @Nullable String myTypeQualifier;
|
||||
private @Nullable String myValue;
|
||||
private final boolean myContainer;
|
||||
private final @Nullable String myShape;
|
||||
private final boolean myIsReturnedVal;
|
||||
private final boolean myIsIPythonHidden;
|
||||
private @Nullable PyDebugValue myParent;
|
||||
@@ -64,18 +65,35 @@ public class PyDebugValue extends XNamedValue {
|
||||
@Nullable String typeQualifier,
|
||||
@Nullable final String value,
|
||||
final boolean container,
|
||||
@Nullable String shape,
|
||||
boolean isReturnedVal,
|
||||
boolean isIPythonHidden,
|
||||
boolean errorOnEval,
|
||||
@NotNull final PyFrameAccessor frameAccessor) {
|
||||
this(name, type, typeQualifier, value, container, isReturnedVal, isIPythonHidden, errorOnEval, null, frameAccessor);
|
||||
this(name, type, typeQualifier, value, container, shape, isReturnedVal, isIPythonHidden, errorOnEval, null, frameAccessor);
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents instance of a Python variable available at runtime. Used in Debugger and various Variable Viewers
|
||||
*
|
||||
* @param name variable name
|
||||
* @param type variable type
|
||||
* @param typeQualifier type qualifier
|
||||
* @param value string representation of a value
|
||||
* @param container does variable have fields for expanding
|
||||
* @param shape variable's shape field (available for numeric containers)
|
||||
* @param isReturnedVal is value was returned from a function during debug session
|
||||
* @param isIPythonHidden does value belong to IPython util variables group
|
||||
* @param errorOnEval did an error occur during evaluation
|
||||
* @param parent parent variable in Variables tree
|
||||
* @param frameAccessor frame accessor used for evaluation
|
||||
*/
|
||||
public PyDebugValue(@NotNull final String name,
|
||||
@Nullable final String type,
|
||||
@Nullable String typeQualifier,
|
||||
@Nullable final String value,
|
||||
final boolean container,
|
||||
@Nullable String shape,
|
||||
boolean isReturnedVal,
|
||||
boolean isIPythonHidden,
|
||||
boolean errorOnEval,
|
||||
@@ -86,6 +104,7 @@ public class PyDebugValue extends XNamedValue {
|
||||
myTypeQualifier = Strings.isNullOrEmpty(typeQualifier) ? null : typeQualifier;
|
||||
myValue = value;
|
||||
myContainer = container;
|
||||
myShape = shape;
|
||||
myIsReturnedVal = isReturnedVal;
|
||||
myIsIPythonHidden = isIPythonHidden;
|
||||
myErrorOnEval = errorOnEval;
|
||||
@@ -99,7 +118,7 @@ public class PyDebugValue extends XNamedValue {
|
||||
}
|
||||
|
||||
public PyDebugValue(@NotNull PyDebugValue value, @NotNull String newName) {
|
||||
this(newName, value.getType(), value.getTypeQualifier(), value.getValue(), value.isContainer(), value.isReturnedVal(),
|
||||
this(newName, value.getType(), value.getTypeQualifier(), value.getValue(), value.isContainer(), value.getShape(), value.isReturnedVal(),
|
||||
value.isIPythonHidden(), value.isErrorOnEval(), value.getParent(), value.getFrameAccessor());
|
||||
myOffset = value.getOffset();
|
||||
setLoadValuePolicy(value.getLoadValuePolicy());
|
||||
@@ -137,6 +156,11 @@ public class PyDebugValue extends XNamedValue {
|
||||
return myContainer;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getShape() {
|
||||
return myShape;
|
||||
}
|
||||
|
||||
public boolean isReturnedVal() {
|
||||
return myIsReturnedVal;
|
||||
}
|
||||
|
||||
@@ -30,14 +30,18 @@ public class PyReferringObjectsValue extends PyDebugValue {
|
||||
String type,
|
||||
String typeQualifier,
|
||||
String value,
|
||||
boolean container, boolean isReturnedVal, boolean errorOnEval, @NotNull PyFrameAccessor frameAccessor) {
|
||||
super(name, type, typeQualifier, value, container, isReturnedVal, false, errorOnEval, frameAccessor);
|
||||
boolean container,
|
||||
String shape,
|
||||
boolean isReturnedVal,
|
||||
boolean errorOnEval,
|
||||
@NotNull PyFrameAccessor frameAccessor) {
|
||||
super(name, type, typeQualifier, value, container, shape, isReturnedVal, false, errorOnEval, frameAccessor);
|
||||
myReferrersLoader = frameAccessor.getReferrersLoader();
|
||||
}
|
||||
|
||||
public PyReferringObjectsValue(PyDebugValue debugValue) {
|
||||
this(debugValue.getName(), debugValue.getType(), debugValue.getTypeQualifier(), debugValue.getValue(), debugValue.isContainer(),
|
||||
debugValue.isReturnedVal(), debugValue.isErrorOnEval(), debugValue.getFrameAccessor());
|
||||
debugValue.getShape(), debugValue.isReturnedVal(), debugValue.isErrorOnEval(), debugValue.getFrameAccessor());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -276,12 +276,13 @@ public class ProtocolParser {
|
||||
final String isReturnedValue = readString(reader, "isRetVal", "");
|
||||
final String isIPythonHidden = readString(reader, "isIPythonHidden", "");
|
||||
final String isErrorOnEval = readString(reader, "isErrorOnEval", "");
|
||||
String shape = readString(reader, "shape", "");
|
||||
|
||||
if (value.startsWith(type + ": ")) { // drop unneeded prefix
|
||||
value = value.substring(type.length() + 2);
|
||||
}
|
||||
|
||||
return new PyDebugValue(name, type, qualifier, value, "True".equals(isContainer), "True".equals(isReturnedValue),
|
||||
if (shape.isEmpty()) shape = null;
|
||||
return new PyDebugValue(name, type, qualifier, value, "True".equals(isContainer), shape, "True".equals(isReturnedValue),
|
||||
"True".equals(isIPythonHidden), "True".equals(isErrorOnEval), frameAccessor);
|
||||
}
|
||||
|
||||
@@ -301,7 +302,7 @@ public class ProtocolParser {
|
||||
result.setType(readString(reader, "type", null));
|
||||
result.setMax(readString(reader, "max", null));
|
||||
result.setMin(readString(reader, "min", null));
|
||||
result.setValue(new PyDebugValue(slice, null, null, null, false, false, false, false, frameAccessor));
|
||||
result.setValue(new PyDebugValue(slice, null, null, null, false, null, false, false, false, frameAccessor));
|
||||
reader.moveUp();
|
||||
}
|
||||
if ("headerdata".equals(reader.peekNextChild())) {
|
||||
|
||||
@@ -25,7 +25,7 @@ fun parseVars(vars: List<DebugValue>, parent: PyDebugValue?, frameAccessor: PyFr
|
||||
|
||||
fun createPyDebugValue(value: DebugValue, frameAccessor: PyFrameAccessor) =
|
||||
PyDebugValue(value.name, value.type, value.qualifier, value.value ?: "",
|
||||
value.isContainer, value.isReturnedValue, value.isIPythonHidden, value.isErrorOnEval,
|
||||
value.isContainer, null, value.isReturnedValue, value.isIPythonHidden, value.isErrorOnEval,
|
||||
frameAccessor)
|
||||
|
||||
fun createArrayChunk(response: GetArrayResponse, frameAccessor: PyFrameAccessor): ArrayChunk {
|
||||
@@ -40,7 +40,7 @@ fun createArrayChunk(response: GetArrayResponse, frameAccessor: PyFrameAccessor)
|
||||
result.setType(response.type)
|
||||
result.setMax(response.max)
|
||||
result.setMin(response.min)
|
||||
result.setValue(PyDebugValue(response.slice, null, null, null, false, false, false, false, frameAccessor))
|
||||
result.setValue(PyDebugValue(response.slice, null, null, null, false, null, false, false, false, frameAccessor))
|
||||
|
||||
// `parseArrayHeaderData()`
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ public class PyDebuggerEvaluator extends XDebuggerEvaluator {
|
||||
}
|
||||
|
||||
private PyDebugValue getNone() {
|
||||
return new PyDebugValue("", "NoneType", null, "None", false, false, false, false, null, myDebugProcess);
|
||||
return new PyDebugValue("", "NoneType", null, "None", false, null, false, false, false, null, myDebugProcess);
|
||||
}
|
||||
|
||||
private void doEvaluate(final String expr, final XEvaluationCallback callback, final boolean doTrunc) {
|
||||
|
||||
Reference in New Issue
Block a user