@@ -474,6 +474,73 @@ def test_as_nexus_precision_1(self):
474474 )
475475 assert ts .as_nexus (precision = 1 ) == expected
476476
477+ def test_as_nexus_labels_basic (self ):
478+ ts = self .tree ().tree_sequence
479+ labels = {0 : "human" , 1 : "chimp" , 2 : "bonobo" }
480+ expected = textwrap .dedent (
481+ """\
482+ #NEXUS
483+ BEGIN TAXA;
484+ DIMENSIONS NTAX=3;
485+ TAXLABELS human chimp bonobo;
486+ END;
487+ BEGIN TREES;
488+ TRANSLATE n0 human, n1 chimp, n2 bonobo;
489+ TREE t0^1 = [&R] (n0:2,(n1:1,n2:1):1);
490+ END;
491+ """
492+ )
493+ assert expected == ts .as_nexus (
494+ include_alignments = False ,
495+ node_labels = labels ,
496+ )
497+
498+ def test_as_nexus_labels_partial (self ):
499+ ts = self .tree ().tree_sequence
500+ labels = {0 : "human" , 2 : "bonobo" }
501+ expected = textwrap .dedent (
502+ """\
503+ #NEXUS
504+ BEGIN TAXA;
505+ DIMENSIONS NTAX=3;
506+ TAXLABELS human n1 bonobo;
507+ END;
508+ BEGIN TREES;
509+ TRANSLATE n0 human, n2 bonobo;
510+ TREE t0^1 = [&R] (n0:2,(n1:1,n2:1):1);
511+ END;
512+ """
513+ )
514+ assert expected == ts .as_nexus (
515+ include_alignments = False ,
516+ node_labels = labels ,
517+ )
518+
519+ def test_as_nexus_labels_empty (self ):
520+ ts = self .tree ().tree_sequence
521+
522+ with pytest .raises (ValueError , match = "`node_labels` cannot be empty" ):
523+ ts .as_nexus (include_alignments = False , node_labels = {})
524+
525+ def test_as_nexus_labels_none (self ):
526+ ts = self .tree ().tree_sequence
527+ expected = textwrap .dedent (
528+ """\
529+ #NEXUS
530+ BEGIN TAXA;
531+ DIMENSIONS NTAX=3;
532+ TAXLABELS n0 n1 n2;
533+ END;
534+ BEGIN TREES;
535+ TREE t0^1 = [&R] (n0:2,(n1:1,n2:1):1);
536+ END;
537+ """
538+ )
539+ assert expected == ts .as_nexus (
540+ include_alignments = False ,
541+ node_labels = None ,
542+ )
543+
477544
478545class TestFractionalBranchLengths :
479546 # 0.67┊ 4 ┊
0 commit comments