phykit 2.1.82__tar.gz → 2.1.83__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 (142) hide show
  1. {phykit-2.1.82 → phykit-2.1.83}/PKG-INFO +1 -1
  2. {phykit-2.1.82 → phykit-2.1.83}/phykit/cli_registry.py +3 -0
  3. {phykit-2.1.82 → phykit-2.1.83}/phykit/phykit.py +65 -0
  4. {phykit-2.1.82 → phykit-2.1.83}/phykit/service_factories.py +1 -0
  5. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/__init__.py +1 -0
  6. phykit-2.1.83/phykit/services/tree/phylo_path.py +821 -0
  7. phykit-2.1.83/phykit/version.py +1 -0
  8. {phykit-2.1.82 → phykit-2.1.83}/phykit.egg-info/PKG-INFO +1 -1
  9. {phykit-2.1.82 → phykit-2.1.83}/phykit.egg-info/SOURCES.txt +1 -0
  10. {phykit-2.1.82 → phykit-2.1.83}/phykit.egg-info/entry_points.txt +3 -0
  11. {phykit-2.1.82 → phykit-2.1.83}/setup.py +3 -0
  12. phykit-2.1.82/phykit/version.py +0 -1
  13. {phykit-2.1.82 → phykit-2.1.83}/LICENSE.md +0 -0
  14. {phykit-2.1.82 → phykit-2.1.83}/README.md +0 -0
  15. {phykit-2.1.82 → phykit-2.1.83}/phykit/__init__.py +0 -0
  16. {phykit-2.1.82 → phykit-2.1.83}/phykit/__main__.py +0 -0
  17. {phykit-2.1.82 → phykit-2.1.83}/phykit/errors.py +0 -0
  18. {phykit-2.1.82 → phykit-2.1.83}/phykit/helpers/__init__.py +0 -0
  19. {phykit-2.1.82 → phykit-2.1.83}/phykit/helpers/boolean_argument_parsing.py +0 -0
  20. {phykit-2.1.82 → phykit-2.1.83}/phykit/helpers/caching.py +0 -0
  21. {phykit-2.1.82 → phykit-2.1.83}/phykit/helpers/circular_layout.py +0 -0
  22. {phykit-2.1.82 → phykit-2.1.83}/phykit/helpers/color_annotations.py +0 -0
  23. {phykit-2.1.82 → phykit-2.1.83}/phykit/helpers/discrete_models.py +0 -0
  24. {phykit-2.1.82 → phykit-2.1.83}/phykit/helpers/files.py +0 -0
  25. {phykit-2.1.82 → phykit-2.1.83}/phykit/helpers/json_output.py +0 -0
  26. {phykit-2.1.82 → phykit-2.1.83}/phykit/helpers/parallel.py +0 -0
  27. {phykit-2.1.82 → phykit-2.1.83}/phykit/helpers/parsimony_utils.py +0 -0
  28. {phykit-2.1.82 → phykit-2.1.83}/phykit/helpers/plot_config.py +0 -0
  29. {phykit-2.1.82 → phykit-2.1.83}/phykit/helpers/quartet_utils.py +0 -0
  30. {phykit-2.1.82 → phykit-2.1.83}/phykit/helpers/stats_summary.py +0 -0
  31. {phykit-2.1.82 → phykit-2.1.83}/phykit/helpers/streaming.py +0 -0
  32. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/__init__.py +0 -0
  33. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/__init__.py +0 -0
  34. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/alignment_entropy.py +0 -0
  35. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/alignment_length.py +0 -0
  36. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/alignment_length_no_gaps.py +0 -0
  37. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/alignment_outlier_taxa.py +0 -0
  38. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/alignment_recoding.py +0 -0
  39. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/alignment_subsample.py +0 -0
  40. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/base.py +0 -0
  41. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/column_score.py +0 -0
  42. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/composition_per_taxon.py +0 -0
  43. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/compositional_bias_per_site.py +0 -0
  44. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/create_concatenation_matrix.py +0 -0
  45. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/dfoil.py +0 -0
  46. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/dna_threader.py +0 -0
  47. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/dstatistic.py +0 -0
  48. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/evolutionary_rate_per_site.py +0 -0
  49. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/faidx.py +0 -0
  50. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/gc_content.py +0 -0
  51. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/identity_matrix.py +0 -0
  52. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/mask_alignment.py +0 -0
  53. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/occupancy_per_taxon.py +0 -0
  54. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/pairwise_identity.py +0 -0
  55. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/parsimony_informative_sites.py +0 -0
  56. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/phylo_gwas.py +0 -0
  57. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/plot_alignment_qc.py +0 -0
  58. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/rcv.py +0 -0
  59. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/rcvt.py +0 -0
  60. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/rename_fasta_entries.py +0 -0
  61. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/sum_of_pairs_score.py +0 -0
  62. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/taxon_groups.py +0 -0
  63. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/alignment/variable_sites.py +0 -0
  64. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/base.py +0 -0
  65. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/ancestral_reconstruction.py +0 -0
  66. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/base.py +0 -0
  67. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/bipartition_support_stats.py +0 -0
  68. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/branch_length_multiplier.py +0 -0
  69. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/character_map.py +0 -0
  70. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/collapse_branches.py +0 -0
  71. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/concordance_asr.py +0 -0
  72. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/consensus_network.py +0 -0
  73. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/consensus_tree.py +0 -0
  74. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/cont_map.py +0 -0
  75. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/cophylo.py +0 -0
  76. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/covarying_evolutionary_rates.py +0 -0
  77. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/density_map.py +0 -0
  78. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/discordance_asymmetry.py +0 -0
  79. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/dvmc.py +0 -0
  80. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/evo_tempo_map.py +0 -0
  81. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/evolutionary_rate.py +0 -0
  82. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/fit_continuous.py +0 -0
  83. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/fit_discrete.py +0 -0
  84. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/hidden_paralogy_check.py +0 -0
  85. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/hybridization.py +0 -0
  86. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/independent_contrasts.py +0 -0
  87. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/internal_branch_stats.py +0 -0
  88. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/internode_labeler.py +0 -0
  89. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/kf_distance.py +0 -0
  90. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/last_common_ancestor_subtree.py +0 -0
  91. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/lb_score.py +0 -0
  92. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/ltt.py +0 -0
  93. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/monophyly_check.py +0 -0
  94. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/nearest_neighbor_interchange.py +0 -0
  95. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/neighbor_net.py +0 -0
  96. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/network_signal.py +0 -0
  97. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/ou_shift_detection.py +0 -0
  98. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/ouwie.py +0 -0
  99. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/parsimony_score.py +0 -0
  100. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/patristic_distances.py +0 -0
  101. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/phenogram.py +0 -0
  102. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/phylo_anova.py +0 -0
  103. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/phylo_heatmap.py +0 -0
  104. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/phylo_impute.py +0 -0
  105. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/phylo_logistic.py +0 -0
  106. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/phylogenetic_glm.py +0 -0
  107. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/phylogenetic_ordination.py +0 -0
  108. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/phylogenetic_regression.py +0 -0
  109. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/phylogenetic_signal.py +0 -0
  110. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/phylomorphospace.py +0 -0
  111. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/polytomy_test.py +0 -0
  112. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/print_tree.py +0 -0
  113. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/prune_tree.py +0 -0
  114. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/quartet_network.py +0 -0
  115. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/quartet_pie.py +0 -0
  116. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/rate_heterogeneity.py +0 -0
  117. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/relative_rate_test.py +0 -0
  118. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/rename_tree_tips.py +0 -0
  119. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/rf_distance.py +0 -0
  120. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/root_tree.py +0 -0
  121. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/saturation.py +0 -0
  122. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/simmap_summary.py +0 -0
  123. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/spectral_discordance.py +0 -0
  124. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/spr.py +0 -0
  125. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/spurious_sequence.py +0 -0
  126. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/stochastic_character_map.py +0 -0
  127. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/terminal_branch_stats.py +0 -0
  128. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/threshold_model.py +0 -0
  129. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/tip_labels.py +0 -0
  130. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/tip_to_tip_distance.py +0 -0
  131. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/tip_to_tip_node_distance.py +0 -0
  132. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/total_tree_length.py +0 -0
  133. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/trait_correlation.py +0 -0
  134. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/trait_rate_map.py +0 -0
  135. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/tree_space.py +0 -0
  136. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/treeness.py +0 -0
  137. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/treeness_over_rcv.py +0 -0
  138. {phykit-2.1.82 → phykit-2.1.83}/phykit/services/tree/vcv_utils.py +0 -0
  139. {phykit-2.1.82 → phykit-2.1.83}/phykit.egg-info/dependency_links.txt +0 -0
  140. {phykit-2.1.82 → phykit-2.1.83}/phykit.egg-info/requires.txt +0 -0
  141. {phykit-2.1.82 → phykit-2.1.83}/phykit.egg-info/top_level.txt +0 -0
  142. {phykit-2.1.82 → phykit-2.1.83}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: phykit
