phykit 2.1.48__tar.gz → 2.1.49__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. {phykit-2.1.48 → phykit-2.1.49}/PKG-INFO +18 -2
  2. {phykit-2.1.48 → phykit-2.1.49}/phykit/helpers/plot_config.py +3 -0
  3. {phykit-2.1.48 → phykit-2.1.49}/phykit/phykit.py +112 -28
  4. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/ancestral_reconstruction.py +6 -0
  5. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/concordance_asr.py +3 -0
  6. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/cont_map.py +3 -0
  7. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/cophylo.py +4 -0
  8. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/density_map.py +3 -0
  9. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/discordance_asymmetry.py +2 -0
  10. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/phylo_heatmap.py +3 -0
  11. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/quartet_pie.py +3 -0
  12. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/rate_heterogeneity.py +3 -0
  13. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/stochastic_character_map.py +3 -0
  14. phykit-2.1.49/phykit/version.py +1 -0
  15. {phykit-2.1.48 → phykit-2.1.49}/phykit.egg-info/PKG-INFO +18 -2
  16. phykit-2.1.48/phykit/version.py +0 -1
  17. {phykit-2.1.48 → phykit-2.1.49}/LICENSE.md +0 -0
  18. {phykit-2.1.48 → phykit-2.1.49}/README.md +0 -0
  19. {phykit-2.1.48 → phykit-2.1.49}/phykit/__init__.py +0 -0
  20. {phykit-2.1.48 → phykit-2.1.49}/phykit/__main__.py +0 -0
  21. {phykit-2.1.48 → phykit-2.1.49}/phykit/cli_registry.py +0 -0
  22. {phykit-2.1.48 → phykit-2.1.49}/phykit/errors.py +0 -0
  23. {phykit-2.1.48 → phykit-2.1.49}/phykit/helpers/__init__.py +0 -0
  24. {phykit-2.1.48 → phykit-2.1.49}/phykit/helpers/boolean_argument_parsing.py +0 -0
  25. {phykit-2.1.48 → phykit-2.1.49}/phykit/helpers/caching.py +0 -0
  26. {phykit-2.1.48 → phykit-2.1.49}/phykit/helpers/discrete_models.py +0 -0
  27. {phykit-2.1.48 → phykit-2.1.49}/phykit/helpers/files.py +0 -0
  28. {phykit-2.1.48 → phykit-2.1.49}/phykit/helpers/json_output.py +0 -0
  29. {phykit-2.1.48 → phykit-2.1.49}/phykit/helpers/parallel.py +0 -0
  30. {phykit-2.1.48 → phykit-2.1.49}/phykit/helpers/quartet_utils.py +0 -0
  31. {phykit-2.1.48 → phykit-2.1.49}/phykit/helpers/stats_summary.py +0 -0
  32. {phykit-2.1.48 → phykit-2.1.49}/phykit/helpers/streaming.py +0 -0
  33. {phykit-2.1.48 → phykit-2.1.49}/phykit/service_factories.py +0 -0
  34. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/__init__.py +0 -0
  35. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/__init__.py +0 -0
  36. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/alignment_entropy.py +0 -0
  37. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/alignment_length.py +0 -0
  38. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/alignment_length_no_gaps.py +0 -0
  39. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/alignment_outlier_taxa.py +0 -0
  40. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/alignment_recoding.py +0 -0
  41. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/base.py +0 -0
  42. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/column_score.py +0 -0
  43. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/composition_per_taxon.py +0 -0
  44. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/compositional_bias_per_site.py +0 -0
  45. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/create_concatenation_matrix.py +0 -0
  46. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/dna_threader.py +0 -0
  47. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/evolutionary_rate_per_site.py +0 -0
  48. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/faidx.py +0 -0
  49. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/gc_content.py +0 -0
  50. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/mask_alignment.py +0 -0
  51. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/occupancy_per_taxon.py +0 -0
  52. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/pairwise_identity.py +0 -0
  53. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/parsimony_informative_sites.py +0 -0
  54. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/plot_alignment_qc.py +0 -0
  55. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/rcv.py +0 -0
  56. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/rcvt.py +0 -0
  57. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/rename_fasta_entries.py +0 -0
  58. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/sum_of_pairs_score.py +0 -0
  59. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/alignment/variable_sites.py +0 -0
  60. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/base.py +0 -0
  61. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/__init__.py +0 -0
  62. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/base.py +0 -0
  63. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/bipartition_support_stats.py +0 -0
  64. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/branch_length_multiplier.py +0 -0
  65. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/collapse_branches.py +0 -0
  66. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/consensus_network.py +0 -0
  67. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/consensus_tree.py +0 -0
  68. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/covarying_evolutionary_rates.py +0 -0
  69. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/dvmc.py +0 -0
  70. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/evo_tempo_map.py +0 -0
  71. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/evolutionary_rate.py +0 -0
  72. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/fit_continuous.py +0 -0
  73. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/fit_discrete.py +0 -0
  74. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/hidden_paralogy_check.py +0 -0
  75. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/independent_contrasts.py +0 -0
  76. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/internal_branch_stats.py +0 -0
  77. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/internode_labeler.py +0 -0
  78. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/kf_distance.py +0 -0
  79. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/last_common_ancestor_subtree.py +0 -0
  80. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/lb_score.py +0 -0
  81. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/ltt.py +0 -0
  82. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/monophyly_check.py +0 -0
  83. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/nearest_neighbor_interchange.py +0 -0
  84. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/network_signal.py +0 -0
  85. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/ou_shift_detection.py +0 -0
  86. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/ouwie.py +0 -0
  87. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/parsimony_score.py +0 -0
  88. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/patristic_distances.py +0 -0
  89. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/phenogram.py +0 -0
  90. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/phylogenetic_glm.py +0 -0
  91. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/phylogenetic_ordination.py +0 -0
  92. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/phylogenetic_regression.py +0 -0
  93. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/phylogenetic_signal.py +0 -0
  94. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/phylomorphospace.py +0 -0
  95. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/polytomy_test.py +0 -0
  96. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/print_tree.py +0 -0
  97. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/prune_tree.py +0 -0
  98. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/quartet_network.py +0 -0
  99. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/relative_rate_test.py +0 -0
  100. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/rename_tree_tips.py +0 -0
  101. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/rf_distance.py +0 -0
  102. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/root_tree.py +0 -0
  103. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/saturation.py +0 -0
  104. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/spectral_discordance.py +0 -0
  105. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/spurious_sequence.py +0 -0
  106. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/terminal_branch_stats.py +0 -0
  107. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/threshold_model.py +0 -0
  108. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/tip_labels.py +0 -0
  109. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/tip_to_tip_distance.py +0 -0
  110. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/tip_to_tip_node_distance.py +0 -0
  111. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/total_tree_length.py +0 -0
  112. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/treeness.py +0 -0
  113. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/treeness_over_rcv.py +0 -0
  114. {phykit-2.1.48 → phykit-2.1.49}/phykit/services/tree/vcv_utils.py +0 -0
  115. {phykit-2.1.48 → phykit-2.1.49}/phykit.egg-info/SOURCES.txt +0 -0
  116. {phykit-2.1.48 → phykit-2.1.49}/phykit.egg-info/dependency_links.txt +0 -0
  117. {phykit-2.1.48 → phykit-2.1.49}/phykit.egg-info/entry_points.txt +0 -0
  118. {phykit-2.1.48 → phykit-2.1.49}/phykit.egg-info/requires.txt +0 -0
  119. {phykit-2.1.48 → phykit-2.1.49}/phykit.egg-info/top_level.txt +0 -0
  120. {phykit-2.1.48 → phykit-2.1.49}/setup.cfg +0 -0
  121. {phykit-2.1.48 → phykit-2.1.49}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: phykit
