Feature/optimizedmatrix

I'm very confused even with how to go about writing the test because of the TypedPipe[R, Unit, V] conversions

[error] x A Matrix2 Propagation job should
[error] x system error
[error]   local step failed (FlowStepJob.java:208)
[error]   cascading.flow.planner.FlowStepJob.blockOnJob(FlowStepJob.java:208)
[error]   cascading.flow.planner.FlowStepJob.start(FlowStepJob.java:145)
[error]   cascading.flow.planner.FlowStepJob.call(FlowStepJob.java:120)
[error]   cascading.flow.planner.FlowStepJob.call(FlowStepJob.java:42)
[error]   java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
[error]   java.util.concurrent.FutureTask.run(FutureTask.java:138)
[error]   java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
[error]   java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
[error]   java.lang.Thread.run(Thread.java:662)
[error]   [TypedDelimited(List(co...][com.twitter.scalding.RichPipe.eachTo(RichPipe.scala:455)] operator Each failed executing operation (FunctionEachStage.java:107)
[error]   cascading.flow.stream.FunctionEachStage.receive(FunctionEachStage.java:107)
[error]   cascading.flow.stream.FunctionEachStage.receive(FunctionEachStage.java:39)
[error]   cascading.flow.stream.FunctionEachStage$1.collect(FunctionEachStage.java:80)
[error]   cascading.tuple.TupleEntryCollector.safeCollect(TupleEntryCollector.java:93)
[error]   cascading.tuple.TupleEntryCollector.add(TupleEntryCollector.java:86)
[error]   com.twitter.scalding.FlatMapFunction$$anonfun$operate$2.apply(Operations.scala:40)
[error]   com.twitter.scalding.FlatMapFunction$$anonfun$operate$2.apply(Operations.scala:38)
[error]   scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
[error]   scala.collection.immutable.List.foreach(List.scala:76)
[error]   com.twitter.scalding.FlatMapFunction.operate(Operations.scala:38)
[error]   cascading.flow.stream.FunctionEachStage.receive(FunctionEachStage.java:99)
[error]   cascading.flow.stream.FunctionEachStage.receive(FunctionEachStage.java:39)
[error]   cascading.flow.stream.SourceStage.map(SourceStage.java:102)
[error]   cascading.flow.stream.SourceStage.call(SourceStage.java:53)
[error]   cascading.flow.stream.SourceStage.call(SourceStage.java:38)
[error]   java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
[error]   java.util.concurrent.FutureTask.run(FutureTask.java:138)
[error]   java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
[error]   java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
[error]   java.lang.Thread.run(Thread.java:662)
[error]   Index: 2, Size: 2 (ArrayList.java:547)
[error]   java.util.ArrayList.RangeCheck(ArrayList.java:547)
[error]   java.util.ArrayList.get(ArrayList.java:322)
[error]   cascading.tuple.Tuple.getObject(Tuple.java:221)
[error]   cascading.tuple.Tuple.getDouble(Tuple.java:254)
[error]   com.twitter.scalding.TupleGetter$DoubleGetter$.get$mcD$sp(TupleGetter.scala:66)
[error]   com.twitter.scalding.TupleGetter$DoubleGetter$.get(TupleGetter.scala:66)
[error]   com.twitter.scalding.TupleGetter$DoubleGetter$.get(TupleGetter.scala:65)
[error]   com.twitter.scalding.GeneratedTupleConverters$$anon$3.apply(GeneratedConversions.scala:36)
[error]   com.twitter.scalding.GeneratedTupleConverters$$anon$3.apply(GeneratedConversions.scala:31)
[error]   com.twitter.scalding.typed.TypedPipe$$anonfun$from$1.apply(TypedPipe.scala:37)
[error]   com.twitter.scalding.typed.TypedPipe$$anonfun$from$1.apply(TypedPipe.scala:37)
[error]   com.twitter.scalding.FlatMapFunction.operate(Operations.scala:38)
[error]   cascading.flow.stream.FunctionEachStage.receive(FunctionEachStage.java:99)
[error]   cascading.flow.stream.FunctionEachStage.receive(FunctionEachStage.java:39)
[error]   cascading.flow.stream.FunctionEachStage$1.collect(FunctionEachStage.java:80)
[error]   cascading.tuple.TupleEntryCollector.safeCollect(TupleEntryCollector.java:93)
[error]   cascading.tuple.TupleEntryCollector.add(TupleEntryCollector.java:86)
[error]   com.twitter.scalding.FlatMapFunction$$anonfun$operate$2.apply(Operations.scala:40)
[error]   com.twitter.scalding.FlatMapFunction$$anonfun$operate$2.apply(Operations.scala:38)
[error]   scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
[error]   scala.collection.immutable.List.foreach(List.scala:76)
[error]   com.twitter.scalding.FlatMapFunction.operate(Operations.scala:38)
[error]   cascading.flow.stream.FunctionEachStage.receive(FunctionEachStage.java:99)
[error]   cascading.flow.stream.FunctionEachStage.receive(FunctionEachStage.java:39)
[error]   cascading.flow.stream.SourceStage.map(SourceStage.java:102)
[error]   cascading.flow.stream.SourceStage.call(SourceStage.java:53)
[error]   cascading.flow.stream.SourceStage.call(SourceStage.java:38)
[error]   java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
[error]   java.util.concurrent.FutureTask.run(FutureTask.java:138)
[error]   java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
[error]   java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
[error]   java.lang.Thread.run(Thread.java:662)
[error]   Index: 2, Size: 2 (ArrayList.java:547)
[error]   java.util.ArrayList.RangeCheck(ArrayList.java:547)
[error]   java.util.ArrayList.get(ArrayList.java:322)
[error]   cascading.tuple.Tuple.getObject(Tuple.java:221)
[error]   cascading.tuple.Tuple.getDouble(Tuple.java:254)
[error]   com.twitter.scalding.TupleGetter$DoubleGetter$.get$mcD$sp(TupleGetter.scala:66)
[error]   com.twitter.scalding.TupleGetter$DoubleGetter$.get(TupleGetter.scala:66)
[error]   com.twitter.scalding.TupleGetter$DoubleGetter$.get(TupleGetter.scala:65)
[error]   com.twitter.scalding.GeneratedTupleConverters$$anon$3.apply(GeneratedConversions.scala:36)
[error]   com.twitter.scalding.GeneratedTupleConverters$$anon$3.apply(GeneratedConversions.scala:31)
[error]   com.twitter.scalding.typed.TypedPipe$$anonfun$from$1.apply(TypedPipe.scala:37)
[error]   com.twitter.scalding.typed.TypedPipe$$anonfun$from$1.apply(TypedPipe.scala:37)
[error]   com.twitter.scalding.FlatMapFunction.operate(Operations.scala:38)
[error]   cascading.flow.stream.FunctionEachStage.receive(FunctionEachStage.java:99)
[error]   cascading.flow.stream.FunctionEachStage.receive(FunctionEachStage.java:39)
[error]   cascading.flow.stream.FunctionEachStage$1.collect(FunctionEachStage.java:80)
[error]   cascading.tuple.TupleEntryCollector.safeCollect(TupleEntryCollector.java:93)
[error]   cascading.tuple.TupleEntryCollector.add(TupleEntryCollector.java:86)
[error]   com.twitter.scalding.FlatMapFunction$$anonfun$operate$2.apply(Operations.scala:40)
[error]   com.twitter.scalding.FlatMapFunction$$anonfun$operate$2.apply(Operations.scala:38)
[error]   scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
[error]   scala.collection.immutable.List.foreach(List.scala:76)
[error]   com.twitter.scalding.FlatMapFunction.operate(Operations.scala:38)
[error]   cascading.flow.stream.FunctionEachStage.receive(FunctionEachStage.java:99)
[error]   cascading.flow.stream.FunctionEachStage.receive(FunctionEachStage.java:39)
[error]   cascading.flow.stream.SourceStage.map(SourceStage.java:102)
[error]   cascading.flow.stream.SourceStage.call(SourceStage.java:53)
[error]   cascading.flow.stream.SourceStage.call(SourceStage.java:38)
[error]   java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
[error]   java.util.concurrent.FutureTask.run(FutureTask.java:138)
[error]   java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
[error]   java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
[error]   java.lang.Thread.run(Thread.java:662)