in reference/src/main/python/similar.py [0:0]
def prune_last_jd(records, record2):
other_features = [Counter(record["features"]) for record in records]
ast = record2["ast"]
leaf_features, leaf_pair_features = collect_features_as_list(ast, False, True)
out_features = [None] * len(leaf_features)
current_features = Counter()
current_leaf_indices = []
for features1 in other_features:
score = distance(features1, current_features)
done = False
while not done:
max = score
max_idx = None
i = 0
for leaf_feature in leaf_features:
if leaf_feature is not None:
new_features = current_features + leaf_feature
# add_pair_features(new_features, leaf_pair_features, i, current_leaf_indices)
tmp = distance(features1, new_features)
if tmp > max:
max = tmp
max_idx = i
i += 1
if max_idx is not None:
score = max
out_features[max_idx] = leaf_features[max_idx]
current_features = current_features + leaf_features[max_idx]
# add_pair_features(current_features, leaf_pair_features, max_idx, current_leaf_indices)
current_leaf_indices.append(max_idx)
leaf_features[max_idx] = None
else:
done = True
global leaf_idx
leaf_idx = 0
pruned_ast = prune_ast(ast, out_features)[1]
pruned_features = collect_features_as_list(pruned_ast, False, False)[0]
return copy_record(record2, pruned_ast, pruned_features)