def test_vector_hash(): cg = ChangeGraph() cn1 = ChangeNode(None, None, 'M1', ChangeNode.Kind.OPERATION_NODE, 0, sub_kind=ChangeNode.SubKind.OP_FUNC_CALL) cn2 = ChangeNode(None, None, '=', ChangeNode.Kind.OPERATION_NODE, 0, sub_kind=ChangeNode.SubKind.OP_ASSIGNMENT) cn3 = ChangeNode(None, None, 'M2', ChangeNode.Kind.OPERATION_NODE, 1, sub_kind=ChangeNode.SubKind.OP_FUNC_CALL) cn4 = ChangeNode(None, None, '=', ChangeNode.Kind.OPERATION_NODE, 1, sub_kind=ChangeNode.SubKind.OP_ASSIGNMENT) ChangeEdge.create(LinkType.MAP, cn1, cn3) ChangeEdge.create(LinkType.MAP, cn2, cn4) ChangeEdge.create(LinkType.PARAMETER, cn1, cn2) ChangeEdge.create(LinkType.PARAMETER, cn3, cn4) cg.nodes.update([cn1, cn2, cn3, cn4]) fr = Fragment.create_from_node_pair([cn1, cn3]) ext_fr = Fragment.create_extended(fr, ext_nodes=(cn2, cn4)) vector_hash = ext_fr.vector.get_hash() assert vector_hash == normalize(27320942899360)
def _get_freq_group(fr): max_freq = 0 freq_group = None label_to_ext_list = fr.get_label_to_ext_list() for label, ext_list in label_to_ext_list.items(): ext_fragments = set() for ext in ext_list: ext_fr = Fragment.create_extended(fr, ext) ext_fragments.add(ext_fr) groups = Fragment.create_groups(ext_fragments) for num, group in enumerate(groups): freq = len(group) if freq > max_freq: max_freq = freq freq_group = group logger.log(logger.DEBUG, f'Elements in group #{num + 1} -> {len(group)}') return freq_group