def test_store_tree_weights(self): tree1 = newick_tree_writer_test_tree( has_leaf_node_labels=False, has_internal_node_labels=False) for store_tree_weights in (True, False): for weight in (None, "23.0", "1/2", 1.0): tree1.weight = weight kwargs = { "store_tree_weights": store_tree_weights, } s = self.write_out_validate_equal_and_return( tree1, "nexus", kwargs) tree2 = dendropy.Tree.get_from_string( s, "nexus", store_tree_weights=True) if store_tree_weights and weight is not None: self.assertTrue("[&W " in s) try: w = float(weight) except ValueError: w = eval("/".join(str(float(w)) for w in weight.split("/"))) self.assertEqual(tree2.weight, w) else: self.assertFalse("[&W " in s) self.assertEqual(tree2.weight, 1.0) # default weight
def test_preserve_spaces(self): tree1 = newick_tree_writer_test_tree( has_leaf_node_labels=False, has_internal_node_labels=False) for taxon in tree1.taxon_namespace: taxon.label = "{label} {label}".format(label=taxon.label) for preserve_spaces in (True, False): kwargs = { "preserve_spaces": preserve_spaces, } s = self.write_out_validate_equal_and_return( tree1, "nexus", kwargs) tree2 = dendropy.Tree.get_from_string( s, "nexus", suppress_internal_node_taxa=False, preserve_underscores=True) nodes1 = [nd for nd in tree1] nodes2 = [nd for nd in tree2] self.assertEqual(len(nodes1), len(nodes2)) for nd1, nd2 in zip(nodes1, nodes2): original_label = nd1.taxon.label if preserve_spaces: expected_label = original_label else: expected_label = original_label.replace(" ", "_") self.assertEqual(nd2.taxon.label, expected_label)
def test_node_labeling(self): for has_leaf_node_taxa in (True, False): for has_leaf_node_labels in (True, False): for has_internal_node_taxa in (True, False): for has_internal_node_labels in (True, False): for label_separator in (' ', '$$$'): tree = newick_tree_writer_test_tree( has_leaf_node_taxa=has_leaf_node_taxa, has_leaf_node_labels=has_leaf_node_labels, has_internal_node_taxa=has_internal_node_taxa, has_internal_node_labels=has_internal_node_labels, label_separator=label_separator, ) for suppress_leaf_taxon_labels in (True, False): for suppress_leaf_node_labels in (True, False): for suppress_internal_taxon_labels in (True, False): for suppress_internal_node_labels in (True, False): kwargs = { "suppress_leaf_taxon_labels" : suppress_leaf_taxon_labels, "suppress_leaf_node_labels" : suppress_leaf_node_labels, "suppress_internal_taxon_labels" : suppress_internal_taxon_labels, "suppress_internal_node_labels" : suppress_internal_node_labels, "node_label_element_separator" : label_separator, } s = self.write_out_validate_equal_and_return( tree, "nexus", kwargs) tree2 = dendropy.Tree.get_from_string( s, "nexus", extract_comment_metadata=True, store_tree_weights=True, suppress_internal_node_taxa=True, suppress_leaf_node_taxa=True, ) nodes1 = [nd for nd in tree] nodes2 = [nd for nd in tree2] self.assertEqual(len(nodes1), len(nodes2)) for nd1, nd2 in zip(nodes1, nodes2): is_leaf = nd1.is_leaf() self.assertEqual(nd2.is_leaf(), is_leaf) if is_leaf: self.assertEqual(nd2.label, nd1.expected_label[(suppress_leaf_taxon_labels, suppress_leaf_node_labels)]) else: self.assertEqual(nd2.label, nd1.expected_label[ (suppress_internal_taxon_labels, suppress_internal_node_labels) ])
def test_edge_lengths(self): tree1 = newick_tree_writer_test_tree() for suppress_edge_lengths in (True, False): kwargs = { "suppress_edge_lengths": suppress_edge_lengths, } s = self.write_out_validate_equal_and_return( tree1, "nexus", kwargs) tree2 = dendropy.Tree.get_from_string( s, "nexus", rooting=None) nodes1 = [nd for nd in tree1] nodes2 = [nd for nd in tree2] self.assertEqual(len(nodes1), len(nodes2)) for nd1, nd2 in zip(nodes1, nodes2): if suppress_edge_lengths: self.assertIs(nd2.edge.length, None) else: self.assertEqual(nd2.edge.length, nd1.edge.length)
def test_rooting_token(self): tree1 = newick_tree_writer_test_tree() for rooted_state in (None, True, False): tree1.is_rooted = rooted_state for suppress_rooting in (True, False): kwargs = { "suppress_rooting": suppress_rooting, } s = self.write_out_validate_equal_and_return( tree1, "nexus", kwargs) tree2 = dendropy.Tree.get_from_string( s, "nexus", rooting=None) if suppress_rooting: self.assertTrue(tree2.is_rootedness_undefined) else: if rooted_state is True: self.assertTrue(tree2.is_rooted) self.assertFalse(tree2.is_unrooted) elif rooted_state is False: self.assertFalse(tree2.is_rooted) self.assertTrue(tree2.is_unrooted) else: self.assertTrue(tree2.is_rootedness_undefined)