1. using a different branch, improve code quality using c++20 contracts and attributes for tensor, using (expects,ensure,assert) contra
Hey Cem,

Are you sure to add contracts in uBLAS. Contracts was proposed for C++17 and did not made it up to C++20 and I have no idea when it will come to but there are some implementation of contracts TS draft by some third party compiler hackers who implement things, So I will have to compile the compiler with contract support and then test it during development. I have no problems doing it, I can see all the great places it will be used.

Will it be worth doing something that can't be directly used by other?

In addition to the above, I was thinking of also having complete compile time tensor. c++20 has new and delete marked constexpr, so we can use std::vector container which is now compile-time and modify current to have a complete compile time tensor class. With examples and how to use it, this will be easy, if I use Amit's static extents. This is I believe an extension to the list of ideas you presented above.

I still need your view on if I should go ahead with the contracts? Concepts are okay and So is constexpr thing! Also I believe eventually if I follow up your list of ideas tensor<2, rank> can be matrix and tensor<1, rank> can become a vector and in a long run it can replace the specially designed matrix and vector of ublas. (backward compatibility could be provided thought). We will have one expression template (YAP), C++17 or 20 everywhere, it will also make maintaining the library easy because currently tensor is a separate things and matrix and vector of ublas are separator thing. 

This will also eventually give us many performance boost that David was talking about from modern paradigms of C++.

Regards
Ashar