def filter_stmts_sampling(g, source, target, max_depth): f_level, b_level = pg.get_reachable_sets(g, source, target, max_depth=max_depth, signed=False) for length in range(1, max_depth+1): #print("Generating paths_graph for length %d" % length) this_pg = pg.paths_graph(g, source, target, length, f_level, b_level, signed=False)
def filter_stmts(g, source, target, max_depth=6, signed=False, target_polarity=None): f_level, b_level = pg.get_reachable_sets(g, source, target, max_depth=max_depth, signed=signed) stmt_uuids = set() stmt_nodes = set() stmt_uuid_nums = [] stmt_node_nums = [] # Iterate over various path lengths for length in range(1, max_depth + 1): #print("Generating paths_graph for length %d" % length) this_pg = pg.paths_graph(g, source, target, length, f_level, b_level, signed=signed, target_polarity=target_polarity) if this_pg and len(this_pg) < 100: draw(this_pg, 'pybel_pg_%d.pdf' % length) # Get nodes for this length PG nodes_this_length = set([n[1] for n in this_pg]) # Get stmt UUIDs for this length PG stmt_uuids_this_length = set() """ for u, v in this_pg.edges(): u_name, v_name = (u[1], v[1]) multiedge_data = g.get_edge_data(u_name, v_name) for edge_data in multiedge_data.values(): stmt_uuids_this_length.add((u_name, edge_data['uuid'], v_name)) stmt_uuids |= stmt_uuids_this_length """ # Get counts for this depth # Terminate the loop if we've saturated the number of edges #if stmt_nodes and stmt_nodes == nodes_this_length: # break stmt_nodes |= nodes_this_length stmt_uuid_nums.append(len(stmt_uuids)) stmt_node_nums.append(len(stmt_nodes)) return (stmt_uuids, stmt_nodes, stmt_node_nums, stmt_uuid_nums)
def sample_paths(g, source, target, max_depth, target_polarity=None, num_paths=1000): print('Source: %s' % source) signed = True if target_polarity is not None else False (f_level, b_level) = paths_graph.get_reachable_sets( g, source, target, max_depth=10, signed=signed) all_paths = [] for length in range(1, max_depth): print("Path length: %d" % length) pg_raw = paths_graph.paths_graph(g, source, target, length, f_level, b_level, signed=signed, target_polarity=target_polarity) # Append depths to our source and target nodes src = (0, (source, 0)) tgt = (length, (target, target_polarity)) dic_PG = cycle_free_paths_graph(pg_raw, src, tgt, length) G_cf, T = dic_PG[length-1] try: P = sample_many_paths(src, tgt, G_cf, T, num_paths) all_paths.extend(P) except IndexError: pass return all_paths
dic_PG = cycle_free_paths_graph(pg_raw, src, tgt, length) G_cf, T = dic_PG[length-1] try: P = sample_many_paths(src, tgt, G_cf, T, num_paths) all_paths.extend(P) except IndexError: pass return all_paths if __name__ == '__main__': G_0 = paths_graph.get_edges('korkut_im.sif') source = 'BLK_phosphoY389_phosphorylation_PTK2_Y397' target = 'EIF4EBP1_T37_p_obs' (f_level, b_level) = paths_graph.get_reachable_sets(G_0, source, target, max_depth=10, signed=False) length = 8 pg_raw = paths_graph.paths_graph(G_0, source, target, length, f_level, b_level, signed=False, target_polarity=0) # Append depths to our source and target nodes src = (0, source) tgt = (length, target) dic_PG = cycle_free_paths_graph(pg_raw, src, tgt, length) G_cf, T = dic_PG[7] P = sample_many_paths(src, tgt, G_cf, T, 1000) #print("--- %s seconds ---" % (time.time() - start_time))