blob: 42bf6f979ca8009a008fd99d2c571001c109f200 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.sysds.runtime.instructions;
import java.util.HashMap;
import org.apache.sysds.common.Types;
import org.apache.sysds.lops.Checkpoint;
import org.apache.sysds.lops.Compression;
import org.apache.sysds.lops.DataGen;
import org.apache.sysds.lops.LeftIndex;
import org.apache.sysds.lops.RightIndex;
import org.apache.sysds.lops.WeightedCrossEntropy;
import org.apache.sysds.lops.WeightedCrossEntropyR;
import org.apache.sysds.lops.WeightedDivMM;
import org.apache.sysds.lops.WeightedDivMMR;
import org.apache.sysds.lops.WeightedSigmoid;
import org.apache.sysds.lops.WeightedSigmoidR;
import org.apache.sysds.lops.WeightedSquaredLoss;
import org.apache.sysds.lops.WeightedSquaredLossR;
import org.apache.sysds.lops.WeightedUnaryMM;
import org.apache.sysds.lops.WeightedUnaryMMR;
import org.apache.sysds.runtime.DMLRuntimeException;
import org.apache.sysds.runtime.instructions.cp.CPOperand;
import org.apache.sysds.runtime.instructions.spark.AggregateTernarySPInstruction;
import org.apache.sysds.runtime.instructions.spark.AggregateUnarySPInstruction;
import org.apache.sysds.runtime.instructions.spark.AppendGAlignedSPInstruction;
import org.apache.sysds.runtime.instructions.spark.AppendGSPInstruction;
import org.apache.sysds.runtime.instructions.spark.AppendMSPInstruction;
import org.apache.sysds.runtime.instructions.spark.AppendRSPInstruction;
import org.apache.sysds.runtime.instructions.spark.BinUaggChainSPInstruction;
import org.apache.sysds.runtime.instructions.spark.BinarySPInstruction;
import org.apache.sysds.runtime.instructions.spark.BuiltinNarySPInstruction;
import org.apache.sysds.runtime.instructions.spark.CSVReblockSPInstruction;
import org.apache.sysds.runtime.instructions.spark.CastSPInstruction;
import org.apache.sysds.runtime.instructions.spark.CentralMomentSPInstruction;
import org.apache.sysds.runtime.instructions.spark.CheckpointSPInstruction;
import org.apache.sysds.runtime.instructions.spark.CompressionSPInstruction;
import org.apache.sysds.runtime.instructions.spark.CovarianceSPInstruction;
import org.apache.sysds.runtime.instructions.spark.CpmmSPInstruction;
import org.apache.sysds.runtime.instructions.spark.CtableSPInstruction;
import org.apache.sysds.runtime.instructions.spark.CumulativeAggregateSPInstruction;
import org.apache.sysds.runtime.instructions.spark.CumulativeOffsetSPInstruction;
import org.apache.sysds.runtime.instructions.spark.DnnSPInstruction;
import org.apache.sysds.runtime.instructions.spark.IndexingSPInstruction;
import org.apache.sysds.runtime.instructions.spark.MapmmChainSPInstruction;
import org.apache.sysds.runtime.instructions.spark.MapmmSPInstruction;
import org.apache.sysds.runtime.instructions.spark.MatrixReshapeSPInstruction;
import org.apache.sysds.runtime.instructions.spark.MultiReturnParameterizedBuiltinSPInstruction;
import org.apache.sysds.runtime.instructions.spark.PMapmmSPInstruction;
import org.apache.sysds.runtime.instructions.spark.ParameterizedBuiltinSPInstruction;
import org.apache.sysds.runtime.instructions.spark.PmmSPInstruction;
import org.apache.sysds.runtime.instructions.spark.QuantilePickSPInstruction;
import org.apache.sysds.runtime.instructions.spark.QuantileSortSPInstruction;
import org.apache.sysds.runtime.instructions.spark.QuaternarySPInstruction;
import org.apache.sysds.runtime.instructions.spark.RandSPInstruction;
import org.apache.sysds.runtime.instructions.spark.ReblockSPInstruction;
import org.apache.sysds.runtime.instructions.spark.ReorgSPInstruction;
import org.apache.sysds.runtime.instructions.spark.RmmSPInstruction;
import org.apache.sysds.runtime.instructions.spark.SPInstruction;
import org.apache.sysds.runtime.instructions.spark.SPInstruction.SPType;
import org.apache.sysds.runtime.instructions.spark.SpoofSPInstruction;
import org.apache.sysds.runtime.instructions.spark.TernarySPInstruction;
import org.apache.sysds.runtime.instructions.spark.Tsmm2SPInstruction;
import org.apache.sysds.runtime.instructions.spark.TsmmSPInstruction;
import org.apache.sysds.runtime.instructions.spark.UaggOuterChainSPInstruction;
import org.apache.sysds.runtime.instructions.spark.UnaryFrameSPInstruction;
import org.apache.sysds.runtime.instructions.spark.UnaryMatrixSPInstruction;
import org.apache.sysds.runtime.instructions.spark.WriteSPInstruction;
import org.apache.sysds.runtime.instructions.spark.ZipmmSPInstruction;
public class SPInstructionParser extends InstructionParser
{
public static final HashMap<String, SPType> String2SPInstructionType;
static {
String2SPInstructionType = new HashMap<>();
//unary aggregate operators
String2SPInstructionType.put( "uak+" , SPType.AggregateUnary);
String2SPInstructionType.put( "uark+" , SPType.AggregateUnary);
String2SPInstructionType.put( "uack+" , SPType.AggregateUnary);
String2SPInstructionType.put( "uasqk+" , SPType.AggregateUnary);
String2SPInstructionType.put( "uarsqk+" , SPType.AggregateUnary);
String2SPInstructionType.put( "uacsqk+" , SPType.AggregateUnary);
String2SPInstructionType.put( "uamean" , SPType.AggregateUnary);
String2SPInstructionType.put( "uarmean" , SPType.AggregateUnary);
String2SPInstructionType.put( "uacmean" , SPType.AggregateUnary);
String2SPInstructionType.put( "uavar" , SPType.AggregateUnary);
String2SPInstructionType.put( "uarvar" , SPType.AggregateUnary);
String2SPInstructionType.put( "uacvar" , SPType.AggregateUnary);
String2SPInstructionType.put( "uamax" , SPType.AggregateUnary);
String2SPInstructionType.put( "uarmax" , SPType.AggregateUnary);
String2SPInstructionType.put( "uarimax" , SPType.AggregateUnary);
String2SPInstructionType.put( "uacmax" , SPType.AggregateUnary);
String2SPInstructionType.put( "uamin" , SPType.AggregateUnary);
String2SPInstructionType.put( "uarmin" , SPType.AggregateUnary);
String2SPInstructionType.put( "uarimin" , SPType.AggregateUnary);
String2SPInstructionType.put( "uacmin" , SPType.AggregateUnary);
String2SPInstructionType.put( "ua+" , SPType.AggregateUnary);
String2SPInstructionType.put( "uar+" , SPType.AggregateUnary);
String2SPInstructionType.put( "uac+" , SPType.AggregateUnary);
String2SPInstructionType.put( "ua*" , SPType.AggregateUnary);
String2SPInstructionType.put( "uar*" , SPType.AggregateUnary);
String2SPInstructionType.put( "uac*" , SPType.AggregateUnary);
String2SPInstructionType.put( "uatrace" , SPType.AggregateUnary);
String2SPInstructionType.put( "uaktrace", SPType.AggregateUnary);
//binary aggregate operators (matrix multiplication operators)
String2SPInstructionType.put( "mapmm" , SPType.MAPMM);
String2SPInstructionType.put( "mapmmchain" , SPType.MAPMMCHAIN);
String2SPInstructionType.put( "tsmm" , SPType.TSMM); //single-pass tsmm
String2SPInstructionType.put( "tsmm2" , SPType.TSMM2); //multi-pass tsmm
String2SPInstructionType.put( "cpmm" , SPType.CPMM);
String2SPInstructionType.put( "rmm" , SPType.RMM);
String2SPInstructionType.put( "pmm" , SPType.PMM);
String2SPInstructionType.put( "zipmm" , SPType.ZIPMM);
String2SPInstructionType.put( "pmapmm" , SPType.PMAPMM);
String2SPInstructionType.put( "uaggouterchain", SPType.UaggOuterChain);
//ternary aggregate operators
String2SPInstructionType.put( "tak+*" , SPType.AggregateTernary);
String2SPInstructionType.put( "tack+*" , SPType.AggregateTernary);
// Neural network operators
String2SPInstructionType.put( "conv2d", SPType.Dnn);
String2SPInstructionType.put( "conv2d_bias_add", SPType.Dnn);
String2SPInstructionType.put( "maxpooling", SPType.Dnn);
String2SPInstructionType.put( "relu_maxpooling", SPType.Dnn);
String2SPInstructionType.put( RightIndex.OPCODE, SPType.MatrixIndexing);
String2SPInstructionType.put( LeftIndex.OPCODE, SPType.MatrixIndexing);
String2SPInstructionType.put( "mapLeftIndex", SPType.MatrixIndexing);
// Reorg Instruction Opcodes (repositioning of existing values)
String2SPInstructionType.put( "r'", SPType.Reorg);
String2SPInstructionType.put( "rev", SPType.Reorg);
String2SPInstructionType.put( "rdiag", SPType.Reorg);
String2SPInstructionType.put( "rshape", SPType.MatrixReshape);
String2SPInstructionType.put( "rsort", SPType.Reorg);
String2SPInstructionType.put( "+", SPType.Binary);
String2SPInstructionType.put( "-", SPType.Binary);
String2SPInstructionType.put( "*", SPType.Binary);
String2SPInstructionType.put( "/", SPType.Binary);
String2SPInstructionType.put( "%%", SPType.Binary);
String2SPInstructionType.put( "%/%", SPType.Binary);
String2SPInstructionType.put( "1-*", SPType.Binary);
String2SPInstructionType.put( "^", SPType.Binary);
String2SPInstructionType.put( "^2", SPType.Binary);
String2SPInstructionType.put( "*2", SPType.Binary);
String2SPInstructionType.put( "map+", SPType.Binary);
String2SPInstructionType.put( "map-", SPType.Binary);
String2SPInstructionType.put( "map*", SPType.Binary);
String2SPInstructionType.put( "map/", SPType.Binary);
String2SPInstructionType.put( "map%%", SPType.Binary);
String2SPInstructionType.put( "map%/%", SPType.Binary);
String2SPInstructionType.put( "map1-*", SPType.Binary);
String2SPInstructionType.put( "map^", SPType.Binary);
String2SPInstructionType.put( "map+*", SPType.Binary);
String2SPInstructionType.put( "map-*", SPType.Binary);
String2SPInstructionType.put( "dropInvalidType", SPType.Binary);
String2SPInstructionType.put( "mapdropInvalidLength", SPType.Binary);
String2SPInstructionType.put( "dml_map", SPType.Binary);
// Relational Instruction Opcodes
String2SPInstructionType.put( "==" , SPType.Binary);
String2SPInstructionType.put( "!=" , SPType.Binary);
String2SPInstructionType.put( "<" , SPType.Binary);
String2SPInstructionType.put( ">" , SPType.Binary);
String2SPInstructionType.put( "<=" , SPType.Binary);
String2SPInstructionType.put( ">=" , SPType.Binary);
String2SPInstructionType.put( "map>" , SPType.Binary);
String2SPInstructionType.put( "map>=" , SPType.Binary);
String2SPInstructionType.put( "map<" , SPType.Binary);
String2SPInstructionType.put( "map<=" , SPType.Binary);
String2SPInstructionType.put( "map==" , SPType.Binary);
String2SPInstructionType.put( "map!=" , SPType.Binary);
// Boolean Instruction Opcodes
String2SPInstructionType.put( "&&" , SPType.Binary);
String2SPInstructionType.put( "||" , SPType.Binary);
String2SPInstructionType.put( "xor" , SPType.Binary);
String2SPInstructionType.put( "bitwAnd", SPType.Binary);
String2SPInstructionType.put( "bitwOr", SPType.Binary);
String2SPInstructionType.put( "bitwXor", SPType.Binary);
String2SPInstructionType.put( "bitwShiftL", SPType.Binary);
String2SPInstructionType.put( "bitwShiftR", SPType.Binary);
String2SPInstructionType.put( "!" , SPType.Unary);
String2SPInstructionType.put( "map&&" , SPType.Binary);
String2SPInstructionType.put( "map||" , SPType.Binary);
String2SPInstructionType.put( "mapxor" , SPType.Binary);
String2SPInstructionType.put( "mapbitwAnd", SPType.Binary);
String2SPInstructionType.put( "mapbitwOr", SPType.Binary);
String2SPInstructionType.put( "mapbitwXor", SPType.Binary);
String2SPInstructionType.put( "mapbitwShiftL", SPType.Binary);
String2SPInstructionType.put( "mapbitwShiftR", SPType.Binary);
// Builtin Instruction Opcodes
String2SPInstructionType.put( "max" , SPType.Binary);
String2SPInstructionType.put( "min" , SPType.Binary);
String2SPInstructionType.put( "mapmax" , SPType.Binary);
String2SPInstructionType.put( "mapmin" , SPType.Binary);
// REBLOCK Instruction Opcodes
String2SPInstructionType.put( "rblk" , SPType.Reblock);
String2SPInstructionType.put( "csvrblk", SPType.CSVReblock);
// Spark-specific instructions
String2SPInstructionType.put( Checkpoint.OPCODE, SPType.Checkpoint);
String2SPInstructionType.put( Compression.OPCODE, SPType.Compression);
// Builtin Instruction Opcodes
String2SPInstructionType.put( "log" , SPType.Builtin);
String2SPInstructionType.put( "log_nz" , SPType.Builtin);
String2SPInstructionType.put( "exp" , SPType.Unary);
String2SPInstructionType.put( "abs" , SPType.Unary);
String2SPInstructionType.put( "sin" , SPType.Unary);
String2SPInstructionType.put( "cos" , SPType.Unary);
String2SPInstructionType.put( "tan" , SPType.Unary);
String2SPInstructionType.put( "asin" , SPType.Unary);
String2SPInstructionType.put( "acos" , SPType.Unary);
String2SPInstructionType.put( "atan" , SPType.Unary);
String2SPInstructionType.put( "sinh" , SPType.Unary);
String2SPInstructionType.put( "cosh" , SPType.Unary);
String2SPInstructionType.put( "tanh" , SPType.Unary);
String2SPInstructionType.put( "sign" , SPType.Unary);
String2SPInstructionType.put( "sqrt" , SPType.Unary);
String2SPInstructionType.put( "plogp" , SPType.Unary);
String2SPInstructionType.put( "round" , SPType.Unary);
String2SPInstructionType.put( "ceil" , SPType.Unary);
String2SPInstructionType.put( "floor" , SPType.Unary);
String2SPInstructionType.put( "sprop", SPType.Unary);
String2SPInstructionType.put( "sigmoid", SPType.Unary);
String2SPInstructionType.put( "detectSchema", SPType.Unary);
String2SPInstructionType.put( "colnames", SPType.Unary);
String2SPInstructionType.put( "isna", SPType.Unary);
String2SPInstructionType.put( "isnan", SPType.Unary);
String2SPInstructionType.put( "isinf", SPType.Unary);
// Parameterized Builtin Functions
String2SPInstructionType.put( "groupedagg", SPType.ParameterizedBuiltin);
String2SPInstructionType.put( "mapgroupedagg", SPType.ParameterizedBuiltin);
String2SPInstructionType.put( "rmempty", SPType.ParameterizedBuiltin);
String2SPInstructionType.put( "replace", SPType.ParameterizedBuiltin);
String2SPInstructionType.put( "rexpand", SPType.ParameterizedBuiltin);
String2SPInstructionType.put( "lowertri", SPType.ParameterizedBuiltin);
String2SPInstructionType.put( "uppertri", SPType.ParameterizedBuiltin);
String2SPInstructionType.put( "transformapply", SPType.ParameterizedBuiltin);
String2SPInstructionType.put( "transformdecode",SPType.ParameterizedBuiltin);
String2SPInstructionType.put( "transformencode",SPType.MultiReturnBuiltin);
String2SPInstructionType.put( "mappend", SPType.MAppend);
String2SPInstructionType.put( "rappend", SPType.RAppend);
String2SPInstructionType.put( "gappend", SPType.GAppend);
String2SPInstructionType.put( "galignedappend", SPType.GAlignedAppend);
String2SPInstructionType.put( "cbind", SPType.BuiltinNary);
String2SPInstructionType.put( "rbind", SPType.BuiltinNary);
String2SPInstructionType.put( "nmin", SPType.BuiltinNary);
String2SPInstructionType.put( "nmax", SPType.BuiltinNary);
String2SPInstructionType.put( "n+", SPType.BuiltinNary);
String2SPInstructionType.put( DataGen.RAND_OPCODE , SPType.Rand);
String2SPInstructionType.put( DataGen.SEQ_OPCODE , SPType.Rand);
String2SPInstructionType.put( DataGen.SAMPLE_OPCODE, SPType.Rand);
//ternary instruction opcodes
String2SPInstructionType.put( "ctable", SPType.Ctable);
String2SPInstructionType.put( "ctableexpand", SPType.Ctable);
//ternary instruction opcodes
String2SPInstructionType.put( "+*", SPType.Ternary);
String2SPInstructionType.put( "-*", SPType.Ternary);
String2SPInstructionType.put( "ifelse", SPType.Ternary);
//quaternary instruction opcodes
String2SPInstructionType.put( WeightedSquaredLoss.OPCODE, SPType.Quaternary);
String2SPInstructionType.put( WeightedSquaredLossR.OPCODE, SPType.Quaternary);
String2SPInstructionType.put( WeightedSigmoid.OPCODE, SPType.Quaternary);
String2SPInstructionType.put( WeightedSigmoidR.OPCODE, SPType.Quaternary);
String2SPInstructionType.put( WeightedDivMM.OPCODE, SPType.Quaternary);
String2SPInstructionType.put( WeightedDivMMR.OPCODE, SPType.Quaternary);
String2SPInstructionType.put( WeightedCrossEntropy.OPCODE, SPType.Quaternary);
String2SPInstructionType.put( WeightedCrossEntropyR.OPCODE,SPType.Quaternary);
String2SPInstructionType.put( WeightedUnaryMM.OPCODE, SPType.Quaternary);
String2SPInstructionType.put( WeightedUnaryMMR.OPCODE, SPType.Quaternary);
//cumsum/cumprod/cummin/cummax
String2SPInstructionType.put( "ucumack+" , SPType.CumsumAggregate);
String2SPInstructionType.put( "ucumac*" , SPType.CumsumAggregate);
String2SPInstructionType.put( "ucumac+*" , SPType.CumsumAggregate);
String2SPInstructionType.put( "ucumacmin" , SPType.CumsumAggregate);
String2SPInstructionType.put( "ucumacmax" , SPType.CumsumAggregate);
String2SPInstructionType.put( "bcumoffk+" , SPType.CumsumOffset);
String2SPInstructionType.put( "bcumoff*" , SPType.CumsumOffset);
String2SPInstructionType.put( "bcumoff+*" , SPType.CumsumOffset);
String2SPInstructionType.put( "bcumoffmin", SPType.CumsumOffset);
String2SPInstructionType.put( "bcumoffmax", SPType.CumsumOffset);
//central moment, covariance, quantiles (sort/pick)
String2SPInstructionType.put( "cm" , SPType.CentralMoment);
String2SPInstructionType.put( "cov" , SPType.Covariance);
String2SPInstructionType.put( "qsort" , SPType.QSort);
String2SPInstructionType.put( "qpick" , SPType.QPick);
String2SPInstructionType.put( "binuaggchain", SPType.BinUaggChain);
String2SPInstructionType.put( "write" , SPType.Write);
String2SPInstructionType.put( "castdtm" , SPType.Cast);
String2SPInstructionType.put( "castdtf" , SPType.Cast);
String2SPInstructionType.put( "spoof" , SPType.SpoofFused);
}
public static SPInstruction parseSingleInstruction (String str ) {
if ( str == null || str.isEmpty() )
return null;
SPType cptype = InstructionUtils.getSPType(str);
if ( cptype == null )
// return null;
throw new DMLRuntimeException("Invalid SP Instruction Type: " + str);
SPInstruction spinst = parseSingleInstruction(cptype, str);
if ( spinst == null )
throw new DMLRuntimeException("Unable to parse instruction: " + str);
return spinst;
}
public static SPInstruction parseSingleInstruction ( SPType sptype, String str ) {
if ( str == null || str.isEmpty() )
return null;
String [] parts = null;
switch(sptype)
{
// matrix multiplication instructions
case CPMM:
return CpmmSPInstruction.parseInstruction(str);
case RMM:
return RmmSPInstruction.parseInstruction(str);
case MAPMM:
return MapmmSPInstruction.parseInstruction(str);
case MAPMMCHAIN:
return MapmmChainSPInstruction.parseInstruction(str);
case TSMM:
return TsmmSPInstruction.parseInstruction(str);
case TSMM2:
return Tsmm2SPInstruction.parseInstruction(str);
case PMM:
return PmmSPInstruction.parseInstruction(str);
case ZIPMM:
return ZipmmSPInstruction.parseInstruction(str);
case PMAPMM:
return PMapmmSPInstruction.parseInstruction(str);
case UaggOuterChain:
return UaggOuterChainSPInstruction.parseInstruction(str);
case AggregateUnary:
return AggregateUnarySPInstruction.parseInstruction(str);
case AggregateTernary:
return AggregateTernarySPInstruction.parseInstruction(str);
case Dnn:
return DnnSPInstruction.parseInstruction(str);
case MatrixIndexing:
return IndexingSPInstruction.parseInstruction(str);
case Reorg:
return ReorgSPInstruction.parseInstruction(str);
case Binary:
return BinarySPInstruction.parseInstruction(str);
case Ternary:
return TernarySPInstruction.parseInstruction(str);
//ternary instructions
case Ctable:
return CtableSPInstruction.parseInstruction(str);
//quaternary instructions
case Quaternary:
return QuaternarySPInstruction.parseInstruction(str);
// Reblock instructions
case Reblock:
return ReblockSPInstruction.parseInstruction(str);
case CSVReblock:
return CSVReblockSPInstruction.parseInstruction(str);
case Builtin:
parts = InstructionUtils.getInstructionPartsWithValueType(str);
if ( parts[0].equals("log") || parts[0].equals("log_nz") ) {
if ( parts.length == 3 ) {
// B=log(A), y=log(x)
return UnaryMatrixSPInstruction.parseInstruction(str);
} else if ( parts.length == 4 ) {
// B=log(A,10), y=log(x,10)
return BinarySPInstruction.parseInstruction(str);
}
}
else {
throw new DMLRuntimeException("Invalid Builtin Instruction: " + str );
}
case Unary:
parts = InstructionUtils.getInstructionPartsWithValueType(str);
CPOperand in = new CPOperand(parts[1]);
if(in.getDataType() == Types.DataType.MATRIX)
return UnaryMatrixSPInstruction.parseInstruction(str);
else
return UnaryFrameSPInstruction.parseInstruction(str);
case BuiltinNary:
return BuiltinNarySPInstruction.parseInstruction(str);
case ParameterizedBuiltin:
return ParameterizedBuiltinSPInstruction.parseInstruction(str);
case MultiReturnBuiltin:
return MultiReturnParameterizedBuiltinSPInstruction.parseInstruction(str);
case MatrixReshape:
return MatrixReshapeSPInstruction.parseInstruction(str);
case MAppend: //matrix/frame
return AppendMSPInstruction.parseInstruction(str);
case RAppend: //matrix/frame
return AppendRSPInstruction.parseInstruction(str);
case GAppend:
return AppendGSPInstruction.parseInstruction(str);
case GAlignedAppend:
return AppendGAlignedSPInstruction.parseInstruction(str);
case Rand:
return RandSPInstruction.parseInstruction(str);
case QSort:
return QuantileSortSPInstruction.parseInstruction(str);
case QPick:
return QuantilePickSPInstruction.parseInstruction(str);
case Write:
return WriteSPInstruction.parseInstruction(str);
case CumsumAggregate:
return CumulativeAggregateSPInstruction.parseInstruction(str);
case CumsumOffset:
return CumulativeOffsetSPInstruction.parseInstruction(str);
case CentralMoment:
return CentralMomentSPInstruction.parseInstruction(str);
case Covariance:
return CovarianceSPInstruction.parseInstruction(str);
case BinUaggChain:
return BinUaggChainSPInstruction.parseInstruction(str);
case Checkpoint:
return CheckpointSPInstruction.parseInstruction(str);
case Compression:
return CompressionSPInstruction.parseInstruction(str);
case SpoofFused:
return SpoofSPInstruction.parseInstruction(str);
case Cast:
return CastSPInstruction.parseInstruction(str);
default:
throw new DMLRuntimeException("Invalid SP Instruction Type: " + sptype );
}
}
}