Ejemplo n.º 1
0
    def add_edge_weights(
        self,
        potential_graph: nx.DiGraph(),
        weights: Optional[Dict[int, Dict[int, str]]] = None,
        missing_state_indicator: int = -1,
    ) -> nx.DiGraph:
        """Annotates edges with the weight.

        Given a graph where nodes are iterable entities containing character
        states, annotated edges with respect to the number of mutations. If a
        prior dictionary is passed into the constructor, the log likelihood
        of the mutations is added instead. These values are stored in the
        `weight` attribute of the networkx graph.

        Args:
            potential_graph: Potential graph
            weights: Weights to use when comparing states between characters
            missing_state_indicator: Variable to indicate missing state
                information.

        Returns:
            The potential graph with edge weights added, stored in the `weight`
                attribute.
        """

        weighted_graph = potential_graph.copy()
        for u, v in weighted_graph.edges():
            weighted_graph[u][v][
                "weight"] = dissimilarity_functions.weighted_hamming_distance(
                    list(u), list(v), missing_state_indicator, weights)

        return weighted_graph
Ejemplo n.º 2
0
    def test_weighted_hamming_distance_priors_sq_inverse(self):
        dissimilarity = dissimilarity_functions.weighted_hamming_distance(
            self.s1, self.s2, weights=self.sqiweights)

        expected_dissimilarity = np.sum([
            np.sqrt(1 / self.priors[0][1]),
            np.sqrt(1 / self.priors[5][2]) + np.sqrt(1 / self.priors[5][3]),
        ])

        self.assertEqual(dissimilarity, expected_dissimilarity / 5)
Ejemplo n.º 3
0
    def test_weighted_hamming_distance_priors_negative_log(self):
        dissimilarity = dissimilarity_functions.weighted_hamming_distance(
            self.s1, self.s2, weights=self.nlweights)

        expected_dissimilarity = np.sum([
            -np.log(self.priors[0][1]),
            -(np.log(self.priors[5][2]) + np.log(self.priors[5][3])),
        ])

        self.assertEqual(dissimilarity, expected_dissimilarity / 5)
Ejemplo n.º 4
0
    def test_weighted_hamming_distance_all_missing(self):

        dissimilarity = dissimilarity_functions.weighted_hamming_distance(
            self.s1, self.all_missing, weights=self.nlweights)

        self.assertEqual(dissimilarity, 0)
Ejemplo n.º 5
0
    def test_weighted_hamming_distance_no_priors(self):

        dissimilarity = dissimilarity_functions.weighted_hamming_distance(
            self.s1, self.s2)

        self.assertEqual(dissimilarity, 3 / 5)
Ejemplo n.º 6
0
    def test_weighted_hamming_distance_identical(self):

        dissimilarity = dissimilarity_functions.weighted_hamming_distance(
            self.s1, self.s1)

        self.assertEqual(dissimilarity, 0)