in clutrr/relations/builder.py [0:0]
def derive(self, edge_list, k=3):
"""
Given a list of edges, expand elements from the edge until we reach k
:param edge_list:
:param k:
:return:
"""
proof_trace = []
seen = set()
while k>0:
if len(set(edge_list)) - len(seen) == 0:
break
if len(list(set(edge_list) - seen)) == 0:
break
e = random.choice(list(set(edge_list) - seen))
seen.add(e)
ex_e = self.expand_new(e)
if ex_e and (ex_e[0] not in seen and ex_e[1] not in seen and ex_e[0][::-1] not in seen and ex_e[1][::-1] not in seen):
pos = edge_list.index(e)
edge_list.insert(pos, ex_e[-1])
edge_list.insert(pos, ex_e[0])
edge_list.remove(e)
#edge_list.extend(ex_e)
# format proof into human readable form
e = self._format_edge_rel(e)
ex_e = [self._format_edge_rel(x) for x in ex_e]
proof_trace.append({e:ex_e})
k = k-1
return edge_list, proof_trace