icentral_subgraph/
update_sigmas.rs1crate::ix!();
2
3pub trait UpdateSigmas {
4
5    fn maybe_update_all_sigmas<GH: NumNodes>(
6        &mut self, 
7        v_n:             NodeId, 
8        source:          NodeId, 
9        subgraph_map:    &SubGraphMap<GH>, 
10        conn_vertex_map: &ConnVertexMap)
11    -> Result<(),BetweennessCentralityError>;
12
13    fn maybe_update_all_sigmas_and_do_new<GH: NumNodes>(
14        &mut self, 
15        v_n:             NodeId, 
16        source:          NodeId, 
17        subgraph_map:    &SubGraphMap<GH>, 
18        conn_vertex_map: &ConnVertexMap)
19    -> Result<(),BetweennessCentralityError>;
20
21    fn update_all_sigmas(&mut self, v_p: NodeId, v_n: NodeId);
22
23    fn update_new_sigmas(&mut self, v_p: NodeId, v_n: NodeId);
24
25    fn update_sigmas(&mut self, v_p: NodeId, v_n: NodeId);
26}
27
28impl UpdateSigmas for SubGraph {
29
30    fn maybe_update_all_sigmas<GH: NumNodes>(
31        &mut self, 
32        v_n:             NodeId, 
33        source:          NodeId, 
34        subgraph_map:    &SubGraphMap<GH>, 
35        conn_vertex_map: &ConnVertexMap)
36    -> Result<(),BetweennessCentralityError> 
37    {
38        if conn_vertex_map.has_mapping_for_node(source)
39        && conn_vertex_map.has_mapping_for_node(v_n)
40        && source != v_n 
41        {
42            let mut vg_s: i32 = subgraph_map.subgraph_for_node(source).num_nodes().try_into()?;
43            let mut vg_n: i32 = subgraph_map.subgraph_for_node(v_n).num_nodes().try_into()?;
44
45            let c_t: i32 = vg_s * vg_n;
46
47            self.increment_sigma_value_for_node(
48                v_n, 
49                c_t as f64
50            );
51
52            }
57
58        Ok(())
59    }
60
61    fn maybe_update_all_sigmas_and_do_new<GH: NumNodes>(
62        &mut self, 
63        v_n:             NodeId, 
64        source:          NodeId, 
65        subgraph_map:    &SubGraphMap<GH>, 
66        conn_vertex_map: &ConnVertexMap)
67    -> Result<(),BetweennessCentralityError> 
68    {
69        if conn_vertex_map.has_mapping_for_node(source)
70        && conn_vertex_map.has_mapping_for_node(v_n)
71        && source != v_n 
72        {
73            let mut vg_s: i32 = subgraph_map.subgraph_for_node(source).num_nodes().try_into()?;
74            let mut vg_n: i32 = subgraph_map.subgraph_for_node(v_n).num_nodes().try_into()?;
75
76            let c_t: i32 = vg_s * vg_n;
77
78            self.increment_sigma_value_for_node(
79                v_n, 
80                c_t as f64
81            );
82
83            self.new_sigmas_increment_sigma_value_for_node(
84                v_n, 
85                c_t as f64
86            );
87
88            }
93
94        Ok(())
95    }
96
97    fn update_all_sigmas(&mut self, v_p: NodeId, v_n: NodeId)
98    {
99        self.update_sigmas(v_p,v_n);
100        self.update_new_sigmas(v_p,v_n);
101    }
102
103    fn update_new_sigmas(&mut self, v_p: NodeId, v_n: NodeId)
104    {
105        let new_sp_sn = self.new_path_counts_path_count_ratio(v_p,v_n);
106
107        self.new_sigmas.update(
108            v_p,
109            v_n,
110            new_sp_sn
111        );
112    }
113
114    fn update_sigmas(&mut self, v_p: NodeId, v_n: NodeId)
115    {
116        let sp_sn = self.path_count_ratio(v_p,v_n);
117
118        self.sigmas.update(
119            v_p,
120            v_n,
121            sp_sn
122        );
123    }
124}