@@ -63,8 +63,10 @@ struct AcceleratedBilliardWalk
6363 typedef typename Polytope::MT MT;
6464 typedef typename Eigen::Matrix<double , Eigen::Dynamic, Eigen::Dynamic> DenseMT;
6565 typedef typename Point::FT NT;
66- using AA_type = std::conditional_t < std::is_same_v<MT, typename Eigen::SparseMatrix<NT, Eigen::RowMajor>>, typename Eigen::SparseMatrix<NT>, DenseMT >;
66+ // We do sparse computations iff MT is sparse rowMajor
67+ static constexpr bool SPARSE = std::is_same_v<MT, Eigen::SparseMatrix<NT, Eigen::RowMajor>>;
6768 // AA is sparse colMajor if MT is sparse rowMajor, and Dense otherwise
69+ using AA_type = std::conditional_t < SPARSE, typename Eigen::SparseMatrix<NT>, DenseMT >;
6870
6971 template <typename GenericPolytope>
7072 Walk (GenericPolytope &P, Point const & p, RandomNumberGenerator &rng)
@@ -75,7 +77,7 @@ struct AcceleratedBilliardWalk
7577 _update_parameters = update_parameters ();
7678 _L = compute_diameter<GenericPolytope>
7779 ::template compute<NT>(P);
78- if constexpr (std::is_same<AA_type, Eigen::SparseMatrix<NT>>::value ) {
80+ if constexpr (SPARSE ) {
7981 _AA = (P.get_mat () * P.get_mat ().transpose ());
8082 } else {
8183 _AA.noalias () = (DenseMT)(P.get_mat () * P.get_mat ().transpose ());
@@ -95,7 +97,7 @@ struct AcceleratedBilliardWalk
9597 _L = params.set_L ? params.m_L
9698 : compute_diameter<GenericPolytope>
9799 ::template compute<NT>(P);
98- if constexpr (std::is_same<AA_type, Eigen::SparseMatrix<NT>>::value ) {
100+ if constexpr (SPARSE ) {
99101 _AA = (P.get_mat () * P.get_mat ().transpose ());
100102 } else {
101103 _AA.noalias () = (DenseMT)(P.get_mat () * P.get_mat ().transpose ());
@@ -119,7 +121,7 @@ struct AcceleratedBilliardWalk
119121 int it;
120122 typename Point::Coeff b;
121123 NT* b_data;
122- if constexpr (std::is_same<MT, Eigen::SparseMatrix<NT, Eigen::RowMajor>>::value ) {
124+ if constexpr (SPARSE ) {
123125 b = P.get_vec ();
124126 b_data = b.data ();
125127 }
@@ -140,7 +142,7 @@ struct AcceleratedBilliardWalk
140142 }
141143
142144 _lambda_prev = dl * pbpair.first ;
143- if constexpr (std::is_same<MT, Eigen::SparseMatrix<NT, Eigen::RowMajor>>::value ) {
145+ if constexpr (SPARSE ) {
144146 _update_parameters.moved_dist = _lambda_prev;
145147 NT* Ar_data = _lambdas.data ();
146148 NT* Av_data = _Av.data ();
@@ -153,13 +155,13 @@ struct AcceleratedBilliardWalk
153155 _p += (_lambda_prev * _v);
154156 }
155157 T -= _lambda_prev;
156- P.compute_reflection (_v, _p, _update_parameters);
158+ P.compute_reflection_abw (_v, _p, _update_parameters);
157159 it++;
158160
159161 while (it < _rho)
160162 {
161163 std::pair<NT, int > pbpair;
162- if constexpr (std::is_same<MT, Eigen::SparseMatrix<NT, Eigen::RowMajor>>::value ) {
164+ if constexpr (SPARSE ) {
163165 pbpair = P.line_positive_intersect (_p, _lambdas, _Av, _lambda_prev,
164166 _distances_set, _AA, _update_parameters);
165167 } else {
@@ -172,13 +174,13 @@ struct AcceleratedBilliardWalk
172174 break ;
173175 }
174176 _lambda_prev = dl * pbpair.first ;
175- if constexpr (std::is_same<MT, Eigen::SparseMatrix<NT, Eigen::RowMajor>>::value ) {
177+ if constexpr (SPARSE ) {
176178 _update_parameters.moved_dist += _lambda_prev;
177179 } else {
178180 _p += (_lambda_prev * _v);
179181 }
180182 T -= _lambda_prev;
181- P.compute_reflection (_v, _p, _update_parameters);
183+ P.compute_reflection_abw (_v, _p, _update_parameters);
182184 it++;
183185 }
184186 _p += _update_parameters.moved_dist * _v;
@@ -300,7 +302,7 @@ struct AcceleratedBilliardWalk
300302 _lambda_prev = dl * pbpair.first ;
301303 _p += (_lambda_prev * _v);
302304 T -= _lambda_prev;
303- P.compute_reflection (_v, _p, _update_parameters);
305+ P.compute_reflection_abw (_v, _p, _update_parameters);
304306
305307 while (it <= _rho)
306308 {
@@ -318,7 +320,7 @@ struct AcceleratedBilliardWalk
318320 _lambda_prev = dl * pbpair.first ;
319321 _p += (_lambda_prev * _v);
320322 T -= _lambda_prev;
321- P.compute_reflection (_v, _p, _update_parameters);
323+ P.compute_reflection_abw (_v, _p, _update_parameters);
322324 it++;
323325 }
324326 }
0 commit comments