You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by mb...@apache.org on 2018/03/24 05:18:38 UTC

[05/10] systemml git commit: [SYSTEMML-2191] Cleanup exception hierarchy and handling, part 1

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/IfStatementBlock.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/IfStatementBlock.java b/src/main/java/org/apache/sysml/parser/IfStatementBlock.java
index 00295d1..aa9c7b5 100644
--- a/src/main/java/org/apache/sysml/parser/IfStatementBlock.java
+++ b/src/main/java/org/apache/sysml/parser/IfStatementBlock.java
@@ -19,14 +19,12 @@
 
 package org.apache.sysml.parser;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map.Entry;
 
 import org.apache.sysml.conf.ConfigurationManager;
 import org.apache.sysml.hops.Hop;
-import org.apache.sysml.hops.HopsException;
 import org.apache.sysml.hops.recompile.Recompiler;
 import org.apache.sysml.lops.Lop;
 import org.apache.sysml.parser.Expression.DataType;
@@ -40,8 +38,7 @@ public class IfStatementBlock extends StatementBlock
 	
 	@Override
 	public VariableSet validate(DMLProgram dmlProg, VariableSet ids, HashMap<String,ConstIdentifier> constVars, boolean conditional) 
-		throws LanguageException, ParseException, IOException 
-	{		
+	{
 		if (_statements.size() > 1){
 			raiseValidateError("IfStatementBlock should only have 1 statement (IfStatement)", conditional);
 		}
@@ -287,8 +284,7 @@ public class IfStatementBlock extends StatementBlock
 	
 	@Override
 	public VariableSet initializeforwardLV(VariableSet activeInPassed) 
-		throws LanguageException 
-	{	
+	{
 		IfStatement ifstmt = (IfStatement)_statements.get(0);
 		if (_statements.size() > 1){
 			LOG.error(ifstmt.printErrorLocation() + "IfStatementBlock should have only 1 statement (if statement)");
@@ -421,8 +417,7 @@ public class IfStatementBlock extends StatementBlock
 
 	@Override
 	public VariableSet initializebackwardLV(VariableSet loPassed) 
-		throws LanguageException
-	{	
+	{
 		IfStatement ifstmt = (IfStatement)_statements.get(0);
 		if (_statements.size() > 1){
 			LOG.error(ifstmt.printErrorLocation() + "IfStatementBlock should have only 1 statement (if statement)");
@@ -468,7 +463,7 @@ public class IfStatementBlock extends StatementBlock
 	}
 
 	@Override
-	public VariableSet analyze(VariableSet loPassed) throws LanguageException{
+	public VariableSet analyze(VariableSet loPassed) {
 	 	
 		VariableSet predVars = ((IfStatement)_statements.get(0)).getConditionalPredicate().variablesRead();
 		predVars.addVariables(((IfStatement)_statements.get(0)).getConditionalPredicate().variablesUpdated());
@@ -515,7 +510,7 @@ public class IfStatementBlock extends StatementBlock
 	// materialized hops recompilation flags
 	////
 	
-	public boolean updatePredicateRecompilationFlag() throws HopsException {
+	public boolean updatePredicateRecompilationFlag() {
 		return (_requiresPredicateRecompile =
 			ConfigurationManager.isDynamicRecompilation()
 			&& Recompiler.requiresRecompilation(getPredicateHops()));

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/ImportStatement.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/ImportStatement.java b/src/main/java/org/apache/sysml/parser/ImportStatement.java
index 6b892d1..4f2c475 100644
--- a/src/main/java/org/apache/sysml/parser/ImportStatement.java
+++ b/src/main/java/org/apache/sysml/parser/ImportStatement.java
@@ -75,7 +75,7 @@ public class ImportStatement extends Statement
 	
 
 	@Override
-	public Statement rewriteStatement(String prefix) throws LanguageException{
+	public Statement rewriteStatement(String prefix) {
 		LOG.error(this.printErrorLocation() + "rewriting for inlining not supported for ImportStatement");
 		throw new LanguageException(this.printErrorLocation() + "rewriting for inlining not supported for ImportStatement");
 	}

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/IndexedIdentifier.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/IndexedIdentifier.java b/src/main/java/org/apache/sysml/parser/IndexedIdentifier.java
index 09dafc2..97e94c5 100644
--- a/src/main/java/org/apache/sysml/parser/IndexedIdentifier.java
+++ b/src/main/java/org/apache/sysml/parser/IndexedIdentifier.java
@@ -72,8 +72,7 @@ public class IndexedIdentifier extends DataIdentifier
 	}
 	
 	public IndexPair calculateIndexedDimensions(HashMap<String,DataIdentifier> ids, HashMap<String, ConstIdentifier> currConstVars, boolean conditional) 
-		throws LanguageException 
-	{	
+	{
 		// stores the updated row / col dimension info
 		long updatedRowDim = -1, updatedColDim = -1;
 		
@@ -528,7 +527,7 @@ public class IndexedIdentifier extends DataIdentifier
 	
 	
 	@Override
-	public Expression rewriteExpression(String prefix) throws LanguageException {
+	public Expression rewriteExpression(String prefix) {
 		IndexedIdentifier newIndexedIdentifier = new IndexedIdentifier(this.getName(), this._rowLowerEqualsUpper, this._colLowerEqualsUpper);
 		newIndexedIdentifier.setParseInfo(this);
 		
@@ -549,7 +548,7 @@ public class IndexedIdentifier extends DataIdentifier
 		return newIndexedIdentifier;
 	}
 		
-	public void setIndices(ArrayList<ArrayList<Expression>> passed) throws LanguageException {
+	public void setIndices(ArrayList<ArrayList<Expression>> passed) {
 		if (passed.size() != 2)
 			raiseValidateError("matrix indices must be specified for 2 dimensions");
 		

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/IntIdentifier.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/IntIdentifier.java b/src/main/java/org/apache/sysml/parser/IntIdentifier.java
index 1e384bc..3833ce0 100644
--- a/src/main/java/org/apache/sysml/parser/IntIdentifier.java
+++ b/src/main/java/org/apache/sysml/parser/IntIdentifier.java
@@ -26,7 +26,7 @@ public class IntIdentifier extends ConstIdentifier
 	private long _val;
 	
 	@Override
-	public Expression rewriteExpression(String prefix) throws LanguageException{
+	public Expression rewriteExpression(String prefix) {
 		return this;
 	}
 

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/IterablePredicate.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/IterablePredicate.java b/src/main/java/org/apache/sysml/parser/IterablePredicate.java
index ea49073..cf859c3 100644
--- a/src/main/java/org/apache/sysml/parser/IterablePredicate.java
+++ b/src/main/java/org/apache/sysml/parser/IterablePredicate.java
@@ -61,7 +61,7 @@ public class IterablePredicate extends Expression
 	}
 	
 	@Override
-	public Expression rewriteExpression(String prefix) throws LanguageException {
+	public Expression rewriteExpression(String prefix) {
 		//DataIdentifier newIterVar = (DataIdentifier)_iterVar.rewriteExpression(prefix);
 		//return new IterablePredicate(newIterVar, _from, _to, _increment);
 		LOG.error(this.printErrorLocation() + "rewriteExpression not supported for IterablePredicate");
@@ -70,7 +70,6 @@ public class IterablePredicate extends Expression
 	
 	@Override
 	public void validateExpression(HashMap<String, DataIdentifier> ids, HashMap<String, ConstIdentifier> constVars, boolean conditional) 
-		throws LanguageException 
 	{
 		//recursive validate
 		if (_iterVar instanceof FunctionCallIdentifier
@@ -185,9 +184,7 @@ public class IterablePredicate extends Expression
 		return sb.toString();
 	}
 	
-	private void checkNumericScalarOutput( Expression expr )
-		throws LanguageException
-	{
+	private void checkNumericScalarOutput( Expression expr ) {
 		if( expr == null || expr.getOutput() == null )
 			return;
 		

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/LiveVariableAnalysis.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/LiveVariableAnalysis.java b/src/main/java/org/apache/sysml/parser/LiveVariableAnalysis.java
index 0417edb..e851907 100644
--- a/src/main/java/org/apache/sysml/parser/LiveVariableAnalysis.java
+++ b/src/main/java/org/apache/sysml/parser/LiveVariableAnalysis.java
@@ -85,9 +85,9 @@ public abstract class LiveVariableAnalysis
 		_read = vars;
 	}
 	
-	public abstract VariableSet initializeforwardLV(VariableSet activeIn) throws LanguageException;
-	public abstract VariableSet initializebackwardLV(VariableSet loPassed) throws LanguageException;
-	public abstract VariableSet analyze(VariableSet loPassed) throws LanguageException;
+	public abstract VariableSet initializeforwardLV(VariableSet activeIn);
+	public abstract VariableSet initializebackwardLV(VariableSet loPassed);
+	public abstract VariableSet analyze(VariableSet loPassed);
 	
 	public void updateLiveVariablesOut(VariableSet liveOut){
 		 updateLiveVariables(_liveOut,liveOut);

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/MultiAssignmentStatement.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/MultiAssignmentStatement.java b/src/main/java/org/apache/sysml/parser/MultiAssignmentStatement.java
index 4010a65..b01dd2e 100644
--- a/src/main/java/org/apache/sysml/parser/MultiAssignmentStatement.java
+++ b/src/main/java/org/apache/sysml/parser/MultiAssignmentStatement.java
@@ -33,8 +33,7 @@ public class MultiAssignmentStatement extends Statement
 	
 	// rewrites statement to support function inlining (creates deep copy) 
 	@Override
-	public Statement rewriteStatement(String prefix) throws LanguageException{
-				
+	public Statement rewriteStatement(String prefix) {
 		ArrayList<DataIdentifier> newTargetList = new ArrayList<>();
 		
 		// rewrite targetList (deep copy)

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/OutputStatement.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/OutputStatement.java b/src/main/java/org/apache/sysml/parser/OutputStatement.java
index af02f8f..43b1edd 100644
--- a/src/main/java/org/apache/sysml/parser/OutputStatement.java
+++ b/src/main/java/org/apache/sysml/parser/OutputStatement.java
@@ -70,27 +70,20 @@ public class OutputStatement extends Statement
 			return false;
 	}
 	
-	public void addExprParam(String name, Expression value, boolean fromMTDFile) 
-		throws LanguageException
-	{
+	public void addExprParam(String name, Expression value, boolean fromMTDFile) {
 		if( _paramsExpr.getVarParam(name) != null )
 			raiseValidateError("attempted to add IOStatement parameter " + name + " more than once", false);
-		
 		if( !OutputStatement.isValidParamName(name) )
 			raiseValidateError("attempted to add invalid write statement parameter: " + name, false);
-		
 		_paramsExpr.addVarParam(name, value);
 	}
 	
 	// rewrites statement to support function inlining (create deep copy)
 	@Override
-	public Statement rewriteStatement(String prefix) throws LanguageException{
-
+	public Statement rewriteStatement(String prefix) {
 		OutputStatement newStatement = new OutputStatement(null, Expression.DataOp.WRITE, this);
-
 		// rewrite outputStatement variable name (creates deep copy)
 		newStatement._id = (DataIdentifier)this._id.rewriteExpression(prefix);
-		
 		// rewrite parameter expressions (creates deep copy)
 		DataOp op = _paramsExpr.getOpCode();
 		HashMap<String,Expression> newExprParams = new HashMap<>();
@@ -102,10 +95,11 @@ public class OutputStatement extends Statement
 		newStatement.setExprParams(newParamerizedExpr);
 		return newStatement;
 	}
-		
+
 	public void setExprParams(DataExpression newParamerizedExpr) {
 		_paramsExpr = newParamerizedExpr;
 	}
+
 	public Expression getExprParam(String key){
 		return _paramsExpr.getVarParam(key);
 	}

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/ParForStatementBlock.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/ParForStatementBlock.java b/src/main/java/org/apache/sysml/parser/ParForStatementBlock.java
index d209c36..dee1384 100644
--- a/src/main/java/org/apache/sysml/parser/ParForStatementBlock.java
+++ b/src/main/java/org/apache/sysml/parser/ParForStatementBlock.java
@@ -19,7 +19,6 @@
 
 package org.apache.sysml.parser;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -175,8 +174,7 @@ public class ParForStatementBlock extends ForStatementBlock
 	
 	@Override
 	public VariableSet validate(DMLProgram dmlProg, VariableSet ids, HashMap<String,ConstIdentifier> constVars, boolean conditional)
-		throws LanguageException, ParseException, IOException
-	{	
+	{
 		LOG.trace("PARFOR("+_ID+"): validating ParForStatementBlock.");
 		
 		//create parent variable set via cloning
@@ -419,10 +417,8 @@ public class ParForStatementBlock extends ForStatementBlock
 	 * @param asb list of statement blocks
 	 * @param C set of candidates
 	 * @param sCount statement count
-	 * @throws LanguageException if LanguageException occurs
 	 */
 	private void rDetermineCandidates(ArrayList<StatementBlock> asb, HashSet<Candidate> C, Integer sCount) 
-		throws LanguageException 
 	{
 		for(StatementBlock sb : asb ) // foreach statementblock in parforbody
 			for( Statement s : sb._statements ) // foreach statement in statement block
@@ -476,10 +472,8 @@ public class ParForStatementBlock extends ForStatementBlock
 	 * @param var variables
 	 * @param asb list of statement blocks
 	 * @param C list of partition formats
-	 * @throws LanguageException if LanguageException occurs
 	 */
 	private void rDeterminePartitioningCandidates(String var, ArrayList<StatementBlock> asb, List<PartitionFormat> C) 
-		throws LanguageException 
 	{
 		for(StatementBlock sb : asb ) // foreach statementblock in parforbody
 			for( Statement s : sb._statements ) // foreach statement in statement block
@@ -600,7 +594,6 @@ public class ParForStatementBlock extends ForStatementBlock
 	}
 	
 	private void rConsolidateResultVars(ArrayList<StatementBlock> asb, ArrayList<ResultVar> vars) 
-		throws LanguageException 
 	{
 		for(StatementBlock sb : asb ) // foreach statementblock in parforbody
 		{
@@ -633,12 +626,10 @@ public class ParForStatementBlock extends ForStatementBlock
 	 * @param asb list of statement blocks
 	 * @param sCount statement count
 	 * @param dep array of boolean potential output dependencies
-	 * @throws LanguageException if LanguageException occurs
 	 */
 	private void rCheckCandidates(Candidate c, DataType cdt,
 			ArrayList<StatementBlock> asb, Integer sCount, boolean[] dep) 
-		throws LanguageException 
-	{	
+	{
 		// check candidate only (output dependency if scalar or constant matrix subscript)
 		if(    cdt == DataType.SCALAR 
 			|| cdt == DataType.OBJECT  ) //dat2 checked for other candidate 
@@ -865,7 +856,7 @@ public class ParForStatementBlock extends ForStatementBlock
 		return ret;
 	}
 	
-	private void rDetermineBounds( ArrayList<StatementBlock> sbs, boolean flag ) throws LanguageException {
+	private void rDetermineBounds( ArrayList<StatementBlock> sbs, boolean flag ) {
 		for( StatementBlock sb : sbs )
 			rDetermineBounds(sb, flag);
 	}
@@ -875,10 +866,8 @@ public class ParForStatementBlock extends ForStatementBlock
 	 * 
 	 * @param sb statement block
 	 * @param flag indicates that method is already in subtree of THIS.
-	 * @throws LanguageException if LanguageException occurs
 	 */
 	private void rDetermineBounds( StatementBlock sb, boolean flag ) 
-		throws LanguageException
 	{
 		// catch all known for/ parfor bounds 
 		// (all unknown bounds are assumed to be +-infinity)
@@ -1000,10 +989,8 @@ public class ParForStatementBlock extends ForStatementBlock
 	 * @param dat1 data identifier 1
 	 * @param dat2 data identifier 2
 	 * @return true if "anti or data dependency"
-	 * @throws LanguageException if LanguageException occurs
 	 */
 	private boolean runBanerjeeGCDTest(DataIdentifier dat1, DataIdentifier dat2) 
-		throws LanguageException 
 	{
 		/* The GCD (greatest common denominator) and the Banerjee test are two commonly used tests
 		 * for determining loop-carried dependencies. Both rely on (1) linear index expressions of the
@@ -1151,10 +1138,8 @@ public class ParForStatementBlock extends ForStatementBlock
 	 * 
 	 * @param dat1 data identifier
 	 * @return true if dependency
-	 * @throws LanguageException if LanguageException occurs
 	 */
 	private boolean runConstantCheck(DataIdentifier dat1) 
-		throws LanguageException 
 	{
 		LOG.trace("PARFOR: runConstantCheck.");
 		
@@ -1201,10 +1186,8 @@ public class ParForStatementBlock extends ForStatementBlock
 	 * @param dat1 data identifier 1
 	 * @param dat2 data identifier 2
 	 * @return true if equal data identifiers
-	 * @throws LanguageException if LanguageException occurs
 	 */
 	private boolean runEqualsCheck(DataIdentifier dat1, DataIdentifier dat2) 
-		throws LanguageException 
 	{
 		LOG.trace("PARFOR: runEqualsCheck.");
 		
@@ -1272,10 +1255,8 @@ public class ParForStatementBlock extends ForStatementBlock
 	 * 
 	 * @param dat data identifier
 	 * @return linear function
-	 * @throws LanguageException if LanguageException occurs
 	 */
 	private LinearFunction getLinearFunction(DataIdentifier dat)
-		throws LanguageException
 	{
 		/* Notes:
 		 * - Currently, this function supports 2dim matrix subscripts with arbitrary linear functions
@@ -1463,7 +1444,6 @@ public class ParForStatementBlock extends ForStatementBlock
 	}
 	
 	private LinearFunction getRowLinearFunction(DataIdentifier dat) 
-		throws LanguageException
 	{
 		//NOTE: would require separate function cache, not realized due to inexpensive operations
 		
@@ -1501,7 +1481,6 @@ public class ParForStatementBlock extends ForStatementBlock
 	}
 	
 	private LinearFunction getColLinearFunction(DataIdentifier dat) 
-		throws LanguageException
 	{
 		//NOTE: would require separate function cache, not realized due to inexpensive operations
 		
@@ -1538,8 +1517,7 @@ public class ParForStatementBlock extends ForStatementBlock
 		return out;
 	}
 	
-	private LinearFunction getLinearFunction(Expression expr, boolean ignoreMinWithConstant) 
-		throws LanguageException {
+	private LinearFunction getLinearFunction(Expression expr, boolean ignoreMinWithConstant) {
 		if( expr instanceof IntIdentifier )
 			return new LinearFunction(((IntIdentifier)expr).getValue(), 0, null);
 		else if( expr instanceof BinaryExpression )
@@ -1611,10 +1589,8 @@ public class ParForStatementBlock extends ForStatementBlock
 	 * robustness purposes.
 	 * 
 	 * @param f1 linear function
-	 * @throws LanguageException if LanguageException occurs
 	 */
 	private void verifyFunction(LinearFunction f1)
-		throws LanguageException
 	{
 		//check for required form of linear functions
 		if( f1 == null || f1._b.length != f1._vars.length ) {
@@ -1687,10 +1663,8 @@ public class ParForStatementBlock extends ForStatementBlock
 	 * 
 	 * @param be binary expression
 	 * @return linear function
-	 * @throws LanguageException if LanguageException occurs
 	 */
 	private LinearFunction rParseBinaryExpression(BinaryExpression be) 
-		throws LanguageException
 	{
 		LinearFunction ret = null;
 		Expression l = be.getLeft();

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/ParameterizedBuiltinFunctionExpression.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/ParameterizedBuiltinFunctionExpression.java b/src/main/java/org/apache/sysml/parser/ParameterizedBuiltinFunctionExpression.java
index dbb2a1e..e80b46f 100644
--- a/src/main/java/org/apache/sysml/parser/ParameterizedBuiltinFunctionExpression.java
+++ b/src/main/java/org/apache/sysml/parser/ParameterizedBuiltinFunctionExpression.java
@@ -144,7 +144,7 @@ public class ParameterizedBuiltinFunctionExpression extends DataIdentifier
 	}
 
 	@Override
-	public Expression rewriteExpression(String prefix) throws LanguageException {
+	public Expression rewriteExpression(String prefix) {
 		HashMap<String,Expression> newVarParams = new HashMap<>();
 		for (String key : _varParams.keySet()){
 			Expression newExpr = _varParams.get(key).rewriteExpression(prefix);
@@ -181,8 +181,7 @@ public class ParameterizedBuiltinFunctionExpression extends DataIdentifier
 	 */
 	@Override
 	public void validateExpression(HashMap<String, DataIdentifier> ids, HashMap<String, ConstIdentifier> constVars, boolean conditional)
-			throws LanguageException 
-	{		
+	{
 		// validate all input parameters
 		for ( String s : getVarParams().keySet() ) {
 			Expression paramExpr = getVarParam(s);
@@ -264,7 +263,6 @@ public class ParameterizedBuiltinFunctionExpression extends DataIdentifier
 
 	@Override
 	public void validateExpression(MultiAssignmentStatement stmt, HashMap<String, DataIdentifier> ids, HashMap<String, ConstIdentifier> constVars, boolean conditional)
-		throws LanguageException 
 	{
 		// validate all input parameters
 		for ( String s : getVarParams().keySet() ) {
@@ -296,7 +294,6 @@ public class ParameterizedBuiltinFunctionExpression extends DataIdentifier
 	
 	// example: A = transformapply(target=X, meta=M, spec=s)
 	private void validateTransformApply(DataIdentifier output, boolean conditional) 
-		throws LanguageException 
 	{
 		//validate data / metadata (recode maps)
 		checkDataType("transformapply", TF_FN_PARAM_DATA, DataType.FRAME, conditional);
@@ -313,7 +310,6 @@ public class ParameterizedBuiltinFunctionExpression extends DataIdentifier
 	}
 	
 	private void validateTransformDecode(DataIdentifier output, boolean conditional) 
-		throws LanguageException 
 	{
 		//validate data / metadata (recode maps) 
 		checkDataType("transformdecode", TF_FN_PARAM_DATA, DataType.MATRIX, conditional);
@@ -330,7 +326,6 @@ public class ParameterizedBuiltinFunctionExpression extends DataIdentifier
 	}
 	
 	private void validateTransformColmap(DataIdentifier output, boolean conditional) 
-		throws LanguageException 
 	{
 		//validate data / metadata (recode maps) 
 		Expression exprTarget = getVarParam(Statement.GAGG_TARGET);
@@ -347,7 +342,6 @@ public class ParameterizedBuiltinFunctionExpression extends DataIdentifier
 	}
 	
 	private void validateTransformMeta(DataIdentifier output, boolean conditional) 
-		throws LanguageException 
 	{
 		//validate specification
 		checkDataValueType("transformmeta", TF_FN_PARAM_SPEC, DataType.SCALAR, ValueType.STRING, conditional);
@@ -363,7 +357,6 @@ public class ParameterizedBuiltinFunctionExpression extends DataIdentifier
 	}
 	
 	private void validateTransformEncode(DataIdentifier output1, DataIdentifier output2, boolean conditional) 
-		throws LanguageException 
 	{
 		//validate data / metadata (recode maps) 
 		checkDataType("transformencode", TF_FN_PARAM_DATA, DataType.FRAME, conditional);
@@ -381,7 +374,7 @@ public class ParameterizedBuiltinFunctionExpression extends DataIdentifier
 		output2.setDimensions(-1, -1);
 	}
 	
-	private void validateTransformSpec(String pname, boolean conditional) throws LanguageException {
+	private void validateTransformSpec(String pname, boolean conditional) {
 		Expression data = getVarParam(pname);
 		if( data instanceof StringIdentifier ) {
 			try {
@@ -395,7 +388,7 @@ public class ParameterizedBuiltinFunctionExpression extends DataIdentifier
 		}
 	}
 	
-	private void validateReplace(DataIdentifier output, boolean conditional) throws LanguageException {
+	private void validateReplace(DataIdentifier output, boolean conditional) {
 		//check existence and correctness of arguments
 		Expression target = getVarParam("target");
 		if( target==null ) {				
@@ -427,7 +420,7 @@ public class ParameterizedBuiltinFunctionExpression extends DataIdentifier
 		output.setDimensions(target.getOutput().getDim1(), target.getOutput().getDim2());
 	}
 
-	private void validateOrder(DataIdentifier output, boolean conditional) throws LanguageException {
+	private void validateOrder(DataIdentifier output, boolean conditional) {
 		//check existence and correctness of arguments
 		Expression target = getVarParam("target"); //[MANDATORY] TARGET
 		if( target==null ) {				
@@ -478,7 +471,7 @@ public class ParameterizedBuiltinFunctionExpression extends DataIdentifier
 		
 	}
 
-	private void validateRemoveEmpty(DataIdentifier output, boolean conditional) throws LanguageException {
+	private void validateRemoveEmpty(DataIdentifier output, boolean conditional) {
 		
 		//check for invalid parameters
 		Set<String> valid = UtilFunctions.asSet("target", "margin", "select", "empty.return");
@@ -525,7 +518,6 @@ public class ParameterizedBuiltinFunctionExpression extends DataIdentifier
 	}
 	
 	private void validateGroupedAgg(DataIdentifier output, boolean conditional) 
-		throws LanguageException 
 	{
 		//check existing target and groups
 		if (getVarParam(Statement.GAGG_TARGET)  == null || getVarParam(Statement.GAGG_GROUPS) == null){
@@ -630,7 +622,7 @@ public class ParameterizedBuiltinFunctionExpression extends DataIdentifier
 		output.setDimensions(outputDim1, outputDim2);
 	}
 	
-	private void validateDistributionFunctions(DataIdentifier output, boolean conditional) throws LanguageException {
+	private void validateDistributionFunctions(DataIdentifier output, boolean conditional) {
 		// CDF and INVCDF expects one unnamed parameter, it must be renamed as "quantile" 
 		// (i.e., we must compute P(X <= x) where x is called as "quantile" )
 		
@@ -712,9 +704,7 @@ public class ParameterizedBuiltinFunctionExpression extends DataIdentifier
 		output.setDimensions(0, 0);
 	}
 	
-	private void validateCastAsString(DataIdentifier output, boolean conditional) 
-		throws LanguageException 
-	{
+	private void validateCastAsString(DataIdentifier output, boolean conditional) {
 		HashMap<String, Expression> varParams = getVarParams();
 		
 		// replace parameter name for matrix argument
@@ -737,21 +727,18 @@ public class ParameterizedBuiltinFunctionExpression extends DataIdentifier
 		output.setDimensions(0, 0);
 	}
 
-	private void checkDataType( String fname, String pname, DataType dt, boolean conditional ) 
-		throws LanguageException 
-	{
+	private void checkDataType( String fname, String pname, DataType dt, boolean conditional ) {
 		Expression data = getVarParam(pname);
-		if( data==null )				
+		if( data==null )
 			raiseValidateError("Named parameter '" + pname + "' missing. Please specify the input.", conditional, LanguageErrorCodes.INVALID_PARAMETERS);
 		else if( data.getOutput().getDataType() != dt )
 			raiseValidateError("Input to "+fname+"::"+pname+" must be of type '"+dt.toString()+"'. It is of type '"+data.getOutput().getDataType()+"'.", conditional, LanguageErrorCodes.INVALID_PARAMETERS);		
 	}
 
 	private void checkDataValueType( String fname, String pname, DataType dt, ValueType vt, boolean conditional ) 
-		throws LanguageException 
 	{
 		Expression data = getVarParam(pname);
-		if( data==null )				
+		if( data==null )
 			raiseValidateError("Named parameter '" + pname + "' missing. Please specify the input.", conditional, LanguageErrorCodes.INVALID_PARAMETERS);
 		else if( data.getOutput().getDataType() != dt || data.getOutput().getValueType() != vt )
 			raiseValidateError("Input to "+fname+"::"+pname+" must be of type '"+dt.toString()+"', '"+vt.toString()+"'. "

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/ParserWrapper.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/ParserWrapper.java b/src/main/java/org/apache/sysml/parser/ParserWrapper.java
index 71e405b..0f43971 100644
--- a/src/main/java/org/apache/sysml/parser/ParserWrapper.java
+++ b/src/main/java/org/apache/sysml/parser/ParserWrapper.java
@@ -45,8 +45,7 @@ public abstract class ParserWrapper {
 	protected boolean atLeastOneWarning = false;
 	protected List<ParseIssue> parseIssues;
 	
-	public abstract DMLProgram parse(String fileName, String dmlScript, Map<String, String> argVals)
-		throws ParseException;
+	public abstract DMLProgram parse(String fileName, String dmlScript, Map<String, String> argVals);
 
 	/**
 	 * Custom wrapper to convert statement into statement blocks. Called by doParse and in DmlSyntacticValidator for for, parfor, while, ...

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/PathStatement.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/PathStatement.java b/src/main/java/org/apache/sysml/parser/PathStatement.java
index 6fe61af..9bb2666 100644
--- a/src/main/java/org/apache/sysml/parser/PathStatement.java
+++ b/src/main/java/org/apache/sysml/parser/PathStatement.java
@@ -35,7 +35,7 @@ public class PathStatement extends Statement
 	}
 	
 	@Override
-	public Statement rewriteStatement(String prefix) throws LanguageException{
+	public Statement rewriteStatement(String prefix) {
 		return this;
 	}
 	

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/PrintStatement.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/PrintStatement.java b/src/main/java/org/apache/sysml/parser/PrintStatement.java
index 4740586..62ebf4a 100644
--- a/src/main/java/org/apache/sysml/parser/PrintStatement.java
+++ b/src/main/java/org/apache/sysml/parser/PrintStatement.java
@@ -42,7 +42,7 @@ public class PrintStatement extends Statement
 	protected PRINTTYPE _type; // print, printf, or stop
 	protected List<Expression> expressions;
 
-	private static PRINTTYPE getPrintType(String type, List<Expression> expressions) throws LanguageException {
+	private static PRINTTYPE getPrintType(String type, List<Expression> expressions) {
 		if(type.equalsIgnoreCase("print")) {
 			if ((expressions == null) || (expressions.size() == 1)) {
 				return PRINTTYPE.PRINT;
@@ -60,22 +60,19 @@ public class PrintStatement extends Statement
 			throw new LanguageException("Unknown statement type: " + type);
 	}
 
-	public PrintStatement(ParserRuleContext ctx, String type, String filename)
-			throws LanguageException {
+	public PrintStatement(ParserRuleContext ctx, String type, String filename) {
 		this(getPrintType(type, null), null);
 		setCtxValues(ctx);
 		setFilename(filename);
 	}
 
-	public PrintStatement(ParserRuleContext ctx, String type, List<Expression> expressions, String filename)
-			throws LanguageException {
+	public PrintStatement(ParserRuleContext ctx, String type, List<Expression> expressions, String filename) {
 		this(getPrintType(type, expressions), expressions);
 		setCtxValues(ctx);
 		setFilename(filename);
 	}
 
-	public PrintStatement(PRINTTYPE type, List<Expression> expressions)
-			throws LanguageException {
+	public PrintStatement(PRINTTYPE type, List<Expression> expressions) {
 		_type = type;
 		if (expressions == null) {
 			this.expressions = new ArrayList<>();
@@ -85,7 +82,7 @@ public class PrintStatement extends Statement
 	}
 
 	@Override
-	public Statement rewriteStatement(String prefix) throws LanguageException{
+	public Statement rewriteStatement(String prefix) {
 		List<Expression> newExpressions = new ArrayList<>();
 		for (Expression oldExpression : expressions) {
 			Expression newExpression = oldExpression.rewriteExpression(prefix);

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/RelationalExpression.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/RelationalExpression.java b/src/main/java/org/apache/sysml/parser/RelationalExpression.java
index af6424e..ca074cf 100644
--- a/src/main/java/org/apache/sysml/parser/RelationalExpression.java
+++ b/src/main/java/org/apache/sysml/parser/RelationalExpression.java
@@ -47,7 +47,7 @@ public class RelationalExpression extends Expression
 	}
 
 	@Override
-	public Expression rewriteExpression(String prefix) throws LanguageException {
+	public Expression rewriteExpression(String prefix) {
 		RelationalExpression newExpr = new RelationalExpression(this._opcode, this);
 		newExpr.setLeft(_left.rewriteExpression(prefix));
 		newExpr.setRight(_right.rewriteExpression(prefix));
@@ -90,16 +90,15 @@ public class RelationalExpression extends Expression
 	 */
 	@Override
 	public void validateExpression(HashMap<String,DataIdentifier> ids, HashMap<String, ConstIdentifier> constVars, boolean conditional) 
-		throws LanguageException
-	{	
+	{
 		//check for functions calls in expression
 		if (_left instanceof FunctionCallIdentifier){
 			raiseValidateError("user-defined function calls not supported in relational expressions", 
-		            false, LanguageException.LanguageErrorCodes.UNSUPPORTED_EXPRESSION);
-		}		
+				false, LanguageException.LanguageErrorCodes.UNSUPPORTED_EXPRESSION);
+		}
 		if (_right instanceof FunctionCallIdentifier){
 			raiseValidateError("user-defined function calls not supported in relational expressions", 
-		            false, LanguageException.LanguageErrorCodes.UNSUPPORTED_EXPRESSION);
+				false, LanguageException.LanguageErrorCodes.UNSUPPORTED_EXPRESSION);
 		}
 		
 		// handle <NUMERIC> == <BOOLEAN> --> convert <BOOLEAN> to numeric value
@@ -165,10 +164,8 @@ public class RelationalExpression extends Expression
 	 * @param expr1 expression 1
 	 * @param expr2 expression 2
 	 * @param allowsMV ?
-	 * @throws LanguageException
 	 */
 	private void checkMatchingDimensions(Expression expr1, Expression expr2, boolean allowsMV) 
-		throws LanguageException 
 	{
 		if (expr1 != null && expr2 != null) {
 			

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/Statement.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/Statement.java b/src/main/java/org/apache/sysml/parser/Statement.java
index 0b3aac2..4a54df4 100644
--- a/src/main/java/org/apache/sysml/parser/Statement.java
+++ b/src/main/java/org/apache/sysml/parser/Statement.java
@@ -67,10 +67,10 @@ public abstract class Statement implements ParseInfo
 	public abstract VariableSet variablesRead();
 	public abstract VariableSet variablesUpdated();
  
-	public abstract void initializeforwardLV(VariableSet activeIn) throws LanguageException;
-	public abstract VariableSet initializebackwardLV(VariableSet lo) throws LanguageException;
+	public abstract void initializeforwardLV(VariableSet activeIn);
+	public abstract VariableSet initializebackwardLV(VariableSet lo);
 	
-	public abstract Statement rewriteStatement(String prefix) throws LanguageException;
+	public abstract Statement rewriteStatement(String prefix);
 	
 	// Used only insider python parser to allow for ignoring newline logic
 	private boolean isEmptyNewLineStatement = false;
@@ -176,11 +176,11 @@ public abstract class Statement implements ParseInfo
 		}
 	}
 
-	public void raiseValidateError(String msg, boolean conditional) throws LanguageException {
+	public void raiseValidateError(String msg, boolean conditional) {
 		raiseValidateError(msg, conditional, null);
 	}
 
-	public void raiseValidateError(String msg, boolean conditional, String errorCode) throws LanguageException {
+	public void raiseValidateError(String msg, boolean conditional, String errorCode) {
 		if (conditional) {// warning if conditional
 			String fullMsg = this.printWarningLocation() + msg;
 			LOG.warn(fullMsg);

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/StatementBlock.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/StatementBlock.java b/src/main/java/org/apache/sysml/parser/StatementBlock.java
index 04e4a34..1f0e81c 100644
--- a/src/main/java/org/apache/sysml/parser/StatementBlock.java
+++ b/src/main/java/org/apache/sysml/parser/StatementBlock.java
@@ -19,7 +19,6 @@
 
 package org.apache.sysml.parser;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -30,7 +29,6 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.sysml.api.DMLScript;
 import org.apache.sysml.conf.ConfigurationManager;
 import org.apache.sysml.hops.Hop;
-import org.apache.sysml.hops.HopsException;
 import org.apache.sysml.hops.recompile.Recompiler;
 import org.apache.sysml.hops.rewrite.RewriteSplitDagDataDependentOperators;
 import org.apache.sysml.lops.Lop;
@@ -167,7 +165,7 @@ public class StatementBlock extends LiveVariableAnalysis implements ParseInfo
 		return ( stmt instanceof PrintStatement && (((PrintStatement)stmt).getType() == PRINTTYPE.STOP || ((PrintStatement)stmt).getType() == PRINTTYPE.ASSERT) );
 	}
 
-    public boolean isMergeableFunctionCallBlock(DMLProgram dmlProg) throws LanguageException{
+    public boolean isMergeableFunctionCallBlock(DMLProgram dmlProg) {
 
 //    	if (DMLScript.ENABLE_DEBUG_MODE && !DMLScript.ENABLE_DEBUG_OPTIMIZER)
     	if (DMLScript.ENABLE_DEBUG_MODE)
@@ -221,7 +219,7 @@ public class StatementBlock extends LiveVariableAnalysis implements ParseInfo
 		return true;
 	}
 
-    public boolean isRewritableFunctionCall(Statement stmt, DMLProgram dmlProg) throws LanguageException{
+    public boolean isRewritableFunctionCall(Statement stmt, DMLProgram dmlProg) {
 
 		// for regular stmt, check if this is a function call stmt block
 		if (stmt instanceof AssignmentStatement || stmt instanceof MultiAssignmentStatement){
@@ -303,7 +301,7 @@ public class StatementBlock extends LiveVariableAnalysis implements ParseInfo
     	return ret;
     }
 
-	public static ArrayList<StatementBlock> mergeFunctionCalls(ArrayList<StatementBlock> body, DMLProgram dmlProg) throws LanguageException
+	public static ArrayList<StatementBlock> mergeFunctionCalls(ArrayList<StatementBlock> body, DMLProgram dmlProg) 
 	{
 		for(int i = 0; i <body.size(); i++){
 
@@ -573,7 +571,7 @@ public class StatementBlock extends LiveVariableAnalysis implements ParseInfo
 		return ret;
 	}
 	
-	public ArrayList<Statement> rewriteFunctionCallStatements (DMLProgram dmlProg, ArrayList<Statement> statements) throws LanguageException {
+	public ArrayList<Statement> rewriteFunctionCallStatements (DMLProgram dmlProg, ArrayList<Statement> statements) {
 
 		ArrayList<Statement> newStatements = new ArrayList<>();
 		for (Statement current : statements){
@@ -713,7 +711,6 @@ public class StatementBlock extends LiveVariableAnalysis implements ParseInfo
 	}
 
 	public VariableSet validate(DMLProgram dmlProg, VariableSet ids, HashMap<String, ConstIdentifier> constVars, boolean conditional)
-		throws LanguageException, ParseException, IOException
 	{
 		_constVarsIn.putAll(constVars);
 		_statements = rewriteFunctionCallStatements(dmlProg, _statements);
@@ -782,7 +779,6 @@ public class StatementBlock extends LiveVariableAnalysis implements ParseInfo
 	
 	private void validateAssignmentStatement(Statement current, DMLProgram dmlProg, 
 		VariableSet ids, HashMap<String, ConstIdentifier> currConstVars, boolean conditional) 
-			throws LanguageException, IOException, ParseException 
 	{
 		AssignmentStatement as = (AssignmentStatement)current;
 		DataIdentifier target = as.getTarget();
@@ -899,7 +895,6 @@ public class StatementBlock extends LiveVariableAnalysis implements ParseInfo
 	
 	private void validateMultiAssignmentStatement(Statement current, DMLProgram dmlProg, 
 		VariableSet ids, HashMap<String, ConstIdentifier> currConstVars, boolean conditional) 
-			throws LanguageException, IOException 
 	{
 		MultiAssignmentStatement mas = (MultiAssignmentStatement) current;
 		ArrayList<DataIdentifier> targetList = mas.getTargetList();
@@ -956,7 +951,6 @@ public class StatementBlock extends LiveVariableAnalysis implements ParseInfo
 	}
 	
 	public void setStatementFormatType(OutputStatement s, boolean conditionalValidate)
-		throws LanguageException, ParseException
 	{
 		//case of specified format parameter
 		if (s.getExprParam(DataExpression.FORMAT_TYPE)!= null )
@@ -988,7 +982,6 @@ public class StatementBlock extends LiveVariableAnalysis implements ParseInfo
 	}
 
 	public void setStatementFormatType(AssignmentStatement s, boolean conditionalValidate)
-		throws LanguageException, ParseException
 	{
 
 		if (!(s.getSource() instanceof DataExpression))
@@ -1034,7 +1027,7 @@ public class StatementBlock extends LiveVariableAnalysis implements ParseInfo
 	 *
 	 */
 	@Override
-	public VariableSet initializeforwardLV(VariableSet activeIn) throws LanguageException {
+	public VariableSet initializeforwardLV(VariableSet activeIn) {
 
 		for (Statement s : _statements){
 			s.initializeforwardLV(activeIn);
@@ -1081,15 +1074,11 @@ public class StatementBlock extends LiveVariableAnalysis implements ParseInfo
 	}
 
 	@Override
-	public VariableSet initializebackwardLV(VariableSet loPassed)
-		throws LanguageException
-	{
+	public VariableSet initializebackwardLV(VariableSet loPassed) {
 		int numStatements = _statements.size();
 		VariableSet lo = new VariableSet(loPassed);
-		for (int i = numStatements-1; i>=0; i--){
+		for (int i = numStatements-1; i>=0; i--)
 			lo = _statements.get(i).initializebackwardLV(lo);
-		}
-
 		return new VariableSet(lo);
 	}
 
@@ -1102,8 +1091,7 @@ public class StatementBlock extends LiveVariableAnalysis implements ParseInfo
 	}
 
 	@Override
-	public VariableSet analyze(VariableSet loPassed)
-		throws LanguageException {
+	public VariableSet analyze(VariableSet loPassed) {
 		VariableSet candidateLO = new VariableSet();
 		candidateLO.addVariables(loPassed);
 		//candidateLO.addVariables(_gen);
@@ -1133,14 +1121,11 @@ public class StatementBlock extends LiveVariableAnalysis implements ParseInfo
 	///////////////////////////////////////////////////////////////
 	// validate error handling (consistent for all expressions)
 
-	public void raiseValidateError( String msg, boolean conditional )
-		throws LanguageException
-	{
+	public void raiseValidateError( String msg, boolean conditional ) {
 		raiseValidateError(msg, conditional, null);
 	}
 
 	public void raiseValidateError( String msg, boolean conditional, String errorCode )
-		throws LanguageException
 	{
 		if( conditional )  //warning if conditional
 		{
@@ -1218,7 +1203,7 @@ public class StatementBlock extends LiveVariableAnalysis implements ParseInfo
 	// materialized hops recompilation / updateinplace flags
 	////
 
-	public boolean updateRecompilationFlag() throws HopsException {
+	public boolean updateRecompilationFlag() {
 		return (_requiresRecompile =
 			ConfigurationManager.isDynamicRecompilation()
 			&& Recompiler.requiresRecompilation(getHops()));

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/StringIdentifier.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/StringIdentifier.java b/src/main/java/org/apache/sysml/parser/StringIdentifier.java
index aaaade27..f4aaeed 100644
--- a/src/main/java/org/apache/sysml/parser/StringIdentifier.java
+++ b/src/main/java/org/apache/sysml/parser/StringIdentifier.java
@@ -26,7 +26,7 @@ public class StringIdentifier extends ConstIdentifier
 	private String _val;
 
 	@Override
-	public Expression rewriteExpression(String prefix) throws LanguageException {
+	public Expression rewriteExpression(String prefix) {
 		return this;
 	}
 
@@ -69,9 +69,7 @@ public class StringIdentifier extends ConstIdentifier
 	}
 	
 	@Override
-	public long getLongValue() 
-		throws LanguageException 
-	{
+	public long getLongValue() {
 		throw new LanguageException("Unsupported string-to-long conversion.");
 	}
 }

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/WhileStatement.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/WhileStatement.java b/src/main/java/org/apache/sysml/parser/WhileStatement.java
index d70b1ab..f10dce4 100644
--- a/src/main/java/org/apache/sysml/parser/WhileStatement.java
+++ b/src/main/java/org/apache/sysml/parser/WhileStatement.java
@@ -29,7 +29,7 @@ public class WhileStatement extends Statement
 	private ArrayList<StatementBlock> _body;
 	
 	@Override
-	public Statement rewriteStatement(String prefix) throws LanguageException{
+	public Statement rewriteStatement(String prefix) {
 		LOG.error(this.printErrorLocation() + "should not call rewriteStatement for WhileStatement");
 		throw new LanguageException(this.printErrorLocation() + "should not call rewriteStatement for WhileStatement");
 	}
@@ -82,14 +82,12 @@ public class WhileStatement extends Statement
 	}
 
 	@Override
-	public void initializeforwardLV(VariableSet activeIn) throws LanguageException{
-		LOG.error(this.printErrorLocation() + "should never call initializeforwardLV for WhileStatement");
+	public void initializeforwardLV(VariableSet activeIn) {
 		throw new LanguageException(this.printErrorLocation() + "should never call initializeforwardLV for WhileStatement");
 	}
 	
 	@Override
-	public VariableSet initializebackwardLV(VariableSet lo) throws LanguageException{
-		LOG.error(this.printErrorLocation() + "should never call initializeforwardLV for WhileStatement");
+	public VariableSet initializebackwardLV(VariableSet lo) {
 		throw new LanguageException(this.printErrorLocation() + "should never call initializeforwardLV for WhileStatement");
 	}
 	

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/WhileStatementBlock.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/WhileStatementBlock.java b/src/main/java/org/apache/sysml/parser/WhileStatementBlock.java
index d34353a..58f1c9f 100644
--- a/src/main/java/org/apache/sysml/parser/WhileStatementBlock.java
+++ b/src/main/java/org/apache/sysml/parser/WhileStatementBlock.java
@@ -19,13 +19,11 @@
 
 package org.apache.sysml.parser;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 
 import org.apache.sysml.conf.ConfigurationManager;
 import org.apache.sysml.hops.Hop;
-import org.apache.sysml.hops.HopsException;
 import org.apache.sysml.hops.recompile.Recompiler;
 import org.apache.sysml.lops.Lop;
 
@@ -39,8 +37,7 @@ public class WhileStatementBlock extends StatementBlock
 	
 	@Override
 	public VariableSet validate(DMLProgram dmlProg, VariableSet ids, HashMap<String,ConstIdentifier> constVars, boolean conditional) 
-		throws LanguageException, ParseException, IOException 
-	{	
+	{
 		if (_statements.size() > 1){
 			raiseValidateError("WhileStatementBlock should have only 1 statement (while statement)", conditional);
 		}
@@ -165,7 +162,7 @@ public class WhileStatementBlock extends StatementBlock
 	}
 
 	@Override
-	public VariableSet initializeforwardLV(VariableSet activeInPassed) throws LanguageException {
+	public VariableSet initializeforwardLV(VariableSet activeInPassed) {
 		
 		WhileStatement wstmt = (WhileStatement)_statements.get(0);
 		if (_statements.size() > 1){
@@ -224,7 +221,7 @@ public class WhileStatementBlock extends StatementBlock
 	}
 
 	@Override
-	public VariableSet initializebackwardLV(VariableSet loPassed) throws LanguageException{
+	public VariableSet initializebackwardLV(VariableSet loPassed) {
 		
 		WhileStatement wstmt = (WhileStatement)_statements.get(0);
 			
@@ -260,7 +257,7 @@ public class WhileStatementBlock extends StatementBlock
 	}
 	
 	@Override
-	public VariableSet analyze(VariableSet loPassed) throws LanguageException{
+	public VariableSet analyze(VariableSet loPassed) {
 		VariableSet predVars = new VariableSet();
 		predVars.addVariables(((WhileStatement)_statements.get(0)).getConditionalPredicate().variablesRead());
 		predVars.addVariables(((WhileStatement)_statements.get(0)).getConditionalPredicate().variablesUpdated());
@@ -313,7 +310,7 @@ public class WhileStatementBlock extends StatementBlock
 	// materialized hops recompilation flags
 	////
 	
-	public boolean updatePredicateRecompilationFlag() throws HopsException {
+	public boolean updatePredicateRecompilationFlag() {
 		return (_requiresPredicateRecompile = 
 			ConfigurationManager.isDynamicRecompilation() 
 			&& Recompiler.requiresRecompilation(getPredicateHops()));

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/dml/DMLParserWrapper.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/dml/DMLParserWrapper.java b/src/main/java/org/apache/sysml/parser/dml/DMLParserWrapper.java
index 8714968..b44d448 100644
--- a/src/main/java/org/apache/sysml/parser/dml/DMLParserWrapper.java
+++ b/src/main/java/org/apache/sysml/parser/dml/DMLParserWrapper.java
@@ -81,10 +81,9 @@ public class DMLParserWrapper extends ParserWrapper
 	 * @param dmlScript script file contents
 	 * @param argVals script arguments
 	 * @return dml program, or null if error
-	 * @throws ParseException if ParseException occurs
 	 */
 	@Override
-	public DMLProgram parse(String fileName, String dmlScript, Map<String,String> argVals) throws ParseException {
+	public DMLProgram parse(String fileName, String dmlScript, Map<String,String> argVals) {
 		DMLProgram prog = doParse(fileName, dmlScript, null, argVals);
 		
 		return prog;
@@ -97,9 +96,8 @@ public class DMLParserWrapper extends ParserWrapper
 	 * @param sourceNamespace namespace from source statement
 	 * @param argVals script arguments
 	 * @return dml program, or null if at least one error
-	 * @throws ParseException if ParseException occurs
 	 */
-	public DMLProgram doParse(String fileName, String dmlScript, String sourceNamespace, Map<String,String> argVals) throws ParseException {
+	public DMLProgram doParse(String fileName, String dmlScript, String sourceNamespace, Map<String,String> argVals) {
 		DMLProgram dmlPgm = null;
 		
 		ANTLRInputStream in;

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/parser/pydml/PyDMLParserWrapper.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/pydml/PyDMLParserWrapper.java b/src/main/java/org/apache/sysml/parser/pydml/PyDMLParserWrapper.java
index 8a81b46..7d96577 100644
--- a/src/main/java/org/apache/sysml/parser/pydml/PyDMLParserWrapper.java
+++ b/src/main/java/org/apache/sysml/parser/pydml/PyDMLParserWrapper.java
@@ -64,10 +64,9 @@ public class PyDMLParserWrapper extends ParserWrapper
 	 * @param dmlScript script file contents
 	 * @param argVals script arguments
 	 * @return dml program, or null if error
-	 * @throws ParseException if ParseException occurs
 	 */
 	@Override
-	public DMLProgram parse(String fileName, String dmlScript, Map<String,String> argVals) throws ParseException {
+	public DMLProgram parse(String fileName, String dmlScript, Map<String,String> argVals) {
 		DMLProgram prog = doParse(fileName, dmlScript, null, argVals);
 		
 		return prog;
@@ -80,9 +79,8 @@ public class PyDMLParserWrapper extends ParserWrapper
 	 * @param sourceNamespace namespace from source statement
 	 * @param argVals script arguments
 	 * @return dml program, or null if at least one error
-	 * @throws ParseException if ParseException occurs
 	 */
-	public DMLProgram doParse(String fileName, String dmlScript, String sourceNamespace, Map<String,String> argVals) throws ParseException {
+	public DMLProgram doParse(String fileName, String dmlScript, String sourceNamespace, Map<String,String> argVals) {
 		DMLProgram dmlPgm = null;
 		
 		ANTLRInputStream in;

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/runtime/controlprogram/ParForProgramBlock.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/ParForProgramBlock.java b/src/main/java/org/apache/sysml/runtime/controlprogram/ParForProgramBlock.java
index 7348266..fdc4732 100644
--- a/src/main/java/org/apache/sysml/runtime/controlprogram/ParForProgramBlock.java
+++ b/src/main/java/org/apache/sysml/runtime/controlprogram/ParForProgramBlock.java
@@ -54,7 +54,6 @@ import org.apache.sysml.parser.ParForStatementBlock.ResultVar;
 import org.apache.sysml.parser.StatementBlock;
 import org.apache.sysml.parser.VariableSet;
 import org.apache.sysml.runtime.DMLRuntimeException;
-import org.apache.sysml.runtime.controlprogram.caching.CacheException;
 import org.apache.sysml.runtime.controlprogram.caching.MatrixObject;
 import org.apache.sysml.runtime.controlprogram.context.ExecutionContext;
 import org.apache.sysml.runtime.controlprogram.context.SparkExecutionContext;
@@ -1301,7 +1300,6 @@ public class ParForProgramBlock extends ForProgramBlock
 	}
 
 	private void exportMatricesToHDFS(ExecutionContext ec, String... blacklistNames) 
-		throws CacheException 
 	{
 		ParForStatementBlock sb = (ParForStatementBlock)getStatementBlock();
 		Set<String> blacklist = UtilFunctions.asSet(blacklistNames);

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/runtime/controlprogram/caching/CacheException.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/caching/CacheException.java b/src/main/java/org/apache/sysml/runtime/controlprogram/caching/CacheException.java
deleted file mode 100644
index 64a3925..0000000
--- a/src/main/java/org/apache/sysml/runtime/controlprogram/caching/CacheException.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.sysml.runtime.controlprogram.caching;
-
-import org.apache.sysml.runtime.DMLRuntimeException;
-
-public class CacheException extends DMLRuntimeException
-{
-
-
-	private static final long serialVersionUID = 1L;
-
-	public CacheException ()
-	{
-		super ("Cache Exception");
-	}
-
-	public CacheException (String message)
-	{
-		super (message);
-	}
-
-	public CacheException (Exception cause)
-	{
-		super (cause);
-	}
-
-	public CacheException (String message, Exception cause)
-	{
-		super (message, cause);
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/runtime/controlprogram/caching/CacheableData.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/caching/CacheableData.java b/src/main/java/org/apache/sysml/runtime/controlprogram/caching/CacheableData.java
index cdc0f03..b3791e1 100644
--- a/src/main/java/org/apache/sysml/runtime/controlprogram/caching/CacheableData.java
+++ b/src/main/java/org/apache/sysml/runtime/controlprogram/caching/CacheableData.java
@@ -308,7 +308,7 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 	}
 
 	public abstract void refreshMetaData() 
-		throws CacheException;
+		throws DMLRuntimeException;
 
 	public RDDObject getRDDHandle() {
 		return _rddHandle;
@@ -369,17 +369,16 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 	 * Out-Status: READ(+1).
 	 * 
 	 * @return cacheable data
-	 * @throws CacheException if CacheException occurs
+	 * @throws DMLRuntimeException if CacheException occurs
 	 */
 	public synchronized T acquireRead()
-		throws CacheException
 	{
 		if( LOG.isTraceEnabled() )
 			LOG.trace("Acquire read "+hashCode());
 		long t0 = DMLScript.STATISTICS ? System.nanoTime() : 0;
 		
 		if ( !isAvailableToRead() )
-			throw new CacheException ("MatrixObject not available to read.");
+			throw new DMLRuntimeException("MatrixObject not available to read.");
 		
 		//get object from cache
 		if( _data == null )
@@ -391,7 +390,7 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
             GPUObject gObj = kv.getValue();
             if (gObj != null && copiedFromGPU && gObj.isDirty()) {
                 LOG.error("Inconsistent internal state - A copy of this CacheableData was dirty on more than 1 GPU");
-                throw new CacheException("Internal Error : Inconsistent internal state, A copy of this CacheableData was dirty on more than 1 GPU");
+                throw new DMLRuntimeException("Internal Error : Inconsistent internal state, A copy of this CacheableData was dirty on more than 1 GPU");
             } else if (gObj != null){
                 copiedFromGPU = gObj.acquireHostRead(null);
                 if( _data == null )
@@ -412,7 +411,7 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 				{
 					//check filename
 					if( _hdfsFileName == null )
-						throw new CacheException("Cannot read matrix for empty filename.");
+						throw new DMLRuntimeException("Cannot read matrix for empty filename.");
 					
 					//read cacheable data from hdfs
 					_data = readBlobFromHDFS( _hdfsFileName );
@@ -434,7 +433,7 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 				setDirty(false);
 			}
 			catch (IOException e) {
-				throw new CacheException("Reading of " + _hdfsFileName + " ("+hashCode()+") failed.", e);
+				throw new DMLRuntimeException("Reading of " + _hdfsFileName + " ("+hashCode()+") failed.", e);
 			}
 			
 			_isAcquireFromEmpty = true;
@@ -446,7 +445,7 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 		}
 		
 		//cache status maintenance
-		acquire( false, _data==null );	
+		acquire( false, _data==null );
 		updateStatusPinned(true);
 		
 		if( DMLScript.STATISTICS ){
@@ -466,17 +465,16 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 	 * Out-Status: MODIFY.
 	 * 
 	 * @return cacheable data
-	 * @throws CacheException if CacheException occurs
+	 * @throws DMLRuntimeException if CacheException occurs
 	 */
 	public synchronized T acquireModify() 
-		throws CacheException
 	{
 		if( LOG.isTraceEnabled() )
 			LOG.trace("Acquire modify "+hashCode());
 		long t0 = DMLScript.STATISTICS ? System.nanoTime() : 0;
 		
 		if ( !isAvailableToModify() )
-			throw new CacheException("MatrixObject not available to modify.");
+			throw new DMLRuntimeException("MatrixObject not available to modify.");
 		
 		//get object from cache
 		if( _data == null )
@@ -487,16 +485,14 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 		{
 			//check filename
 			if( _hdfsFileName == null )
-				throw new CacheException("Cannot read matrix for empty filename.");
+				throw new DMLRuntimeException("Cannot read matrix for empty filename.");
 			
 			//load data
-			try
-			{
+			try {
 				_data = readBlobFromHDFS( _hdfsFileName );
 			}
-			catch (IOException e)
-			{
-				throw new CacheException("Reading of " + _hdfsFileName + " ("+hashCode()+") failed.", e);
+			catch (IOException e) {
+				throw new DMLRuntimeException("Reading of " + _hdfsFileName + " ("+hashCode()+") failed.", e);
 			}
 		}
 
@@ -514,7 +510,7 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 		return _data;
 	}
 	
-	public T acquireModify(T newData) throws DMLRuntimeException {
+	public T acquireModify(T newData) {
 		return acquireModify(newData, null);
 	}
 	
@@ -532,14 +528,13 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 	 * @throws DMLRuntimeException if error occurs
 	 */
 	public synchronized T acquireModify(T newData, String opcode)
-		throws DMLRuntimeException
 	{
 		if( LOG.isTraceEnabled() )
 			LOG.trace("Acquire modify newdata "+hashCode());
 		long t0 = DMLScript.STATISTICS ? System.nanoTime() : 0;
 		
 		if (! isAvailableToModify ())
-			throw new CacheException ("CacheableData not available to modify.");
+			throw new DMLRuntimeException("CacheableData not available to modify.");
 		
 		//clear old data
 		clearData();
@@ -552,7 +547,7 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 		
 		//set references to new data
 		if (newData == null)
-			throw new CacheException("acquireModify with empty cache block.");
+			throw new DMLRuntimeException("acquireModify with empty cache block.");
 		_data = newData;
 		updateStatusPinned(true);
 		
@@ -573,7 +568,7 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 		return _data;
 	}
 	
-	public void release() throws CacheException {
+	public void release() throws DMLRuntimeException {
 		release(null);
 	}
 	
@@ -587,10 +582,9 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 	 * In-Status:  READ, MODIFY;
 	 * Out-Status: READ(-1), EVICTABLE, EMPTY.
 	 * 
-	 * @throws CacheException if CacheException occurs
+	 * @throws DMLRuntimeException if CacheException occurs
 	 */
 	public synchronized void release(String opcode) 
-		throws CacheException
 	{
 		if( LOG.isTraceEnabled() )
 			LOG.trace("Release "+hashCode());
@@ -633,14 +627,14 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 					}
 				}
 				catch (Exception e) {
-					throw new CacheException("Eviction to local path " + filePath + " ("+hashCode()+") failed.", e);
+					throw new DMLRuntimeException("Eviction to local path " + filePath + " ("+hashCode()+") failed.", e);
 				}
 				_requiresLocalWrite = false;
 			}
 			
 			//create cache
 			createCache();
-			_data = null;			
+			_data = null;
 		}
 		else if( LOG.isTraceEnabled() ){
 			LOG.trace("Var "+hashCode()+" not subject to caching, state="+getStatusAsString());
@@ -663,7 +657,6 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 	 * @throws DMLRuntimeException if error occurs
 	 */
 	public synchronized void clearData() 
-		throws DMLRuntimeException
 	{
 		if( LOG.isTraceEnabled() )
 			LOG.trace("Clear data "+hashCode());
@@ -672,7 +665,7 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 		if( !isCleanupEnabled() ) 
 			return; // do nothing
 		if( !isAvailableToModify() )
-			throw new CacheException ("CacheableData (" + getDebugName() + ") not available to "
+			throw new DMLRuntimeException("CacheableData (" + getDebugName() + ") not available to "
 					+ "modify. Status = " + getStatusAsString() + ".");
 		
 		// clear existing WB / FS representation (but prevent unnecessary probes)
@@ -699,7 +692,7 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 		setEmpty();
 	}
 
-	public synchronized void exportData() throws CacheException {
+	public synchronized void exportData() {
 		exportData( -1 );
 	}
 	
@@ -710,30 +703,22 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 	 * Out-Status: EMPTY, EVICTABLE, EVICTED, READ.
 	 * 
 	 * @param replication ?
-	 * @throws CacheException if CacheException occurs
+	 * @throws DMLRuntimeException if CacheException occurs
 	 */
-	public synchronized void exportData( int replication ) 
-		throws CacheException 
-	{
+	public synchronized void exportData( int replication ) {
 		exportData(_hdfsFileName, null, replication, null);
 		_hdfsFileExists = true;
 	}
 
-	public synchronized void exportData(String fName, String outputFormat)
-		throws CacheException
-	{
+	public synchronized void exportData(String fName, String outputFormat) {
 		exportData(fName, outputFormat, -1, null);
 	}
 
-	public synchronized void exportData(String fName, String outputFormat, FileFormatProperties formatProperties)
-		throws CacheException
-	{
+	public synchronized void exportData(String fName, String outputFormat, FileFormatProperties formatProperties) {
 		exportData(fName, outputFormat, -1, formatProperties);
 	}
 	
-	public synchronized void exportData (String fName, String outputFormat, int replication, FileFormatProperties formatProperties)
-			throws CacheException
-	{
+	public synchronized void exportData (String fName, String outputFormat, int replication, FileFormatProperties formatProperties) {
 		exportData(fName, outputFormat, replication, formatProperties, null);
 	}
 	
@@ -753,36 +738,33 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 	 * @param replication ?
 	 * @param formatProperties file format properties
 	 * @param opcode instruction opcode if available
-	 * @throws CacheException if CacheException occurs
+	 * @throws DMLRuntimeException if CacheException occurs
 	 */
-	public synchronized void exportData (String fName, String outputFormat, int replication, FileFormatProperties formatProperties, String opcode)
-		throws CacheException
-	{
+	public synchronized void exportData (String fName, String outputFormat, int replication, FileFormatProperties formatProperties, String opcode) {
 		if( LOG.isTraceEnabled() )
 			LOG.trace("Export data "+hashCode()+" "+fName);
 		long t0 = DMLScript.STATISTICS ? System.nanoTime() : 0;
 		
 		//prevent concurrent modifications
 		if ( !isAvailableToRead() )
-			throw new CacheException ("MatrixObject not available to read.");
+			throw new DMLRuntimeException("MatrixObject not available to read.");
 
 		LOG.trace("Exporting " + this.getDebugName() + " to " + fName + " in format " + outputFormat);
 		
 		//TODO remove
-        boolean copiedFromGPU = false;
-        for (Map.Entry<GPUContext, GPUObject> kv : _gpuObjects.entrySet()) {
-            GPUObject gObj = kv.getValue();
-            if (gObj != null && copiedFromGPU && gObj.isDirty()) {
-                LOG.error("Inconsistent internal state - A copy of this CacheableData was dirty on more than 1 GPU");
-                throw new CacheException("Internal Error : Inconsistent internal state, A copy of this CacheableData was dirty on more than 1 GPU");
-            } else if (gObj != null){
-                copiedFromGPU = gObj.acquireHostRead(null);
-                if( _data == null )
-                    getCache();
-            }
-        }
+		boolean copiedFromGPU = false;
+		for (Map.Entry<GPUContext, GPUObject> kv : _gpuObjects.entrySet()) {
+			GPUObject gObj = kv.getValue();
+			if (gObj != null && copiedFromGPU && gObj.isDirty()) {
+				throw new DMLRuntimeException("Internal Error : Inconsistent internal state, A copy of this CacheableData was dirty on more than 1 GPU");
+			} else if (gObj != null){
+				copiedFromGPU = gObj.acquireHostRead(null);
+				if( _data == null )
+					getCache();
+			}
+		}
 		
-        //check for persistent or transient writes
+		//check for persistent or transient writes
 		boolean pWrite = !fName.equals(_hdfsFileName);
 		if( !pWrite )
 			setHDFSFileExists(true);
@@ -792,14 +774,14 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 			new Path(_hdfsFileName), new Path(fName));
 		
 		//actual export (note: no direct transfer of local copy in order to ensure blocking (and hence, parallelism))
-		if(  isDirty() || !eqScheme ||
-		    (pWrite && !isEqualOutputFormat(outputFormat)) ) 
-		{		  
+		if( isDirty() || !eqScheme ||
+			(pWrite && !isEqualOutputFormat(outputFormat)) ) 
+		{
 			// CASE 1: dirty in-mem matrix or pWrite w/ different format (write matrix to fname; load into memory if evicted)
-			// a) get the matrix		
+			// a) get the matrix
 			if( isEmpty(true) )
 			{
-			    //read data from HDFS if required (never read before), this applies only to pWrite w/ different output formats
+				//read data from HDFS if required (never read before), this applies only to pWrite w/ different output formats
 				//note: for large rdd outputs, we compile dedicated writespinstructions (no need to handle this here) 
 				try
 				{
@@ -811,7 +793,7 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 				}
 				catch (IOException e)
 				{
-				    throw new CacheException("Reading of " + _hdfsFileName + " ("+hashCode()+") failed.", e);
+				    throw new DMLRuntimeException("Reading of " + _hdfsFileName + " ("+hashCode()+") failed.", e);
 				}
 			}
 			//get object from cache
@@ -820,19 +802,16 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 			acquire( false, _data==null ); //incl. read matrix if evicted	
 			
 			// b) write the matrix 
-			try
-			{
+			try {
 				writeMetaData( fName, outputFormat, formatProperties );
 				writeBlobToHDFS( fName, outputFormat, replication, formatProperties );
 				if ( !pWrite )
 					setDirty(false);
 			}
-			catch (Exception e)
-			{
-				throw new CacheException ("Export to " + fName + " failed.", e);
+			catch (Exception e) {
+				throw new DMLRuntimeException("Export to " + fName + " failed.", e);
 			}
-			finally
-			{
+			finally {
 				release(opcode);
 			}
 		}
@@ -850,7 +829,7 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 				writeMetaData( fName, outputFormat, formatProperties );
 			}
 			catch (Exception e) {
-				throw new CacheException ("Export to " + fName + " failed.", e);
+				throw new DMLRuntimeException("Export to " + fName + " failed.", e);
 			}
 		}
 		else if( getRDDHandle()!=null && getRDDHandle().isPending()
@@ -868,7 +847,7 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 				getRDDHandle().setPending(false);
 			}
 			catch (Exception e) {
-				throw new CacheException ("Export to " + fName + " failed.", e);
+				throw new DMLRuntimeException("Export to " + fName + " failed.", e);
 			}
 		}
 		else 
@@ -902,11 +881,9 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 	 * Low-level cache I/O method that physically restores the data blob to
 	 * main memory. Must be defined by a subclass, never called by users.
 	 *
-	 * @throws CacheException if CacheException occurs
+	 * @throws DMLRuntimeException if CacheException occurs
 	 */
-	protected void restoreBlobIntoMemory() 
-		throws CacheException
-	{
+	protected void restoreBlobIntoMemory() {
 		String cacheFilePathAndName = getCacheFilePathAndName();
 		long begin = LOG.isTraceEnabled() ? System.currentTimeMillis() : 0;
 		
@@ -915,22 +892,22 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 						(_hdfsFileName == null ? "null" : _hdfsFileName) + ", Restore from path: " + cacheFilePathAndName);
 				
 		if (_data != null)
-			throw new CacheException (cacheFilePathAndName + " : Cannot restore on top of existing in-memory data.");
+			throw new DMLRuntimeException(cacheFilePathAndName + " : Cannot restore on top of existing in-memory data.");
 
 		try {
 			_data = readBlobFromCache(cacheFilePathAndName);
 		}
 		catch (IOException e) {
-			throw new CacheException (cacheFilePathAndName + " : Restore failed.", e);	
+			throw new DMLRuntimeException(cacheFilePathAndName + " : Restore failed.", e);	
 		}
 		
 		//check for success
-	    if (_data == null)
-			throw new CacheException (cacheFilePathAndName + " : Restore failed.");
-	    
-	    if( LOG.isTraceEnabled() )
-	    	LOG.trace("Restoring matrix - COMPLETED ... " + (System.currentTimeMillis()-begin) + " msec.");
-	}		
+		if (_data == null)
+			throw new DMLRuntimeException (cacheFilePathAndName + " : Restore failed.");
+		
+		if( LOG.isTraceEnabled() )
+			LOG.trace("Restoring matrix - COMPLETED ... " + (System.currentTimeMillis()-begin) + " msec.");
+	}
 
 	protected abstract T readBlobFromCache(String fname)
 		throws IOException;
@@ -989,22 +966,22 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 		throws IOException;
 
 	protected abstract void writeBlobToHDFS(String fname, String ofmt, int rep, FileFormatProperties fprop) 
-		throws IOException, DMLRuntimeException;
+		throws IOException;
 
 	protected abstract void writeBlobFromRDDtoHDFS(RDDObject rdd, String fname, String ofmt) 
-		throws IOException, DMLRuntimeException;
+		throws IOException;
 
 	protected void writeMetaData (String filePathAndName, String outputFormat, FileFormatProperties formatProperties)
-		throws DMLRuntimeException, IOException
+		throws IOException
 	{		
 		MetaDataFormat iimd = (MetaDataFormat) _metaData;
 	
 		if (iimd == null)
 			throw new DMLRuntimeException("Unexpected error while writing mtd file (" + filePathAndName + ") -- metadata is null.");
 			
-		// Write the matrix to HDFS in requested format			
+		// Write the matrix to HDFS in requested format
 		OutputInfo oinfo = (outputFormat != null ? OutputInfo.stringToOutputInfo (outputFormat) 
-                : InputInfo.getMatchingOutputInfo (iimd.getInputInfo ()));
+			: InputInfo.getMatchingOutputInfo (iimd.getInputInfo ()));
 		
 		if ( oinfo != OutputInfo.MatrixMarketOutputInfo ) {
 			// Get the dimension information from the metadata stored within MatrixObject
@@ -1020,7 +997,7 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 			
 			//write the actual meta data file
 			MapReduceTool.writeMetaDataFile (filePathAndName + ".mtd", valueType, 
-					getSchema(), dataType, mc, oinfo, formatProperties);
+				getSchema(), dataType, mc, oinfo, formatProperties);
 		}
 	}
 
@@ -1079,11 +1056,8 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 	 * @param isModify : <code>true</code> for the exclusive "modify" lock,
 	 *     <code>false</code> for a shared "read" lock.
 	 * @param restore true if restore
-	 * @throws CacheException if CacheException occurs
 	 */
-	protected void acquire (boolean isModify, boolean restore) 
-		throws CacheException
-	{
+	protected void acquire (boolean isModify, boolean restore) {
 		switch ( _cacheStatus )
 		{
 			case CACHED:
@@ -1098,12 +1072,12 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 				break;
 			case READ:
 				if (isModify)
-					throw new CacheException ("READ-MODIFY not allowed.");
+					throw new DMLRuntimeException("READ-MODIFY not allowed.");
 				else
 					addOneRead();
 				break;
 			case MODIFY:
-				throw new CacheException ("MODIFY-MODIFY not allowed.");
+				throw new DMLRuntimeException("MODIFY-MODIFY not allowed.");
 		}
 
 		if( LOG.isTraceEnabled() )
@@ -1122,17 +1096,15 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 	 * the lock count.
 	 * 
 	 * @param cacheNoWrite ?
-	 * @throws CacheException if CacheException occurs
 	 */
 	protected void release(boolean cacheNoWrite)
-		throws CacheException
 	{
 		switch ( _cacheStatus )
 		{
 			case EMPTY:
 			case CACHED:
-			case CACHED_NOWRITE:	
-				throw new CacheException("Redundant release.");
+			case CACHED_NOWRITE:
+				throw new DMLRuntimeException("Redundant release.");
 			case READ:
 				removeOneRead( isBlobPresent(), cacheNoWrite );
 				break;
@@ -1141,7 +1113,7 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 					setCached();
 				else
 					setEmpty();
-			    break;
+				break;
 		}
 		
 		if( LOG.isTraceEnabled() )
@@ -1160,7 +1132,7 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 	public String getStatusAsString() {
 		return _cacheStatus.toString();
 	}
-    
+
 	public boolean isCached(boolean inclCachedNoWrite) {
 		if( inclCachedNoWrite )
 			return (_cacheStatus == CacheStatus.CACHED || _cacheStatus == CacheStatus.CACHED_NOWRITE);
@@ -1371,9 +1343,7 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 		_activeFlag = true;
 	}
 
-	public synchronized boolean moveData(String fName, String outputFormat) 
-		throws CacheException 
-	{	
+	public synchronized boolean moveData(String fName, String outputFormat) {
 		boolean ret = false;
 		
 		try
@@ -1396,11 +1366,10 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
 				MapReduceTool.renameFileOnHDFS( _hdfsFileName, fName );
 				writeMetaData( fName, outputFormat, null );
 				ret = true;
-			}				
+			}
 		}
-		catch (Exception e)
-		{
-			throw new CacheException ("Move to " + fName + " failed.", e);
+		catch (Exception e) {
+			throw new DMLRuntimeException("Move to " + fName + " failed.", e);
 		}
 		
 		return ret;

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/runtime/controlprogram/caching/FrameObject.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/caching/FrameObject.java b/src/main/java/org/apache/sysml/runtime/controlprogram/caching/FrameObject.java
index 28510cd..a37ac69 100644
--- a/src/main/java/org/apache/sysml/runtime/controlprogram/caching/FrameObject.java
+++ b/src/main/java/org/apache/sysml/runtime/controlprogram/caching/FrameObject.java
@@ -133,10 +133,10 @@ public class FrameObject extends CacheableData<FrameBlock>
 		
 	@Override
 	public void refreshMetaData() 
-		throws CacheException
+		throws DMLRuntimeException
 	{
 		if ( _data == null || _metaData ==null ) //refresh only for existing data
-			throw new CacheException("Cannot refresh meta data because there is no data or meta data. "); 
+			throw new DMLRuntimeException("Cannot refresh meta data because there is no data or meta data. "); 
 
 		//update matrix characteristics
 		MatrixCharacteristics mc = _metaData.getMatrixCharacteristics();

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/runtime/controlprogram/caching/MatrixObject.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/caching/MatrixObject.java b/src/main/java/org/apache/sysml/runtime/controlprogram/caching/MatrixObject.java
index 8bf8efd..6aefbb3 100644
--- a/src/main/java/org/apache/sysml/runtime/controlprogram/caching/MatrixObject.java
+++ b/src/main/java/org/apache/sysml/runtime/controlprogram/caching/MatrixObject.java
@@ -140,15 +140,11 @@ public class MatrixObject extends CacheableData<MatrixBlock>
 
 	/**
 	 * Make the matrix metadata consistent with the in-memory matrix data
-	 * 
-	 * @throws CacheException if CacheException occurs
 	 */
 	@Override
-	public void refreshMetaData() 
-		throws CacheException
-	{
+	public void refreshMetaData() {
 		if ( _data == null || _metaData ==null ) //refresh only for existing data
-			throw new CacheException("Cannot refresh meta data because there is no data or meta data. "); 
+			throw new DMLRuntimeException("Cannot refresh meta data because there is no data or meta data. "); 
 			//we need to throw an exception, otherwise input/output format cannot be inferred
 		
 		MatrixCharacteristics mc = _metaData.getMatrixCharacteristics();
@@ -233,17 +229,17 @@ public class MatrixObject extends CacheableData<MatrixBlock>
 	 * 
 	 * @param pred index range
 	 * @return matrix block
-	 * @throws CacheException if CacheException occurs
+	 * @throws DMLRuntimeException if CacheException occurs
 	 */
 	public synchronized MatrixBlock readMatrixPartition( IndexRange pred ) 
-		throws CacheException
+		throws DMLRuntimeException
 	{
 		if( LOG.isTraceEnabled() )
 			LOG.trace("Acquire partition "+hashCode()+" "+pred);
 		long t0 = DMLScript.STATISTICS ? System.nanoTime() : 0;
 		
 		if ( !_partitioned )
-			throw new CacheException ("MatrixObject not available to indexed read.");
+			throw new DMLRuntimeException("MatrixObject not available to indexed read.");
 		
 		//return static partition of set from outside of the program
 		if( _partitionInMemory != null )
@@ -302,7 +298,7 @@ public class MatrixObject extends CacheableData<MatrixBlock>
 						cols = _partitionSize;
 						break;	
 					default:
-						throw new CacheException("Unsupported partition format: "+_partitionFormat);
+						throw new DMLRuntimeException("Unsupported partition format: "+_partitionFormat);
 				}
 				
 				
@@ -338,9 +334,8 @@ public class MatrixObject extends CacheableData<MatrixBlock>
 			//NOTE: currently no special treatment of non-existing partitions necessary 
 			//      because empty blocks are written anyway
 		}
-		catch(Exception ex)
-		{
-			throw new CacheException(ex);
+		catch(Exception ex) {
+			throw new DMLRuntimeException(ex);
 		}
 		
 		if( DMLScript.STATISTICS ){
@@ -352,10 +347,10 @@ public class MatrixObject extends CacheableData<MatrixBlock>
 	}
 
 	public String getPartitionFileName( IndexRange pred, int brlen, int bclen ) 
-		throws CacheException
+		throws DMLRuntimeException
 	{
 		if ( !_partitioned )
-			throw new CacheException ("MatrixObject not available to indexed read.");
+			throw new DMLRuntimeException("MatrixObject not available to indexed read.");
 		
 		StringBuilder sb = new StringBuilder();
 		sb.append(_hdfsFileName);
@@ -387,7 +382,7 @@ public class MatrixObject extends CacheableData<MatrixBlock>
 				sb.append((pred.colStart-1)/_partitionSize+1);
 				break;	
 			default:
-				throw new CacheException ("MatrixObject not available to indexed read.");
+				throw new DMLRuntimeException("MatrixObject not available to indexed read.");
 		}
 
 		return sb.toString();

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/ResultMergeLocalFile.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/ResultMergeLocalFile.java b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/ResultMergeLocalFile.java
index 0768328..b2bd267 100644
--- a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/ResultMergeLocalFile.java
+++ b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/ResultMergeLocalFile.java
@@ -42,7 +42,6 @@ import org.apache.hadoop.mapred.Reporter;
 import org.apache.hadoop.mapred.TextInputFormat;
 import org.apache.sysml.conf.ConfigurationManager;
 import org.apache.sysml.runtime.DMLRuntimeException;
-import org.apache.sysml.runtime.controlprogram.caching.CacheException;
 import org.apache.sysml.runtime.controlprogram.caching.MatrixObject;
 import org.apache.sysml.runtime.controlprogram.parfor.util.Cell;
 import org.apache.sysml.runtime.controlprogram.parfor.util.IDSequence;
@@ -976,7 +975,7 @@ public class ResultMergeLocalFile extends ResultMerge
 	}
 
 	private static void copyAllFiles( String fnameNew, ArrayList<MatrixObject> inMO ) 
-		throws CacheException, IOException
+		throws DMLRuntimeException, IOException
 	{
 		JobConf job = new JobConf(ConfigurationManager.getCachedJobConf());
 		Path path = new Path( fnameNew );

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptTreePlanChecker.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptTreePlanChecker.java b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptTreePlanChecker.java
index 28368c7..fc42996 100644
--- a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptTreePlanChecker.java
+++ b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptTreePlanChecker.java
@@ -50,7 +50,6 @@ public class OptTreePlanChecker
 {
 
 	public static void checkProgramCorrectness( ProgramBlock pb, StatementBlock sb, Set<String> fnStack ) 
-		throws HopsException, DMLRuntimeException
 	{
 		Program prog = pb.getProgram();
 		DMLProgram dprog = sb.getDMLProg();

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/ProgramRecompiler.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/ProgramRecompiler.java b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/ProgramRecompiler.java
index 3bb0c93..71295b4 100644
--- a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/ProgramRecompiler.java
+++ b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/ProgramRecompiler.java
@@ -19,7 +19,6 @@
 
 package org.apache.sysml.runtime.controlprogram.parfor.opt;
 
-import java.io.IOException;
 import java.util.ArrayList;
 
 import org.apache.sysml.conf.ConfigurationManager;
@@ -33,7 +32,6 @@ import org.apache.sysml.hops.codegen.SpoofCompiler.IntegrationType;
 import org.apache.sysml.hops.recompile.Recompiler;
 import org.apache.sysml.lops.Lop;
 import org.apache.sysml.lops.LopProperties;
-import org.apache.sysml.lops.LopsException;
 import org.apache.sysml.parser.DMLProgram;
 import org.apache.sysml.parser.DMLTranslator;
 import org.apache.sysml.parser.ForStatement;
@@ -60,7 +58,6 @@ import org.apache.sysml.runtime.instructions.cp.ScalarObject;
 public class ProgramRecompiler 
 {
 	public static ArrayList<ProgramBlock> generatePartitialRuntimeProgram(Program rtprog, ArrayList<StatementBlock> sbs) 
-		throws LopsException, DMLRuntimeException, IOException, HopsException
 	{
 		ArrayList<ProgramBlock> ret = new ArrayList<>();
 		DMLConfig config = ConfigurationManager.getDMLConfig();

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarObjectFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarObjectFactory.java b/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarObjectFactory.java
index ffad8ff..ba5fad0 100644
--- a/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarObjectFactory.java
+++ b/src/main/java/org/apache/sysml/runtime/instructions/cp/ScalarObjectFactory.java
@@ -19,7 +19,6 @@
 
 package org.apache.sysml.runtime.instructions.cp;
 
-import org.apache.sysml.hops.HopsException;
 import org.apache.sysml.hops.LiteralOp;
 import org.apache.sysml.parser.Expression.ValueType;
 import org.apache.sysml.runtime.util.UtilFunctions;
@@ -66,7 +65,7 @@ public abstract class ScalarObjectFactory
 		}
 	}
 	
-	public static ScalarObject createScalarObject(ValueType vt, LiteralOp lit) throws HopsException {
+	public static ScalarObject createScalarObject(ValueType vt, LiteralOp lit) {
 		switch( vt ) {
 			case DOUBLE:  return new DoubleObject(lit.getDoubleValue());
 			case INT:     return new IntObject(lit.getLongValue());

http://git-wip-us.apache.org/repos/asf/systemml/blob/215a1cc6/src/main/java/org/apache/sysml/runtime/instructions/cpfile/ParameterizedBuiltinCPFileInstruction.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/instructions/cpfile/ParameterizedBuiltinCPFileInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/cpfile/ParameterizedBuiltinCPFileInstruction.java
index 14eadeb..f656216 100644
--- a/src/main/java/org/apache/sysml/runtime/instructions/cpfile/ParameterizedBuiltinCPFileInstruction.java
+++ b/src/main/java/org/apache/sysml/runtime/instructions/cpfile/ParameterizedBuiltinCPFileInstruction.java
@@ -43,7 +43,6 @@ import org.apache.hadoop.mapred.Reporter;
 import org.apache.hadoop.mapred.TextInputFormat;
 import org.apache.sysml.conf.ConfigurationManager;
 import org.apache.sysml.runtime.DMLRuntimeException;
-import org.apache.sysml.runtime.controlprogram.caching.CacheException;
 import org.apache.sysml.runtime.controlprogram.caching.MatrixObject;
 import org.apache.sysml.runtime.controlprogram.context.ExecutionContext;
 import org.apache.sysml.runtime.controlprogram.parfor.util.Cell;
@@ -224,13 +223,8 @@ public class ParameterizedBuiltinCPFileInstruction extends ParameterizedBuiltinC
 			if( rows==0 || cols ==0 ){
 				rows = Math.max(rows, 1);
 				cols = Math.max(cols, 1);
-				try {
-					moNew.acquireModify(new MatrixBlock((int)rows, (int) cols, true));
-					moNew.release();
-				} 
-				catch (CacheException e) {
-					throw new DMLRuntimeException(e);
-				}
+				moNew.acquireModify(new MatrixBlock((int)rows, (int) cols, true));
+				moNew.release();
 			}
 			
 			//create deep copy of metadata obj