Petr Tsvetkov
Add edit distance and edit time metrics; add GPT-based metric
f5faae7
import json
from datetime import datetime, timedelta
from datasets import load_dataset
import config
def load_raw_rewriting_as_pandas():
return load_dataset(config.HF_RAW_DATASET_NAME,
split=config.HF_RAW_DATASET_SPLIT,
token=config.HF_TOKEN,
cache_dir=config.CACHE_DIR).to_pandas()
def load_full_commit_as_pandas():
return load_dataset(path=config.HF_FULL_COMMITS_DATASET_NAME,
name=config.HF_FULL_COMMITS_DATASET_SUBNAME,
split=config.HF_FULL_COMMITS_DATASET_SPLIT,
cache_dir=config.CACHE_DIR).to_pandas().rename(
columns={'message': 'reference'})
def edit_time_from_history(history_str):
history = json.loads(history_str)
if len(history) == 0:
return 0
timestamps = list(map(lambda e: datetime.fromisoformat(e['ts']), history))
delta = (max(timestamps) - min(timestamps))
return delta // timedelta(milliseconds=1)
def edit_time_from_timestamps(row):
loaded_ts = datetime.fromisoformat(row['loaded_ts'])
submitted_ts = datetime.fromisoformat(row['submitted_ts'])
delta = submitted_ts - loaded_ts
result = delta // timedelta(milliseconds=1)
return result if result >= 0 else None
def load_processed_rewriting_as_pandas():
manual_rewriting = load_raw_rewriting_as_pandas()[
["hash", "repo", "commit_msg_start", "commit_msg_end", "session", "commit_msg_history", "loaded_ts",
"submitted_ts"]]
manual_rewriting['edit_time_hist'] = manual_rewriting['commit_msg_history'].apply(edit_time_from_history)
manual_rewriting['edit_time'] = manual_rewriting.apply(edit_time_from_timestamps, axis=1)
manual_rewriting.drop(columns=['commit_msg_history', "loaded_ts", "submitted_ts"])
manual_rewriting.set_index(["hash", "repo"], inplace=True)
mods_dataset = load_full_commit_as_pandas()[["hash", "repo", "mods"]]
mods_dataset.set_index(["hash", "repo"], inplace=True)
return manual_rewriting.join(other=mods_dataset, how='left').reset_index()
def load_synthetic_as_pandas():
return load_dataset(config.HF_SYNTHETIC_DATASET_NAME,
split=config.HF_SYNTHETIC_DATASET_SPLIT,
token=config.HF_TOKEN,
cache_dir=config.CACHE_DIR).to_pandas()
def load_full_commit_with_predictions_as_pandas():
full_dataset = load_full_commit_as_pandas()
predictions_dataset = load_dataset(config.HF_PREDICTIONS_DATASET_NAME,
config.HF_PREDICTIONS_DATASET_SUBNAME,
split=config.HF_PREDICTIONS_DATASET_SPLIT,
cache_dir=config.CACHE_DIR
).to_pandas().sample(frac=1, random_state=config.RANDOM_STATE
).set_index(['hash', 'repo'])[["prediction"]]
predictions_dataset = predictions_dataset[~predictions_dataset.index.duplicated(keep='first')]
dataset = full_dataset.join(other=predictions_dataset, on=('hash', 'repo'))
return dataset.reset_index()