3
- Version: 2.1.48
3
+ Version: 2.1.49
4
4
  Home-page: https://github.com/jlsteenwyk/phykit
5
5
  Author: Jacob L. Steenwyk
6
6
  Author-email: jlsteenwyk@gmail.com
@@ -14,6 +14,22 @@ Classifier: Topic :: Scientific/Engineering
14
14
  Requires-Python: >=3.11
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE.md
17
+ Requires-Dist: biopython>=1.82
18
+ Requires-Dist: matplotlib>=3.7.0
19
+ Requires-Dist: numpy>=1.24.0
20
+ Requires-Dist: scipy>=1.11.3
21
+ Requires-Dist: scikit-learn>=1.4.2
22
+ Requires-Dist: umap-learn>=0.5.0
23
+ Requires-Dist: tqdm>=4.65.0
24
+ Dynamic: author
25
+ Dynamic: author-email
26
+ Dynamic: classifier
27
+ Dynamic: description
28
+ Dynamic: description-content-type
29
+ Dynamic: home-page
30
+ Dynamic: license-file
31
+ Dynamic: requires-dist
32
+ Dynamic: requires-python
17
33
 
18
34
  <p align="center">
19
35
  <a href="https://github.com/jlsteenwyk/phykit">
@@ -23,6 +23,7 @@ class PlotConfig:
23
23
  title_fontsize: Optional[float] = None
24
24
  axis_fontsize: Optional[float] = None
25
25
  colors: Optional[List[str]] = None
26
+ ladderize: bool = False
26
27
 
