47 #ifndef MUI_MATRIX_ASSERTS_H_
48 #define MUI_MATRIX_ASSERTS_H_
60 template<
typename ITYPE,
typename VTYPE>
63 std::string file_name;
64 std::string function_name;
66 if (file_name_input.empty()) {
67 file_name.assign(
"matrix_asserts.h");
69 file_name = file_name_input;
72 if (function_name_input.empty()) {
73 function_name.assign(
"assert_valid_vector_size()");
75 function_name = function_name_input;
78 if (matrix_format_ == format::COO) {
81 std::cerr <<
"MUI Error [" << file_name <<
"]: The number of non-zeros (nnz_=" << nnz_ <<
") should be non-negative integer in " << function_name << std::endl;
86 std::cerr <<
"MUI Error [" << file_name <<
"]: The number of rows (rows_=" << rows_ <<
") should be non-negative integer in " << function_name << std::endl;
91 std::cerr <<
"MUI Error [" << file_name <<
"]: The number of columns (cols_=" << cols_ <<
") should be non-negative integer in " << function_name << std::endl;
95 if ((rows_*cols_) < nnz_) {
96 std::cerr <<
"MUI Warning [" << file_name <<
"]: Matrix size (" << (rows_*cols_) <<
") smaller than the number of non-zeros (nnz_=" << nnz_ <<
") in " << function_name <<
". Possible duplicated elements occur. " << std::endl;
99 if (
static_cast<ITYPE
>(matrix_coo.values_.size()) != nnz_) {
100 std::cerr <<
"MUI Error [" << file_name <<
"]: COO values_ matrix size (" << matrix_coo.values_.size() <<
") does not equals to number of non-zeros (nnz_=" << nnz_ <<
") in " << function_name << std::endl;
104 if (
static_cast<ITYPE
>(matrix_coo.row_indices_.size()) != nnz_) {
105 std::cerr <<
"MUI Error [" << file_name <<
"]: COO row_indices_ matrix size (" << matrix_coo.row_indices_.size() <<
") does not equals to number of non-zeros (nnz_=" << nnz_ <<
") in " << function_name << std::endl;
109 if (
static_cast<ITYPE
>(matrix_coo.col_indices_.size()) != nnz_) {
110 std::cerr <<
"MUI Error [" << file_name <<
"]: COO col_indices_ matrix size (" << matrix_coo.col_indices_.size() <<
") does not equals to number of non-zeros (nnz_=" << nnz_ <<
") in " << function_name << std::endl;
114 if (!matrix_csr.values_.empty()) {
115 std::cerr <<
"MUI Warning [" << file_name <<
"]: Non-empty CSR values_ matrix (" << matrix_csr.values_.size() <<
") under COO matrix format in " << function_name << std::endl;
118 if (!matrix_csr.row_ptrs_.empty()) {
119 std::cerr <<
"MUI Warning [" << file_name <<
"]: Non-empty CSR row_ptrs_ matrix (" << matrix_csr.row_ptrs_.size() <<
") under COO matrix format in " << function_name << std::endl;
122 if (!matrix_csr.col_indices_.empty()) {
123 std::cerr <<
"MUI Warning [" << file_name <<
"]: Non-empty CSR col_indices_ matrix (" << matrix_csr.col_indices_.size() <<
") under COO matrix format in " << function_name << std::endl;
126 if (!matrix_csc.values_.empty()) {
127 std::cerr <<
"MUI Warning [" << file_name <<
"]: Non-empty CSC values_ matrix (" << matrix_csc.values_.size() <<
") under COO matrix format in " << function_name << std::endl;
130 if (!matrix_csc.row_indices_.empty()) {
131 std::cerr <<
"MUI Warning [" << file_name <<
"]: Non-empty CSC row_ptrs_ matrix (" << matrix_csc.row_indices_.size() <<
") under COO matrix format in " << function_name << std::endl;
134 if (!matrix_csc.col_ptrs_.empty()) {
135 std::cerr <<
"MUI Warning [" << file_name <<
"]: Non-empty CSC col_indices_ matrix (" << matrix_csc.col_ptrs_.size() <<
") under COO matrix format in " << function_name << std::endl;
138 }
else if (matrix_format_ == format::CSR) {
140 if ((rows_*cols_) < nnz_) {
141 std::cerr <<
"MUI Warning [" << file_name <<
"]: Matrix size (" << (rows_*cols_) <<
") smaller than the number of non-zeros (nnz_=" << nnz_ <<
") in " << function_name <<
". Possible duplicated elements occur. " << std::endl;
144 if (!matrix_coo.values_.empty()) {
145 std::cerr <<
"MUI Warning [" << file_name <<
"]: Non-empty COO values_ matrix (" << matrix_coo.values_.size() <<
") under CSR matrix format in " << function_name << std::endl;
148 if (!matrix_coo.row_indices_.empty()) {
149 std::cerr <<
"MUI Warning [" << file_name <<
"]: Non-empty COO row_indices_ matrix (" << matrix_coo.row_indices_.size() <<
") under CSR matrix format in " << function_name << std::endl;
152 if (!matrix_coo.col_indices_.empty()) {
153 std::cerr <<
"MUI Warning [" << file_name <<
"]: Non-empty COO col_indices_ matrix (" << matrix_coo.col_indices_.size() <<
") under CSR matrix format in " << function_name << std::endl;
156 if (
static_cast<ITYPE
>(matrix_csr.values_.size()) != nnz_) {
157 std::cerr <<
"MUI Error [" << file_name <<
"]: CSR values_ matrix size (" << matrix_csr.values_.size() <<
") does not equals to number of non-zeros (nnz_=" << nnz_ <<
") in " << function_name << std::endl;
161 if (
static_cast<ITYPE
>(matrix_csr.row_ptrs_.size()) != (rows_+1)) {
162 std::cerr <<
"MUI Error [" << file_name <<
"]: CSR row_ptrs_ matrix size (" << matrix_csr.row_ptrs_.size() <<
") does not equals to number of rows + 1 (rows_+1=" << (rows_+1) <<
") in " << function_name << std::endl;
166 if (
static_cast<ITYPE
>(matrix_csr.col_indices_.size()) != nnz_) {
167 std::cerr <<
"MUI Error [" << file_name <<
"]: CSR col_indices_ matrix size (" << matrix_csr.col_indices_.size() <<
") does not equals to number of non-zeros (nnz_=" << nnz_ <<
") in " << function_name << std::endl;
171 if (!matrix_csc.values_.empty()) {
172 std::cerr <<
"MUI Warning [" << file_name <<
"]: Non-empty CSC values_ matrix (" << matrix_csc.values_.size() <<
") under CSR matrix format in " << function_name << std::endl;
175 if (!matrix_csc.row_indices_.empty()) {
176 std::cerr <<
"MUI Warning [" << file_name <<
"]: Non-empty CSC row_ptrs_ matrix (" << matrix_csc.row_indices_.size() <<
") under CSR matrix format in " << function_name << std::endl;
179 if (!matrix_csc.col_ptrs_.empty()) {
180 std::cerr <<
"MUI Warning [" << file_name <<
"]: Non-empty CSC col_indices_ matrix (" << matrix_csc.col_ptrs_.size() <<
") under CSR matrix format in " << function_name << std::endl;
183 }
else if (matrix_format_ == format::CSC) {
185 if ((rows_*cols_) < nnz_) {
186 std::cerr <<
"MUI Warning [" << file_name <<
"]: Matrix size (" << (rows_*cols_) <<
") smaller than the number of non-zeros (nnz_=" << nnz_ <<
") in " << function_name <<
". Possible duplicated elements occur. " << std::endl;
189 if (!matrix_coo.values_.empty()) {
190 std::cerr <<
"MUI Warning [" << file_name <<
"]: Non-empty COO values_ matrix (" << matrix_coo.values_.size() <<
") under CSC matrix format in " << function_name << std::endl;
193 if (!matrix_coo.row_indices_.empty()) {
194 std::cerr <<
"MUI Warning [" << file_name <<
"]: Non-empty COO row_indices_ matrix (" << matrix_coo.row_indices_.size() <<
") under CSC matrix format in " << function_name << std::endl;
197 if (!matrix_coo.col_indices_.empty()) {
198 std::cerr <<
"MUI Warning [" << file_name <<
"]: Non-empty COO col_indices_ matrix (" << matrix_coo.col_indices_.size() <<
") under CSC matrix format in " << function_name << std::endl;
201 if (!matrix_csr.values_.empty()) {
202 std::cerr <<
"MUI Warning [" << file_name <<
"]: Non-empty CSR values_ matrix size (" << matrix_csr.values_.size() <<
") under CSC matrix format in " << function_name << std::endl;
205 if (!matrix_csr.row_ptrs_.empty()) {
206 std::cerr <<
"MUI Warning [" << file_name <<
"]: Non-empty CSR row_ptrs_ matrix (" << matrix_csr.row_ptrs_.size() <<
") under CSC matrix format in " << function_name << std::endl;
209 if (!matrix_csr.col_indices_.empty()) {
210 std::cerr <<
"MUI Warning [" << file_name <<
"]: Non-empty CSR col_indices_ matrix (" << matrix_csr.col_indices_.size() <<
") under CSC matrix format in " << function_name << std::endl;
213 if (
static_cast<ITYPE
>(matrix_csc.values_.size()) != nnz_) {
214 std::cerr <<
"MUI Error [" << file_name <<
"]: CSC values_ matrix size (" << matrix_csc.values_.size() <<
") does not equals to number of non-zeros (nnz_=" << nnz_ <<
") in " << function_name << std::endl;
218 if (
static_cast<ITYPE
>(matrix_csc.row_indices_.size()) != nnz_) {
219 std::cerr <<
"MUI Error [" << file_name <<
"]: CSC row_indices_ matrix size (" << matrix_csc.row_indices_.size() <<
") does not equals to number of non-zeros (nnz_=" << nnz_ <<
") in " << function_name << std::endl;
223 if (
static_cast<ITYPE
>(matrix_csc.col_ptrs_.size()) != (cols_+1)) {
224 std::cerr <<
"MUI Error [" << file_name <<
"]: CSC col_indices_ matrix size (" << matrix_csc.col_ptrs_.size() <<
") does not equals to number of cols + 1 (cols_+1=" << (cols_+1) <<
") in " << function_name << std::endl;
229 std::cerr <<
"MUI Error [" << file_name <<
"]: unknown matrix format in " << function_name << std::endl;
236 template<
typename ITYPE,
typename VTYPE>
239 std::string file_name;
240 std::string function_name;
242 if (file_name_input.empty())
243 file_name.assign(
"matrix_asserts.h");
245 file_name = file_name_input;
246 if (function_name_input.empty())
247 function_name.assign(
"assert_coo_sorted_unique()");
249 function_name = function_name_input;
251 ITYPE numEntries = matrix_coo.values_.size();
253 if (numEntries > 1) {
254 for (ITYPE i = 1; i < numEntries; ++i) {
256 if (matrix_coo.row_indices_[i] < matrix_coo.row_indices_[i - 1]) {
258 std::cerr <<
"MUI Error [" << file_name <<
"]: The COO type matrix is not sorted (sorted row index check failed) in " << function_name << std::endl;
260 }
else if (matrix_coo.row_indices_[i] == matrix_coo.row_indices_[i - 1]) {
262 if (matrix_coo.col_indices_[i] < matrix_coo.col_indices_[i - 1]) {
264 std::cerr <<
"MUI Error [" << file_name <<
"]: The COO type matrix is not sorted (sorted column index check failed) in " << function_name << std::endl;
266 }
else if (matrix_coo.col_indices_[i] == matrix_coo.col_indices_[i - 1]) {
268 std::cerr <<
"MUI Error [" << file_name <<
"]: The COO type matrix exists duplicated elements (unique column index check failed) in " << function_name << std::endl;
277 template<
typename ITYPE,
typename VTYPE>
280 std::string file_name;
281 std::string function_name;
283 if (file_name_input.empty())
284 file_name.assign(
"matrix_asserts.h");
286 file_name = file_name_input;
287 if (function_name_input.empty())
288 function_name.assign(
"assert_csr_sorted_unique()");
290 function_name = function_name_input;
292 ITYPE numEntries = matrix_csr.values_.size();
294 if (numEntries > 1) {
295 for(ITYPE i = 0; i < rows_; ++i){
296 if (matrix_csr.row_ptrs_[i] > matrix_csr.row_ptrs_[i+1]) {
298 std::cerr <<
"MUI Error [" << file_name <<
"]: The CSR type matrix is not sorted (sorted row pointers check failed) in " << function_name << std::endl;
301 for(ITYPE j = matrix_csr.row_ptrs_[i] + 1; j < matrix_csr.row_ptrs_[i+1]; ++j){
302 if(matrix_csr.col_indices_[j-1] > matrix_csr.col_indices_[j]){
304 std::cerr <<
"MUI Error [" << file_name <<
"]: The CSR type matrix is not sorted (sorted column index check failed) in " << function_name << std::endl;
306 }
else if (matrix_csr.col_indices_[j-1] == matrix_csr.col_indices_[j]) {
308 std::cerr <<
"MUI Error [" << file_name <<
"]: The CSR type matrix is not unique (deduplicated column index check failed) in " << function_name << std::endl;
317 template<
typename ITYPE,
typename VTYPE>
320 std::string file_name;
321 std::string function_name;
323 if (file_name_input.empty())
324 file_name.assign(
"matrix_asserts.h");
326 file_name = file_name_input;
327 if (function_name_input.empty())
328 function_name.assign(
"assert_csc_sorted_unique()");
330 function_name = function_name_input;
332 ITYPE numEntries = matrix_csc.values_.size();
334 if (numEntries > 1) {
335 for(ITYPE i = 0; i < cols_; ++i){
336 if (matrix_csc.col_ptrs_[i] > matrix_csc.col_ptrs_[i+1]) {
338 std::cerr <<
"MUI Error [" << file_name <<
"]: The CSC type matrix is not sorted (sorted column pointers check failed) in " << function_name << std::endl;
341 for(ITYPE j = matrix_csc.col_ptrs_[i] + 1; j < matrix_csc.col_ptrs_[i+1]; ++j){
342 if(matrix_csc.row_indices_[j-1] > matrix_csc.row_indices_[j]){
344 std::cerr <<
"MUI Error [" << file_name <<
"]: The CSC type matrix is not sorted (sorted row index check failed) in " << function_name << std::endl;
346 }
else if (matrix_csc.row_indices_[j-1] == matrix_csc.row_indices_[j]) {
348 std::cerr <<
"MUI Error [" << file_name <<
"]: The CSC type matrix is not unique (deduplicated row index check failed) in " << function_name << std::endl;
void assert_csc_sorted_unique(const std::string &={}, const std::string &={}) const
Definition: matrix_asserts.h:318
void assert_valid_vector_size(const std::string &={}, const std::string &={}) const
Definition: matrix_asserts.h:61
void assert_csr_sorted_unique(const std::string &={}, const std::string &={}) const
Definition: matrix_asserts.h:278
void assert_coo_sorted_unique(const std::string &={}, const std::string &={}) const
Definition: matrix_asserts.h:237