| 2457 | // type T can be CompMatr1, CompMatr2, CompMatr, DiagMatr1, DiagMatr2, DiagMatr, FullStateDiagMatr |
| 2458 | template <class T> |
| 2459 | void assertMatrixIsHermitian(T matr, const char* caller) { |
| 2460 | |
| 2461 | // validate both stack and heap matrices have been correctly initialised |
| 2462 | validate_matrixFields(matr, caller); |
| 2463 | |
| 2464 | // validate heap matrices have ever written to their GPU memories (if exists) |
| 2465 | if constexpr (util_isHeapMatrixType<T>()) |
| 2466 | validate_matrixIsSynced(matr, caller); |
| 2467 | |
| 2468 | // avoid superfluous expensive hermiticity check below (do not overwrite matr.isApproxHermitian) |
| 2469 | if (isNumericalValidationDisabled()) |
| 2470 | return; |
| 2471 | |
| 2472 | // may overwrite matr.isApproxHermitian of heap matrices, otherwise ignores epsilon |
| 2473 | assertThat(util_isHermitian(matr, global_validationEpsilon), report::MATRIX_NOT_HERMITIAN, caller); |
| 2474 | } |
| 2475 | void validate_matrixIsHermitian(CompMatr1 m, const char* caller) { assertMatrixIsHermitian(m, caller); } |
| 2476 | void validate_matrixIsHermitian(CompMatr2 m, const char* caller) { assertMatrixIsHermitian(m, caller); } |
| 2477 | void validate_matrixIsHermitian(CompMatr m, const char* caller) { assertMatrixIsHermitian(m, caller); } |
no test coverage detected