27
28
  def validate(self) -> None:
28
29
  if self.fig_width is not None and self.fig_width <= 0:
@@ -187,6 +188,7 @@ class PlotConfig:
187
188
  title_fontsize=getattr(args, "title_fontsize", None),
188
189
  axis_fontsize=getattr(args, "axis_fontsize", None),
189
190
  colors=colors,
191
+ ladderize=getattr(args, "ladderize", False),
190
192
  )
191
193
  config.validate()
192
194
  return config
@@ -205,3 +207,4 @@ def add_plot_arguments(parser) -> None:
205
207
  group.add_argument("--title-fontsize", type=float, default=None, help="Font size for the title")
206
208
  group.add_argument("--axis-fontsize", type=float, default=None, help="Font size for axis labels")
207
209
  group.add_argument("--colors", type=str, default=None, help="Comma-separated colors (hex or named)")
210
+ group.add_argument("--ladderize", action="store_true", default=False, help="Ladderize (sort) the tree before plotting")
@@ -464,7 +464,7 @@ class Phykit:
464
464
  [--legend-position <str>]
465
465
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
466
466
  [--title-fontsize <float>] [--axis-fontsize <float>]
467
- [--colors <str>]
467
+ [--colors <str>] [--ladderize]
468
468
  [--json]
469
469
 
470
470
  Options
@@ -512,6 +512,9 @@ class Phykit:
512
512
  (hex or named, e.g.,
513
513
  "#ff0000,blue,#00ff00")
514
514
 
515
+ --ladderize ladderize (sort) the tree
516
+ before plotting
517
+
515
518
  --json optional argument to output
516
519
  results as JSON
517
520
  """
@@ -816,7 +819,7 @@ class Phykit:
816
819
  [--legend-position <str>]
817
820
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
818
821
  [--title-fontsize <float>] [--axis-fontsize <float>]
819
- [--colors <str>]
822
+ [--colors <str>] [--ladderize]
820
823
  [--json]
821
824
 
822
825
  Options
@@ -862,6 +865,9 @@ class Phykit:
862
865
  (hex or named, e.g.,
863
866
  "#ff0000,blue,#00ff00")
864
867
 
868
+ --ladderize ladderize (sort) the tree
869
+ before plotting
870
+
865
871
  --json optional argument to output
866
872
  results as JSON
867
873
  """
@@ -947,7 +953,7 @@ class Phykit:
947
953
  [--legend-position <str>]
948
954
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
949
955
  [--title-fontsize <float>] [--axis-fontsize <float>]
950
- [--colors <str>]
956
+ [--colors <str>] [--ladderize]
951
957
  [--json]
952
958
 
953
959
  Options
@@ -992,6 +998,9 @@ class Phykit:
992
998
  (hex or named, e.g.,
993
999
  "#ff0000,blue,#00ff00")
994
1000
 
1001
+ --ladderize ladderize (sort) the tree
1002
+ before plotting
1003
+
995
1004
  --json optional argument to output
996
1005
  results as JSON
997
1006
  """
@@ -1298,7 +1307,7 @@ class Phykit:
1298
1307
  [--legend-position <str>]
1299
1308
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
1300
1309
  [--title-fontsize <float>] [--axis-fontsize <float>]
1301
- [--colors <str>]
1310
+ [--colors <str>] [--ladderize]
1302
1311
  [--json]
1303
1312
 
1304
1313
  Options
@@ -1348,6 +1357,9 @@ class Phykit:
1348
1357
  (hex or named, e.g.,
1349
1358
  "#ff0000,blue,#00ff00")
1350
1359
 
1360
+ --ladderize ladderize (sort) the tree
1361
+ before plotting
1362
+
1351
1363
  --json optional argument to output
1352
1364
  results as JSON
1353
1365
  """
@@ -1485,7 +1497,7 @@ class Phykit:
1485
1497
  [--legend-position <str>]
1486
1498
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
1487
1499
  [--title-fontsize <float>] [--axis-fontsize <float>]
1488
- [--colors <str>]
1500
+ [--colors <str>] [--ladderize]
1489
1501
  [--json]
1490
1502
 
1491
1503
  Options
@@ -1530,6 +1542,9 @@ class Phykit:
1530
1542
  (hex or named, e.g.,
1531
1543
  "#ff0000,blue,#00ff00")
1532
1544
 
1545
+ --ladderize ladderize (sort) the tree
1546
+ before plotting
1547
+
1533
1548
  --json optional argument to output
1534
1549
  results as JSON
