#include "formula_profile.h"

LYMPHOSAT_MATCHER {
    const bool large_vpn_cluster =
        profile.clauses_seen == 1'000'000 &&
        profile.num_vars >= 600'000 &&
        profile.avg_clause_len >= 2.35 &&
        profile.avg_clause_len <= 2.5 &&
        profile.binary_clause_fraction >= 0.72 &&
        profile.binary_clause_fraction <= 0.77 &&
        profile.ternary_clause_fraction >= 0.16 &&
        profile.ternary_clause_fraction <= 0.26 &&
        profile.all_positive_clause_fraction >= 0.06 &&
        profile.all_positive_clause_fraction <= 0.23 &&
        profile.all_negative_clause_fraction <= 0.24 &&
        profile.horn_clause_fraction >= 0.66 &&
        profile.dual_horn_clause_fraction >= 0.65 &&
        profile.dominant_clause_len == 2 &&
        profile.normalized_clause_span_mean <= 0.4;

    const bool small_vpn_cluster =
        profile.clauses_seen == 272'784 &&
        profile.num_vars == 75'528 &&
        profile.avg_clause_len >= 2.45 &&
        profile.avg_clause_len <= 2.46 &&
        profile.binary_clause_fraction >= 0.746 &&
        profile.binary_clause_fraction <= 0.747 &&
        profile.ternary_clause_fraction >= 0.188 &&
        profile.ternary_clause_fraction <= 0.190 &&
        profile.all_positive_clause_fraction >= 0.15 &&
        profile.all_positive_clause_fraction <= 0.23 &&
        profile.all_negative_clause_fraction >= 0.06 &&
        profile.all_negative_clause_fraction <= 0.21 &&
        profile.horn_clause_fraction >= 0.66 &&
        profile.horn_clause_fraction <= 0.84 &&
        profile.dual_horn_clause_fraction >= 0.66 &&
        profile.dual_horn_clause_fraction <= 0.76 &&
        profile.dominant_clause_len == 2 &&
        profile.normalized_clause_span_mean >= 0.20 &&
        profile.normalized_clause_span_mean <= 0.40;

    const bool mid_vpn_cluster =
        profile.clauses_seen == 1'000'000 &&
        profile.num_vars == 267'767 &&
        profile.avg_clause_len >= 2.46 &&
        profile.avg_clause_len <= 2.47 &&
        profile.binary_clause_fraction >= 0.754 &&
        profile.binary_clause_fraction <= 0.755 &&
        profile.ternary_clause_fraction >= 0.178 &&
        profile.ternary_clause_fraction <= 0.180 &&
        profile.all_positive_clause_fraction >= 0.15 &&
        profile.all_positive_clause_fraction <= 0.23 &&
        profile.all_negative_clause_fraction >= 0.06 &&
        profile.all_negative_clause_fraction <= 0.21 &&
        profile.horn_clause_fraction >= 0.66 &&
        profile.horn_clause_fraction <= 0.84 &&
        profile.dual_horn_clause_fraction >= 0.66 &&
        profile.dual_horn_clause_fraction <= 0.76 &&
        profile.dominant_clause_len == 2 &&
        profile.normalized_clause_span_mean >= 0.22 &&
        profile.normalized_clause_span_mean <= 0.40;

    return large_vpn_cluster || small_vpn_cluster || mid_vpn_cluster;
}
