From 721d37b9a17f295b21418a787297a3448c770216 Mon Sep 17 00:00:00 2001 From: Moshiii Date: Sun, 10 May 2020 18:42:10 -0400 Subject: [PATCH 1/2] lefted some comments --- requirements.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..feb0a6b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,21 @@ +absl-py==0.9.0 +astor==0.8.1 +gast==0.2.2 +google-pasta==0.2.0 +grpcio==1.28.1 +h5py==2.10.0 +importlib-metadata==1.6.0 +Keras-Applications==1.0.8 +Keras-Preprocessing==1.1.0 +Markdown==3.2.2 +numpy==1.18.4 +opt-einsum==3.2.1 +protobuf==3.11.3 +six==1.14.0 +tensorboard==1.15.0 +tensorflow-estimator==1.15.1 +tensorflow-gpu==1.15.0 +termcolor==1.1.0 +Werkzeug==1.0.1 +wrapt==1.12.1 +zipp==3.1.0 From 9c3ddf24e9bede33deb42f70c6ad148a584051ef Mon Sep 17 00:00:00 2001 From: Moshi Wei Date: Tue, 26 May 2020 23:05:06 -0400 Subject: [PATCH 2/2] update with simplified function --- .gitignore | 5 +++- Input.java | 8 ++++-- code2seq_mutate.py | 33 ++++++++++++++++++++++ interactive_predict.py | 6 ++++ interactive_predict_mutate.py | 53 +++++++++++++++++++++++++++++++++++ 5 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 code2seq_mutate.py create mode 100644 interactive_predict_mutate.py diff --git a/.gitignore b/.gitignore index 30195d3..db016e3 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,7 @@ *.iml *.xml *.pyc - +win_env/ +data/ +env/ +models/ \ No newline at end of file diff --git a/Input.java b/Input.java index d2cb206..b0b2726 100644 --- a/Input.java +++ b/Input.java @@ -1,3 +1,5 @@ -public String getName() { - return name; - } \ No newline at end of file +public String add(int x, int y) { + int var=0; + return x+y; + int asdjhfjhasdj=199999; + } diff --git a/code2seq_mutate.py b/code2seq_mutate.py new file mode 100644 index 0000000..8158c7e --- /dev/null +++ b/code2seq_mutate.py @@ -0,0 +1,33 @@ +from argparse import ArgumentParser +import numpy as np +import tensorflow as tf + +from config import Config +from interactive_predict import InteractivePredictor +from model import Model + +if __name__ == '__main__': + parser = ArgumentParser() + + parser.add_argument("-l", "--load", dest="load_path", + help="path to saved file", metavar="FILE", required=False) + parser.add_argument('--predict', action='store_true') + parser.add_argument('--debug', action='store_true') + parser.add_argument('--seed', type=int, default=239) + args = parser.parse_args() + + np.random.seed(args.seed) + tf.set_random_seed(args.seed) + + if args.debug: + config = Config.get_debug_config(args) + else: + config = Config.get_default_config(args) + + model = Model(config) + print('Created model') + if args.predict: + predictor = InteractivePredictor(config, model) + predictor.predict() + + model.close_session() diff --git a/interactive_predict.py b/interactive_predict.py index 039c037..5589388 100644 --- a/interactive_predict.py +++ b/interactive_predict.py @@ -14,6 +14,7 @@ def __init__(self, config, model): model.predict([]) self.model = model self.config = config + # why defining a extractor self.path_extractor = Extractor(config, EXTRACTION_API, self.config.MAX_PATH_LENGTH, max_path_width=2) @staticmethod @@ -32,12 +33,17 @@ def predict(self): return user_input = ' '.join(self.read_file(input_filename)) try: + # what is path extractor doing? predict_lines, pc_info_dict = self.path_extractor.extract_paths(user_input) +########## predict_lines containes the transformed string + print(predict_lines) except ValueError: continue + model_results = self.model.predict(predict_lines) prediction_results = Common.parse_results(model_results, pc_info_dict, topk=SHOW_TOP_CONTEXTS) +########## prediction_results containes the predict result for index, method_prediction in prediction_results.items(): print('Original name:\t' + method_prediction.original_name) if self.config.BEAM_WIDTH == 0: diff --git a/interactive_predict_mutate.py b/interactive_predict_mutate.py new file mode 100644 index 0000000..53d5016 --- /dev/null +++ b/interactive_predict_mutate.py @@ -0,0 +1,53 @@ +from common import Common +from extractor import Extractor + +SHOW_TOP_CONTEXTS = 10 +MAX_PATH_LENGTH = 8 +MAX_PATH_WIDTH = 2 +EXTRACTION_API = 'https://po3g2dx2qa.execute-api.us-east-1.amazonaws.com/production/extractmethods' + + +class InteractivePredictor: + exit_keywords = ['exit', 'quit', 'q'] + + def __init__(self, config, model): + model.predict([]) + self.model = model + self.config = config + # why defining a extractor + self.path_extractor = Extractor(config, EXTRACTION_API, self.config.MAX_PATH_LENGTH, max_path_width=2) + + @staticmethod + def read_file(input_filename): + with open(input_filename, 'r') as file: + return file.readlines() + + def predict(self): + input_filename = 'Input.java' + user_input = ' '.join(self.read_file(input_filename)) + try: + # what is path extractor doing? + predict_lines, pc_info_dict = self.path_extractor.extract_paths(user_input) +########## predict_lines containes the transformed string + except ValueError: + continue + + model_results = self.model.predict(predict_lines) + + prediction_results = Common.parse_results(model_results, pc_info_dict, topk=SHOW_TOP_CONTEXTS) +########## prediction_results containes the predict result + for index, method_prediction in prediction_results.items(): + print('Original name:\t' + method_prediction.original_name) + if self.config.BEAM_WIDTH == 0: + print('Predicted:\t%s' % [step.prediction for step in method_prediction.predictions]) + for timestep, single_timestep_prediction in enumerate(method_prediction.predictions): + print('Attention:') + print('TIMESTEP: %d\t: %s' % (timestep, single_timestep_prediction.prediction)) + for attention_obj in single_timestep_prediction.attention_paths: + print('%f\tcontext: %s,%s,%s' % ( + attention_obj['score'], attention_obj['token1'], attention_obj['path'], + attention_obj['token2'])) + else: + print('Predicted:') + for predicted_seq in method_prediction.predictions: + print('\t%s' % predicted_seq.prediction)