Skip to content

Commit e32c323

Browse files
committed
[SYSTEMDS-3010] Add missing lineage support for list operations
This patch adds a missing lineage support for list creation from Eval, which was leading to a NullPointerException for topk cleaning.
1 parent eb2ca62 commit e32c323

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

src/main/java/org/apache/sysds/runtime/instructions/cp/EvalNaryCPInstruction.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,15 @@ public void processInstruction(ExecutionContext ec) {
199199
Data[] ldata = boundOutputNames.stream()
200200
.map(n -> ec.getVariable(n)).toArray(Data[]::new);
201201
String[] lnames = boundOutputNames.toArray(new String[0]);
202-
ListObject listOutput = new ListObject(ldata, lnames);
202+
ListObject listOutput = null;
203+
if (DMLScript.LINEAGE) {
204+
CPOperand[] listOperands = boundOutputNames.stream().map(n -> ec.containsVariable(n) ? new CPOperand(n,
205+
ec.getVariable(n)) : new CPOperand(n, ValueType.STRING, DataType.SCALAR, true)).toArray(CPOperand[]::new);
206+
LineageItem[] liList = LineageItemUtils.getLineage(ec, listOperands);
207+
listOutput = new ListObject(Arrays.asList(ldata), boundOutputNames, Arrays.asList(liList));
208+
}
209+
else
210+
listOutput = new ListObject(ldata, lnames);
203211
ec.setVariable(output.getName(), listOutput);
204212
}
205213

src/main/java/org/apache/sysds/runtime/lineage/LineageCacheConfig.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.apache.sysds.runtime.instructions.cp.ComputationCPInstruction;
3333
import org.apache.sysds.runtime.instructions.cp.Data;
3434
import org.apache.sysds.runtime.instructions.cp.DataGenCPInstruction;
35+
import org.apache.sysds.runtime.instructions.cp.FrameIndexingCPInstruction;
3536
import org.apache.sysds.runtime.instructions.cp.ListIndexingCPInstruction;
3637
import org.apache.sysds.runtime.instructions.cp.MatrixIndexingCPInstruction;
3738
import org.apache.sysds.runtime.instructions.fed.ComputationFEDInstruction;
@@ -268,7 +269,8 @@ public static boolean isReusable (Instruction inst, ExecutionContext ec) {
268269
|| inst instanceof GPUInstruction
269270
|| inst instanceof ComputationSPInstruction)
270271
&& !(inst instanceof ListIndexingCPInstruction)
271-
&& !(inst instanceof BinaryScalarScalarCPInstruction);
272+
&& !(inst instanceof BinaryScalarScalarCPInstruction)
273+
&& !(inst instanceof FrameIndexingCPInstruction);
272274
boolean rightCPOp = (ArrayUtils.contains(REUSE_OPCODES, inst.getOpcode())
273275
|| (inst.getOpcode().equals("append") && isVectorAppend(inst, ec))
274276
|| (inst.getOpcode().startsWith("spoof"))

0 commit comments

Comments
 (0)