7bool RandomSelector::is_valid_pair(tuple<double, Path, Path> path_pair) {
8 auto [similarity, path1, path2] = path_pair;
9 if (similarity < minimum_similarity)
11 if (similarity > maximum_similarity)
16vector<tuple<double, Path, Path>> RandomSelector::get_similarity_pairs_filtered() {
18 vector<tuple<double, Path, Path>> ret;
19 for (
auto path_pair : path_pairs) {
20 if (is_valid_pair(path_pair)) {
21 ret.push_back(path_pair);
27vector<tuple<double, Path, Path>> RandomSelector::make_random_selection(vector<tuple<double, Path, Path>> path_pairs) {
28 shuffle(path_pairs.begin(), path_pairs.end(), rng);
29 while (
int(path_pairs.size()) > maximum_quantity) {
30 path_pairs.pop_back();
35void RandomSelector::print_path_pairs(vector<tuple<double, Path, Path>> path_pairs) {
36 std::vector<RandomSelectorEntry> vector_entry = {};
37 for (
const auto& [similarity, path1, path2] : path_pairs) {
39 path1.format_path_message_in_pair(),
40 path2.format_path_message_in_pair(),
44 if (vector_entry.size() <= 0)
return;
54 similarity_table = _similarity_table;
56 minimum_similarity = 0;
57 maximum_similarity = 0;
62 if (
options.args.count(
"help") > 0)
65 if (
options.extra_args.size() <= 2) {
66 throw CLIError(
"Random expect three parameters, but less was given");
74 minimum_similarity = stod(
options.extra_args[0]);
75 maximum_similarity = stod(
options.extra_args[1]);
76 maximum_quantity = stod(
options.extra_args[2]);
78 auto path_pairs = get_similarity_pairs_filtered();
79 path_pairs = make_random_selection(path_pairs);
80 print_path_pairs(path_pairs);
Base class for CLI-related errors.
const CliOption * options() const final
bool validate(const ParsedOptions &options) override
Validate the arguments already analyzed.
bool run(const ParsedOptions &options) override
Handles random selection command.
Represents a similarity graph between functions (paths).
void update_similarity(double new_similarity_threshold)
Updates similarity threshold.
std::vector< std::tuple< double, Path, Path > > get_all_path_pairs_and_similarity_sorted_by_similarity()
Gets all similar path pairs with scores, sorted.
Random selection of similar code pairs.