3
- Version: 2.1.82
3
+ Version: 2.1.83
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,9 @@ 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_path": "phylo_path",
59
+ "ppath": "phylo_path",
60
+ "phylopath": "phylo_path",
58
61
  "phylo_anova": "phylo_anova",
59
62
  "panova": "phylo_anova",
60
63
  "phylo_manova": "phylo_anova",
@@ -250,6 +250,8 @@ class Phykit:
250
250
  - fit phylogenetic GLM for binary (logistic) or count (Poisson) data
251
251
  phylo_anova (alias: panova; phylo_manova; pmanova)
252
252
  - phylogenetic ANOVA / MANOVA using RRPP (Adams & Collyer 2018)
253
+ phylo_path (alias: ppath; phylopath)
254
+ - phylogenetic path analysis (von Hardenberg & Gonzalez-Voyer 2013)
253
255
  phylo_logistic (alias: phylo_logreg; plogreg)
254
256
  - fit phylogenetic logistic regression (Ives & Garland 2010)
255
257
  stochastic_character_map (alias: simmap; scm)
@@ -2089,6 +2091,65 @@ class Phykit:
2089
2091
  _add_json_argument(parser)
2090
2092
  _run_service(parser, argv, PhyloAnova)
2091
2093
 
2094
+ @staticmethod
2095
+ def phylo_path(argv):
2096
+ parser = _new_parser(
2097
+ description=textwrap.dedent(
2098
+ f"""\
2099
+ {help_header}
2100
+
2101
+ Phylogenetic path analysis (von Hardenberg & Gonzalez-Voyer
2102
+ 2013). Compare competing causal DAGs using d-separation
2103
+ tests via PGLS with Pagel's lambda, rank models by CICc,
2104
+ and estimate model-averaged path coefficients.
2105
+
2106
+ Aliases:
2107
+ phylo_path, ppath, phylopath
2108
+ Command line interfaces:
2109
+ pk_phylo_path, pk_ppath, pk_phylopath
2110
+
2111
+ Usage:
2112
+ phykit phylo_path -t <tree> --traits <traits_file>
2113
+ --models <models_file> [--best-only]
2114
+ [--plot-output <file>] [--csv <file>] [--json]
2115
+
2116
+ Options
2117
+ =====================================================
2118
+ -t/--tree species tree (required)
2119
+
2120
+ --traits TSV file with taxon and
2121
+ continuous trait columns
2122
+ (required)
2123
+
2124
+ --models model definition file
2125
+ with candidate DAGs
2126
+ (required). Format:
2127
+ name: A->B, B->C, ...
2128
+
2129
+ --best-only report only best model
2130
+ coefficients (default:
2131
+ model averaging)
2132
+
2133
+ --plot-output output DAG plot file
2134
+
2135
+ --csv output CSV with model
2136
+ comparison and path
2137
+ coefficients
2138
+
2139
+ --json output results as JSON
2140
+ """
2141
+ ),
2142
+ )
2143
+ parser.add_argument("-t", "--tree", type=str, required=True, help=SUPPRESS, metavar="")
2144
+ parser.add_argument("--traits", type=str, required=True, help=SUPPRESS, metavar="")
2145
+ parser.add_argument("--models", type=str, required=True, help=SUPPRESS, metavar="")
2146
+ parser.add_argument("--best-only", action="store_true", help=SUPPRESS)
2147
+ parser.add_argument("--plot-output", type=str, default=None, help=SUPPRESS, metavar="")
2148
+ parser.add_argument("--csv", type=str, default=None, help=SUPPRESS, metavar="")
2149
+ add_plot_arguments(parser)
2150
+ _add_json_argument(parser)
2151
+ _run_service(parser, argv, PhyloPath)
2152
+
2092
2153
  @staticmethod
