@@ -155,19 +155,18 @@ namespace lp {
155
155
}
156
156
private:
157
157
// the row comes from lar_solver
158
- void create_eprime_entry_from_row (const row_strip<mpq>& row, unsigned row_index) {
158
+ void fill_eprime_entry (const row_strip<mpq>& row, unsigned row_index) {
159
159
m_f.push_back (row_index);
160
160
eprime_entry& e = m_eprime[row_index];
161
+ e.m_row_index = row_index;
161
162
const auto lcm = get_denominators_lcm (row);
162
- u_dependency*& dep = e.m_l ;
163
- SASSERT (dep == nullptr );
164
163
mpq & c = e.m_c ;
165
164
SASSERT (c.is_zero ());
166
165
167
166
for (const auto & p: row) {
168
167
if (lia.is_fixed (p.var ())) {
169
168
c += p.coeff ()*lia.lower_bound (p.var ()).x ;
170
- dep = lra.get_bound_constraint_witnesses_for_column (p.var ());
169
+ e. m_l = lra.mk_join (lra. get_bound_constraint_witnesses_for_column (p.var ()), e. m_l );
171
170
}
172
171
else {
173
172
m_e_matrix.add_new_element (row_index, p.var (), lcm * p.coeff ());
@@ -201,13 +200,16 @@ namespace lp {
201
200
m_eprime.resize (n_of_rows);
202
201
for (unsigned i = 0 ; i < n_of_rows; i++) {
203
202
auto & row = lra.get_row (i);
204
- TRACE (" dioph_eq" , tout << " row " << i <<" :" ; lia.display_row_info (tout, i) << " \n " ;);
203
+ TRACE (" dioph_eq" , tout << " row " << i <<" :" ; lra.print_row (row, tout) << " \n " ;
204
+ for (auto & p: row) {
205
+ lra.print_column_info (p.var (), tout);
206
+ });
205
207
if (!all_vars_are_int_and_small (row)) {
206
208
TRACE (" dioph_eq" , tout << " not all vars are int and small\n " ;);
207
209
m_eprime[i].m_entry_status = entry_status::NO_S_NO_F;
208
210
continue ;
209
211
}
210
- create_eprime_entry_from_row (row, i);
212
+ fill_eprime_entry (row, i);
211
213
TRACE (" dioph_eq" , print_eprime_entry (static_cast <unsigned >(i), tout););
212
214
}
213
215
@@ -302,6 +304,7 @@ namespace lp {
302
304
bool normalize_by_gcd () {
303
305
for (unsigned l: m_f) {
304
306
if (!normalize_e_by_gcd (l)) {
307
+ std::cout << " dioconflict\n " ;
305
308
m_conflict_index = l;
306
309
return false ;
307
310
}
@@ -666,7 +669,8 @@ namespace lp {
666
669
TRACE (" dioph_eq" , tout << " c_row:" << c.var (); print_e_row (c.var (), tout) << std::endl;);
667
670
m_e_matrix.pivot_row_to_row_given_cell_with_sign (piv_row_index, c, j, j_sign);
668
671
m_eprime[c.var ()].m_c -= j_sign* coeff*m_eprime[piv_row_index].m_c ;
669
- TRACE (" dioph_eq" , tout << " after pivoting c_row:" ; print_e_row (c.var (), tout) << std::endl;);
672
+ m_eprime[c.var ()].m_l = lra.mk_join (m_eprime[c.var ()].m_l , m_eprime[piv_row_index].m_l );
673
+ TRACE (" dioph_eq" , tout << " after pivoting c_row:" ; print_eprime_entry (c.var (), tout););
670
674
cell_to_process--;
671
675
}
672
676
}
@@ -727,17 +731,18 @@ namespace lp {
727
731
eliminate_var_in_f (m_eprime.back (), k, 1 );
728
732
}
729
733
730
- std::ostream& print_eprime_entry (unsigned i, std::ostream& out) {
734
+ std::ostream& print_eprime_entry (unsigned i, std::ostream& out, bool print_dep = true ) {
731
735
out << " m_eprime[" << i << " ]:" ;
732
- return print_eprime_entry (m_eprime[i], out);
736
+ return print_eprime_entry (m_eprime[i], out, print_dep );
733
737
}
734
738
735
- std::ostream& print_eprime_entry (const eprime_entry& e, std::ostream& out) {
739
+ std::ostream& print_eprime_entry (const eprime_entry& e, std::ostream& out, bool print_dep = true ) {
736
740
out << " {\n " ;
737
741
print_term_o (get_term_from_e_matrix (e.m_row_index ), out << " \t row:" ) << " \n " ;
738
742
out << " \t status:" << (int )e.m_entry_status ;
739
- // print_dep(out<< "\tm_l:", e.m_l) << "\n";
740
- out << " \n }\n " ;
743
+ if (print_dep)
744
+ this ->print_dep (out<< " \n\t dep:" , e.m_l );
745
+ out << " \n }" ;
741
746
return out;
742
747
}
743
748
@@ -779,7 +784,7 @@ namespace lp {
779
784
return ;
780
785
}
781
786
SASSERT (ex.empty ());
782
- TRACE (" dioph_eq" , tout << " conflict:" ; print_eprime_entry (m_conflict_index, tout) << std::endl;);
787
+ TRACE (" dioph_eq" , tout << " conflict:" ; print_eprime_entry (m_conflict_index, tout, true ) << std::endl;);
783
788
auto & ep = m_eprime[m_conflict_index];
784
789
/*
785
790
for (const auto & pl : ep.m_l) {
0 commit comments