diff --git a/setup.py b/setup.py index e23d073..f223dda 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ setup( name="tc-core-analyzer-lib", - version="1.2.0", + version="1.3.0", author="Mohammad Amin Dadgar, TogetherCrew", maintainer="Mohammad Amin Dadgar", maintainer_email="dadgaramin96@gmail.com", diff --git a/tc_core_analyzer_lib/utils/compute_interaction_per_acc.py b/tc_core_analyzer_lib/utils/compute_interaction_per_acc.py index a86bbdc..b125a69 100644 --- a/tc_core_analyzer_lib/utils/compute_interaction_per_acc.py +++ b/tc_core_analyzer_lib/utils/compute_interaction_per_acc.py @@ -96,26 +96,21 @@ def thr_int( # # # THRESHOLDED CONNECTIONS # # # - # make copy of graph for thresholding - thresh_graph = copy.deepcopy(graph) - - # remove edges below threshold from copy - thresh_graph.remove_edges_from( - [ - (n1, n2) - for n1, n2, w in thresh_graph.edges(data="weight") - if w < EDGE_STR_THR - ] - ) - # preparing matrix with no `action` and just interactions # actions were self-intereaction and are on diagonal matrix_interaction = copy.deepcopy(matrix) matrix_interaction[np.diag_indices_from(matrix_interaction)] = 0 graph_interaction = make_graph(matrix_interaction) + # filtering the `at least interaction count` from the graph + graph_interaction_thresh = remove_edges_below_threshold( + graph_interaction, EDGE_STR_THR + ) + # get unweighted node degree value for each node from interaction network - all_degrees_thresh = np.array([val for (_, val) in graph_interaction.degree()]) + all_degrees_thresh = np.array( + [val for (_, val) in graph_interaction_thresh.degree()] + ) # compare total unweighted node degree after thresholding to threshold thr_uw_thr_deg = np.where(all_degrees_thresh > UW_THR_DEG_THR)[0] @@ -123,6 +118,23 @@ def thr_int( return (thr_ind, thr_uw_deg, thr_uw_thr_deg, graph) +def remove_edges_below_threshold( + graph: DiGraph, EDGE_STR_THR: int, weight_name: str = "weight" +) -> DiGraph: + """ + remove the edges that has a weight below the threshold + """ + graph_copy = copy.deepcopy(graph) + graph_copy.remove_edges_from( + [ + (n1, n2) + for n1, n2, w in graph_copy.edges(data=weight_name) + if w < EDGE_STR_THR + ] + ) + return graph_copy + + def get_analysis_vector( int_mat: dict[str, np.ndarray], activites: list[str],