docs: public void multT(DoubleMatrix bMat, DoubleMatrix cMat, boolean transposeA, boolean transposeB) {
          if (!transposeA) {            
              throw new IllegalArgumentException("Multiplication where this matrix NOT transposed is not implemented.");
          }
          
          SparseRowDoubleMatrix.checkMultDimensions(this.viewTranspose(), transposeB ? bMat.viewTranspose() : bMat, cMat);
  
          int numRowsC = cMat.getNumRows();
          int numColsC = cMat.getNumColumns();
          
          if (bMat instanceof DenseDoubleMatrix) {
              DenseDoubleMatrix denseBMat = (DenseDoubleMatrix) bMat;
              for (int row = 0; row < numRowsC; row++) {
                  for (int col = 0; col < numColsC; col++) {
                      if (transposeB) {
                          cMat.set(row, col, this.cols[row].dot(denseBMat.matrix[col]));
                      } else {
                          cMat.set(row, col, this.cols[row].dot(denseBMat.matrix, col));
                      }
                  }
              }
          } else if (bMat instanceof SparseColDoubleMatrix && !transposeB) {
              SparseColDoubleMatrix sparseBMat = (SparseColDoubleMatrix) bMat;
              for (int row = 0; row < numRowsC; row++) {
                  for (int col = 0; col < numColsC; col++) {
                      cMat.set(row, col, this.cols[row].dot(sparseBMat.cols[col]));
                  }
              }
          } else if (bMat instanceof SparseRowDoubleMatrix && transposeB) {
              SparseRowDoubleMatrix sparseBMat = (SparseRowDoubleMatrix) bMat;
              for (int row = 0; row < numRowsC; row++) {
                  for (int col = 0; col < numColsC; col++) {
                      cMat.set(row, col, this.cols[row].dot(sparseBMat.rows[col]));
                  }
              }
          } else {
              throw new IllegalArgumentException("unhandled type: " + bMat.getClass().getCanonicalName());
          }
      }