2093
2154
  def alignment_subsample(argv):
2094
2155
  parser = _new_parser(
@@ -8847,6 +8908,10 @@ def phylo_anova(argv=None):
8847
8908
  Phykit.phylo_anova(sys.argv[1:])
8848
8909
 
8849
8910
 
8911
+ def phylo_path(argv=None):
8912
+ Phykit.phylo_path(sys.argv[1:])
8913
+
8914
+
8850
8915
  def dfoil(argv=None):
8851
8916
  Phykit.dfoil(sys.argv[1:])
8852
8917
 
@@ -45,6 +45,7 @@ RelativeCompositionVariabilityTaxon = _LazyServiceFactory("phykit.services.align
45
45
  RenameFastaEntries = _LazyServiceFactory("phykit.services.alignment.rename_fasta_entries", "RenameFastaEntries")
46
46
  SumOfPairsScore = _LazyServiceFactory("phykit.services.alignment.sum_of_pairs_score", "SumOfPairsScore")
47
47
  PhyloAnova = _LazyServiceFactory("phykit.services.tree.phylo_anova", "PhyloAnova")
48
+ PhyloPath = _LazyServiceFactory("phykit.services.tree.phylo_path", "PhyloPath")
48
49
  PhyloGwas = _LazyServiceFactory("phykit.services.alignment.phylo_gwas", "PhyloGwas")
49
50
  TaxonGroups = _LazyServiceFactory("phykit.services.alignment.taxon_groups", "TaxonGroups")
50
51
  VariableSites = _LazyServiceFactory("phykit.services.alignment.variable_sites", "VariableSites")
@@ -54,6 +54,7 @@ _EXPORTS = {
54
54
  "ConcordanceAsr": "concordance_asr",
55
55
  "PhyloLogistic": "phylo_logistic",
56
56
  "PhyloAnova": "phylo_anova",
57
+ "PhyloPath": "phylo_path",
57
58
  "PhyloImpute": "phylo_impute",
58
59
  "TraitCorrelation": "trait_correlation",
59
60
  "TraitRateMap": "trait_rate_map",