docs: public static void extract( DMatrix src,
                                  int srcY0, int srcY1,
                                  int srcX0, int srcX1,
                                  DMatrix dst ,
                                  int dstY0, int dstX0 )
      {
          if( srcY1 < srcY0 || srcY0 < 0 || srcY1 > src.getNumRows() )
              throw new MatrixDimensionException("srcY1 < srcY0 || srcY0 < 0 || srcY1 > src.numRows. "+stringShapes(src,dst));
          if( srcX1 < srcX0 || srcX0 < 0 || srcX1 > src.getNumCols() )
              throw new MatrixDimensionException("srcX1 < srcX0 || srcX0 < 0 || srcX1 > src.numCols. "+stringShapes(src,dst));
  
          int w = srcX1-srcX0;
          int h = srcY1-srcY0;
  
          if( dstY0+h > dst.getNumRows() )
              throw new MatrixDimensionException("dst is too small in rows. "+dst.getNumRows()+" < "+(dstY0+h));
          if( dstX0+w > dst.getNumCols() )
              throw new MatrixDimensionException("dst is too small in columns. "+dst.getNumCols()+" < "+(dstX0+w));
  
          // interestingly, the performance is only different for small matrices but identical for larger ones
          if( src instanceof DMatrixRMaj && dst instanceof DMatrixRMaj) {
              ImplCommonOps_DDRM.extract((DMatrixRMaj)src,srcY0,srcX0,(DMatrixRMaj)dst,dstY0,dstX0, h, w);
          } else {
              ImplCommonOps_DDMA.extract(src,srcY0,srcX0,dst,dstY0,dstX0, h, w);
          }
      }