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)