@dlwh  Thank you for the comments! I think it is better to have mul and trans. This would make the user less likely using inconsistent matrix and transpose. Svd_Sparse_Impl will hold the transposed matrix, and the user still has the choice on trans implementation. If we have mul and trans, there no need for mulTrans? If Mat and MatTranspose is the same, which is the usual case, there would be a conflict of implicits? How about a simplified version like this:
```
implicit def Svd_Sparse_Impl[Mat](implicit mul: OpMulMatrix.Impl2[Mat, DenseVector[Double], DenseVector[Double]], trans: CanTranspose[Mat, Mat])
```