| /* |
| * 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.hops.FunctionOp; |
| import org.apache.sysds.lops.Append; |
| import org.apache.sysds.lops.DataGen; |
| import org.apache.sysds.lops.LeftIndex; |
| import org.apache.sysds.lops.LopProperties.ExecType; |
| import org.apache.sysds.lops.RightIndex; |
| import org.apache.sysds.lops.UnaryCP; |
| import org.apache.sysds.runtime.DMLRuntimeException; |
| import org.apache.sysds.runtime.instructions.cp.AggregateBinaryCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.AggregateTernaryCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.AggregateUnaryCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.AppendCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.BinaryCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.BuiltinNaryCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.CPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.CPInstruction.CPType; |
| import org.apache.sysds.runtime.instructions.cp.CentralMomentCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.CompressionCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.CovarianceCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.CtableCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.DataGenCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.DnnCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.FunctionCallCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.IndexingCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.MMChainCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.MMTSJCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.ReshapeCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.MultiReturnBuiltinCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.MultiReturnParameterizedBuiltinCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.PMMJCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.ParameterizedBuiltinCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.QuantilePickCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.QuantileSortCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.QuaternaryCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.ReorgCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.SpoofCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.SqlCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.StringInitCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.TernaryCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.UaggOuterChainCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.UnaryCPInstruction; |
| import org.apache.sysds.runtime.instructions.cp.VariableCPInstruction; |
| import org.apache.sysds.runtime.instructions.cpfile.MatrixIndexingCPFileInstruction; |
| import org.apache.sysds.runtime.util.UtilFunctions; |
| |
| public class CPInstructionParser extends InstructionParser |
| { |
| public static final HashMap<String, CPType> String2CPInstructionType; |
| static { |
| String2CPInstructionType = new HashMap<>(); |
| String2CPInstructionType.put( "ba+*" , CPType.AggregateBinary); |
| String2CPInstructionType.put( "tak+*" , CPType.AggregateTernary); |
| String2CPInstructionType.put( "tack+*" , CPType.AggregateTernary); |
| |
| String2CPInstructionType.put( "uak+" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uark+" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uack+" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uasqk+" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uarsqk+" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uacsqk+" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uamean" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uarmean" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uacmean" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uavar" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uarvar" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uacvar" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uamax" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uarmax" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uarimax", CPType.AggregateUnary); |
| String2CPInstructionType.put( "uacmax" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uamin" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uarmin" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uarimin" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uacmin" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "ua+" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uar+" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uac+" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "ua*" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uar*" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uac*" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uatrace" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uaktrace", CPType.AggregateUnary); |
| String2CPInstructionType.put( "nrow" ,CPType.AggregateUnary); |
| String2CPInstructionType.put( "ncol" ,CPType.AggregateUnary); |
| String2CPInstructionType.put( "length" ,CPType.AggregateUnary); |
| String2CPInstructionType.put( "exists" ,CPType.AggregateUnary); |
| String2CPInstructionType.put( "lineage" ,CPType.AggregateUnary); |
| String2CPInstructionType.put( "uacd" , CPType.AggregateUnary); |
| String2CPInstructionType.put( "uacdap" , CPType.AggregateUnary); |
| |
| String2CPInstructionType.put( "uaggouterchain", CPType.UaggOuterChain); |
| |
| // Arithmetic Instruction Opcodes |
| String2CPInstructionType.put( "+" , CPType.Binary); |
| String2CPInstructionType.put( "-" , CPType.Binary); |
| String2CPInstructionType.put( "*" , CPType.Binary); |
| String2CPInstructionType.put( "/" , CPType.Binary); |
| String2CPInstructionType.put( "%%" , CPType.Binary); |
| String2CPInstructionType.put( "%/%" , CPType.Binary); |
| String2CPInstructionType.put( "^" , CPType.Binary); |
| String2CPInstructionType.put( "1-*" , CPType.Binary); //special * case |
| String2CPInstructionType.put( "^2" , CPType.Binary); //special ^ case |
| String2CPInstructionType.put( "*2" , CPType.Binary); //special * case |
| String2CPInstructionType.put( "-nz" , CPType.Binary); //special - case |
| |
| // Boolean Instruction Opcodes |
| String2CPInstructionType.put( "&&" , CPType.Binary); |
| String2CPInstructionType.put( "||" , CPType.Binary); |
| String2CPInstructionType.put( "xor" , CPType.Binary); |
| String2CPInstructionType.put( "bitwAnd", CPType.Binary); |
| String2CPInstructionType.put( "bitwOr", CPType.Binary); |
| String2CPInstructionType.put( "bitwXor", CPType.Binary); |
| String2CPInstructionType.put( "bitwShiftL", CPType.Binary); |
| String2CPInstructionType.put( "bitwShiftR", CPType.Binary); |
| String2CPInstructionType.put( "!" , CPType.Unary); |
| |
| // Relational Instruction Opcodes |
| String2CPInstructionType.put( "==" , CPType.Binary); |
| String2CPInstructionType.put( "!=" , CPType.Binary); |
| String2CPInstructionType.put( "<" , CPType.Binary); |
| String2CPInstructionType.put( ">" , CPType.Binary); |
| String2CPInstructionType.put( "<=" , CPType.Binary); |
| String2CPInstructionType.put( ">=" , CPType.Binary); |
| |
| // Builtin Instruction Opcodes |
| String2CPInstructionType.put( "log" , CPType.Builtin); |
| String2CPInstructionType.put( "log_nz" , CPType.Builtin); |
| |
| String2CPInstructionType.put( "solve" , CPType.Binary); |
| String2CPInstructionType.put( "max" , CPType.Binary); |
| String2CPInstructionType.put( "min" , CPType.Binary); |
| String2CPInstructionType.put( "dropInvalidType" , CPType.Binary); |
| String2CPInstructionType.put( "dropInvalidLength" , CPType.Binary); |
| String2CPInstructionType.put( "dml_map" , CPType.Binary); |
| |
| String2CPInstructionType.put( "nmax", CPType.BuiltinNary); |
| String2CPInstructionType.put( "nmin", CPType.BuiltinNary); |
| String2CPInstructionType.put( "n+" , CPType.BuiltinNary); |
| |
| String2CPInstructionType.put( "exp" , CPType.Unary); |
| String2CPInstructionType.put( "abs" , CPType.Unary); |
| String2CPInstructionType.put( "sin" , CPType.Unary); |
| String2CPInstructionType.put( "cos" , CPType.Unary); |
| String2CPInstructionType.put( "tan" , CPType.Unary); |
| String2CPInstructionType.put( "sinh" , CPType.Unary); |
| String2CPInstructionType.put( "cosh" , CPType.Unary); |
| String2CPInstructionType.put( "tanh" , CPType.Unary); |
| String2CPInstructionType.put( "asin" , CPType.Unary); |
| String2CPInstructionType.put( "acos" , CPType.Unary); |
| String2CPInstructionType.put( "atan" , CPType.Unary); |
| String2CPInstructionType.put( "sign" , CPType.Unary); |
| String2CPInstructionType.put( "sqrt" , CPType.Unary); |
| String2CPInstructionType.put( "plogp" , CPType.Unary); |
| String2CPInstructionType.put( "print" , CPType.Unary); |
| String2CPInstructionType.put( "assert" , CPType.Unary); |
| String2CPInstructionType.put( "round" , CPType.Unary); |
| String2CPInstructionType.put( "ceil" , CPType.Unary); |
| String2CPInstructionType.put( "floor" , CPType.Unary); |
| String2CPInstructionType.put( "ucumk+", CPType.Unary); |
| String2CPInstructionType.put( "ucum*" , CPType.Unary); |
| String2CPInstructionType.put( "ucumk+*" , CPType.Unary); |
| String2CPInstructionType.put( "ucummin", CPType.Unary); |
| String2CPInstructionType.put( "ucummax", CPType.Unary); |
| String2CPInstructionType.put( "stop" , CPType.Unary); |
| String2CPInstructionType.put( "inverse", CPType.Unary); |
| String2CPInstructionType.put( "cholesky",CPType.Unary); |
| String2CPInstructionType.put( "sprop", CPType.Unary); |
| String2CPInstructionType.put( "sigmoid", CPType.Unary); |
| String2CPInstructionType.put( "typeOf", CPType.Unary); |
| String2CPInstructionType.put( "detectSchema", CPType.Unary); |
| String2CPInstructionType.put( "colnames", CPType.Unary); |
| String2CPInstructionType.put( "isna", CPType.Unary); |
| String2CPInstructionType.put( "isnan", CPType.Unary); |
| String2CPInstructionType.put( "isinf", CPType.Unary); |
| String2CPInstructionType.put( "printf", CPType.BuiltinNary); |
| String2CPInstructionType.put( "cbind", CPType.BuiltinNary); |
| String2CPInstructionType.put( "rbind", CPType.BuiltinNary); |
| String2CPInstructionType.put( "eval", CPType.BuiltinNary); |
| String2CPInstructionType.put( "list", CPType.BuiltinNary); |
| |
| // Parameterized Builtin Functions |
| String2CPInstructionType.put("paramserv", CPType.ParameterizedBuiltin); |
| String2CPInstructionType.put( "nvlist", CPType.ParameterizedBuiltin); |
| String2CPInstructionType.put( "cdf", CPType.ParameterizedBuiltin); |
| String2CPInstructionType.put( "invcdf", CPType.ParameterizedBuiltin); |
| String2CPInstructionType.put( "groupedagg", CPType.ParameterizedBuiltin); |
| String2CPInstructionType.put( "rmempty" , CPType.ParameterizedBuiltin); |
| String2CPInstructionType.put( "replace", CPType.ParameterizedBuiltin); |
| String2CPInstructionType.put( "lowertri", CPType.ParameterizedBuiltin); |
| String2CPInstructionType.put( "uppertri", CPType.ParameterizedBuiltin); |
| String2CPInstructionType.put( "rexpand", CPType.ParameterizedBuiltin); |
| String2CPInstructionType.put( "toString", CPType.ParameterizedBuiltin); |
| String2CPInstructionType.put( "transformapply", CPType.ParameterizedBuiltin); |
| String2CPInstructionType.put( "transformdecode",CPType.ParameterizedBuiltin); |
| String2CPInstructionType.put( "transformcolmap",CPType.ParameterizedBuiltin); |
| String2CPInstructionType.put( "transformmeta", CPType.ParameterizedBuiltin); |
| String2CPInstructionType.put( "transformencode",CPType.MultiReturnParameterizedBuiltin); |
| |
| // Ternary Instruction Opcodes |
| String2CPInstructionType.put( "+*", CPType.Ternary); |
| String2CPInstructionType.put( "-*", CPType.Ternary); |
| String2CPInstructionType.put( "ifelse", CPType.Ternary); |
| |
| // Variable Instruction Opcodes |
| String2CPInstructionType.put( "assignvar" , CPType.Variable); |
| String2CPInstructionType.put( "cpvar" , CPType.Variable); |
| String2CPInstructionType.put( "mvvar" , CPType.Variable); |
| String2CPInstructionType.put( "rmvar" , CPType.Variable); |
| String2CPInstructionType.put( "rmfilevar" , CPType.Variable); |
| String2CPInstructionType.put( UnaryCP.CAST_AS_SCALAR_OPCODE, CPType.Variable); |
| String2CPInstructionType.put( UnaryCP.CAST_AS_MATRIX_OPCODE, CPType.Variable); |
| String2CPInstructionType.put( UnaryCP.CAST_AS_FRAME_OPCODE, CPType.Variable); |
| String2CPInstructionType.put( UnaryCP.CAST_AS_DOUBLE_OPCODE, CPType.Variable); |
| String2CPInstructionType.put( UnaryCP.CAST_AS_INT_OPCODE, CPType.Variable); |
| String2CPInstructionType.put( UnaryCP.CAST_AS_BOOLEAN_OPCODE, CPType.Variable); |
| String2CPInstructionType.put( "attachfiletovar" , CPType.Variable); |
| String2CPInstructionType.put( "read" , CPType.Variable); |
| String2CPInstructionType.put( "write" , CPType.Variable); |
| String2CPInstructionType.put( "createvar" , CPType.Variable); |
| |
| // Reorg Instruction Opcodes (repositioning of existing values) |
| String2CPInstructionType.put( "r'" , CPType.Reorg); |
| String2CPInstructionType.put( "rev" , CPType.Reorg); |
| String2CPInstructionType.put( "rdiag" , CPType.Reorg); |
| String2CPInstructionType.put( "rshape" , CPType.Reshape); |
| String2CPInstructionType.put( "rsort" , CPType.Reorg); |
| |
| // Opcodes related to convolutions |
| String2CPInstructionType.put( "relu_backward" , CPType.Dnn); |
| String2CPInstructionType.put( "relu_maxpooling" , CPType.Dnn); |
| String2CPInstructionType.put( "relu_maxpooling_backward" , CPType.Dnn); |
| String2CPInstructionType.put( "maxpooling" , CPType.Dnn); |
| String2CPInstructionType.put( "maxpooling_backward" , CPType.Dnn); |
| String2CPInstructionType.put( "avgpooling" , CPType.Dnn); |
| String2CPInstructionType.put( "avgpooling_backward" , CPType.Dnn); |
| String2CPInstructionType.put( "conv2d" , CPType.Dnn); |
| String2CPInstructionType.put( "conv2d_bias_add" , CPType.Dnn); |
| String2CPInstructionType.put( "conv2d_backward_filter" , CPType.Dnn); |
| String2CPInstructionType.put( "conv2d_backward_data" , CPType.Dnn); |
| String2CPInstructionType.put( "bias_add" , CPType.Dnn); |
| String2CPInstructionType.put( "bias_multiply" , CPType.Dnn); |
| String2CPInstructionType.put( "batch_norm2d", CPType.Dnn); |
| String2CPInstructionType.put( "batch_norm2d_backward", CPType.Dnn); |
| |
| // Quaternary instruction opcodes |
| String2CPInstructionType.put( "wsloss" , CPType.Quaternary); |
| String2CPInstructionType.put( "wsigmoid", CPType.Quaternary); |
| String2CPInstructionType.put( "wdivmm", CPType.Quaternary); |
| String2CPInstructionType.put( "wcemm", CPType.Quaternary); |
| String2CPInstructionType.put( "wumm", CPType.Quaternary); |
| |
| // User-defined function Opcodes |
| String2CPInstructionType.put(FunctionOp.OPCODE, CPType.FCall); |
| |
| String2CPInstructionType.put(Append.OPCODE, CPType.Append); |
| String2CPInstructionType.put( "remove", CPType.Append); |
| |
| // data generation opcodes |
| String2CPInstructionType.put( DataGen.RAND_OPCODE , CPType.Rand); |
| String2CPInstructionType.put( DataGen.SEQ_OPCODE , CPType.Rand); |
| String2CPInstructionType.put( DataGen.SINIT_OPCODE , CPType.StringInit); |
| String2CPInstructionType.put( DataGen.SAMPLE_OPCODE , CPType.Rand); |
| String2CPInstructionType.put( DataGen.TIME_OPCODE , CPType.Rand); |
| |
| String2CPInstructionType.put( "ctable", CPType.Ctable); |
| String2CPInstructionType.put( "ctableexpand", CPType.Ctable); |
| |
| //central moment, covariance, quantiles (sort/pick) |
| String2CPInstructionType.put( "cm", CPType.CentralMoment); |
| String2CPInstructionType.put( "cov", CPType.Covariance); |
| String2CPInstructionType.put( "qsort", CPType.QSort); |
| String2CPInstructionType.put( "qpick", CPType.QPick); |
| |
| |
| String2CPInstructionType.put( RightIndex.OPCODE, CPType.MatrixIndexing); |
| String2CPInstructionType.put( LeftIndex.OPCODE, CPType.MatrixIndexing); |
| |
| String2CPInstructionType.put( "tsmm", CPType.MMTSJ); |
| String2CPInstructionType.put( "pmm", CPType.PMMJ); |
| String2CPInstructionType.put( "mmchain", CPType.MMChain); |
| |
| String2CPInstructionType.put( "qr", CPType.MultiReturnBuiltin); |
| String2CPInstructionType.put( "lu", CPType.MultiReturnBuiltin); |
| String2CPInstructionType.put( "eigen", CPType.MultiReturnBuiltin); |
| String2CPInstructionType.put( "svd", CPType.MultiReturnBuiltin); |
| |
| String2CPInstructionType.put( "partition", CPType.Partition); |
| String2CPInstructionType.put( "compress", CPType.Compression); |
| String2CPInstructionType.put( "spoof", CPType.SpoofFused); |
| |
| String2CPInstructionType.put( "sql", CPType.Sql); |
| } |
| |
| public static CPInstruction parseSingleInstruction (String str ) { |
| if ( str == null || str.isEmpty() ) |
| return null; |
| CPType cptype = InstructionUtils.getCPType(str); |
| if ( cptype == null ) |
| throw new DMLRuntimeException("Unable derive cptype for instruction: " + str); |
| CPInstruction cpinst = parseSingleInstruction(cptype, str); |
| if ( cpinst == null ) |
| throw new DMLRuntimeException("Unable to parse instruction: " + str); |
| return cpinst; |
| } |
| |
| public static CPInstruction parseSingleInstruction ( CPType cptype, String str ) { |
| ExecType execType; |
| if ( str == null || str.isEmpty() ) |
| return null; |
| switch(cptype) { |
| case AggregateUnary: |
| return AggregateUnaryCPInstruction.parseInstruction(str); |
| |
| case AggregateBinary: |
| return AggregateBinaryCPInstruction.parseInstruction(str); |
| |
| case AggregateTernary: |
| return AggregateTernaryCPInstruction.parseInstruction(str); |
| |
| case Unary: |
| return UnaryCPInstruction.parseInstruction(str); |
| |
| case Binary: |
| return BinaryCPInstruction.parseInstruction(str); |
| |
| case Ternary: |
| return TernaryCPInstruction.parseInstruction(str); |
| |
| case Quaternary: |
| return QuaternaryCPInstruction.parseInstruction(str); |
| |
| case BuiltinNary: |
| return BuiltinNaryCPInstruction.parseInstruction(str); |
| |
| case Ctable: |
| return CtableCPInstruction.parseInstruction(str); |
| |
| case Reorg: |
| return ReorgCPInstruction.parseInstruction(str); |
| |
| case Dnn: |
| return DnnCPInstruction.parseInstruction(str); |
| |
| case UaggOuterChain: |
| return UaggOuterChainCPInstruction.parseInstruction(str); |
| |
| case Reshape: |
| return ReshapeCPInstruction.parseInstruction(str); |
| |
| case Append: |
| return AppendCPInstruction.parseInstruction(str); |
| |
| case Variable: |
| return VariableCPInstruction.parseInstruction(str); |
| |
| case Rand: |
| return DataGenCPInstruction.parseInstruction(str); |
| |
| case StringInit: |
| return StringInitCPInstruction.parseInstruction(str); |
| |
| case FCall: |
| return FunctionCallCPInstruction.parseInstruction(str); |
| |
| case ParameterizedBuiltin: |
| return ParameterizedBuiltinCPInstruction.parseInstruction(str); |
| |
| case MultiReturnParameterizedBuiltin: |
| return MultiReturnParameterizedBuiltinCPInstruction.parseInstruction(str); |
| |
| case MultiReturnBuiltin: |
| return MultiReturnBuiltinCPInstruction.parseInstruction(str); |
| |
| case QSort: |
| return QuantileSortCPInstruction.parseInstruction(str); |
| |
| case QPick: |
| return QuantilePickCPInstruction.parseInstruction(str); |
| |
| case MatrixIndexing: |
| execType = ExecType.valueOf( str.split(Instruction.OPERAND_DELIM)[0] ); |
| if( execType == ExecType.CP ) |
| return IndexingCPInstruction.parseInstruction(str); |
| else //exectype CP_FILE |
| return MatrixIndexingCPFileInstruction.parseInstruction(str); |
| |
| case Builtin: |
| String[] parts = InstructionUtils.getInstructionPartsWithValueType(str); |
| if ( parts[0].equals("log") || parts[0].equals("log_nz") ) { |
| if ( parts.length == 3 || (parts.length == 5 && |
| UtilFunctions.isIntegerNumber(parts[3])) ) { |
| // B=log(A), y=log(x) |
| return UnaryCPInstruction.parseInstruction(str); |
| } else if ( parts.length == 4 ) { |
| // B=log(A,10), y=log(x,10) |
| return BinaryCPInstruction.parseInstruction(str); |
| } |
| } |
| throw new DMLRuntimeException("Invalid Builtin Instruction: " + str ); |
| |
| case MMTSJ: |
| return MMTSJCPInstruction.parseInstruction(str); |
| |
| case PMMJ: |
| return PMMJCPInstruction.parseInstruction(str); |
| |
| case MMChain: |
| return MMChainCPInstruction.parseInstruction(str); |
| |
| case CentralMoment: |
| return CentralMomentCPInstruction.parseInstruction(str); |
| |
| case Covariance: |
| return CovarianceCPInstruction.parseInstruction(str); |
| |
| case Compression: |
| return (CPInstruction) CompressionCPInstruction.parseInstruction(str); |
| |
| case SpoofFused: |
| return SpoofCPInstruction.parseInstruction(str); |
| |
| case Sql: |
| return SqlCPInstruction.parseInstruction(str); |
| |
| default: |
| throw new DMLRuntimeException("Invalid CP Instruction Type: " + cptype ); |
| } |
| } |
| } |