3#if defined(LOGGING) && !defined(KISSAT_QUIET)
11static void begin_logging (
kissat *
solver,
const char *prefix,
12 const char *fmt, va_list *ap) {
15 fputs (
solver->prefix, stdout);
17 printf (
"%s %u ", prefix,
solver->level);
21static void end_logging (
void) {
28void kissat_begin_logging (
kissat *
solver,
const char *prefix,
29 const char *fmt, ...) {
32 begin_logging (
solver, prefix, fmt, &ap);
36void kissat_end_logging (
void) { end_logging (); }
38void kissat_log_msg (
kissat *
solver,
const char *prefix,
const char *fmt,
42 begin_logging (
solver, prefix, fmt, &ap);
47static void append_sprintf (
char *str,
const char *fmt, ...) {
50 const size_t len =
strlen (str);
51 vsprintf (str + len, fmt, ap);
56 const unsigned *repr) {
61 append_sprintf (res,
"(%d)", kissat_export_literal (
solver,
lit));
62 if (repr && repr[
lit] !=
lit) {
64 unsigned repr_lit = repr[
lit];
65 append_sprintf (res,
"%u", repr_lit);
67 append_sprintf (res,
"(%d)",
68 kissat_export_literal (
solver, repr_lit));
74 append_sprintf (res,
"=%d",
value);
76 append_sprintf (res,
"@%u",
LEVEL (
lit));
87const char *kissat_log_var (
kissat *
solver,
unsigned idx) {
90 const unsigned lit =
LIT (idx);
96static void log_lits (
kissat *
solver,
size_t size,
const unsigned *lits,
97 const unsigned *counts) {
98 for (
size_t i = 0; i <
size; i++) {
99 const unsigned lit = lits[i];
103 printf (
"#%u", counts[
lit]);
107static void log_reprs (
kissat *
solver,
size_t size,
const unsigned *lits,
108 const unsigned *repr) {
109 for (
size_t i = 0; i <
size; i++) {
110 const unsigned lit = lits[i];
112 fputs (LOGREPR (
lit, repr), stdout);
116void kissat_log_lits (
kissat *
solver,
const char *prefix,
size_t size,
117 const unsigned *
const lits,
const char *fmt, ...) {
120 begin_logging (
solver, prefix, fmt, &ap);
122 printf (
" size %zu clause", size);
123 log_lits (
solver, size, lits, 0);
127void kissat_log_litset (
kissat *
solver,
const char *prefix,
size_t size,
128 const unsigned *
const lits,
const char *fmt, ...) {
131 begin_logging (
solver, prefix, fmt, &ap);
133 printf (
" size %zu literal set {", size);
134 log_lits (
solver, size, lits, 0);
135 fputs (
" }", stdout);
139void kissat_log_litpart (
kissat *
solver,
const char *prefix,
size_t size,
140 const unsigned *
const lits,
const char *fmt, ...) {
143 begin_logging (
solver, prefix, fmt, &ap);
146 for (
size_t i = 0; i <
size; i++)
149 printf (
" %zu literals %zu classes literal partition [", size - classes,
151 for (
size_t i = 0; i <
size; i++) {
152 const unsigned lit = lits[i];
155 fputs (
" |", stdout);
161 fputs (
" ]", stdout);
165void kissat_log_counted_ref_lits (
kissat *
solver,
const char *prefix,
167 const unsigned *
const lits,
168 const unsigned *
const counts,
169 const char *fmt, ...) {
172 begin_logging (
solver, prefix, fmt, &ap);
174 printf (
" size %zu clause", size);
175 printf (
"[%u]", ref);
176 log_lits (
solver, size, lits, counts);
180void kissat_log_counted_lits (
kissat *
solver,
const char *prefix,
181 size_t size,
const unsigned *
const lits,
182 const unsigned *
const counts,
const char *fmt,
186 begin_logging (
solver, prefix, fmt, &ap);
188 printf (
" size %zu literals", size);
189 log_lits (
solver, size, lits, counts);
193void kissat_log_resolvent (
kissat *
solver,
const char *prefix,
194 const char *fmt, ...) {
197 begin_logging (
solver, prefix, fmt, &ap);
200 printf (
" size %zu resolvent", size);
202 log_lits (
solver, size, lits, 0);
206void kissat_log_ints (
kissat *
solver,
const char *prefix,
size_t size,
207 const int *
const lits,
const char *fmt, ...) {
210 begin_logging (
solver, prefix, fmt, &ap);
212 printf (
" size %zu external literals clause", size);
213 for (
size_t i = 0; i <
size; i++)
214 printf (
" %d", lits[i]);
218void kissat_log_unsigneds (
kissat *
solver,
const char *prefix,
size_t size,
219 const unsigned *
const lits,
const char *fmt,
223 begin_logging (
solver, prefix, fmt, &ap);
225 printf (
" size %zu clause", size);
226 for (
size_t i = 0; i <
size; i++)
227 printf (
" %u", lits[i]);
232 const char *op,
const char *empty_rhs_constant,
233 const unsigned *repr,
unsigned lhs,
size_t size,
234 const unsigned *rhs) {
235 printf (
" arity %zu %s gate", size,
type);
236 if (
id != INVALID_GATE_ID)
237 printf (
"[%zu]",
id);
240 fputs (
"<LHS>", stdout);
242 fputs (LOGREPR (lhs, repr), stdout);
244 for (
size_t i = 0; i <
size; i++) {
246 fputs (i ? op :
":=", stdout);
248 fputs (LOGREPR (rhs[i], repr), stdout);
251 fputs (
" := ", stdout);
252 fputs (empty_rhs_constant, stdout);
256void kissat_log_and_gate (
kissat *
solver,
const char *prefix,
size_t id,
257 unsigned *repr,
unsigned lhs,
size_t size,
258 const unsigned *rhs,
const char *fmt, ...) {
261 begin_logging (
solver, prefix, fmt, &ap);
263 log_gate (
solver,
id,
"AND",
"&",
"<true>", repr, lhs, size, rhs);
267void kissat_log_xor_gate (
kissat *
solver,
const char *prefix,
size_t id,
268 unsigned *repr,
unsigned lhs,
size_t size,
269 const unsigned *rhs,
const char *fmt, ...) {
272 begin_logging (
solver, prefix, fmt, &ap);
274 log_gate (
solver,
id,
"XOR",
"^",
"<false>", repr, lhs, size, rhs);
278void kissat_log_ite_gate (
kissat *
solver,
const char *prefix,
size_t id,
279 unsigned *repr,
unsigned lhs,
unsigned cond,
280 unsigned then_lit,
unsigned else_lit,
281 const char *fmt, ...) {
284 begin_logging (
solver, prefix, fmt, &ap);
286 printf (
" ITE gate");
287 if (
id != INVALID_GATE_ID)
288 printf (
"[%zu]",
id);
291 fputs (
"<LHS>", stdout);
293 fputs (LOGREPR (lhs, repr), stdout);
294 fputs (
" := ", stdout);
295 fputs (LOGREPR (cond, repr), stdout);
296 fputs (
" ? ", stdout);
297 fputs (LOGREPR (then_lit, repr), stdout);
298 fputs (
" : ", stdout);
299 fputs (LOGREPR (else_lit, repr), stdout);
303void kissat_log_extensions (
kissat *
solver,
const char *prefix,
size_t size,
304 const extension *
const exts,
const char *fmt,
309 begin_logging (
solver, prefix, fmt, &ap);
312 const size_t pos = exts - begin;
313 printf (
" extend[%zu]",
pos);
314 printf (
" %d", exts[0].
lit);
316 fputs (
" :", stdout);
317 for (
size_t i = 1; i <
size; i++)
318 printf (
" %d", exts[i].
lit);
324 if (c == &
solver->conflict) {
325 fputs (
"static ", stdout);
326 fputs (c->
redundant ?
"redundant" :
"irredundant", stdout);
327 fputs (
" binary conflict clause", stdout);
330 printf (
"redundant glue %u", c->
glue);
332 fputs (
"irredundant", stdout);
333 printf (
" size %u", c->
size);
335 fputs (
" reason", stdout);
337 fputs (
" garbage", stdout);
338 fputs (
" clause", stdout);
339 if (kissat_clause_in_arena (
solver, c)) {
341 printf (
"[%u]", ref);
347 const char *fmt, ...) {
350 begin_logging (
solver, prefix, fmt, &ap);
357void kissat_log_counted_clause (
kissat *
solver,
const char *prefix,
358 const clause *c,
const unsigned *counts,
359 const char *fmt, ...) {
362 begin_logging (
solver, prefix, fmt, &ap);
369void kissat_log_repr_clause (
kissat *
solver,
const char *prefix,
370 const clause *c,
const unsigned *repr,
371 const char *fmt, ...) {
374 begin_logging (
solver, prefix, fmt, &ap);
381static void log_binary (
kissat *
solver,
unsigned a,
unsigned b) {
382 printf (
" binary clause %s %s",
LOGLIT (a),
LOGLIT (b));
385void kissat_log_binary (
kissat *
solver,
const char *prefix,
unsigned a,
386 unsigned b,
const char *fmt, ...) {
389 begin_logging (
solver, prefix, fmt, &ap);
391 log_binary (
solver, a, b);
395void kissat_log_unary (
kissat *
solver,
const char *prefix,
unsigned a,
396 const char *fmt, ...) {
399 begin_logging (
solver, prefix, fmt, &ap);
401 printf (
" unary clause %s",
LOGLIT (a));
412 const char *fmt, ...) {
415 begin_logging (
solver, prefix, fmt, &ap);
421void kissat_log_watch (
kissat *
solver,
const char *prefix,
unsigned lit,
425 begin_logging (
solver, prefix, fmt, &ap);
435 unsigned size,
const unsigned *lits,
const char *fmt,
439 begin_logging (
solver, prefix, fmt, &ap);
441 printf (
" size %u XOR gate ", size);
442 fputs (kissat_log_lit (
solver,
lit), stdout);
444 for (
unsigned i = 0; i <
size; i++) {
446 fputs (
" ^ ", stdout);
449 fputs (kissat_log_lit (
solver, lits[i]), stdout);
ABC_NAMESPACE_IMPL_START typedef signed char value
type
CUBE COVER and CUBE typedefs ///.
#define KISSAT_assert(ignore)
int kissat_log_dummy_to_avoid_pedantic_warning
ABC_NAMESPACE_HEADER_START typedef unsigned reference