1535
1550
  """
@@ -1831,7 +1846,7 @@ class Phykit:
1831
1846
  [--legend-position <str>]
1832
1847
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
1833
1848
  [--title-fontsize <float>] [--axis-fontsize <float>]
1834
- [--colors <str>]
1849
+ [--colors <str>] [--ladderize]
1835
1850
  [--json]
1836
1851
 
1837
1852
  Options
@@ -1888,6 +1903,9 @@ class Phykit:
1888
1903
  (hex or named, e.g.,
1889
1904
  "#ff0000,blue,#00ff00")
1890
1905
 
1906
+ --ladderize ladderize (sort) the tree
1907
+ before plotting
1908
+
1891
1909
  --json output results as JSON
1892
1910
  """
1893
1911
  ),
@@ -1961,7 +1979,7 @@ class Phykit:
1961
1979
  [--legend-position <str>]
1962
1980
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
1963
1981
  [--title-fontsize <float>] [--axis-fontsize <float>]
1964
- [--colors <str>]
1982
+ [--colors <str>] [--ladderize]
1965
1983
  [--json]
1966
1984
 
1967
1985
  Options
@@ -2019,6 +2037,9 @@ class Phykit:
2019
2037
  (hex or named, e.g.,
2020
2038
  "#ff0000,blue,#00ff00")
2021
2039
 
2040
+ --ladderize ladderize (sort) the tree
2041
+ before plotting
2042
+
2022
2043
  --json output results as JSON
2023
2044
  """
2024
2045
  ),
@@ -2249,7 +2270,7 @@ class Phykit:
2249
2270
  [--legend-position <str>]
2250
2271
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
2251
2272
  [--title-fontsize <float>] [--axis-fontsize <float>]
2252
- [--colors <str>]
2273
+ [--colors <str>] [--ladderize]
2253
2274
  [--json]
2254
2275
 
2255
2276
  Options
@@ -2307,6 +2328,9 @@ class Phykit:
2307
2328
  (hex or named, e.g.,
2308
2329
  "#ff0000,blue,#00ff00")
2309
2330
 
2331
+ --ladderize ladderize (sort) the tree
2332
+ before plotting
2333
+
2310
2334
  --json optional argument to output
2311
2335
  results as JSON
2312
2336
  """
@@ -2920,7 +2944,7 @@ class Phykit:
2920
2944
  [--legend-position <str>]
2921
2945
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
2922
2946
  [--title-fontsize <float>] [--axis-fontsize <float>]
2923
- [--colors <str>]
2947
+ [--colors <str>] [--ladderize]
2924
2948
  [--json]
2925
2949
 
2926
2950
  Options
@@ -3006,6 +3030,9 @@ class Phykit:
3006
3030
  (hex or named, e.g.,
3007
3031
  "#ff0000,blue,#00ff00")
3008
3032
 
3033
+ --ladderize ladderize (sort) the tree
3034
+ before plotting
3035
+
3009
3036
  --json optional argument to output
3010
3037
  results as JSON
3011
3038
  """
@@ -3255,7 +3282,7 @@ class Phykit:
3255
3282
  [--legend-position <str>]
3256
3283
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
3257
3284
  [--title-fontsize <float>] [--axis-fontsize <float>]
3258
- [--colors <str>]
3285
+ [--colors <str>] [--ladderize]
3259
3286
  [--json]
3260
3287
 
3261
3288
  Options
@@ -3307,6 +3334,9 @@ class Phykit:
3307
3334
  (hex or named, e.g.,
3308
3335
  "#ff0000,blue,#00ff00")
3309
3336
 
3337
+ --ladderize ladderize (sort) the tree
3338
+ before plotting
3339
+
3310
3340
  --json optional argument to output
3311
3341
  results as JSON
3312
3342
  """
@@ -3606,7 +3636,7 @@ class Phykit:
3606
3636
  [--legend-position <str>]
3607
3637
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
3608
3638
  [--title-fontsize <float>] [--axis-fontsize <float>]
3609
- [--colors <str>]
3639
+ [--colors <str>] [--ladderize]
3610
3640
  [--json]
3611
3641
 
3612
3642
  Options
@@ -3661,6 +3691,9 @@ class Phykit:
3661
3691
  (hex or named, e.g.,
3662
3692
  "#ff0000,blue,#00ff00")
3663
3693
 
3694
+ --ladderize ladderize (sort) the tree
3695
+ before plotting
3696
+
3664
3697
  --json optional argument to output
3665
3698
  results as JSON
3666
3699
  """
@@ -3731,7 +3764,7 @@ class Phykit:
3731
3764
  [--legend-position <str>]
3732
3765
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
3733
3766
  [--title-fontsize <float>] [--axis-fontsize <float>]
3734
- [--colors <str>]
3767
+ [--colors <str>] [--ladderize]
3735
3768
  [--json]
3736
3769
 
3737
3770
  Options
@@ -3774,6 +3807,9 @@ class Phykit:
3774
3807
  (hex or named, e.g.,
3775
3808
  "#ff0000,blue,#00ff00")
3776
3809
 
3810
+ --ladderize ladderize (sort) the tree
3811
+ before plotting
3812
+
3777
3813
  --json optional argument to also
3778
3814
  output results as JSON
3779
3815
  """
