File size: 1,272 Bytes
a5fb347
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
from graphCodeBert import GraphCodeBert
from keras.models import load_model, Model
import numpy as np, json

class Predict:

    def __generate_code_embedding(self,code_snippet):
        embedding = np.array(GraphCodeBert().generate_individual_embedding(code_snippet)).reshape((1,768))
        return embedding
    def __calculate_loss(self,code_embedding,model_name):
        model:Model = load_model(f'results/{model_name}.hdf5')
        return model.evaluate(code_embedding,code_embedding)


    def predict(self,code_snippet):
        model_name="autoencoder_25"

        code_embedding = self.__generate_code_embedding(code_snippet)
        print("Input code snippet shape: ",code_embedding.shape)
        loss = self.__calculate_loss(code_embedding,model_name)
        print("Reconstruction Loss: ",loss)

        with open('./results/metrics.json',"r") as fp:
            metric_json = json.loads(fp.read())
        
        threshold = metric_json["Threshold"]

        return "Not a candidate for refactoring" if loss>threshold else "Is a candidate for refactoring"




if __name__=="__main__":
    Predict().predict("""	public void sleep(){
		int s1 = 1;
		int s2 = 2;
		int s3 = 3;
		int s4 = 4;
		int s5 = 5;
		int s6 = 6;
		int s7 = 7;
		int s8 = 8;

	}""")