   t = Time.now
   Enum.each(1..iters, fn(_) -> Matrix.transpose([[1,2,3],[4,5,6],[7,8,9]]) end)
   IO.puts "elapsed time #{Time.now - t} secs for #{iters} iterations of a 3x3 matrix transpose"
+  t = Time.now
+  Enum.each(1..iters, fn(_) -> Matrix.multiply([[1,2,3],[4,5,6],[7,8,9]],[[1,2,3],[4,5,6],[7,8,9]]) end)
+  IO.puts "elapsed time #{Time.now - t} secs for #{iters} iterations of a 3x3 x 3x3 matrix multiply"
 end
      assert_raise FunctionClauseError, fn -> Matrix.add([[1,2,3],[4,5,6],[7,8,9]],[[1,2],[3,4]]) end
    end

  end
end


  end

  def inverse(_matrix) do
    # oh shit. this rabbit hole goes DEEP. Will return (?) to this eventually. May have to call out to BLAS etc
    raise "Not Implemented Yet Due To Nontriviality"
  end

  def zeros(sz) do
    List.duplicate(List.duplicate(0,sz),sz)
  end
  def zeros(rows, cols) do
    List.duplicate(List.duplicate(0,cols),rows)
  end

  def ones(sz) do
    List.duplicate(List.duplicate(1,sz),sz)
  end
  def ones(rows,cols) do
    List.duplicate(List.duplicate(1,cols),rows)
  end

  def rand(rows, cols) do
    Enum.map(0..rows-1, fn _ ->
      for _ <- 0..cols-1, do: :random.uniform
    end)
  end

  def identity(sz) do
    Enum.map(0..sz-1, fn i ->
      for j <- 0..sz-1, do: (if i==j, do: 1, else: 0)
    end)
  end
  def eye(sz), do: identity(sz)


end

