#include "formula_profile.h"

LYMPHOSAT_MATCHER {
    const bool enu_mode =
        profile.dominant_clause_len == 3 &&
        profile.binary_vars_touched_fraction == 1.0 &&
        profile.binary_graph_degree_max <= 6 &&
        profile.binary_clause_fraction >= 0.30 &&
        profile.binary_clause_fraction <= 0.36 &&
        profile.all_positive_clause_fraction >= 0.035 &&
        profile.all_positive_clause_fraction <= 0.060 &&
        profile.all_negative_clause_fraction >= 0.17 &&
        profile.all_negative_clause_fraction <= 0.24 &&
        profile.horn_clause_fraction >= 0.94 &&
        profile.positive_block_clause_fraction >= 0.035 &&
        profile.positive_block_clause_fraction <= 0.055 &&
        profile.normalized_clause_span_mean >= 0.29 &&
        profile.normalized_clause_span_mean <= 0.33 &&
        profile.polarity_balance_mean >= 0.10 &&
        profile.polarity_balance_mean <= 0.17 &&
        profile.positive_block_candidate_len == 2 &&
        profile.unit_clause_fraction == 0.0 &&
        profile.pure_var_fraction == 0.0;

    const bool uns_mode =
        profile.dominant_clause_len == 2 &&
        profile.binary_vars_touched_fraction == 1.0 &&
        profile.binary_graph_degree_max <= 6 &&
        profile.binary_clause_fraction >= 0.588 &&
        profile.binary_clause_fraction <= 0.596 &&
        profile.all_positive_clause_fraction >= 0.085 &&
        profile.all_positive_clause_fraction <= 0.115 &&
        profile.all_negative_clause_fraction >= 0.30 &&
        profile.all_negative_clause_fraction <= 0.40 &&
        profile.horn_clause_fraction >= 0.48 &&
        profile.horn_clause_fraction <= 0.52 &&
        profile.dual_horn_clause_fraction >= 0.61 &&
        profile.dual_horn_clause_fraction <= 0.70 &&
        profile.positive_block_clause_fraction >= 0.075 &&
        profile.positive_block_clause_fraction <= 0.12 &&
        profile.normalized_clause_span_mean >= 0.18 &&
        profile.normalized_clause_span_mean <= 0.35 &&
        profile.small_span_clause_fraction >= 0.28 &&
        profile.small_span_clause_fraction <= 0.34 &&
        profile.binary_graph_degree_mean >= 3.5 &&
        profile.binary_graph_degree_mean <= 3.9 &&
        profile.positive_block_candidate_len == 2 &&
        profile.unit_clause_fraction <= 0.001 &&
        profile.pure_var_fraction == 0.0 &&
        profile.avg_clause_len >= 4.2 &&
        profile.avg_clause_len <= 4.6;

    return enu_mode || uns_mode;
}
