Spaces:
Runtime error
Runtime error
more tree functions
Browse files- app.py +5 -4
- utils/tree_utils.py +32 -0
app.py
CHANGED
|
@@ -6,7 +6,7 @@ import numpy as np
|
|
| 6 |
import torch
|
| 7 |
from threading import Thread
|
| 8 |
|
| 9 |
-
from utils.tree_utils import parse_functions, get_docstrings, grab_before_comments, line_chr2char
|
| 10 |
from utils.html_utils import make_iframe, construct_embed
|
| 11 |
PIPE = None
|
| 12 |
|
|
@@ -235,8 +235,9 @@ def alter_body(old_code, func_id, funcs_list: list, prompt="", temperature=0.2,
|
|
| 235 |
func_start_idx = line_chr2char(old_code, func_node.start_point[0], func_node.start_point[1])
|
| 236 |
identifier_str = func_node.child_by_field_name("type").text.decode() + " " + func_node.child_by_field_name("declarator").text.decode() #func_start_idx:body_start_idx?
|
| 237 |
body_node = func_node.child_by_field_name("body")
|
| 238 |
-
body_start_idx =
|
| 239 |
-
|
|
|
|
| 240 |
print(f"{old_code[body_start_idx:body_end_idx]=}")
|
| 241 |
model_context = identifier_str # base case
|
| 242 |
# add any comments at the beginning of the function to the model_context
|
|
@@ -267,7 +268,7 @@ def alter_body(old_code, func_id, funcs_list: list, prompt="", temperature=0.2,
|
|
| 267 |
altered_code = old_code[:func_start_idx] + model_context + generation + "//the generation didn't complete the function!\n" + old_code[body_end_idx:] #needs a newline to break out of the comment.
|
| 268 |
return altered_code, pipeline
|
| 269 |
# raise gr.Error(f"didn't generate a full function: {generation!r}]")
|
| 270 |
-
print(f"{first_gened_func=}")
|
| 271 |
generated_body = first_gened_func.child_by_field_name("body").text.decode()
|
| 272 |
print(f"{generated_body=}")
|
| 273 |
altered_code = old_code[:func_start_idx] + identifier_str + generated_body + old_code[body_end_idx:]
|
|
|
|
| 6 |
import torch
|
| 7 |
from threading import Thread
|
| 8 |
|
| 9 |
+
from utils.tree_utils import parse_functions, get_docstrings, grab_before_comments, line_chr2char, node_str_idx
|
| 10 |
from utils.html_utils import make_iframe, construct_embed
|
| 11 |
PIPE = None
|
| 12 |
|
|
|
|
| 235 |
func_start_idx = line_chr2char(old_code, func_node.start_point[0], func_node.start_point[1])
|
| 236 |
identifier_str = func_node.child_by_field_name("type").text.decode() + " " + func_node.child_by_field_name("declarator").text.decode() #func_start_idx:body_start_idx?
|
| 237 |
body_node = func_node.child_by_field_name("body")
|
| 238 |
+
body_start_idx, body_end_idx = node_str_idx(body_node)
|
| 239 |
+
# body_start_idx = line_chr2char(old_code, body_node.start_point[0], body_node.start_point[1])
|
| 240 |
+
# body_end_idx = line_chr2char(old_code, body_node.end_point[0], body_node.end_point[1])
|
| 241 |
print(f"{old_code[body_start_idx:body_end_idx]=}")
|
| 242 |
model_context = identifier_str # base case
|
| 243 |
# add any comments at the beginning of the function to the model_context
|
|
|
|
| 268 |
altered_code = old_code[:func_start_idx] + model_context + generation + "//the generation didn't complete the function!\n" + old_code[body_end_idx:] #needs a newline to break out of the comment.
|
| 269 |
return altered_code, pipeline
|
| 270 |
# raise gr.Error(f"didn't generate a full function: {generation!r}]")
|
| 271 |
+
# print(f"{first_gened_func=}")
|
| 272 |
generated_body = first_gened_func.child_by_field_name("body").text.decode()
|
| 273 |
print(f"{generated_body=}")
|
| 274 |
altered_code = old_code[:func_start_idx] + identifier_str + generated_body + old_code[body_end_idx:]
|
utils/tree_utils.py
CHANGED
|
@@ -6,6 +6,38 @@ GLSL_LANGUAGE = Language('./build/my-languages.so', 'glsl')
|
|
| 6 |
parser = Parser()
|
| 7 |
parser.set_language(GLSL_LANGUAGE)
|
| 8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
|
| 10 |
def parse_functions(in_code):
|
| 11 |
"""
|
|
|
|
| 6 |
parser = Parser()
|
| 7 |
parser.set_language(GLSL_LANGUAGE)
|
| 8 |
|
| 9 |
+
def replace_function(old_func_node, new_func_node):
|
| 10 |
+
"""
|
| 11 |
+
replaces the old function node with the new function node
|
| 12 |
+
"""
|
| 13 |
+
tree = give_tree(old_func_node)
|
| 14 |
+
old_func_start, old_func_end = node_str_idx(old_func_node)
|
| 15 |
+
# new_func_start, new_func_end = node_str_idx(new_func_node)
|
| 16 |
+
new_code = tree.text[:old_func_start] + new_func_node.text + tree.text[old_func_end:]
|
| 17 |
+
return new_code
|
| 18 |
+
|
| 19 |
+
def get_root(node):
|
| 20 |
+
"""
|
| 21 |
+
returns the root node of a node
|
| 22 |
+
"""
|
| 23 |
+
while node.parent != None:
|
| 24 |
+
node = node.parent
|
| 25 |
+
return node.parent #still need to call parent here
|
| 26 |
+
|
| 27 |
+
def node_str_idx(node):
|
| 28 |
+
"""
|
| 29 |
+
returns the character index of start and end of a node
|
| 30 |
+
"""
|
| 31 |
+
whole_text = get_root(node).text.decode()
|
| 32 |
+
start_idx = line_chr2char(whole_text, node.start_point[0], node.start_point[1])
|
| 33 |
+
end_idx = line_chr2char(whole_text, node.end_point[0], node.end_point[1])
|
| 34 |
+
return start_idx, end_idx
|
| 35 |
+
|
| 36 |
+
def give_tree(func_node):
|
| 37 |
+
"""
|
| 38 |
+
return the tree where this function node is in
|
| 39 |
+
"""
|
| 40 |
+
return parser.parse(func_node.parent.text) #really no better way?
|
| 41 |
|
| 42 |
def parse_functions(in_code):
|
| 43 |
"""
|