check_matching_dims.hpp
Go to the documentation of this file.
1 #ifndef STAN_MATH_PRIM_MAT_ERR_CHECK_MATCHING_DIMS_HPP
2 #define STAN_MATH_PRIM_MAT_ERR_CHECK_MATCHING_DIMS_HPP
3 
8 #include <sstream>
9 #include <string>
10 
11 namespace stan {
12 namespace math {
13 
14 /**
15  * Check if the two matrices are of the same size.
16  *
17  * This function checks the runtime sizes only.
18  *
19  * @tparam T1 Scalar type of the first matrix
20  * @tparam T2 Scalar type of the second matrix
21  * @tparam R1 Rows specified at compile time of the first matrix
22  * @tparam C1 Columns specified at compile time of the first matrix
23  * @tparam R2 Rows specified at compile time of the second matrix
24  * @tparam C2 Columns specified at compile time of the second matrix
25  *
26  * @param function Function name (for error messages)
27  * @param name1 Variable name for the first matrix (for error messages)
28  * @param y1 First matrix
29  * @param name2 Variable name for the second matrix (for error messages)
30  * @param y2 Second matrix
31  *
32  * @throw <code>std::invalid_argument</code>
33  * if the dimensions of the matrices do not match
34  */
35 template <typename T1, typename T2, int R1, int C1, int R2, int C2>
36 inline void check_matching_dims(const char* function, const char* name1,
37  const Eigen::Matrix<T1, R1, C1>& y1,
38  const char* name2,
39  const Eigen::Matrix<T2, R2, C2>& y2) {
40  check_size_match(function, "Rows of ", name1, y1.rows(), "rows of ", name2,
41  y2.rows());
42  check_size_match(function, "Columns of ", name1, y1.cols(), "columns of ",
43  name2, y2.cols());
44 }
45 
46 /**
47  * Check if the two matrices are of the same size.
48  *
49  * This function checks the runtime sizes and can also check the static
50  * sizes as well. For example, a 4x1 matrix is not the same as a vector
51  * with 4 elements.
52  *
53  * @tparam check_compile Whether to check the static sizes
54  * @tparam T1 Scalar type of the first matrix
55  * @tparam T2 Scalar type of the second matrix
56  * @tparam R1 Rows specified at compile time of the first matrix
57  * @tparam C1 Columns specified at compile time of the first matrix
58  * @tparam R2 Rows specified at compile time of the second matrix
59  * @tparam C2 Columns specified at compile time of the second matrix
60  *
61  * @param function Function name (for error messages)
62  * @param name1 Variable name for the first matrix (for error messages)
63  * @param y1 First matrix
64  * @param name2 Variable name for the second matrix (for error messages)
65  * @param y2 Second matrix
66  *
67  * @throw <code>std::invalid_argument</code> if the
68  * dimensions of the matrices do not match
69  */
70 template <bool check_compile, typename T1, typename T2, int R1, int C1, int R2,
71  int C2>
72 inline void check_matching_dims(const char* function, const char* name1,
73  const Eigen::Matrix<T1, R1, C1>& y1,
74  const char* name2,
75  const Eigen::Matrix<T2, R2, C2>& y2) {
76  if (check_compile && (R1 != R2 || C1 != C2)) {
77  std::ostringstream msg;
78  msg << "Static rows and cols of " << name1 << " and " << name2
79  << " must match in size.";
80  std::string msg_str(msg.str());
81  invalid_argument(function, msg_str.c_str(), "", "");
82  }
83  check_matching_dims(function, name1, y1, name2, y2);
84 }
85 } // namespace math
86 } // namespace stan
87 #endif
Float_t y1[n_points_granero]
Definition: compare.C:5
void check_matching_dims(const char *function, const char *name1, const Eigen::Matrix< T1, R1, C1 > &y1, const char *name2, const Eigen::Matrix< T2, R2, C2 > &y2)
void check_size_match(const char *function, const char *name_i, T_size1 i, const char *name_j, T_size2 j)
void invalid_argument(const char *function, const char *name, const T &y, const char *msg1, const char *msg2)
enum BeamMode string