docs: public static void tridiagUpperRow( final int blockLength ,
                                          final DSubmatrixD1 A ,
                                          final double gammas[] ,
                                          final DSubmatrixD1 V )
      {
          int blockHeight = Math.min(blockLength,A.row1-A.row0);
          if( blockHeight <= 1 )
              return;
          int width = A.col1-A.col0;
          int num = Math.min(width-1,blockHeight);
          int applyIndex = Math.min(width,blockHeight);
  
          // step through rows in the block
          for( int i = 0; i < num; i++ ) {
              // compute the new reflector and save it in a row in 'A'
              computeHouseHolderRow(blockLength,A,gammas,i);
              double gamma = gammas[A.row0+i];
  
              // compute y
              computeY(blockLength,A,V,i,gamma);
  
              // compute v from y
              computeRowOfV(blockLength,A,V,i,gamma);
  
              // Apply the reflectors to the next row in 'A' only
              if( i+1 < applyIndex ) {
                  applyReflectorsToRow( blockLength , A , V , i+1 );
              }
          }
      }