Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f337a3d

Browse files
Make LCA tie-breaking Aware of keyvalue pairs
Implements #31
1 parent 0cf7518 commit f337a3d

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

‎library/LCA.py‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def visit(self, node):
3737
def get_depth(self, node):
3838
return self.sequence[self.visits[node][0]][0]
3939

40-
def __call__(self,first_node,second_node,include_depth = False):
40+
def __call__(self,first_node,second_node,only_depth = False,node_and_depth=True):
4141
try :
4242
x,y = self.visits[first_node]
4343
w,v = self.visits[second_node]
@@ -52,9 +52,12 @@ def __call__(self,first_node,second_node,include_depth = False):
5252
r = max(y,v)
5353

5454
ancestor = self.tree.query(l,r,"min")
55-
if include_depth:
55+
if node_and_depth:
56+
return ancestor
57+
elif only_depth:
5658
return ancestor[0]
57-
return ancestor[1]
59+
else:
60+
return ancestor[1]
5861

5962
def get_field_with_respect_to(self,node,parent_node):
6063
index = bisect.bisect_left(self.field_history[parent_node],(self.visits[node][0],))

‎queries/tiebreak.py‎

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from PythonVoiceCodingPlugin.library.LCA import LCA
44
from PythonVoiceCodingPlugin.library.level_info import LevelVisitor
5-
5+
fromPythonVoiceCodingPlugin.library.traverseimportmatch_node
66

77

88

@@ -21,8 +21,18 @@ def tiebreak_on_lca(root,origin,candidates):
2121
TYPE: Description
2222
"""
2323
lca = LCA(root)
24-
k = lambda x: (-1 * lca(x, origin,True),lca.get_depth(x),abs(x.first_token.start[0] - origin.first_token.start[0]))
25-
return sorted(candidates, key = k)
24+
def tiebreaker(x):
25+
depth,node = lca(x, origin,node_and_depth = True)
26+
v = 3
27+
if match_node(node,ast.Dict):
28+
if node is not x and node is not origin:
29+
field,field_index = lca.get_field_with_respect_to(x,node)
30+
ofield,ofield_index = lca.get_field_with_respect_to(origin,node)
31+
v = abs(field_index - ofield_index)
32+
v = v if v<3 else 3
33+
return (-1 * depth,v,lca.get_depth(x),abs(x.first_token.start[0] - origin.first_token.start[0]))
34+
35+
return sorted(candidates, key = tiebreaker)
2636

2737

2838

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /