docs: public void applyQ(DMatrixRBlock B , boolean isIdentity ) {
          int minDimen = Math.min(dataA.numCols,dataA.numRows);
  
          DSubmatrixD1 subB = new DSubmatrixD1(B);
  
          W.col0 = W.row0 = 0;
          Y.row1 = W.row1 = dataA.numRows;
          WTA.row0 = WTA.col0 = 0;
  
          int start = minDimen - minDimen % blockLength;
          if( start == minDimen )
              start -= blockLength;
          if( start < 0 )
              start = 0;
  
          // (Q1^T * (Q2^T * (Q3^t * A)))
          for( int i = start; i >= 0; i -= blockLength ) {
  
              Y.col0 = i;
              Y.col1 = Math.min(Y.col0+blockLength,dataA.numCols);
              Y.row0 = i;
              if( isIdentity )
                  subB.col0 = i;
              subB.row0 = i;
  
              setW();
              WTA.row1 = Y.col1-Y.col0;
              WTA.col1 = subB.col1-subB.col0;
              WTA.original.reshape(WTA.row1,WTA.col1,false);
  
              // Compute W matrix from reflectors stored in Y
              if( !saveW )
                  BlockHouseHolder_DDRB.computeW_Column(blockLength,Y,W,temp, gammas,Y.col0);
  
              // Apply the Qi to Q
              BlockHouseHolder_DDRB.multTransA_vecCol(blockLength,Y,subB,WTA);
              MatrixMult_DDRB.multPlus(blockLength,W,WTA,subB);
          }
      }