fn get_brokerage_scores_for_node()

in src/dachshund/algorithms/brokerage.rs [26:66]


    fn get_brokerage_scores_for_node(
        &self,
        node_id: NodeId,
        community_membership: &HashMap<NodeId, usize>,
    ) -> BrokerageScores {
        let mut scores = BrokerageScores {
            num_coordinator_ties: 0,
            num_itinerant_broker_ties: 0,
            num_gatekeeper_ties: 0,
            num_representative_ties: 0,
            num_liaison_ties: 0,
            total_open_twopaths: 0,
        };
        let c_v = community_membership.get(&node_id).unwrap();
        let node: &<Self as GraphBase>::NodeType = self.get_node(node_id);
        for a in node.get_in_neighbors() {
            let a_id = a.get_neighbor_id();
            let a_node = self.get_node(a_id);
            let c_a = community_membership.get(&a_id).unwrap();
            for b in node.get_out_neighbors() {
                let b_id = b.get_neighbor_id();
                if !a_node.has_out_neighbor(b_id) {
                    let c_b = community_membership.get(&b_id).unwrap();
                    if c_v == c_a && c_v == c_b {
                        scores.num_coordinator_ties += 1;
                    } else if c_v != c_a && c_a == c_b {
                        scores.num_itinerant_broker_ties += 1;
                    } else if c_v != c_a && c_v == c_b {
                        scores.num_gatekeeper_ties += 1;
                    } else if c_v == c_a && c_v != c_b {
                        scores.num_representative_ties += 1;
                    } else {
                        assert!(c_v != c_a && c_v != c_b);
                        scores.num_liaison_ties += 1;
                    }
                    scores.total_open_twopaths += 1;
                }
            }
        }
        scores
    }