#include "formula_profile.h"

LYMPHOSAT_MATCHER {
    const bool rnd_encoding =
        profile.num_vars >= 2500 && profile.num_vars <= 7000 &&
        profile.clauses_seen >= 9000 && profile.clauses_seen <= 25000 &&
        profile.avg_clause_len >= 2.40 && profile.avg_clause_len <= 2.55 &&
        profile.binary_clause_fraction >= 0.45 &&
        profile.binary_clause_fraction <= 0.59 &&
        profile.ternary_clause_fraction >= 0.41 &&
        profile.ternary_clause_fraction <= 0.55 &&
        profile.all_positive_clause_fraction <= 0.0035 &&
        profile.all_negative_clause_fraction >= 0.43 &&
        profile.all_negative_clause_fraction <= 0.58 &&
        profile.mixed_clause_fraction >= 0.43 &&
        profile.mixed_clause_fraction <= 0.57 &&
        profile.horn_clause_fraction >= 0.997 &&
        profile.dual_horn_clause_fraction <= 0.03 &&
        profile.positive_block_candidate_len == 2 &&
        profile.positive_block_clause_fraction <= 0.004 &&
        profile.normalized_clause_span_mean >= 0.23 &&
        profile.normalized_clause_span_mean <= 0.31 &&
        profile.small_span_clause_fraction >= 0.09 &&
        profile.small_span_clause_fraction <= 0.15 &&
        profile.binary_graph_degree_mean >= 40 &&
        profile.binary_graph_degree_mean <= 70;

    const bool crn_encoding =
        profile.num_vars >= 1200 && profile.num_vars <= 70000 &&
        profile.clauses_seen >= 2000 && profile.clauses_seen <= 130000 &&
        profile.avg_clause_len >= 2.92 && profile.avg_clause_len <= 2.99 &&
        profile.binary_clause_fraction >= 0.015 &&
        profile.binary_clause_fraction <= 0.08 &&
        profile.ternary_clause_fraction >= 0.92 &&
        profile.all_positive_clause_fraction >= 0.01 &&
        profile.all_positive_clause_fraction <= 0.05 &&
        profile.all_negative_clause_fraction >= 0.005 &&
        profile.all_negative_clause_fraction <= 0.03 &&
        profile.mixed_clause_fraction >= 0.93 &&
        profile.horn_clause_fraction >= 0.95 &&
        profile.dual_horn_clause_fraction <= 0.055 &&
        profile.positive_block_candidate_len == 2 &&
        profile.positive_block_clause_fraction <= 0.05 &&
        profile.normalized_clause_span_mean >= 0.47 &&
        profile.normalized_clause_span_mean <= 0.495 &&
        profile.small_span_clause_fraction >= 0.015 &&
        profile.small_span_clause_fraction <= 0.07 &&
        profile.binary_graph_degree_mean >= 1.4 &&
        profile.binary_graph_degree_mean <= 1.7;

    return rnd_encoding || crn_encoding;
}
