/*
 * 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( "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 );
		}
	}
}
