Skip to content

Commit

Permalink
Fix compilation issues
Browse files Browse the repository at this point in the history
  • Loading branch information
yp committed Mar 12, 2016
1 parent 8cf0f5c commit 5b5ab3e
Show file tree
Hide file tree
Showing 6 changed files with 101 additions and 113 deletions.
100 changes: 50 additions & 50 deletions include/ped2cnf.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,24 +136,24 @@ class ped2cnf_conv_t:
if (gen.allele1() == 1 && gen.allele2() == 1) {
// gen == HOMO1
// -e p m, e -p, e -m
cnf.add_clause<3>((lit_t[]){-e, p, m});
cnf.add_clause<2>((lit_t[]){ e, -p});
cnf.add_clause<2>((lit_t[]){ e, -m});
cnf.add_clause(pedcnf_t::clause_t{-e, p, m});
cnf.add_clause(pedcnf_t::clause_t{ e, -p});
cnf.add_clause(pedcnf_t::clause_t{ e, -m});
} else if (gen.allele1() == 2 && gen.allele2() == 2) {
// gen == HOMO2
// -e -p -m, e p, e m
cnf.add_clause<3>((lit_t[]){-e, -p, -m});
cnf.add_clause<2>((lit_t[]){ e, p});
cnf.add_clause<2>((lit_t[]){ e, m});
cnf.add_clause(pedcnf_t::clause_t{-e, -p, -m});
cnf.add_clause(pedcnf_t::clause_t{ e, p});
cnf.add_clause(pedcnf_t::clause_t{ e, m});
} else if (gen.allele1() == 1 && gen.allele2() == 2) {
// gen == HETERO12
#ifdef AVOID_XOR_CLAUSES
cnf.add_clause<3>((lit_t[]){ e, p, m});
cnf.add_clause<3>((lit_t[]){ e, -p, -m});
cnf.add_clause<3>((lit_t[]){-e, p, -m});
cnf.add_clause<3>((lit_t[]){-e, -p, m});
cnf.add_clause(pedcnf_t::clause_t{ e, p, m});
cnf.add_clause(pedcnf_t::clause_t{ e, -p, -m});
cnf.add_clause(pedcnf_t::clause_t{-e, p, -m});
cnf.add_clause(pedcnf_t::clause_t{-e, -p, m});
#else
cnf.add_xor_clause<3>((lit_t[]){e, p, m});
cnf.add_xor_clause(pedcnf_t::xor_clause_t{e, p, m});
#endif
} else if (gen == g::MISS) {
// Do nothing
Expand All @@ -175,15 +175,15 @@ class ped2cnf_conv_t:
lit_t p= cnf.get_p(ind.father().progr_id(), l);
lit_t m= cnf.get_m(ind.father().progr_id(), l);
lit_t rp= cnf.get_rp(i, l);
cnf.add_clause<3>((lit_t[]){-rp, p, m});
cnf.add_clause<3>((lit_t[]){-rp, -p, -m});
cnf.add_clause(pedcnf_t::clause_t{-rp, p, m});
cnf.add_clause(pedcnf_t::clause_t{-rp, -p, -m});
}
if (ind.has_mother()) {
lit_t p= cnf.get_p(ind.mother().progr_id(), l);
lit_t m= cnf.get_m(ind.mother().progr_id(), l);
lit_t rm= cnf.get_rm(i, l);
cnf.add_clause<3>((lit_t[]){-rm, p, m});
cnf.add_clause<3>((lit_t[]){-rm, -p, -m});
cnf.add_clause(pedcnf_t::clause_t{-rm, p, m});
cnf.add_clause(pedcnf_t::clause_t{-rm, -p, -m});
}
}
/************
Expand Down Expand Up @@ -219,8 +219,8 @@ class ped2cnf_conv_t:
// at most one (quadratic version)
for (size_t j1= 0; j1<no_of_alleles-1; ++j1) {
for (size_t j2= j1+1; j2<no_of_alleles; ++j2) {
cnf.add_clause<2>((lit_t[]){ -p[j1], -p[j2]});
cnf.add_clause<2>((lit_t[]){ -m[j1], -m[j2]});
cnf.add_clause(pedcnf_t::clause_t{ -p[j1], -p[j2]});
cnf.add_clause(pedcnf_t::clause_t{ -m[j1], -m[j2]});
}
}
/************
Expand All @@ -231,20 +231,20 @@ class ped2cnf_conv_t:
const size_t a= ((size_t)gen.allele1())-1;
const size_t b= ((size_t)gen.allele2())-1;
if (is_homozygous(gen)) {
cnf.add_clause<2>((lit_t[]){ e, p[a] });
cnf.add_clause<2>((lit_t[]){ e, m[a] });
cnf.add_clause<3>((lit_t[]){ -e, -p[a], -m[a] });
cnf.add_clause(pedcnf_t::clause_t{ e, p[a] });
cnf.add_clause(pedcnf_t::clause_t{ e, m[a] });
cnf.add_clause(pedcnf_t::clause_t{ -e, -p[a], -m[a] });
} else if (is_heterozygous(gen)) {
cnf.add_clause<3>((lit_t[]){ e, p[a], m[a] });
cnf.add_clause<3>((lit_t[]){ e, -p[a], -m[a] });
cnf.add_clause<3>((lit_t[]){ e, p[b], m[b] });
cnf.add_clause<3>((lit_t[]){ e, -p[b], -m[b] });
cnf.add_clause(pedcnf_t::clause_t{ e, p[a], m[a] });
cnf.add_clause(pedcnf_t::clause_t{ e, -p[a], -m[a] });
cnf.add_clause(pedcnf_t::clause_t{ e, p[b], m[b] });
cnf.add_clause(pedcnf_t::clause_t{ e, -p[b], -m[b] });

cnf.add_clause<3>((lit_t[]){ e, -p[a], -p[b] });
cnf.add_clause<3>((lit_t[]){ e, -m[a], -m[b] });
cnf.add_clause(pedcnf_t::clause_t{ e, -p[a], -p[b] });
cnf.add_clause(pedcnf_t::clause_t{ e, -m[a], -m[b] });

cnf.add_clause<5>((lit_t[]){ -e, -p[a], m[a], p[b], -m[b] });
cnf.add_clause<5>((lit_t[]){ -e, p[a], -m[a], -p[b], m[b] });
cnf.add_clause(pedcnf_t::clause_t{ -e, -p[a], m[a], p[b], -m[b] });
cnf.add_clause(pedcnf_t::clause_t{ -e, p[a], -m[a], -p[b], m[b] });
} else {
MY_FAIL;
}
Expand Down Expand Up @@ -335,12 +335,12 @@ class ped2cnf_conv_t:
lit_t m= cnf.get_m(progr_id_parent, locus);
lit_t c= (!is_mother) ?
cnf.get_p(progr_id_ind, locus) : cnf.get_m(progr_id_ind, locus);
cnf.add_clause<3>((lit_t[]){ s, p, -c});
cnf.add_clause<3>((lit_t[]){ s, -p, c});
cnf.add_clause<3>((lit_t[]){-s, m, -c});
cnf.add_clause<3>((lit_t[]){-s, -m, c});
cnf.add_clause<3>((lit_t[]){-p, -m, c});
cnf.add_clause<3>((lit_t[]){ p, m, -c});
cnf.add_clause(pedcnf_t::clause_t{ s, p, -c});
cnf.add_clause(pedcnf_t::clause_t{ s, -p, c});
cnf.add_clause(pedcnf_t::clause_t{-s, m, -c});
cnf.add_clause(pedcnf_t::clause_t{-s, -m, c});
cnf.add_clause(pedcnf_t::clause_t{-p, -m, c});
cnf.add_clause(pedcnf_t::clause_t{ p, m, -c});
/************
* End clauses for Mendelian consistency (s-variables)
************/
Expand All @@ -354,12 +354,12 @@ class ped2cnf_conv_t:
cnf.get_rp(progr_id_ind, locus) : cnf.get_rm(progr_id_ind, locus);
// s == prevs + r
#ifdef AVOID_XOR_CLAUSES
cnf.add_clause<3>((lit_t[]){-s, r, prevs});
cnf.add_clause<3>((lit_t[]){-s, -r, -prevs});
cnf.add_clause<3>((lit_t[]){ s, r, -prevs});
cnf.add_clause<3>((lit_t[]){ s, -r, prevs});
cnf.add_clause(pedcnf_t::clause_t{-s, r, prevs});
cnf.add_clause(pedcnf_t::clause_t{-s, -r, -prevs});
cnf.add_clause(pedcnf_t::clause_t{ s, r, -prevs});
cnf.add_clause(pedcnf_t::clause_t{ s, -r, prevs});
#else
cnf.add_xor_clause<3>((lit_t[]){-s, r, prevs});
cnf.add_xor_clause(pedcnf_t::xor_clause_t{-s, r, prevs});
#endif
}
/************
Expand All @@ -386,12 +386,12 @@ class ped2cnf_conv_t:
lit_t m= cnf.get_mm(progr_id_parent, locus, j);
lit_t c= (!is_mother) ?
cnf.get_pm(progr_id_ind, locus, j) : cnf.get_mm(progr_id_ind, locus, j);
cnf.add_clause<3>((lit_t[]){ s, p, -c});
cnf.add_clause<3>((lit_t[]){ s, -p, c});
cnf.add_clause<3>((lit_t[]){-s, m, -c});
cnf.add_clause<3>((lit_t[]){-s, -m, c});
cnf.add_clause<3>((lit_t[]){-p, -m, c});
cnf.add_clause<3>((lit_t[]){ p, m, -c});
cnf.add_clause(pedcnf_t::clause_t{ s, p, -c});
cnf.add_clause(pedcnf_t::clause_t{ s, -p, c});
cnf.add_clause(pedcnf_t::clause_t{-s, m, -c});
cnf.add_clause(pedcnf_t::clause_t{-s, -m, c});
cnf.add_clause(pedcnf_t::clause_t{-p, -m, c});
cnf.add_clause(pedcnf_t::clause_t{ p, m, -c});
}
/************
* End clauses for Mendelian consistency (s-variables)
Expand All @@ -406,12 +406,12 @@ class ped2cnf_conv_t:
cnf.get_rp(progr_id_ind, locus) : cnf.get_rm(progr_id_ind, locus);
// s == prevs + r
#ifdef AVOID_XOR_CLAUSES
cnf.add_clause<3>((lit_t[]){-s, r, prevs});
cnf.add_clause<3>((lit_t[]){-s, -r, -prevs});
cnf.add_clause<3>((lit_t[]){ s, r, -prevs});
cnf.add_clause<3>((lit_t[]){ s, -r, prevs});
cnf.add_clause(pedcnf_t::clause_t{-s, r, prevs});
cnf.add_clause(pedcnf_t::clause_t{-s, -r, -prevs});
cnf.add_clause(pedcnf_t::clause_t{ s, r, -prevs});
cnf.add_clause(pedcnf_t::clause_t{ s, -r, prevs});
#else
cnf.add_xor_clause<3>((lit_t[]){-s, r, prevs});
cnf.add_xor_clause(pedcnf_t::xor_clause_t{-s, r, prevs});
#endif
}
/************
Expand Down
12 changes: 0 additions & 12 deletions include/pedcnf.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -336,22 +336,10 @@ class pedcnf_t
void add_xor_clause(const xor_clause_t& clause);
#endif

template <int LEN>
void add_clause(const lit_t* const clause) {
add_clause(clause_t(clause, clause+LEN));
};

void add_clause(const lit_t* const clause, const size_t LEN) {
add_clause(clause_t(clause, clause+LEN));
};

#ifndef AVOID_XOR_CLAUSES
template <int LEN>
void add_xor_clause(const lit_t* const clause) {
add_xor_clause(xor_clause_t(clause, clause+LEN));
};
#endif

#ifndef ONLY_INTERNAL_SAT_SOLVER
bool is_satisfying_assignment() const;

Expand Down
2 changes: 1 addition & 1 deletion include/sat_solver_interface.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
#include <boost/cstdint.hpp>

typedef boost::int_fast32_t lit_t;
typedef boost::uint_fast32_t var_t;
typedef boost::int_fast32_t var_t;


// Check that the 'right' preprocessor symbols have been defined:
Expand Down
18 changes: 9 additions & 9 deletions src/lib/assumptions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,71 +112,71 @@ class assumption_manager_t
" Adding anyway...");
}
lit_t iv= cnf.get_sp(v.get<1>(), v.get<2>());
cnf.add_clause<1>( (lit_t[]){ (value? +1 : -1) * iv } );
cnf.add_clause(pedcnf_t::clause_t{ (value? +1 : -1) * iv } );
++n_assumptions;
} else if (v.get<0>() == ped_var_kind::SM) {
if (!cnf.has_sm(v.get<1>(), v.get<2>())) {
L_WARN("Variable '" << v << "' does not exist in the SAT instance."
" Adding anyway...");
}
lit_t iv= cnf.get_sm(v.get<1>(), v.get<2>());
cnf.add_clause<1>( (lit_t[]){ (value? +1 : -1) * iv } );
cnf.add_clause(pedcnf_t::clause_t{ (value? +1 : -1) * iv } );
++n_assumptions;
} else if (v.get<0>() == ped_var_kind::P) {
if (!cnf.has_p(v.get<1>(), v.get<2>())) {
L_WARN("Variable '" << v << "' does not exist in the SAT instance."
" Adding anyway...");
}
lit_t iv= cnf.get_p(v.get<1>(), v.get<2>());
cnf.add_clause<1>( (lit_t[]){ (value? +1 : -1) * iv } );
cnf.add_clause(pedcnf_t::clause_t{ (value? +1 : -1) * iv } );
++n_assumptions;
} else if (v.get<0>() == ped_var_kind::M) {
if (!cnf.has_m(v.get<1>(), v.get<2>())) {
L_WARN("Variable '" << v << "' does not exist in the SAT instance."
" Adding anyway...");
}
lit_t iv= cnf.get_m(v.get<1>(), v.get<2>());
cnf.add_clause<1>( (lit_t[]){ (value? +1 : -1) * iv } );
cnf.add_clause(pedcnf_t::clause_t{ (value? +1 : -1) * iv } );
++n_assumptions;
} else if (v.get<0>() == ped_var_kind::RP) {
if (!cnf.has_rp(v.get<1>(), v.get<2>())) {
L_WARN("Variable '" << v << "' does not exist in the SAT instance."
" Adding anyway...");
}
lit_t iv= cnf.get_rp(v.get<1>(), v.get<2>());
cnf.add_clause<1>( (lit_t[]){ (value? +1 : -1) * iv } );
cnf.add_clause(pedcnf_t::clause_t{ (value? +1 : -1) * iv } );
++n_assumptions;
} else if (v.get<0>() == ped_var_kind::RM) {
if (!cnf.has_rm(v.get<1>(), v.get<2>())) {
L_WARN("Variable '" << v << "' does not exist in the SAT instance."
" Adding anyway...");
}
lit_t iv= cnf.get_rm(v.get<1>(), v.get<2>());
cnf.add_clause<1>( (lit_t[]){ (value? +1 : -1) * iv } );
cnf.add_clause(pedcnf_t::clause_t{ (value? +1 : -1) * iv } );
++n_assumptions;
} else if (v.get<0>() == ped_var_kind::PM) {
if (!cnf.has_pm(v.get<1>(), v.get<2>(), v.get<3>())) {
L_WARN("Variable '" << v << "' does not exist in the SAT instance."
" Adding anyway...");
}
lit_t iv= cnf.get_pm(v.get<1>(), v.get<2>(), v.get<3>());
cnf.add_clause<1>( (lit_t[]){ (value? +1 : -1) * iv } );
cnf.add_clause(pedcnf_t::clause_t{ (value? +1 : -1) * iv } );
++n_assumptions;
} else if (v.get<0>() == ped_var_kind::MM) {
if (!cnf.has_mm(v.get<1>(), v.get<2>(), v.get<3>())) {
L_WARN("Variable '" << v << "' does not exist in the SAT instance."
" Adding anyway...");
}
lit_t iv= cnf.get_mm(v.get<1>(), v.get<2>(), v.get<3>());
cnf.add_clause<1>( (lit_t[]){ (value? +1 : -1) * iv } );
cnf.add_clause(pedcnf_t::clause_t{ (value? +1 : -1) * iv } );
++n_assumptions;
} else if (v.get<0>() == ped_var_kind::E) {
if (!cnf.has_e(v.get<1>(), v.get<2>())) {
L_WARN("Variable '" << v << "' does not exist in the SAT instance."
" Adding anyway...");
}
lit_t iv= cnf.get_e(v.get<1>(), v.get<2>());
cnf.add_clause<1>( (lit_t[]){ (value? +1 : -1) * iv } );
cnf.add_clause(pedcnf_t::clause_t{ (value? +1 : -1) * iv } );
++n_assumptions;
} else if (v.get<0>() == ped_var_kind::DUMMY) {
L_FATAL("Error while processing assumption '" << buff << "' ==> ("
Expand Down
2 changes: 1 addition & 1 deletion src/lib/ped2cnf-constraints.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ all_false_constraints_t::_handle_constraints(pedcnf_t& cnf,
INFO("No " << _description << " are allowed.");
BOOST_FOREACH(const individual_variables_t& ivar, variables) {
BOOST_FOREACH(const var_t& var, ivar) {
cnf.add_clause<1>((lit_t[]){ -var });
cnf.add_clause(pedcnf_t::clause_t{ -var });
}
}
};
Expand Down
Loading

0 comments on commit 5b5ab3e

Please sign in to comment.