@@ -3823,7 +3859,7 @@ class Phykit:
3823
3859
  [--legend-position <str>]
3824
3860
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
3825
3861
  [--title-fontsize <float>] [--axis-fontsize <float>]
3826
- [--colors <str>]
3862
+ [--colors <str>] [--ladderize]
3827
3863
  [--json]
3828
3864
 
3829
3865
  Options
@@ -3876,6 +3912,9 @@ class Phykit:
3876
3912
  (hex or named, e.g.,
3877
3913
  "#ff0000,blue,#00ff00")
3878
3914
 
3915
+ --ladderize ladderize (sort) the tree
3916
+ before plotting
3917
+
3879
3918
  --json optional argument to also
3880
3919
  output results as JSON
3881
3920
  """
@@ -3930,7 +3969,7 @@ class Phykit:
3930
3969
  [--legend-position <str>]
3931
3970
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
3932
3971
  [--title-fontsize <float>] [--axis-fontsize <float>]
3933
- [--colors <str>]
3972
+ [--colors <str>] [--ladderize]
3934
3973
  [--json]
3935
3974
 
3936
3975
  Options
@@ -3973,6 +4012,9 @@ class Phykit:
3973
4012
  (hex or named, e.g.,
3974
4013
  "#ff0000,blue,#00ff00")
3975
4014
 
4015
+ --ladderize ladderize (sort) the tree
4016
+ before plotting
4017
+
3976
4018
  --json optional argument to output
3977
4019
  results as JSON
3978
4020
  """
@@ -4019,7 +4061,7 @@ class Phykit:
4019
4061
  [--legend-position <str>]
4020
4062
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
4021
4063
  [--title-fontsize <float>] [--axis-fontsize <float>]
4022
- [--colors <str>]
4064
+ [--colors <str>] [--ladderize]
4023
4065
  [--json]
4024
4066
 
4025
4067
  Options
@@ -4065,6 +4107,9 @@ class Phykit:
4065
4107
  (hex or named, e.g.,
4066
4108
  "#ff0000,blue,#00ff00")
4067
4109
 
4110
+ --ladderize ladderize (sort) the tree
4111
+ before plotting
4112
+
4068
4113
  --json optional argument to output
4069
4114
  results as JSON
4070
4115
  """
@@ -4118,7 +4163,7 @@ class Phykit:
4118
4163
  [--legend-position <str>]
4119
4164
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
4120
4165
  [--title-fontsize <float>] [--axis-fontsize <float>]
4121
- [--colors <str>]
4166
+ [--colors <str>] [--ladderize]
4122
4167
  [--json]
4123
4168
 
4124
4169
  Options
@@ -4170,6 +4215,9 @@ class Phykit:
4170
4215
  (hex or named, e.g.,
4171
4216
  "#ff0000,blue,#00ff00")
4172
4217
 
4218
+ --ladderize ladderize (sort) the tree
4219
+ before plotting
4220
+
4173
4221
  --json optional argument to output
4174
4222
  results as JSON
4175
4223
  """
@@ -4651,7 +4699,7 @@ class Phykit:
4651
4699
  [--legend-position <str>]
4652
4700
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
4653
4701
  [--title-fontsize <float>] [--axis-fontsize <float>]
4654
- [--colors <str>]
4702
+ [--colors <str>] [--ladderize]
4655
4703
  [--json]
4656
4704
 
4657
4705
  Options
@@ -4702,6 +4750,9 @@ class Phykit:
4702
4750
  (hex or named, e.g.,
4703
4751
  "#ff0000,blue,#00ff00")
4704
4752
 
4753
+ --ladderize ladderize (sort) the tree
4754
+ before plotting
4755
+
4705
4756
  --json optional argument to output
4706
4757
  results as JSON
4707
4758
  """
@@ -4766,7 +4817,7 @@ class Phykit:
4766
4817
  [--legend-position <str>]
4767
4818
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
4768
4819
  [--title-fontsize <float>] [--axis-fontsize <float>]
4769
- [--colors <str>]
4820
+ [--colors <str>] [--ladderize]
4770
4821
 
4771
4822
  Options
4772
4823
  =====================================================
@@ -4815,6 +4866,9 @@ class Phykit:
4815
4866
  (default: "#2b8cbe,#d62728,
4816
4867
  #969696")
4817
4868
 
4869
+ --ladderize ladderize (sort) the tree
4870
+ before plotting
4871
+
4818
4872
  --json optional argument to output
4819
4873
  per-node concordance as JSON
4820
4874
  """
