phykit 2.1.80__tar.gz → 2.1.82__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 (141) hide show
  1. {phykit-2.1.80 → phykit-2.1.82}/PKG-INFO +1 -1
  2. {phykit-2.1.80 → phykit-2.1.82}/phykit/cli_registry.py +7 -0
  3. {phykit-2.1.80 → phykit-2.1.82}/phykit/phykit.py +166 -0
  4. {phykit-2.1.80 → phykit-2.1.82}/phykit/service_factories.py +2 -0
  5. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/__init__.py +2 -0
  6. phykit-2.1.82/phykit/services/tree/phylo_anova.py +808 -0
  7. phykit-2.1.82/phykit/services/tree/simmap_summary.py +604 -0
  8. phykit-2.1.82/phykit/version.py +1 -0
  9. {phykit-2.1.80 → phykit-2.1.82}/phykit.egg-info/PKG-INFO +1 -1
  10. {phykit-2.1.80 → phykit-2.1.82}/phykit.egg-info/SOURCES.txt +2 -0
  11. {phykit-2.1.80 → phykit-2.1.82}/phykit.egg-info/entry_points.txt +7 -0
  12. {phykit-2.1.80 → phykit-2.1.82}/setup.py +7 -0
  13. phykit-2.1.80/phykit/version.py +0 -1
  14. {phykit-2.1.80 → phykit-2.1.82}/LICENSE.md +0 -0
  15. {phykit-2.1.80 → phykit-2.1.82}/README.md +0 -0
  16. {phykit-2.1.80 → phykit-2.1.82}/phykit/__init__.py +0 -0
  17. {phykit-2.1.80 → phykit-2.1.82}/phykit/__main__.py +0 -0
  18. {phykit-2.1.80 → phykit-2.1.82}/phykit/errors.py +0 -0
  19. {phykit-2.1.80 → phykit-2.1.82}/phykit/helpers/__init__.py +0 -0
  20. {phykit-2.1.80 → phykit-2.1.82}/phykit/helpers/boolean_argument_parsing.py +0 -0
  21. {phykit-2.1.80 → phykit-2.1.82}/phykit/helpers/caching.py +0 -0
  22. {phykit-2.1.80 → phykit-2.1.82}/phykit/helpers/circular_layout.py +0 -0
  23. {phykit-2.1.80 → phykit-2.1.82}/phykit/helpers/color_annotations.py +0 -0
  24. {phykit-2.1.80 → phykit-2.1.82}/phykit/helpers/discrete_models.py +0 -0
  25. {phykit-2.1.80 → phykit-2.1.82}/phykit/helpers/files.py +0 -0
  26. {phykit-2.1.80 → phykit-2.1.82}/phykit/helpers/json_output.py +0 -0
  27. {phykit-2.1.80 → phykit-2.1.82}/phykit/helpers/parallel.py +0 -0
  28. {phykit-2.1.80 → phykit-2.1.82}/phykit/helpers/parsimony_utils.py +0 -0
  29. {phykit-2.1.80 → phykit-2.1.82}/phykit/helpers/plot_config.py +0 -0
  30. {phykit-2.1.80 → phykit-2.1.82}/phykit/helpers/quartet_utils.py +0 -0
  31. {phykit-2.1.80 → phykit-2.1.82}/phykit/helpers/stats_summary.py +0 -0
  32. {phykit-2.1.80 → phykit-2.1.82}/phykit/helpers/streaming.py +0 -0
  33. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/__init__.py +0 -0
  34. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/__init__.py +0 -0
  35. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/alignment_entropy.py +0 -0
  36. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/alignment_length.py +0 -0
  37. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/alignment_length_no_gaps.py +0 -0
  38. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/alignment_outlier_taxa.py +0 -0
  39. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/alignment_recoding.py +0 -0
  40. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/alignment_subsample.py +0 -0
  41. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/base.py +0 -0
  42. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/column_score.py +0 -0
  43. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/composition_per_taxon.py +0 -0
  44. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/compositional_bias_per_site.py +0 -0
  45. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/create_concatenation_matrix.py +0 -0
  46. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/dfoil.py +0 -0
  47. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/dna_threader.py +0 -0
  48. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/dstatistic.py +0 -0
  49. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/evolutionary_rate_per_site.py +0 -0
  50. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/faidx.py +0 -0
  51. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/gc_content.py +0 -0
  52. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/identity_matrix.py +0 -0
  53. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/mask_alignment.py +0 -0
  54. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/occupancy_per_taxon.py +0 -0
  55. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/pairwise_identity.py +0 -0
  56. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/parsimony_informative_sites.py +0 -0
  57. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/phylo_gwas.py +0 -0
  58. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/plot_alignment_qc.py +0 -0
  59. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/rcv.py +0 -0
  60. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/rcvt.py +0 -0
  61. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/rename_fasta_entries.py +0 -0
  62. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/sum_of_pairs_score.py +0 -0
  63. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/taxon_groups.py +0 -0
  64. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/alignment/variable_sites.py +0 -0
  65. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/base.py +0 -0
  66. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/ancestral_reconstruction.py +0 -0
  67. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/base.py +0 -0
  68. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/bipartition_support_stats.py +0 -0
  69. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/branch_length_multiplier.py +0 -0
  70. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/character_map.py +0 -0
  71. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/collapse_branches.py +0 -0
  72. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/concordance_asr.py +0 -0
  73. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/consensus_network.py +0 -0
  74. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/consensus_tree.py +0 -0
  75. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/cont_map.py +0 -0
  76. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/cophylo.py +0 -0
  77. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/covarying_evolutionary_rates.py +0 -0
  78. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/density_map.py +0 -0
  79. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/discordance_asymmetry.py +0 -0
  80. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/dvmc.py +0 -0
  81. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/evo_tempo_map.py +0 -0
  82. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/evolutionary_rate.py +0 -0
  83. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/fit_continuous.py +0 -0
  84. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/fit_discrete.py +0 -0
  85. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/hidden_paralogy_check.py +0 -0
  86. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/hybridization.py +0 -0
  87. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/independent_contrasts.py +0 -0
  88. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/internal_branch_stats.py +0 -0
  89. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/internode_labeler.py +0 -0
  90. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/kf_distance.py +0 -0
  91. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/last_common_ancestor_subtree.py +0 -0
  92. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/lb_score.py +0 -0
  93. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/ltt.py +0 -0
  94. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/monophyly_check.py +0 -0
  95. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/nearest_neighbor_interchange.py +0 -0
  96. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/neighbor_net.py +0 -0
  97. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/network_signal.py +0 -0
  98. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/ou_shift_detection.py +0 -0
  99. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/ouwie.py +0 -0
  100. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/parsimony_score.py +0 -0
  101. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/patristic_distances.py +0 -0
  102. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/phenogram.py +0 -0
  103. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/phylo_heatmap.py +0 -0
  104. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/phylo_impute.py +0 -0
  105. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/phylo_logistic.py +0 -0
  106. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/phylogenetic_glm.py +0 -0
  107. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/phylogenetic_ordination.py +0 -0
  108. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/phylogenetic_regression.py +0 -0
  109. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/phylogenetic_signal.py +0 -0
  110. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/phylomorphospace.py +0 -0
  111. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/polytomy_test.py +0 -0
  112. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/print_tree.py +0 -0
  113. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/prune_tree.py +0 -0
  114. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/quartet_network.py +0 -0
  115. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/quartet_pie.py +0 -0
  116. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/rate_heterogeneity.py +0 -0
  117. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/relative_rate_test.py +0 -0
  118. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/rename_tree_tips.py +0 -0
  119. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/rf_distance.py +0 -0
  120. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/root_tree.py +0 -0
  121. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/saturation.py +0 -0
  122. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/spectral_discordance.py +0 -0
  123. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/spr.py +0 -0
  124. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/spurious_sequence.py +0 -0
  125. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/stochastic_character_map.py +0 -0
  126. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/terminal_branch_stats.py +0 -0
  127. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/threshold_model.py +0 -0
  128. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/tip_labels.py +0 -0
  129. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/tip_to_tip_distance.py +0 -0
  130. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/tip_to_tip_node_distance.py +0 -0
  131. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/total_tree_length.py +0 -0
  132. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/trait_correlation.py +0 -0
  133. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/trait_rate_map.py +0 -0
  134. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/tree_space.py +0 -0
  135. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/treeness.py +0 -0
  136. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/treeness_over_rcv.py +0 -0
  137. {phykit-2.1.80 → phykit-2.1.82}/phykit/services/tree/vcv_utils.py +0 -0
  138. {phykit-2.1.80 → phykit-2.1.82}/phykit.egg-info/dependency_links.txt +0 -0
  139. {phykit-2.1.80 → phykit-2.1.82}/phykit.egg-info/requires.txt +0 -0
  140. {phykit-2.1.80 → phykit-2.1.82}/phykit.egg-info/top_level.txt +0 -0
  141. {phykit-2.1.80 → phykit-2.1.82}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: phykit
