phykit 2.1.70__tar.gz → 2.1.71__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.
- {phykit-2.1.70 → phykit-2.1.71}/PKG-INFO +1 -1
- {phykit-2.1.70 → phykit-2.1.71}/phykit/cli_registry.py +2 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/phykit.py +116 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/service_factories.py +1 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/__init__.py +1 -0
- phykit-2.1.71/phykit/services/alignment/phylo_gwas.py +683 -0
- phykit-2.1.71/phykit/version.py +1 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit.egg-info/PKG-INFO +1 -1
- {phykit-2.1.70 → phykit-2.1.71}/phykit.egg-info/SOURCES.txt +1 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit.egg-info/entry_points.txt +2 -0
- {phykit-2.1.70 → phykit-2.1.71}/setup.py +2 -0
- phykit-2.1.70/phykit/version.py +0 -1
- {phykit-2.1.70 → phykit-2.1.71}/LICENSE.md +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/README.md +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/__init__.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/__main__.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/errors.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/helpers/__init__.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/helpers/boolean_argument_parsing.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/helpers/caching.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/helpers/circular_layout.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/helpers/color_annotations.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/helpers/discrete_models.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/helpers/files.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/helpers/json_output.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/helpers/parallel.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/helpers/parsimony_utils.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/helpers/plot_config.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/helpers/quartet_utils.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/helpers/stats_summary.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/helpers/streaming.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/__init__.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/alignment_entropy.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/alignment_length.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/alignment_length_no_gaps.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/alignment_outlier_taxa.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/alignment_recoding.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/alignment_subsample.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/base.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/column_score.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/composition_per_taxon.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/compositional_bias_per_site.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/create_concatenation_matrix.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/dfoil.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/dna_threader.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/dstatistic.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/evolutionary_rate_per_site.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/faidx.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/gc_content.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/identity_matrix.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/mask_alignment.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/occupancy_per_taxon.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/pairwise_identity.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/parsimony_informative_sites.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/plot_alignment_qc.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/rcv.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/rcvt.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/rename_fasta_entries.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/sum_of_pairs_score.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/alignment/variable_sites.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/base.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/__init__.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/ancestral_reconstruction.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/base.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/bipartition_support_stats.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/branch_length_multiplier.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/character_map.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/collapse_branches.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/concordance_asr.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/consensus_network.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/consensus_tree.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/cont_map.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/cophylo.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/covarying_evolutionary_rates.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/density_map.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/discordance_asymmetry.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/dvmc.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/evo_tempo_map.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/evolutionary_rate.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/fit_continuous.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/fit_discrete.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/hidden_paralogy_check.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/independent_contrasts.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/internal_branch_stats.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/internode_labeler.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/kf_distance.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/last_common_ancestor_subtree.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/lb_score.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/ltt.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/monophyly_check.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/nearest_neighbor_interchange.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/network_signal.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/ou_shift_detection.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/ouwie.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/parsimony_score.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/patristic_distances.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/phenogram.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/phylo_heatmap.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/phylo_logistic.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/phylogenetic_glm.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/phylogenetic_ordination.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/phylogenetic_regression.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/phylogenetic_signal.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/phylomorphospace.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/polytomy_test.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/print_tree.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/prune_tree.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/quartet_network.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/quartet_pie.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/rate_heterogeneity.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/relative_rate_test.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/rename_tree_tips.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/rf_distance.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/root_tree.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/saturation.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/spectral_discordance.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/spurious_sequence.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/stochastic_character_map.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/terminal_branch_stats.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/threshold_model.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/tip_labels.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/tip_to_tip_distance.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/tip_to_tip_node_distance.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/total_tree_length.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/trait_correlation.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/trait_rate_map.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/tree_space.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/treeness.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/treeness_over_rcv.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit/services/tree/vcv_utils.py +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit.egg-info/dependency_links.txt +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit.egg-info/requires.txt +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/phykit.egg-info/top_level.txt +0 -0
- {phykit-2.1.70 → phykit-2.1.71}/setup.cfg +0 -0
|
@@ -55,6 +55,8 @@ 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_gwas": "phylo_gwas",
|
|
59
|
+
"pgwas": "phylo_gwas",
|
|
58
60
|
"vs": "variable_sites",
|
|
59
61
|
# Tree aliases
|
|
60
62
|
"bss": "bipartition_support_stats",
|
|
@@ -167,6 +167,9 @@ class Phykit:
|
|
|
167
167
|
- calculate sum-of-pairs score between a reference and query alignment
|
|
168
168
|
thread_dna (alias: pal2nal; p2n)
|
|
169
169
|
- thread dna sequences over a protein alignment
|
|
170
|
+
phylo_gwas (alias: pgwas)
|
|
171
|
+
- phylogenetic genome-wide association study
|
|
172
|
+
(Pease et al. 2016 approach)
|
|
170
173
|
variable_sites (alias: vs)
|
|
171
174
|
- calculates the number and percentage of variable sites
|
|
172
175
|
in an alignment
|
|
@@ -1878,6 +1881,115 @@ class Phykit:
|
|
|
1878
1881
|
_add_json_argument(parser)
|
|
1879
1882
|
_run_service(parser, argv, VariableSites)
|
|
1880
1883
|
|
|
1884
|
+
@staticmethod
|
|
1885
|
+
def phylo_gwas(argv):
|
|
1886
|
+
parser = _new_parser(
|
|
1887
|
+
description=textwrap.dedent(
|
|
1888
|
+
f"""\
|
|
1889
|
+
{help_header}
|
|
1890
|
+
|
|
1891
|
+
Phylogenetic genome-wide association study following the
|
|
1892
|
+
Pease et al. (2016) approach.
|
|
1893
|
+
|
|
1894
|
+
Performs per-site association tests between alignment
|
|
1895
|
+
columns and a phenotype (categorical or continuous),
|
|
1896
|
+
applies Benjamini-Hochberg FDR correction, optionally
|
|
1897
|
+
classifies significant associations as monophyletic or
|
|
1898
|
+
polyphyletic using a phylogenetic tree, and produces a
|
|
1899
|
+
Manhattan plot.
|
|
1900
|
+
|
|
1901
|
+
Categorical phenotypes use Fisher's exact test (2 groups)
|
|
1902
|
+
or chi-squared test (>2 groups). Continuous phenotypes use
|
|
1903
|
+
point-biserial correlation. Only biallelic sites are tested.
|
|
1904
|
+
|
|
1905
|
+
Aliases:
|
|
1906
|
+
phylo_gwas, pgwas
|
|
1907
|
+
Command line interfaces:
|
|
1908
|
+
pk_phylo_gwas, pk_pgwas
|
|
1909
|
+
|
|
1910
|
+
Usage:
|
|
1911
|
+
phykit phylo_gwas -a <alignment> -d <phenotype> -o <output>
|
|
1912
|
+
[-t <tree>] [-p <partition>] [--alpha 0.05]
|
|
1913
|
+
[--exclude-monophyletic] [--csv <file>] [--json]
|
|
1914
|
+
[shared plot options]
|
|
1915
|
+
|
|
1916
|
+
Options
|
|
1917
|
+
=====================================================
|
|
1918
|
+
-a/--alignment FASTA alignment file
|
|
1919
|
+
|
|
1920
|
+
-d/--phenotype two-column TSV file:
|
|
1921
|
+
taxon<tab>phenotype
|
|
1922
|
+
|
|
1923
|
+
-o/--output output Manhattan plot path
|
|
1924
|
+
|
|
1925
|
+
-t/--tree optional Newick tree for
|
|
1926
|
+
monophyletic/polyphyletic
|
|
1927
|
+
classification
|
|
1928
|
+
|
|
1929
|
+
-p/--partition optional RAxML-style partition
|
|
1930
|
+
file for gene annotations
|
|
1931
|
+
|
|
1932
|
+
--alpha FDR significance threshold
|
|
1933
|
+
(default: 0.05)
|
|
1934
|
+
|
|
1935
|
+
--exclude-monophyletic exclude monophyletic
|
|
1936
|
+
associations from results
|
|
1937
|
+
|
|
1938
|
+
--dot-size scale factor for dot size
|
|
1939
|
+
in the Manhattan plot
|
|
1940
|
+
(default: 1.0; use 2.0
|
|
1941
|
+
for double, 0.5 for half)
|
|
1942
|
+
|
|
1943
|
+
--csv output per-site results as CSV
|
|
1944
|
+
to the specified file
|
|
1945
|
+
|
|
1946
|
+
--fig-width figure width in inches
|
|
1947
|
+
(auto-scaled if omitted)
|
|
1948
|
+
|
|
1949
|
+
--fig-height figure height in inches
|
|
1950
|
+
(auto-scaled if omitted)
|
|
1951
|
+
|
|
1952
|
+
--dpi resolution in DPI
|
|
1953
|
+
(default: 300)
|
|
1954
|
+
|
|
1955
|
+
--no-title hide the plot title
|
|
1956
|
+
|
|
1957
|
+
--title custom title text
|
|
1958
|
+
|
|
1959
|
+
--legend-position legend location (e.g.,
|
|
1960
|
+
"upper right", "none")
|
|
1961
|
+
|
|
1962
|
+
--ylabel-fontsize font size for y-axis labels;
|
|
1963
|
+
0 to hide
|
|
1964
|
+
|
|
1965
|
+
--xlabel-fontsize font size for x-axis labels;
|
|
1966
|
+
0 to hide
|
|
1967
|
+
|
|
1968
|
+
--title-fontsize font size for the title
|
|
1969
|
+
|
|
1970
|
+
--axis-fontsize font size for axis labels
|
|
1971
|
+
|
|
1972
|
+
--colors comma-separated colors
|
|
1973
|
+
(hex or named)
|
|
1974
|
+
|
|
1975
|
+
--json optional argument to output
|
|
1976
|
+
results as JSON
|
|
1977
|
+
"""
|
|
1978
|
+
),
|
|
1979
|
+
)
|
|
1980
|
+
parser.add_argument("-a", "--alignment", type=str, required=True, help=SUPPRESS, metavar="")
|
|
1981
|
+
parser.add_argument("-d", "--phenotype", type=str, required=True, help=SUPPRESS, metavar="")
|
|
1982
|
+
parser.add_argument("-o", "--output", type=str, required=True, help=SUPPRESS, metavar="")
|
|
1983
|
+
parser.add_argument("-t", "--tree", type=str, default=None, help=SUPPRESS, metavar="")
|
|
1984
|
+
parser.add_argument("-p", "--partition", type=str, default=None, help=SUPPRESS, metavar="")
|
|
1985
|
+
parser.add_argument("--alpha", type=float, default=0.05, help=SUPPRESS, metavar="")
|
|
1986
|
+
parser.add_argument("--exclude-monophyletic", action="store_true", default=False, help=SUPPRESS)
|
|
1987
|
+
parser.add_argument("--dot-size", type=float, default=1.0, help=SUPPRESS, metavar="")
|
|
1988
|
+
parser.add_argument("--csv", type=str, default=None, help=SUPPRESS, metavar="")
|
|
1989
|
+
add_plot_arguments(parser)
|
|
1990
|
+
_add_json_argument(parser)
|
|
1991
|
+
_run_service(parser, argv, PhyloGwas)
|
|
1992
|
+
|
|
1881
1993
|
@staticmethod
|
|
1882
1994
|
def alignment_subsample(argv):
|
|
1883
1995
|
parser = _new_parser(
|
|
@@ -8163,6 +8275,10 @@ def dstatistic(argv=None):
|
|
|
8163
8275
|
Phykit.dstatistic(sys.argv[1:])
|
|
8164
8276
|
|
|
8165
8277
|
|
|
8278
|
+
def phylo_gwas(argv=None):
|
|
8279
|
+
Phykit.phylo_gwas(sys.argv[1:])
|
|
8280
|
+
|
|
8281
|
+
|
|
8166
8282
|
def dfoil(argv=None):
|
|
8167
8283
|
Phykit.dfoil(sys.argv[1:])
|
|
8168
8284
|
|
|
@@ -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
|
+
PhyloGwas = _LazyServiceFactory("phykit.services.alignment.phylo_gwas", "PhyloGwas")
|
|
47
48
|
VariableSites = _LazyServiceFactory("phykit.services.alignment.variable_sites", "VariableSites")
|
|
48
49
|
|
|
49
50
|
AncestralReconstruction = _LazyServiceFactory("phykit.services.tree.ancestral_reconstruction", "AncestralReconstruction")
|