@@ -4879,7 +4933,7 @@ class Phykit:
4879
4933
  [--legend-position <str>]
4880
4934
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
4881
4935
  [--title-fontsize <float>] [--axis-fontsize <float>]
4882
- [--colors <str>]
4936
+ [--colors <str>] [--ladderize]
4883
4937
  [--json]
4884
4938
 
4885
4939
  Options
@@ -4936,6 +4990,9 @@ class Phykit:
4936
4990
  (hex or named, e.g.,
4937
4991
  "#ff0000,blue,#00ff00")
4938
4992
 
4993
+ --ladderize ladderize (sort) the tree
4994
+ before plotting
4995
+
4939
4996
  --json optional argument to output
4940
4997
  results as JSON
4941
4998
  """
@@ -5096,7 +5153,7 @@ class Phykit:
5096
5153
  [--legend-position <str>]
5097
5154
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
5098
5155
  [--title-fontsize <float>] [--axis-fontsize <float>]
5099
- [--colors <str>]
5156
+ [--colors <str>] [--ladderize]
5100
5157
  [--json]
5101
5158
 
5102
5159
  Options
@@ -5142,6 +5199,9 @@ class Phykit:
5142
5199
  (hex or named, e.g.,
5143
5200
  "#ff0000,blue,#00ff00")
5144
5201
 
5202
+ --ladderize ladderize (sort) the tree
5203
+ before plotting
5204
+
5145
5205
  --json optional argument to output
5146
5206
  results as JSON
5147
5207
  """
@@ -5250,7 +5310,7 @@ class Phykit:
5250
5310
  [--legend-position <str>]
5251
5311
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
5252
5312
  [--title-fontsize <float>] [--axis-fontsize <float>]
5253
- [--colors <str>]
5313
+ [--colors <str>] [--ladderize]
5254
5314
  [--json]
5255
5315
 
5256
5316
  Options
@@ -5298,6 +5358,9 @@ class Phykit:
5298
5358
  (hex or named, e.g.,
5299
5359
  "#ff0000,blue,#00ff00")
5300
5360
 
5361
+ --ladderize ladderize (sort) the tree
5362
+ before plotting
5363
+
5301
5364
  --json optional argument to output
5302
5365
  results as JSON
5303
5366
  """
@@ -5357,7 +5420,7 @@ class Phykit:
5357
5420
  [--legend-position <str>]
5358
5421
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
5359
5422
  [--title-fontsize <float>] [--axis-fontsize <float>]
5360
- [--colors <str>]
5423
+ [--colors <str>] [--ladderize]
5361
5424
  [--json]
5362
5425
 
5363
5426
  Options
@@ -5421,6 +5484,9 @@ class Phykit:
5421
5484
  (hex or named, e.g.,
5422
5485
  "#ff0000,blue,#00ff00")
5423
5486
 
5487
+ --ladderize ladderize (sort) the tree
5488
+ before plotting
5489
+
5424
5490
  --json optional argument to output
5425
5491
  results as JSON
5426
5492
  """
@@ -5820,7 +5886,7 @@ class Phykit:
5820
5886
  [--legend-position <str>]
5821
5887
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
5822
5888
  [--title-fontsize <float>] [--axis-fontsize <float>]
5823
- [--colors <str>]
5889
+ [--colors <str>] [--ladderize]
5824
5890
  [--json]
5825
5891
 
5826
5892
  Options
@@ -5877,6 +5943,9 @@ class Phykit:
5877
5943
  (hex or named, e.g.,
5878
5944
  "#ff0000,blue,#00ff00")
5879
5945
 
5946
+ --ladderize ladderize (sort) the tree
5947
+ before plotting
5948
+
5880
5949
  --json optional argument to output
5881
5950
  results as JSON
5882
5951
  """
@@ -6056,7 +6125,7 @@ class Phykit:
6056
6125
  [--legend-position <str>]
6057
6126
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
6058
6127
  [--title-fontsize <float>] [--axis-fontsize <float>]
6059
- [--colors <str>]
6128
+ [--colors <str>] [--ladderize]
6060
6129
  [--json]
6061
6130
 
6062
6131
  Options
@@ -6107,6 +6176,9 @@ class Phykit:
6107
6176
  (hex or named, e.g.,
6108
6177
  "#ff0000,blue,#00ff00")
6109
6178
 
6179
+ --ladderize ladderize (sort) the tree
6180
+ before plotting
6181
+
6110
6182
  --json optional argument to output
6111
6183
  results as JSON
6112
6184
  """
