File size: 2,257 Bytes
24543e1
 
 
 
 
 
 
 
2f27b07
24543e1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77a5389
 
 
 
 
 
 
 
 
 
 
 
 
 
24543e1
 
 
 
 
 
 
 
 
 
 
 
 
77a5389
24543e1
 
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from transformers import AutoTokenizer, AutoModelWithLMHead, SummarizationPipeline
import gradio as gr
import tokenize
import io

pipeline = SummarizationPipeline(
    model=AutoModelWithLMHead.from_pretrained("SEBIS/code_trans_t5_large_source_code_summarization_python_multitask_finetune"),
    tokenizer=AutoTokenizer.from_pretrained("SEBIS/code_trans_t5_large_source_code_summarization_python_multitask_finetune", skip_special_tokens=True),
    device=-1)
    
def code_summarizer(code):
  def code_tokenizer(line):
    result= []
    line = io.StringIO(line) 
    
    for toktype, tok, start, end, line in tokenize.generate_tokens(line.readline):
      if (not toktype == tokenize.COMMENT):
        if toktype == tokenize.STRING:
          result.append("CODE_STRING")
        elif toktype == tokenize.NUMBER:
          result.append("CODE_INTEGER")
        elif (not tok=="\n") and (not tok=="    "):
          result.append(str(tok))
    return ' '.join(result)
    
  tokenized_code = code_tokenizer(code)
  summary = pipeline(tokenized_code)
  return summary[0]['summary_text']

def call_examples():
  examples = [['''def findAverage(list):
                      sum = 0.
                      for x in list:
                          sum = sum + x
                      average = sum / len(list)
                      return average'''],
              ['''def findMax(list):
                      max = list[0]
                      for x in list:
                          if x > max:
                              max = x
                      return max'''],
              ['''def findRange(list):
                      return max(list)-min(list)''']]
  return examples

gr.Interface(fn=code_summarizer,
             inputs=gr.inputs.Textbox(
                 lines=5,
                 default='',
                 placeholder='Insert a Python code here',
                 label='PYTHON CODE'),
             outputs=gr.outputs.Textbox(
                 type='auto',
                 label='CODE SUMMARY'),
             title='Code Summarizer From CodeTrans',
             description='Summarize any Python code',
             theme='dark-peach',
             examples=call_examples(),
             allow_flagging='never').launch(inbrowser=True)