3
- Version: 2.1.80
3
+ Version: 2.1.82
4
4
  Home-page: https://github.com/jlsteenwyk/phykit
5
5
  Author: Jacob L. Steenwyk
6
6
  Author-email: jlsteenwyk@gmail.com
@@ -55,6 +55,10 @@ ALIAS_TO_HANDLER: Dict[str, str] = {
55
55
  "sum_of_pairs_score": "sum_of_pairs_score",
56
56
  "sops": "sum_of_pairs_score",
57
57
  "sop": "sum_of_pairs_score",
58
+ "phylo_anova": "phylo_anova",
59
+ "panova": "phylo_anova",
60
+ "phylo_manova": "phylo_anova",
61
+ "pmanova": "phylo_anova",
58
62
  "phylo_gwas": "phylo_gwas",
59
63
  "pgwas": "phylo_gwas",
60
64
  "vs": "variable_sites",
@@ -114,6 +118,9 @@ ALIAS_TO_HANDLER: Dict[str, str] = {
114
118
  "casr": "concordance_asr",
115
119
  "simmap": "stochastic_character_map",
116
120
  "scm": "stochastic_character_map",
121
+ "simmap_summary": "simmap_summary",
122
+ "smsummary": "simmap_summary",
123
+ "describe_simmap": "simmap_summary",
117
124
  "contmap": "cont_map",
118
125
  "cmap": "cont_map",
119
126
  "densitymap": "density_map",
@@ -248,10 +248,14 @@ class Phykit:
248
248
  - fit phylogenetic generalized least squares (PGLS) regression
249
249
  phylogenetic_glm (alias: phylo_glm; pglm)
250
250
  - fit phylogenetic GLM for binary (logistic) or count (Poisson) data
251
+ phylo_anova (alias: panova; phylo_manova; pmanova)
252
+ - phylogenetic ANOVA / MANOVA using RRPP (Adams & Collyer 2018)
251
253
  phylo_logistic (alias: phylo_logreg; plogreg)
252
254
  - fit phylogenetic logistic regression (Ives & Garland 2010)
253
255
  stochastic_character_map (alias: simmap; scm)
254
256
  - stochastic character mapping (SIMMAP) of discrete traits
257
+ simmap_summary (alias: smsummary; describe_simmap)
258
+ - per-branch SIMMAP summary with node posteriors
255
259
  cont_map (alias: contmap; cmap)
256
260
  - continuous trait map (contMap) visualization on a phylogeny
257
261
  trait_rate_map (alias: rate_map; branch_rates)
@@ -2004,6 +2008,87 @@ class Phykit:
2004
2008
  _add_json_argument(parser)
2005
2009
  _run_service(parser, argv, PhyloGwas)
2006
2010
 
2011
+ @staticmethod
2012
+ def phylo_anova(argv):
2013
+ parser = _new_parser(
2014
+ description=textwrap.dedent(
2015
+ f"""\
2016
+ {help_header}
2017
+
2018
+ Phylogenetic ANOVA / MANOVA using the Residual
2019
+ Randomization Permutation Procedure (RRPP) of
2020
+ Adams & Collyer (2018).
2021
+
2022
+ Tests whether a continuous trait (ANOVA) or multiple
2023
+ traits (MANOVA) differ across discrete groups while
2024
+ accounting for phylogenetic non-independence.
2025
+
2026
+ Auto-detects univariate vs multivariate based on the
2027
+ number of response trait columns. Override with
2028
+ --method anova or --method manova.
2029
+
2030
+ Aliases:
2031
+ phylo_anova, panova, phylo_manova, pmanova
2032
+ Command line interfaces:
2033
+ pk_phylo_anova, pk_panova, pk_phylo_manova, pk_pmanova
2034
+
2035
+ Usage:
2036
+ phykit phylo_anova -t <tree> --traits <traits_file>
2037
+ [--group-column <name>] [--method auto|anova|manova]
2038
+ [--permutations <int>] [--pairwise]
2039
+ [--plot-output <file>] [--plot-type boxplot|phylomorphospace]
2040
+ [--seed <int>] [--json]
2041
+
2042
+ Options
2043
+ =====================================================
2044
+ -t/--tree species tree file (required)
2045
+
2046
+ --traits TSV file with taxon, group
2047
+ column, and one or more
2048
+ response trait columns
2049
+ (required)
2050
+
2051
+ --group-column name of the categorical
2052
+ grouping column (default:
2053
+ first non-taxon column)
2054
+
2055
+ --method analysis method: auto, anova,
2056
+ or manova (default: auto)
2057
+
2058
+ --permutations number of RRPP permutations
2059
+ (default: 1000)
2060
+
2061
+ --pairwise include post-hoc pairwise
2062
+ group comparisons
2063
+
2064
+ --plot-output output figure path
2065
+ (.png, .pdf, .svg)
2066
+
2067
+ --plot-type boxplot or phylomorphospace
2068
+ (default: auto — boxplot for
2069
+ ANOVA, phylomorphospace for
2070
+ MANOVA)
2071
+
2072
+ --seed random seed for reproducible
2073
+ permutations
2074
+
2075
+ --json output results as JSON
2076
+ """
2077
+ ),
2078
+ )
2079
+ parser.add_argument("-t", "--tree", type=str, required=True, help=SUPPRESS, metavar="")
2080
+ parser.add_argument("--traits", type=str, required=True, help=SUPPRESS, metavar="")
2081
+ parser.add_argument("--group-column", type=str, default=None, help=SUPPRESS, metavar="")
2082
+ parser.add_argument("--method", type=str, default="auto", choices=["auto", "anova", "manova"], help=SUPPRESS, metavar="")
2083
+ parser.add_argument("--permutations", type=int, default=1000, help=SUPPRESS, metavar="")
2084
+ parser.add_argument("--pairwise", action="store_true", help=SUPPRESS)
2085
+ parser.add_argument("--plot-output", type=str, default=None, help=SUPPRESS, metavar="")
2086
+ parser.add_argument("--plot-type", type=str, default="auto", choices=["auto", "boxplot", "phylomorphospace"], help=SUPPRESS, metavar="")
2087
+ parser.add_argument("--seed", type=int, default=None, help=SUPPRESS, metavar="")
2088
+ add_plot_arguments(parser)
2089
+ _add_json_argument(parser)
2090
+ _run_service(parser, argv, PhyloAnova)
2091
+
2007
2092
  @staticmethod
2008
2093
  def alignment_subsample(argv):
2009
2094
  parser = _new_parser(
@@ -4713,6 +4798,79 @@ class Phykit:
4713
4798
  _add_json_argument(parser)
4714
4799
  _run_service(parser, argv, StochasticCharacterMap)
4715
4800
 
4801
+ @staticmethod
4802
+ def simmap_summary(argv):
4803
+ parser = _new_parser(
4804
+ description=textwrap.dedent(
4805
+ f"""\
4806
+ {help_header}
4807
+
4808
+ Run N stochastic character maps and summarize per-branch
4809
+ dwelling time proportions, expected transitions, and
4810
+ posterior state probabilities at each node.
4811
+
4812
+ This extends stochastic_character_map by providing a
4813
+ detailed per-branch summary analogous to
4814
+ phytools::describe.simmap() in R.
4815
+
4816
+ Aliases:
4817
+ simmap_summary, smsummary, describe_simmap
4818
+ Command line interfaces:
4819
+ pk_simmap_summary, pk_smsummary, pk_describe_simmap
4820
+
4821
+ Usage:
4822
+ phykit simmap_summary -t <tree> -d <trait_data> -c <trait>
4823
+ [-m/--model ER|SYM|ARD] [-n/--nsim <int>]
4824
+ [--seed <int>] [--plot <file>] [--csv <file>] [--json]
4825
+
4826
+ Options
4827
+ =====================================================
4828
+ -t/--tree phylogenetic tree file
4829
+ (required)
4830
+
4831
+ -d/--trait_data tab-delimited trait file
4832
+ with header row (required)
4833
+
4834
+ -c/--trait column name for the
4835
+ discrete character trait
4836
+ (required)
4837
+
4838
+ -m/--model substitution model: ER
4839
+ (equal rates), SYM
4840
+ (symmetric), or ARD (all
4841
+ rates different). Default: ER
4842
+
4843
+ -n/--nsim number of stochastic maps
4844
+ to simulate (default: 100)
4845
+
4846
+ --seed random seed for
4847
+ reproducibility
4848
+
4849
+ --plot output plot file showing
4850
+ tree with posterior pie
4851
+ charts at nodes
4852
+
4853
+ --csv output CSV file with
4854
+ per-branch dwelling
4855
+ proportions and node
4856
+ posteriors
4857
+
4858
+ --json output results as JSON
4859
+ """
4860
+ ),
4861
+ )
4862
+ parser.add_argument("-t", "--tree", type=str, required=True, help=SUPPRESS, metavar="")
4863
+ parser.add_argument("-d", "--trait_data", type=str, required=True, help=SUPPRESS, metavar="")
4864
+ parser.add_argument("-c", "--trait", type=str, required=True, help=SUPPRESS, metavar="")
4865
+ parser.add_argument("-m", "--model", type=str, required=False, default="ER", help=SUPPRESS, metavar="")
4866
+ parser.add_argument("-n", "--nsim", type=int, required=False, default=100, help=SUPPRESS, metavar="")
4867
+ parser.add_argument("--seed", type=int, required=False, default=None, help=SUPPRESS, metavar="")
4868
+ parser.add_argument("--plot", type=str, required=False, default=None, help=SUPPRESS, metavar="")
4869
+ parser.add_argument("--csv", type=str, required=False, default=None, help=SUPPRESS, metavar="")
4870
+ add_plot_arguments(parser)
4871
+ _add_json_argument(parser)
4872
+ _run_service(parser, argv, SimmapSummary)
4873
+
4716
4874
  @staticmethod
4717
4875
  def cont_map(argv):
4718
4876
  parser = _new_parser(
@@ -8685,6 +8843,10 @@ def phylo_gwas(argv=None):
8685
8843
  Phykit.phylo_gwas(sys.argv[1:])
8686
8844
 
8687
8845
 
8846
+ def phylo_anova(argv=None):
8847
+ Phykit.phylo_anova(sys.argv[1:])
8848
+
8849
+
8688
8850
  def dfoil(argv=None):
8689
8851
  Phykit.dfoil(sys.argv[1:])
8690
8852
 
@@ -8810,6 +8972,10 @@ def stochastic_character_map(argv=None):
8810
8972
  Phykit.stochastic_character_map(sys.argv[1:])
8811
8973
 
8812
8974
 
8975
+ def simmap_summary(argv=None):
8976
+ Phykit.simmap_summary(sys.argv[1:])
8977
+
8978
+
8813
8979
  def cont_map(argv=None):
8814
8980
  Phykit.cont_map(sys.argv[1:])
8815
8981
 
@@ -44,6 +44,7 @@ RelativeCompositionVariability = _LazyServiceFactory("phykit.services.alignment.
44
44
  RelativeCompositionVariabilityTaxon = _LazyServiceFactory("phykit.services.alignment.rcvt", "RelativeCompositionVariabilityTaxon")
45
45
  RenameFastaEntries = _LazyServiceFactory("phykit.services.alignment.rename_fasta_entries", "RenameFastaEntries")
46
46
  SumOfPairsScore = _LazyServiceFactory("phykit.services.alignment.sum_of_pairs_score", "SumOfPairsScore")
47
+ PhyloAnova = _LazyServiceFactory("phykit.services.tree.phylo_anova", "PhyloAnova")
47
48
  PhyloGwas = _LazyServiceFactory("phykit.services.alignment.phylo_gwas", "PhyloGwas")
48
49
  TaxonGroups = _LazyServiceFactory("phykit.services.alignment.taxon_groups", "TaxonGroups")
49
50
  VariableSites = _LazyServiceFactory("phykit.services.alignment.variable_sites", "VariableSites")
@@ -75,6 +76,7 @@ Phylomorphospace = _LazyServiceFactory("phykit.services.tree.phylomorphospace",
75
76
  PhylogeneticRegression = _LazyServiceFactory("phykit.services.tree.phylogenetic_regression", "PhylogeneticRegression")
76
77
  PhylogeneticGLM = _LazyServiceFactory("phykit.services.tree.phylogenetic_glm", "PhylogeneticGLM")
77
78
  PhyloLogistic = _LazyServiceFactory("phykit.services.tree.phylo_logistic", "PhyloLogistic")
79
+ SimmapSummary = _LazyServiceFactory("phykit.services.tree.simmap_summary", "SimmapSummary")
78
80
  StochasticCharacterMap = _LazyServiceFactory("phykit.services.tree.stochastic_character_map", "StochasticCharacterMap")
79
81
  ContMap = _LazyServiceFactory("phykit.services.tree.cont_map", "ContMap")
80
82
  DensityMap = _LazyServiceFactory("phykit.services.tree.density_map", "DensityMap")
@@ -40,6 +40,7 @@ _EXPORTS = {
40
40
  "RobinsonFouldsDistance": "rf_distance",
41
41
  "RootTree": "root_tree",
42
42
  "Saturation": "saturation",
43
+ "SimmapSummary": "simmap_summary",
43
44
  "Spr": "spr",
44
45
  "SpuriousSequence": "spurious_sequence",
45
46
  "TerminalBranchStats": "terminal_branch_stats",
@@ -52,6 +53,7 @@ _EXPORTS = {
52
53
  "TreenessOverRCV": "treeness_over_rcv",
53
54
  "ConcordanceAsr": "concordance_asr",
54
55
  "PhyloLogistic": "phylo_logistic",
56
+ "PhyloAnova": "phylo_anova",
55
57
  "PhyloImpute": "phylo_impute",
56
58
  "TraitCorrelation": "trait_correlation",
57
59
  "TraitRateMap": "trait_rate_map",