@@ -6225,7 +6297,7 @@ class Phykit:
6225
6297
  [--legend-position <str>]
6226
6298
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
6227
6299
  [--title-fontsize <float>] [--axis-fontsize <float>]
6228
- [--colors <str>]
6300
+ [--colors <str>] [--ladderize]
6229
6301
  [--json]
6230
6302
 
6231
6303
  Options
@@ -6270,6 +6342,9 @@ class Phykit:
6270
6342
  (hex or named, e.g.,
6271
6343
  "#ff0000,blue,#00ff00")
6272
6344
 
6345
+ --ladderize ladderize (sort) the tree
6346
+ before plotting
6347
+
6273
6348
  --json optional argument to output
6274
6349
  results as JSON
6275
6350
  """
@@ -6325,7 +6400,7 @@ class Phykit:
6325
6400
  [--legend-position <str>]
6326
6401
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
6327
6402
  [--title-fontsize <float>] [--axis-fontsize <float>]
6328
- [--colors <str>]
6403
+ [--colors <str>] [--ladderize]
6329
6404
  [--json]
6330
6405
 
6331
6406
  Options
@@ -6369,6 +6444,9 @@ class Phykit:
6369
6444
  (hex or named, e.g.,
6370
6445
  "#ff0000,blue,#00ff00")
6371
6446
 
6447
+ --ladderize ladderize (sort) the tree
6448
+ before plotting
6449
+
6372
6450
  --json optional argument to output
6373
6451
  results as JSON
6374
6452
  """
@@ -6425,7 +6503,7 @@ class Phykit:
6425
6503
  [--legend-position <str>]
6426
6504
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
6427
6505
  [--title-fontsize <float>] [--axis-fontsize <float>]
6428
- [--colors <str>]
6506
+ [--colors <str>] [--ladderize]
6429
6507
  [--json]
6430
6508
 
6431
6509
  Options
@@ -6483,6 +6561,9 @@ class Phykit:
6483
6561
  (hex or named, e.g.,
6484
6562
  "#ff0000,blue,#00ff00")
6485
6563
 
6564
+ --ladderize ladderize (sort) the tree
6565
+ before plotting
6566
+
6486
6567
  --json output results as JSON
6487
6568
  """
6488
6569
  ),
@@ -6556,7 +6637,7 @@ class Phykit:
6556
6637
  [--legend-position <str>]
6557
6638
  [--ylabel-fontsize <float>] [--xlabel-fontsize <float>]
6558
6639
  [--title-fontsize <float>] [--axis-fontsize <float>]
6559
- [--colors <str>]
6640
+ [--colors <str>] [--ladderize]
6560
6641
 
6561
6642
  Options
6562
6643
  =====================================================
@@ -6616,6 +6697,9 @@ class Phykit:
6616
6697
  (hex or named, e.g.,
6617
6698
  "#ff0000,blue,#00ff00")
6618
6699
 
6700
+ --ladderize ladderize (sort) the tree
6701
+ before plotting
6702
+
6619
6703
  --json optional argument to output
6620
6704
  results as JSON
6621
6705
  """
@@ -66,6 +66,9 @@ class AncestralReconstruction(Tree):
66
66
  if tips_to_prune:
67
67
  tree_copy = self.prune_tree_using_taxa_list(tree_copy, tips_to_prune)
68
68
 
69
+ if self.plot_config.ladderize:
70
+ tree_copy.ladderize()
71
+
69
72
  # Label internal nodes
70
73
  node_labels = self._label_internal_nodes(tree_copy)
71
74
 
@@ -1206,6 +1209,9 @@ class AncestralReconstruction(Tree):
1206
1209
  if tips_to_prune:
1207
1210
  tree_copy = self.prune_tree_using_taxa_list(tree_copy, tips_to_prune)
1208
1211
 
1212
+ if self.plot_config.ladderize:
1213
+ tree_copy.ladderize()
1214
+
1209
1215
  # Label internal nodes
1210
1216
  node_labels = self._label_internal_nodes(tree_copy)
1211
1217
 
@@ -101,6 +101,9 @@ class ConcordanceAsr(Tree):
101
101
  species_copy, tips_to_prune
102
102
  )
103
103
 
104
+ if self.plot_config.ladderize:
105
+ species_copy.ladderize()
106
+
104
107
  if self.method == "distribution":
