It's not. I have a bit of decision paralysis when it comes to this and data frames that amount to basically the same thing: do we want a single TensorN, which allows for dynamically choosing the number of axes, or do we want Tensor3, Tensor4, etc, which gives us static type safety. (Or one could do TensorN and enforce dimensions at compile time as well, but it seems hard to do that and allow for dynamically choosing the arity)
To implement TensorN, just implement DenseTensorN[V] extends Tensor[IndexedSeq[Int], V]. To do Tensor3/Tensor4, do DenseTensor3[V] extends Tensor[(Int, Int, Int), V] etc.
-- David