icentral_subgraph/
muc_update_parent.rs

1crate::ix!();
2
3pub trait MucUpdateParent {
4
5    fn muc_update_parent(&mut self, 
6        parent:              NodeId,
7        v_n:                 NodeId, 
8        source:              NodeId, 
9        tmp_conn_vertex_map: &ConnVertexMap,
10        scores:              &mut BetweennessScores);
11}
12
13impl MucUpdateParent for SubGraph {
14
15    fn muc_update_parent(&mut self, 
16        parent:              NodeId,
17        v_n:                 NodeId, 
18        source:              NodeId, 
19        tmp_conn_vertex_map: &ConnVertexMap,
20        scores:              &mut BetweennessScores)
21    {
22        let sp_sn = self.path_count_ratio(parent,v_n);
23
24        self.update_pair_dependencies(parent,v_n);
25
26        let new_sp_sn = self.new_path_counts_path_count_ratio(parent,v_n);
27
28        self.update_new_pair_dependencies(parent,v_n);
29
30        if tmp_conn_vertex_map.has_mapping_for_node(source) {
31
32            self.update_all_sigmas(parent,v_n);
33
34            let new_parent: NodeId = self.label_map_inout(parent);
35
36            let new_val = {
37                let map_val = scores.score_for_node(new_parent);
38                let sigma_n = self.sigma_value_for_node(v_n);
39                map_val - sigma_n * sp_sn / 2.0
40            };
41
42            scores.set_score_for_node(
43                new_parent, 
44                new_val
45            );
46
47            let new_val = {
48                let map_val = scores.score_for_node(new_parent);
49                let sigma_n = self.new_sigmas_sigma_value_for_node(v_n);
50                map_val + sigma_n * new_sp_sn / 2.0
51            };
52
53            scores.set_score_for_node(new_parent, new_val);
54        }
55    }
56}