#include "formula_profile.h"

LYMPHOSAT_MATCHER {
    const bool common =
        profile.exactly_one_intra_pair_coverage >= 0.99 &&
        profile.dominant_clause_len == 3 &&
        profile.horn_clause_fraction >= 0.9958 &&
        profile.all_positive_clause_fraction <= 0.007;

    const bool low_binary_random_like =
        common &&
        profile.binary_clause_fraction <= 0.23 &&
        profile.all_negative_clause_fraction <= 0.035 &&
        profile.normalized_clause_span_mean <= 0.125 &&
        profile.binary_graph_degree_mean >= 6.5 &&
        profile.binary_graph_degree_mean <= 13.0 &&
        profile.dominant_clause_len_fraction >= 0.75;

    const bool medium_binary_graph_like =
        common &&
        profile.binary_clause_fraction >= 0.24 &&
        profile.binary_clause_fraction <= 0.2475 &&
        profile.all_negative_clause_fraction >= 0.029 &&
        profile.all_negative_clause_fraction <= 0.052 &&
        profile.normalized_clause_span_mean >= 0.053 &&
        profile.normalized_clause_span_mean <= 0.125 &&
        profile.binary_graph_degree_mean >= 8.0 &&
        profile.binary_graph_degree_mean <= 11.0 &&
        profile.dominant_clause_len_fraction >= 0.72;

    const bool larger_binary_graph_like =
        common &&
        profile.binary_clause_fraction >= 0.255 &&
        profile.binary_clause_fraction <= 0.3 &&
        profile.num_vars <= 15000 &&
        profile.all_negative_clause_fraction >= 0.032 &&
        profile.all_negative_clause_fraction <= 0.053 &&
        profile.normalized_clause_span_mean >= 0.05 &&
        profile.normalized_clause_span_mean <= 0.11 &&
        profile.binary_graph_degree_mean >= 8.0 &&
        profile.binary_graph_degree_mean <= 9.0 &&
        profile.dominant_clause_len_fraction >= 0.68;

    const bool dense_small_graph_like =
        common &&
        profile.binary_clause_fraction >= 0.33 &&
        profile.num_vars <= 5000 &&
        profile.all_negative_clause_fraction >= 0.045 &&
        profile.normalized_clause_span_mean >= 0.09 &&
        profile.normalized_clause_span_mean <= 0.11 &&
        profile.binary_graph_degree_mean >= 7.0 &&
        profile.binary_graph_degree_mean <= 8.5 &&
        profile.dominant_clause_len_fraction >= 0.60;

    return low_binary_random_like || medium_binary_graph_like ||
           larger_binary_graph_like || dense_small_graph_like;
}
