#include "formula_profile.h"

LYMPHOSAT_MATCHER {
    const bool queen_like =
        profile.exactly_one_intra_pair_coverage > 0.9999 &&
        profile.positive_block_candidate_len == 2 &&
        profile.occurrence_mean > 10.0 &&
        profile.binary_clause_fraction >= 0.24 &&
        profile.binary_clause_fraction <= 0.31 &&
        profile.ternary_clause_fraction >= 0.68 &&
        profile.ternary_clause_fraction <= 0.92 &&
        profile.binary_graph_degree_mean >= 13.0 &&
        profile.binary_graph_degree_mean <= 15.5 &&
        profile.normalized_clause_span_mean >= 0.085 &&
        profile.normalized_clause_span_mean <= 0.12 &&
        profile.polarity_balance_mean <= 0.26 &&
        profile.all_positive_clause_fraction <= 0.0020;

    const bool queen20_like =
        profile.exactly_one_intra_pair_coverage > 0.9999 &&
        profile.positive_block_candidate_len == 2 &&
        profile.binary_clause_fraction >= 0.43 &&
        profile.binary_clause_fraction <= 0.53 &&
        profile.ternary_clause_fraction >= 0.46 &&
        profile.ternary_clause_fraction <= 0.57 &&
        profile.binary_graph_degree_mean >= 19.0 &&
        profile.binary_graph_degree_mean <= 20.2 &&
        profile.normalized_clause_span_mean >= 0.08 &&
        profile.normalized_clause_span_mean <= 0.19 &&
        profile.all_negative_clause_fraction >= 0.48;

    const bool grid10_dense =
        profile.exactly_one_intra_pair_coverage > 0.9999 &&
        profile.positive_block_candidate_len == 2 &&
        profile.binary_clause_fraction >= 0.10 &&
        profile.binary_clause_fraction <= 0.14 &&
        profile.ternary_clause_fraction >= 0.84 &&
        profile.ternary_clause_fraction <= 0.90 &&
        profile.binary_graph_degree_mean >= 6.0 &&
        profile.binary_graph_degree_mean <= 6.3 &&
        profile.normalized_clause_span_mean >= 0.28 &&
        profile.normalized_clause_span_mean <= 0.31 &&
        profile.all_positive_clause_fraction >= 0.0065 &&
        profile.all_positive_clause_fraction <= 0.0075 &&
        profile.positive_block_clause_fraction >= 0.0043 &&
        profile.positive_block_clause_fraction <= 0.0050;

    const bool grid10_sparse =
        profile.exactly_one_intra_pair_coverage > 0.9999 &&
        profile.positive_block_candidate_len == 2 &&
        profile.binary_clause_fraction >= 0.24 &&
        profile.binary_clause_fraction <= 0.28 &&
        profile.ternary_clause_fraction >= 0.72 &&
        profile.ternary_clause_fraction <= 0.75 &&
        profile.binary_graph_degree_mean >= 6.1 &&
        profile.binary_graph_degree_mean <= 6.25 &&
        profile.normalized_clause_span_mean >= 0.26 &&
        profile.normalized_clause_span_mean <= 0.27 &&
        profile.all_positive_clause_fraction >= 0.011 &&
        profile.all_positive_clause_fraction <= 0.0135 &&
        profile.positive_block_clause_fraction >= 0.009 &&
        profile.positive_block_clause_fraction <= 0.0105;

    const bool myciel4_like =
        profile.exactly_one_intra_pair_coverage < 0.5 &&
        profile.positive_block_candidate_len == 23 &&
        profile.binary_clause_fraction >= 0.06 &&
        profile.binary_clause_fraction <= 0.12 &&
        profile.ternary_clause_fraction >= 0.88 &&
        profile.ternary_clause_fraction <= 0.93 &&
        profile.binary_graph_degree_mean >= 6.07 &&
        profile.binary_graph_degree_mean <= 6.10 &&
        profile.normalized_clause_span_mean >= 0.29 &&
        profile.normalized_clause_span_mean <= 0.32 &&
        profile.all_positive_clause_fraction >= 0.0123 &&
        profile.all_positive_clause_fraction <= 0.0138 &&
        profile.all_negative_clause_fraction >= 0.260 &&
        profile.all_negative_clause_fraction <= 0.271 &&
        profile.positive_block_clause_fraction >= 0.0103 &&
        profile.positive_block_clause_fraction <= 0.0106 &&
        profile.occurrence_mean >= 12.2 &&
        profile.occurrence_mean <= 12.7;

    const bool queen6_like =
        profile.exactly_one_intra_pair_coverage < 0.5 &&
        profile.positive_block_candidate_len == 36 &&
        profile.binary_clause_fraction >= 0.07 &&
        profile.binary_clause_fraction <= 0.09 &&
        profile.ternary_clause_fraction >= 0.90 &&
        profile.ternary_clause_fraction <= 0.93 &&
        profile.binary_graph_degree_mean >= 8.3 &&
        profile.binary_graph_degree_mean <= 8.6 &&
        profile.normalized_clause_span_mean >= 0.18 &&
        profile.normalized_clause_span_mean <= 0.21;

    const bool ins3_like =
        profile.exactly_one_intra_pair_coverage > 0.9999 &&
        profile.positive_block_candidate_len == 2 &&
        profile.binary_clause_fraction >= 0.07 &&
        profile.binary_clause_fraction <= 0.10 &&
        profile.ternary_clause_fraction >= 0.90 &&
        profile.ternary_clause_fraction <= 0.93 &&
        profile.binary_graph_degree_mean >= 6.0 &&
        profile.binary_graph_degree_mean <= 6.25 &&
        profile.normalized_clause_span_mean >= 0.17 &&
        profile.normalized_clause_span_mean <= 0.20 &&
        profile.all_positive_clause_fraction >= 0.0055 &&
        profile.all_positive_clause_fraction <= 0.0066;

    const bool sp003_like =
        profile.exactly_one_intra_pair_coverage < 0.5 &&
        profile.positive_block_candidate_len == 39 &&
        profile.binary_clause_fraction >= 0.08 &&
        profile.binary_clause_fraction <= 0.11 &&
        profile.ternary_clause_fraction >= 0.88 &&
        profile.ternary_clause_fraction <= 0.91 &&
        profile.binary_graph_degree_mean >= 7.4 &&
        profile.binary_graph_degree_mean <= 7.8 &&
        profile.normalized_clause_span_mean >= 0.29 &&
        profile.normalized_clause_span_mean <= 0.31 &&
        profile.all_positive_clause_fraction >= 0.0065 &&
        profile.all_positive_clause_fraction <= 0.0075;

    const bool full_ins4_like =
        profile.exactly_one_intra_pair_coverage > 0.9999 &&
        profile.positive_block_candidate_len == 2 &&
        profile.binary_clause_fraction >= 0.24 &&
        profile.binary_clause_fraction <= 0.32 &&
        profile.ternary_clause_fraction >= 0.68 &&
        profile.ternary_clause_fraction <= 0.76 &&
        profile.binary_graph_degree_mean >= 8.5 &&
        profile.binary_graph_degree_mean <= 9.5 &&
        profile.normalized_clause_span_mean >= 0.24 &&
        profile.normalized_clause_span_mean <= 0.27 &&
        profile.all_positive_clause_fraction >= 0.0075 &&
        profile.all_positive_clause_fraction <= 0.0090;

    const bool hc_square_like =
        profile.exactly_one_intra_pair_coverage < 0.5 &&
        profile.positive_block_candidate_len == 24 &&
        profile.binary_clause_fraction >= 0.03 &&
        profile.binary_clause_fraction <= 0.06 &&
        profile.ternary_clause_fraction >= 0.93 &&
        profile.ternary_clause_fraction <= 0.96 &&
        profile.binary_graph_degree_mean >= 5.2 &&
        profile.binary_graph_degree_mean <= 5.6 &&
        profile.normalized_clause_span_mean >= 0.06 &&
        profile.normalized_clause_span_mean <= 0.08;

    const bool le450_like =
        profile.exactly_one_intra_pair_coverage > 0.9999 &&
        profile.positive_block_candidate_len == 2 &&
        profile.binary_clause_fraction >= 0.50 &&
        profile.binary_clause_fraction <= 0.53 &&
        profile.ternary_clause_fraction >= 0.45 &&
        profile.ternary_clause_fraction <= 0.49 &&
        profile.binary_graph_degree_mean >= 23.0 &&
        profile.binary_graph_degree_mean <= 23.9 &&
        profile.normalized_clause_span_mean <= 0.01;

    return queen_like || queen20_like || grid10_dense || grid10_sparse ||
           myciel4_like || queen6_like || ins3_like || sp003_like ||
           full_ins4_like || hc_square_like || le450_like;
}
