#include "formula_profile.h"

LYMPHOSAT_MATCHER {
    const bool large_binary_ternary_variant =
        profile.avg_clause_len >= 2.45 && profile.avg_clause_len <= 2.52 &&
        profile.binary_clause_fraction >= 0.50 &&
        profile.binary_clause_fraction <= 0.53 &&
        profile.ternary_clause_fraction >= 0.47 &&
        profile.ternary_clause_fraction <= 0.49 &&
        profile.binary_vars_touched_fraction == 1.0 &&
        profile.binary_graph_degree_max == 10 &&
        profile.top5_occurrence_mass >= 0.242 &&
        profile.top5_occurrence_mass <= 0.2436 &&
        profile.all_positive_clause_fraction >= 0.010 &&
        profile.all_positive_clause_fraction <= 0.0155 &&
        profile.all_negative_clause_fraction >= 0.006 &&
        profile.all_negative_clause_fraction <= 0.008 &&
        profile.positive_block_candidate_count >= 480 &&
        profile.positive_block_candidate_count <= 560;

    const bool genurq3_corner =
        profile.num_vars >= 30 && profile.num_vars <= 50 &&
        profile.clauses_seen >= 100 && profile.clauses_seen <= 250 &&
        profile.avg_clause_len >= 4.2 && profile.avg_clause_len <= 4.6 &&
        profile.dominant_clause_len == 5 &&
        profile.ternary_clause_fraction >= 0.15;

    const bool small_5_clause_dominant_variant =
        profile.clauses_seen >= 100 &&
        profile.avg_clause_len >= 4.2 && profile.avg_clause_len <= 4.6 &&
        profile.binary_clause_fraction <= 0.01 &&
        profile.ternary_clause_fraction >= 0.09 &&
        profile.dominant_clause_len == 5 &&
        profile.horn_clause_fraction >= 0.24 &&
        profile.dual_horn_clause_fraction >= 0.24;

    return large_binary_ternary_variant || genurq3_corner ||
           small_5_clause_dominant_variant;
}
