debugZero / server /plausibility.py
The-Fool-09's picture
Upload folder using huggingface_hub
57a6d0c verified
import ast
from thefuzz import fuzz
def compute_ast_distance(original_code: str, mutated_code: str) -> float:
"""
Computes the string similarity distance between the AST dumps of the original
and mutated code using thefuzz (Levenshtein based).
Zero edits = 0 score.
Targeted (small) edit = high plausibility (closer to 1.0).
Random / wide corruption = low score.
"""
try:
orig_ast = ast.dump(ast.parse(original_code))
mut_ast = ast.dump(ast.parse(mutated_code))
except SyntaxError:
return 0.0
ratio = fuzz.ratio(orig_ast, mut_ast)
if ratio == 100:
return 0.0
# Empirical calibration: simple AST mutations typically result in
# a fuzz ratio of 85-98%.
if 85 <= ratio < 100:
return 1.0 # Perfect sweet spot
elif 50 <= ratio < 85:
# Linearly decay from 1.0 at 85 down to 0.1 at 50
return max(0.1, (ratio - 50) / 35.0)
else:
return 0.0