inline Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic> block(const Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic>& m, size_t i, size_t j, size_t nrows, size_t ncols) { validate_row_index(m,i,"block"); validate_row_index(m,i+nrows-1,"block"); validate_column_index(m,j,"block"); validate_column_index(m,j+ncols-1,"block"); return m.block(i - 1,j - 1,nrows,ncols); }
inline Eigen::Matrix<T,Eigen::Dynamic,1> col(const Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic>& m, size_t j) { validate_column_index(m,j,"col"); return m.col(j - 1); }
inline Eigen::Matrix<T,1,Eigen::Dynamic> head(const Eigen::Matrix<T,1,Eigen::Dynamic>& rv, size_t n) { if (n != 0) validate_column_index(rv, n, "head"); return rv.head(n); }
inline Eigen::Matrix<T,1,Eigen::Dynamic> tail(const Eigen::Matrix<T,1,Eigen::Dynamic>& rv, size_t n) { if (n != 0) validate_column_index(rv, rv.size() - n + 1, "tail"); return rv.tail(n); }