a bug to be cleaned for bilinear alg: when src == dst, triangle and other special case must be ignored.