#include "formula_profile.h"

LYMPHOSAT_MATCHER {
    const bool low_positive_block_family =
        profile.all_positive_clause_fraction <= 0.013 &&
        profile.binary_clause_fraction >= 0.44 &&
        profile.binary_clause_fraction <= 0.59 &&
        profile.positive_block_clause_fraction <= 0.005 &&
        (profile.positive_block_candidate_len == 4 ||
         profile.positive_block_candidate_len == 5 ||
         profile.positive_block_candidate_len == 6 ||
         profile.positive_block_candidate_len == 7) &&
        profile.exactly_one_intra_pair_coverage >= 0.38 &&
        profile.exactly_one_intra_pair_coverage <= 0.58 &&
        profile.normalized_clause_span_mean >= 0.10 &&
        profile.normalized_clause_span_mean <= 0.18;

    const bool long_clause_variant =
        profile.binary_clause_fraction >= 0.439 &&
        profile.binary_clause_fraction <= 0.441 &&
        profile.all_positive_clause_fraction >= 0.0071 &&
        profile.all_positive_clause_fraction <= 0.0073 &&
        profile.positive_block_candidate_len == 7 &&
        profile.positive_block_clause_fraction >= 0.0019 &&
        profile.positive_block_clause_fraction <= 0.0022 &&
        profile.exactly_one_intra_pair_coverage >= 0.46 &&
        profile.exactly_one_intra_pair_coverage <= 0.47 &&
        profile.normalized_clause_span_mean >= 0.166 &&
        profile.normalized_clause_span_mean <= 0.167 &&
        profile.avg_clause_len >= 15.0 &&
        profile.positive_block_candidate_count >= 20;

    const bool dense_c210_variant =
        profile.binary_clause_fraction >= 0.47 &&
        profile.binary_clause_fraction <= 0.501 &&
        profile.all_positive_clause_fraction >= 0.07 &&
        profile.all_positive_clause_fraction <= 0.095 &&
        profile.positive_block_candidate_len == 11 &&
        profile.positive_block_clause_fraction >= 0.017 &&
        profile.positive_block_clause_fraction <= 0.023 &&
        profile.exactly_one_intra_pair_coverage >= 0.408 &&
        profile.exactly_one_intra_pair_coverage <= 0.43 &&
        profile.normalized_clause_span_mean >= 0.137 &&
        profile.normalized_clause_span_mean <= 0.153 &&
        profile.positive_block_candidate_count >= 150;

    return low_positive_block_family || long_clause_variant || dense_c210_variant;
}