105
108
  result = self._run_distribution(
106
109
  species_copy, gene_trees, trait_values, all_taxa
@@ -40,6 +40,9 @@ class ContMap(Tree):
40
40
  if tips_to_prune:
41
41
  tree_copy = self.prune_tree_using_taxa_list(tree_copy, tips_to_prune)
42
42
 
43
+ if self.plot_config.ladderize:
44
+ tree_copy.ladderize()
45
+
43
46
  # Label internal nodes
44
47
  node_labels = self._label_internal_nodes(tree_copy)
45
48
 
@@ -84,6 +84,10 @@ class Cophylo(Tree):
84
84
  n_tips1 = len(tips1)
85
85
  n_tips2 = len(tips2)
86
86
 
87
+ if self.plot_config.ladderize:
88
+ tree1.ladderize()
89
+ tree2.ladderize()
90
+
87
91
  # Optimize tip ordering to reduce line crossings
88
92
  tree1_order, tree2_order = self._optimize_tip_order(
89
93
  tree1, tree2, mapping_valid
@@ -64,6 +64,9 @@ class DensityMap(Tree):
64
64
  for tip_name in tips_to_prune:
65
65
  tree.prune(tip_name)
66
66
 
67
+ if self.plot_config.ladderize:
68
+ tree.ladderize()
69
+
67
70
  # Fit Q matrix using ER model
68
71
  Q, loglik = scm._fit_q_matrix(tree, tip_states, states, "ER")
69
72
  k = len(states)
@@ -85,6 +85,8 @@ class DiscordanceAsymmetry(Tree):
85
85
  self._output_text(branch_results, summary)
86
86
 
87
87
  if self.plot_output:
88
+ if self.plot_config.ladderize:
89
+ species_tree.ladderize()
88
90
  self._plot(species_tree, branch_results, self.plot_output,
89
91
  shared_taxa=shared_taxa)
90
92
 
@@ -43,6 +43,9 @@ class PhyloHeatmap(Tree):
43
43
  if tips_to_prune:
44
44
  tree = self.prune_tree_using_taxa_list(tree, tips_to_prune)
45
45
 
46
+ if self.plot_config.ladderize:
47
+ tree.ladderize()
48
+
46
49
  # Get tip order from tree traversal
47
50
  tip_order = [t.name for t in tree.get_terminals()]
48
51
 
@@ -63,6 +63,9 @@ class QuartetPie(Tree):
63
63
  input_mode = "astral"
64
64
  n_gene_trees = 0
65
65
 
66
+ if self.plot_config.ladderize:
67
+ tree.ladderize()
68
+
66
69
  self._plot_quartet_pie(tree, proportions, self.output_path)
67
70
 
68
71
  if self.json_output:
@@ -108,6 +108,9 @@ class RateHeterogeneity(Tree):
108
108
 
109
109
  # Plot
110
110
  if self.plot_output:
111
+ if self.plot_config.ladderize:
112
+ tree_copy.ladderize()
113
+ parent_map = self._build_parent_map(tree_copy)
111
114
  self._plot_regime_tree(
112
115
  tree_copy, branch_regimes, regimes, parent_map, self.plot_output
113
116
  )
@@ -67,6 +67,9 @@ class StochasticCharacterMap(Tree):
67
67
  for tip_name in tips_to_prune:
68
68
  tree.prune(tip_name)
69
69
 
70
+ if self.plot_config.ladderize:
71
+ tree.ladderize()
72
+
70
73
  # Fit Q matrix
71
74
  Q, loglik = self._fit_q_matrix(tree, tip_states, states, self.model)
72
75
  k = len(states)
@@ -0,0 +1 @@
1
+ __version__ = "2.1.49"
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: phykit
3
- Version: 2.1.48
3
+ Version: 2.1.49
4
4
  Home-page: https://github.com/jlsteenwyk/phykit
5
5
  Author: Jacob L. Steenwyk
6
6
  Author-email: jlsteenwyk@gmail.com
@@ -14,6 +14,22 @@ Classifier: Topic :: Scientific/Engineering
14
14
  Requires-Python: >=3.11
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE.md
17
+ Requires-Dist: biopython>=1.82
18
+ Requires-Dist: matplotlib>=3.7.0
19
+ Requires-Dist: numpy>=1.24.0
20
+ Requires-Dist: scipy>=1.11.3
21
+ Requires-Dist: scikit-learn>=1.4.2
22
+ Requires-Dist: umap-learn>=0.5.0
23
+ Requires-Dist: tqdm>=4.65.0
24
+ Dynamic: author
25
+ Dynamic: author-email
26
+ Dynamic: classifier
27
+ Dynamic: description
28
+ Dynamic: description-content-type
29
+ Dynamic: home-page
30
+ Dynamic: license-file
31
+ Dynamic: requires-dist
32
+ Dynamic: requires-python
17
33
 
18
34
  <p align="center">
19
35
  <a href="https://github.com/jlsteenwyk/phykit">
@@ -1 +0,0 @@
1
- __version__ = "2.1.48"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes