docs: public static double[][] transposeTimesTranspose(final double[][] m1, final double[][] m2) {
      // Optimized implementation, exploiting the storage layout
      assert m1.length == getColumnDimensionality(m2) : ERR_MATRIX_INNERDIM;
      final double[][] re = new double[getColumnDimensionality(m1)][m2.length];
      // Optimized ala Jama. jik order.
      final double[] Acolj = new double[m1.length];
      for(int j = 0; j < re.length; j++) {
        // Make a linear copy of column j from A
        for(int k = 0; k < m1.length; k++) {
          Acolj[k] = m1[k][j];
        }
        final double[] Xrow = re[j];
        // multiply it with each row from A
        for(int i = 0; i < m2.length; i++) {
          final double[] Browi = m2[i];
          double s = 0;
          for(int k = 0; k < m1.length; k++) {
            s += Browi[k] * Acolj[k];
          }
          Xrow[i] = s;
        }
      }
      return re;
    }