FunVIP 0.4.1__tar.gz → 0.5.0__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 (228) hide show
  1. {funvip-0.4.1 → funvip-0.5.0}/FunVIP.egg-info/PKG-INFO +4 -3
  2. {funvip-0.4.1 → funvip-0.5.0}/FunVIP.egg-info/requires.txt +1 -1
  3. {funvip-0.4.1 → funvip-0.5.0}/PKG-INFO +4 -3
  4. {funvip-0.4.1 → funvip-0.5.0}/README.md +16 -3
  5. {funvip-0.4.1 → funvip-0.5.0}/funvip/main.py +21 -0
  6. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/cluster.py +43 -19
  7. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/command.py +7 -2
  8. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/dataset.py +36 -1
  9. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/tree_interpretation.py +26 -139
  10. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/tree_interpretation_pipe.py +0 -11
  11. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/validate_option.py +27 -13
  12. funvip-0.5.0/funvip/test_dataset/penicillium/DB/DB_Penicillium.xlsx +0 -0
  13. {funvip-0.4.1 → funvip-0.5.0}/pyproject.toml +2 -2
  14. funvip-0.4.1/funvip/test_dataset/penicillium/DB/DB_Penicillium.xlsx +0 -0
  15. {funvip-0.4.1 → funvip-0.5.0}/FunVIP.egg-info/SOURCES.txt +0 -0
  16. {funvip-0.4.1 → funvip-0.5.0}/FunVIP.egg-info/dependency_links.txt +0 -0
  17. {funvip-0.4.1 → funvip-0.5.0}/FunVIP.egg-info/entry_points.txt +0 -0
  18. {funvip-0.4.1 → funvip-0.5.0}/FunVIP.egg-info/top_level.txt +0 -0
  19. {funvip-0.4.1 → funvip-0.5.0}/LICENSE +0 -0
  20. {funvip-0.4.1 → funvip-0.5.0}/MANIFEST.in +0 -0
  21. {funvip-0.4.1 → funvip-0.5.0}/funvip/FunVIP_GUI.py +0 -0
  22. {funvip-0.4.1 → funvip-0.5.0}/funvip/__init__.py +0 -0
  23. {funvip-0.4.1 → funvip-0.5.0}/funvip/data/Option_manager.xlsx +0 -0
  24. {funvip-0.4.1 → funvip-0.5.0}/funvip/data/__init__.py +0 -0
  25. {funvip-0.4.1 → funvip-0.5.0}/funvip/data/genus_line.txt +0 -0
  26. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/BLAST_Windows/Uninstall-ncbi-blast-2.12.0+.exe +0 -0
  27. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/BLAST_Windows/bin/blastn.exe +0 -0
  28. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/BLAST_Windows/bin/cleanup-blastdb-volumes.py +0 -0
  29. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/BLAST_Windows/bin/get_species_taxids.sh +0 -0
  30. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/BLAST_Windows/bin/legacy_blast.pl +0 -0
  31. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/BLAST_Windows/bin/makeblastdb.exe +0 -0
  32. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/BLAST_Windows/bin/nghttp2.dll +0 -0
  33. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/BLAST_Windows/bin/update_blastdb.pl +0 -0
  34. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/BLAST_Windows/doc/README.txt +0 -0
  35. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/FastTree_Windows/FastTree.exe +0 -0
  36. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/Documentation/Gblocks_documentation.html +0 -0
  37. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/Gblocks.exe +0 -0
  38. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/more_alignments/cox2.pir +0 -0
  39. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/more_alignments/cytb.pir +0 -0
  40. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/more_alignments/nad3.pir +0 -0
  41. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/more_alignments/nad5.pir +0 -0
  42. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/nad3.pir +0 -0
  43. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/paths +0 -0
  44. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/MAFFT_LICENSE +0 -0
  45. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/MAFFT_Windows.zip +0 -0
  46. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/RAxML_Windows/GPL-3.0.txt +0 -0
  47. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/RAxML_Windows/README +0 -0
  48. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/RAxML_Windows/raxmlHPC-PTHREADS-AVX2.exe +0 -0
  49. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/__init__.py +0 -0
  50. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/iqtree/bin/iqtree2-click.exe +0 -0
  51. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/iqtree/bin/iqtree2.exe +0 -0
  52. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/iqtree/bin/libiomp5md.dll +0 -0
  53. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/iqtree/example.cf +0 -0
  54. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/iqtree/example.nex +0 -0
  55. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/iqtree/example.phy +0 -0
  56. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/iqtree/models.nex +0 -0
  57. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/LICENSE.md +0 -0
  58. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/README.md +0 -0
  59. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/bin/busybox.exe +0 -0
  60. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/bin/cygbz2-1.dll +0 -0
  61. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/bin/cyggcc_s-seh-1.dll +0 -0
  62. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/bin/cyggomp-1.dll +0 -0
  63. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/bin/cygstdc++-6.dll +0 -0
  64. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/bin/cygwin1.dll +0 -0
  65. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/bin/cygz.dll +0 -0
  66. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/bin/mmseqs.exe +0 -0
  67. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/examples/QUERY.fasta +0 -0
  68. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM10.out +0 -0
  69. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM100.out +0 -0
  70. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM110.out +0 -0
  71. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM120.out +0 -0
  72. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM130.out +0 -0
  73. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM140.out +0 -0
  74. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM150.out +0 -0
  75. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM160.out +0 -0
  76. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM170.out +0 -0
  77. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM180.out +0 -0
  78. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM190.out +0 -0
  79. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM20.out +0 -0
  80. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM30.out +0 -0
  81. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM40.out +0 -0
  82. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM50.out +0 -0
  83. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM60.out +0 -0
  84. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM70.out +0 -0
  85. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM80.out +0 -0
  86. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM90.out +0 -0
  87. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/VTML10.out +0 -0
  88. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/VTML120.out +0 -0
  89. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/VTML160.out +0 -0
  90. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/VTML20.out +0 -0
  91. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/VTML40.out +0 -0
  92. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/VTML80.out +0 -0
  93. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum100.out +0 -0
  94. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum30.out +0 -0
  95. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum35.out +0 -0
  96. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum40.out +0 -0
  97. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum45.out +0 -0
  98. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum50.out +0 -0
  99. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum55.out +0 -0
  100. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum60.out +0 -0
  101. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum62.out +0 -0
  102. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum65.out +0 -0
  103. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum70.out +0 -0
  104. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum75.out +0 -0
  105. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum80.out +0 -0
  106. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum85.out +0 -0
  107. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum90.out +0 -0
  108. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum95.out +0 -0
  109. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/nucleotide.out +0 -0
  110. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/mmseqs.bat +0 -0
  111. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/mmseqs_Windows/util/bash-completion.sh +0 -0
  112. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/modeltest-ng_Windows/cyggcc_s-seh-1.dll +0 -0
  113. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/modeltest-ng_Windows/cygstdc++-6.dll +0 -0
  114. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/modeltest-ng_Windows/cygwin1.dll +0 -0
  115. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/modeltest-ng_Windows/modeltest-ng.exe +0 -0
  116. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/AUTHORS +0 -0
  117. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/CHANGELOG +0 -0
  118. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/LICENSE +0 -0
  119. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/README +0 -0
  120. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/bin/libgcc_s_dw2-1.dll +0 -0
  121. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/bin/libstdc++-6.dll +0 -0
  122. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/bin/trimal.exe +0 -0
  123. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/scripts/check_codon_alignments.py +0 -0
  124. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/scripts/compare_trimmed_msas.sh +0 -0
  125. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/scripts/generateRandomAlignmentsUsingAsSeedRealAlignments.py +0 -0
  126. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/scripts/generate_trimmed_msas.sh +0 -0
  127. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/scripts/get_sequence_representative_from_alignment.py +0 -0
  128. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/scripts/get_sequences_gaps_ratio.py +0 -0
  129. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/scripts/remove_shorter_sequences.py +0 -0
  130. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/scripts/selective_trimming_for_dNdS_analyses.based_neighbours.py +0 -0
  131. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/scripts/set_manual_boundaries.py +0 -0
  132. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/alignment.cpp +0 -0
  133. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/alignment.h +0 -0
  134. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/alignment.o +0 -0
  135. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/autAlignment.cpp +0 -0
  136. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/autAlignment.o +0 -0
  137. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/compareFiles.cpp +0 -0
  138. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/compareFiles.h +0 -0
  139. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/compareFiles.o +0 -0
  140. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/defines.h +0 -0
  141. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/main.cpp +0 -0
  142. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/makefile +0 -0
  143. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/makefile.MacOS +0 -0
  144. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/readAl.cpp +0 -0
  145. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/readal.exe +0 -0
  146. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/rwAlignment.cpp +0 -0
  147. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/rwAlignment.o +0 -0
  148. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/sequencesMatrix.cpp +0 -0
  149. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/sequencesMatrix.h +0 -0
  150. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/sequencesMatrix.o +0 -0
  151. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/similarityMatrix.cpp +0 -0
  152. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/similarityMatrix.h +0 -0
  153. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/similarityMatrix.o +0 -0
  154. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statAl.cpp +0 -0
  155. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statal.exe +0 -0
  156. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statisticsConservation.cpp +0 -0
  157. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statisticsConservation.h +0 -0
  158. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statisticsConservation.o +0 -0
  159. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statisticsFiles.cpp +0 -0
  160. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statisticsFiles.h +0 -0
  161. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statisticsGaps.cpp +0 -0
  162. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statisticsGaps.h +0 -0
  163. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statisticsGaps.o +0 -0
  164. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/utils.cpp +0 -0
  165. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/utils.h +0 -0
  166. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/utils.o +0 -0
  167. {funvip-0.4.1 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/values.h +0 -0
  168. {funvip-0.4.1 → funvip-0.5.0}/funvip/preset/.gitignore +0 -0
  169. {funvip-0.4.1 → funvip-0.5.0}/funvip/preset/accurate.yaml +0 -0
  170. {funvip-0.4.1 → funvip-0.5.0}/funvip/preset/fast.yaml +0 -0
  171. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/.gitignore +0 -0
  172. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__init__.py +0 -0
  173. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/CATV_pipe.cpython-310.pyc +0 -0
  174. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/CAT_V.cpython-310.pyc +0 -0
  175. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/CAT_V.cpython-39.pyc +0 -0
  176. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/CAT_V_pipe.cpython-39.pyc +0 -0
  177. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/__init__.cpython-310.pyc +0 -0
  178. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/__init__.cpython-39.pyc +0 -0
  179. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/align.cpython-310.pyc +0 -0
  180. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/cluster.cpython-39.pyc +0 -0
  181. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/dataset.cpython-39.pyc +0 -0
  182. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/ext.cpython-310.pyc +0 -0
  183. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/ext.cpython-39.pyc +0 -0
  184. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/hasher.cpython-39.pyc +0 -0
  185. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/initialize.cpython-39.pyc +0 -0
  186. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/io.cpython-310.pyc +0 -0
  187. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/io.cpython-39.pyc +0 -0
  188. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/logger.cpython-39.pyc +0 -0
  189. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/modeltest.cpython-39.pyc +0 -0
  190. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/multigene.cpython-39.pyc +0 -0
  191. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/ncbi.cpython-39.pyc +0 -0
  192. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/opt_generator.cpython-39.pyc +0 -0
  193. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/reporter.cpython-39.pyc +0 -0
  194. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/search.cpython-39.pyc +0 -0
  195. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/tool.cpython-39.pyc +0 -0
  196. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/validation.cpython-39.pyc +0 -0
  197. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/__pycache__/visualize.cpython-39.pyc +0 -0
  198. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/align.py +0 -0
  199. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/concatenate.py +0 -0
  200. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/ext.py +0 -0
  201. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/hasher.py +0 -0
  202. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/initialize.py +0 -0
  203. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/logger.py +0 -0
  204. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/logics.py +0 -0
  205. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/modeltest.py +0 -0
  206. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/ncbi.py +0 -0
  207. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/opt_generator.py +0 -0
  208. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/reporter.py +0 -0
  209. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/save.py +0 -0
  210. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/search.py +0 -0
  211. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/templates/template.html +0 -0
  212. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/tool.py +0 -0
  213. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/tree.py +0 -0
  214. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/trim.py +0 -0
  215. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/validate_input.py +0 -0
  216. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/validation.py +0 -0
  217. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/version.py +0 -0
  218. {funvip-0.4.1 → funvip-0.5.0}/funvip/src/visualize.py +0 -0
  219. {funvip-0.4.1 → funvip-0.5.0}/funvip/test_dataset/penicillium/Options.config +0 -0
  220. {funvip-0.4.1 → funvip-0.5.0}/funvip/test_dataset/penicillium/Query/Query.xlsx +0 -0
  221. {funvip-0.4.1 → funvip-0.5.0}/funvip/test_dataset/penicillium/preset.yaml +0 -0
  222. {funvip-0.4.1 → funvip-0.5.0}/funvip/test_dataset/sanghuangporus/DB/FunVIP_Sanghuangporus_db.xlsx +0 -0
  223. {funvip-0.4.1 → funvip-0.5.0}/funvip/test_dataset/sanghuangporus/Query/FunVIP_Sanghuangporus_query.xlsx +0 -0
  224. {funvip-0.4.1 → funvip-0.5.0}/funvip/test_dataset/sanghuangporus/preset.yaml +0 -0
  225. {funvip-0.4.1 → funvip-0.5.0}/funvip/test_dataset/terrei/DB/FunVIP_Aspergillus_db.xlsx +0 -0
  226. {funvip-0.4.1 → funvip-0.5.0}/funvip/test_dataset/terrei/Query/FunVIP_Aspergillus_query.xlsx +0 -0
  227. {funvip-0.4.1 → funvip-0.5.0}/funvip/test_dataset/terrei/preset.yaml +0 -0
  228. {funvip-0.4.1 → funvip-0.5.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: FunVIP
3
- Version: 0.4.1
3
+ Version: 0.5.0
4
4
  Summary: Fungal Validation & Identification Pipeline
5
5
  Author-email: Changwan Seo <wan101010@snu.ac.kr>
6
6
  License: GPL-3.0
@@ -11,7 +11,7 @@ Requires-Dist: biopython==1.84
11
11
  Requires-Dist: ete3==3.1.3
12
12
  Requires-Dist: Cython
13
13
  Requires-Dist: dendropy
14
- Requires-Dist: GenMine<1.2.0,>=1.1.0
14
+ Requires-Dist: GenMine<1.4.0,>=1.3.0
15
15
  Requires-Dist: lxml
16
16
  Requires-Dist: matplotlib
17
17
  Requires-Dist: numpy<2.0.0
@@ -28,3 +28,4 @@ Requires-Dist: xlrd==2.0.1
28
28
  Requires-Dist: xlsxwriter
29
29
  Requires-Dist: xmltodict==0.12.0
30
30
  Requires-Dist: PyQt5>=5.15.0; sys_platform != "darwin"
31
+ Dynamic: license-file
@@ -2,7 +2,7 @@ biopython==1.84
2
2
  ete3==3.1.3
3
3
  Cython
4
4
  dendropy
5
- GenMine<1.2.0,>=1.1.0
5
+ GenMine<1.4.0,>=1.3.0
6
6
  lxml
7
7
  matplotlib
8
8
  numpy<2.0.0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: FunVIP
3
- Version: 0.4.1
3
+ Version: 0.5.0
4
4
  Summary: Fungal Validation & Identification Pipeline
5
5
  Author-email: Changwan Seo <wan101010@snu.ac.kr>
6
6
  License: GPL-3.0
@@ -11,7 +11,7 @@ Requires-Dist: biopython==1.84
11
11
  Requires-Dist: ete3==3.1.3
12
12
  Requires-Dist: Cython
13
13
  Requires-Dist: dendropy
14
- Requires-Dist: GenMine<1.2.0,>=1.1.0
14
+ Requires-Dist: GenMine<1.4.0,>=1.3.0
15
15
  Requires-Dist: lxml
16
16
  Requires-Dist: matplotlib
17
17
  Requires-Dist: numpy<2.0.0
@@ -28,3 +28,4 @@ Requires-Dist: xlrd==2.0.1
28
28
  Requires-Dist: xlsxwriter
29
29
  Requires-Dist: xmltodict==0.12.0
30
30
  Requires-Dist: PyQt5>=5.15.0; sys_platform != "darwin"
31
+ Dynamic: license-file
@@ -1,18 +1,31 @@
1
1
 
2
2
  # FunVIP [![DOI](https://zenodo.org/badge/588465720.svg)](https://zenodo.org/doi/10.5281/zenodo.10714946)
3
+
4
+
5
+ FunVIP is now published please cite:
6
+ #### Seo CW, Yoo S, Cho Y, Kim JS, Steinegger M, Lim YW. FunVIP: Fungal Validation and Identification Pipeline based on phylogenetic analysis. J. Microbiol. 2025;63(4):e2411017.
7
+ <br><br/>
8
+
9
+
10
+
11
+
3
12
  ### **Fun**gal **V**alidation & **I**dentification **P**ipeline
4
13
  #### An automatic tree-based sequence identification and validation pipeline for fungal (or maybe other) species
5
14
 
15
+
16
+
6
17
  - Automatic tree-based identification
7
18
  - Works with multiple genetic marker
8
19
  - Database sequence validation algorithm implemented
9
20
 
10
21
  ![figure1 - ver17A](https://github.com/user-attachments/assets/22a50a62-14e8-41a7-87a0-8f5a1f9c3f62)
11
22
 
12
- This is Beta release. Bug reports are welcomed
23
+ Bug reports are always welcomed
13
24
  <br><br/>
14
25
 
15
- ### IMPORTANT NOTICE: The python dependency for Linux platform has changed from 3.12 to 3.11 for TCS inclusion. Please remake conda environment for FunVIP 0.3.25 update
26
+
27
+
28
+ #### IMPORTANT NOTICE: The python dependency for Linux platform has changed from 3.12 to 3.11 for TCS inclusion. Please remake conda environment for FunVIP 0.3.25 update
16
29
 
17
30
  ## Tutorial
18
31
  * [Part 1 - Getting started!](https://github.com/Changwanseo/FunVIP/blob/main/tutorial/tutorial.md)
@@ -88,7 +101,7 @@ tabular (```.xlsx```, ```.csv```, ```.parquet```, ```.ftr```) form
88
101
 
89
102
  ## Scheduling
90
103
  1. ~~Beta release part 1 (2023 Feburary ~ As paper published, ver 0.3)
91
- Will be tested by our lab memebers to fix bugs and advance features~~ FunVIP article is currently accepted. Will be published soon.
104
+ Will be tested by our lab memebers to fix bugs and advance features~~
92
105
  2. Beta release part 2 (As paper published ~ When pipeline gets stabled, ver 0.4)
93
106
  Will be tested by peer taxonomists
94
107
  3. Stable release (ver 1.0)
@@ -410,3 +410,24 @@ def main():
410
410
  logging.info(f"Time report generation: {round(time_end-time_visualize,3)}s")
411
411
  except:
412
412
  logging.warning(f"Failed logging reoprt generation time")
413
+
414
+ # At the end of the run, print critical messages once again to be noticed
415
+ with open(path.criticallog, "r") as frclog:
416
+ critical_log_lines = frclog.readlines()
417
+
418
+ critical_logs = []
419
+ flag_critical = 0
420
+ for line in critical_log_lines:
421
+ if "[CRITICAL]" in line:
422
+ flag_critical = 1
423
+ elif "[WARNING]" in line or "[ERROR]" in line:
424
+ flag_critical = 0
425
+
426
+ if flag_critical == 1:
427
+ critical_logs.append(line)
428
+
429
+ if len(critical_logs) > 0:
430
+ print("\n!!!<<<IMPORTANT NOTICE FROM FUNVIP RUN>>>!!!")
431
+
432
+ for line in critical_logs:
433
+ print(line)
@@ -114,6 +114,7 @@ def assign_gene(result_dict, V, cutoff=0.99):
114
114
  return V
115
115
 
116
116
 
117
+ # This function assigns group to each FI
117
118
  def cluster(FI, V_list_group, V_cSR, path, opt):
118
119
  # Reduce memory by focusing on relevant rows
119
120
  df_search = V_cSR[V_cSR["qseqid"] == FI.hash]
@@ -222,23 +223,23 @@ def append_outgroup(V_list_FI, df_search, gene, group, path, opt):
222
223
  # split that same group to include all to alignment, and leave other groups for outgroup selection
223
224
  cutoff_df = cutoff_df[cutoff_df["subject_group"] != group]
224
225
 
225
- ## For ambiugous database, mostly because of contaminated database
226
+ ## Add suspicious database, mostly because of contaminated database
227
+ # Use term "ambiguous" instead of "suspicious" because of previous compatibility
226
228
  # For each of the input, should use different cutoff
227
229
  ambiguous_db = set()
228
- for qseqid, _df in cutoff_set_df.groupby(["qseqid"]):
229
- # Select dataframe corresponding to current qseqid
230
- df_qseqid = df_search[df_search["qseqid"] == qseqid]
231
- """
232
- print(
233
- f"Ambiguous ingroup cutoff selected for query {qseqid} group {group} gene {gene} cutoff {min(list(_df['bitscore']))}"
234
- )
235
- """
236
- # Get the list of subjects, which is closer than furtest ingroup
237
- ambiguous_df = df_qseqid[df_qseqid["bitscore"] >= min(list(_df["bitscore"]))]
238
- # Within the furthest match, get possible ingroups with ambiguous group
239
- ambiguous_df = ambiguous_df[ambiguous_df["subject_group"] != group]
240
- # Add inner ambiugities to ambiguous db
241
- ambiguous_db.update([FI_dict[i] for i in list(ambiguous_df["sseqid"])])
230
+ if opt.suspicious is True:
231
+ for qseqid, _df in cutoff_set_df.groupby(["qseqid"]):
232
+ # Select dataframe corresponding to current qseqid
233
+ df_qseqid = df_search[df_search["qseqid"] == qseqid[0]]
234
+
235
+ # Get the list of subjects, which is closer than furtest ingroup
236
+ ambiguous_df = df_qseqid[
237
+ df_qseqid["bitscore"] >= min(list(_df["bitscore"]))
238
+ ]
239
+ # Within the furthest match, get possible ingroups with ambiguous group
240
+ ambiguous_df = ambiguous_df[ambiguous_df["subject_group"] != group]
241
+ # Add inner ambiugities to ambiguous db
242
+ ambiguous_db.update([FI_dict[i] for i in list(ambiguous_df["sseqid"])])
242
243
 
243
244
  ambiguous_db = list(ambiguous_db)
244
245
 
@@ -308,12 +309,20 @@ def append_outgroup(V_list_FI, df_search, gene, group, path, opt):
308
309
  f"Outgroup [{subject_group}] selected to [{group}]\n {text_outgroup_list}"
309
310
  )
310
311
 
312
+ # Move outgroup within ambiguous db to outgroup
313
+ for FI in ambiguous_db:
314
+ if FI.group == subject_group:
315
+ ambiguous_db.remove(FI)
316
+ outgroup_dict[subject_group].append(FI)
317
+
311
318
  return (
312
319
  group,
313
320
  gene,
314
321
  outgroup_dict[subject_group],
315
322
  ambiguous_db,
316
323
  )
324
+
325
+ # If not use the outgroup sequences with the maximum number
317
326
  else:
318
327
  if len(outgroup_dict[subject_group]) > max_cnt:
319
328
  max_cnt = len(outgroup_dict[subject_group])
@@ -330,6 +339,12 @@ def append_outgroup(V_list_FI, df_search, gene, group, path, opt):
330
339
  f"Final outgroup selection for group {group} : {outgroup_dict[max_group]}"
331
340
  )
332
341
 
342
+ # Move outgroup within ambiguous db to outgroup
343
+ for FI in ambiguous_db:
344
+ if FI.group == max_group:
345
+ ambiguous_db.remove(FI)
346
+ outgroup_dict[max_group].append(FI)
347
+
333
348
  return (group, gene, outgroup_dict[max_group], ambiguous_db)
334
349
 
335
350
  # If outgroup cannot be selected
@@ -507,6 +522,7 @@ def pipe_append_outgroup(V, path, opt):
507
522
 
508
523
  # append outgroup by running result
509
524
  # (group, gene, outgroup, ambiguous_group)
525
+ critical_flag = 0
510
526
  for result in result_append_outgroup:
511
527
  # Parsing result
512
528
  group = result[0]
@@ -524,9 +540,10 @@ def pipe_append_outgroup(V, path, opt):
524
540
  print(f"query: {len(V.dict_dataset[group][gene].list_qr_FI)}")
525
541
 
526
542
  if len(outgroup) == 0 and len(ambiguous_group) == 0:
527
- logging.warning(
543
+ logging.critical(
528
544
  f"Removing {group} {gene} from analysis because outgroup cannot be selected"
529
545
  )
546
+ critical_flag = 1
530
547
  V.dict_dataset[group].pop(gene, None)
531
548
  elif (
532
549
  len(outgroup)
@@ -535,15 +552,17 @@ def pipe_append_outgroup(V, path, opt):
535
552
  + len(V.dict_dataset[group][gene].list_qr_FI)
536
553
  < 4
537
554
  ):
538
- logging.warning(
555
+ logging.critical(
539
556
  f"Removing {group} {gene} from analysis because not enough sequences are provided to infer phylogenetic tree"
540
557
  )
558
+ critical_flag = 1
541
559
  V.dict_dataset[group].pop(gene, None)
542
560
 
543
561
  else:
544
562
  V.dict_dataset[group][gene].list_og_FI = outgroup
563
+
545
564
  # Add ambiguous group to FI
546
- if opt.ambiguous is True:
565
+ if opt.suspicious is True:
547
566
  V.dict_dataset[group][gene].list_db_FI += ambiguous_group
548
567
  # Add outgroup and db in to dict_hash_FI
549
568
 
@@ -552,11 +571,16 @@ def pipe_append_outgroup(V, path, opt):
552
571
  for group in groups:
553
572
  try:
554
573
  if len(V.dict_dataset[group]) == 0:
555
- logging.warning(
574
+ logging.critical(
556
575
  f"Removing {group} from analysis because outgroup cannot be selected to all genes"
557
576
  )
577
+ critical_flag = 1
558
578
  V.dict_dataset.pop(group, None)
559
579
  except:
560
580
  pass
561
581
 
582
+ # Terminate if terminate option is given, and critical error occurs
583
+ if critical_flag == 1 and opt.terminate is True:
584
+ raise Exception
585
+
562
586
  return V, path, opt
@@ -309,9 +309,14 @@ class CommandParser:
309
309
  type=int,
310
310
  )
311
311
  group_advanced.add_argument(
312
- "--noambiguous",
312
+ "--nosuspicious",
313
313
  action="store_true",
314
- help="Do not include ambiguous samples for sequence-set. Mostly for metabarcoding analysis. It may result wrong result with problematic database.",
314
+ help="Do not include suspicious samples for sequence-set. Mostly for metabarcoding analysis. May deduce inaccurate result with problematic database.",
315
+ )
316
+ group_advanced.add_argument(
317
+ "--terminate",
318
+ action="store_true",
319
+ help="Terminate FunVIP run when critical error detected",
315
320
  )
316
321
 
317
322
  # Cache
@@ -462,6 +462,8 @@ class FunVIP_var:
462
462
  fail_list = []
463
463
  remove_dict = {}
464
464
  tree_hash_dict = hasher.encode(self.list_FI, newick=True)
465
+
466
+ critical_flag = 0
465
467
  for group in self.dict_dataset:
466
468
  remove_dict[group] = {}
467
469
  for gene in self.dict_dataset[group]:
@@ -545,9 +547,38 @@ class FunVIP_var:
545
547
  ## If all value of vectors are zero, it means that all regions have at least one gap
546
548
  ## Raise warning for this
547
549
  if np.all((vector_products == 0)):
548
- logging.warning(
550
+ logging.critical(
549
551
  f"Alignment for {group} {gene} does not have any overlapping regions! Removing from analysis"
550
552
  )
553
+
554
+ critical_flag = 1
555
+
556
+ # Report one non_overlapping pair
557
+ for i in range(len(seq_list) - 1):
558
+ seq1 = seq_list[i]
559
+ seq1_hash = seq1.id
560
+ seq1_str = str(seq.seq)
561
+
562
+ for j in range(i + 1, len(seq_list)):
563
+ seq2 = seq_list[j]
564
+ seq2_hash = seq2.id
565
+ seq2_str = str(seq.seq)
566
+
567
+ has_overlap = False
568
+
569
+ for k in range(len(seq1_str)):
570
+ if seq1_str[k] != "-" and seq2_str[k] != "-":
571
+ has_overlap = True
572
+ break
573
+
574
+ seq1_id = self.dict_hash_FI[seq1_hash]
575
+ seq2_id = self.dict_hash_FI[seq2_hash]
576
+
577
+ logging.critical(
578
+ f"At least one pair of sequence does not overlap, such as {seq1_id} and {seq2_id}"
579
+ )
580
+ critical_flag = 1
581
+
551
582
  fail_list.append((group, gene))
552
583
  # for tree, use hash dict with genus and species information
553
584
  # Decoding process in done in tree building processes, so these alignments cannot be decoded. So decode them here
@@ -575,6 +606,10 @@ class FunVIP_var:
575
606
  # If alignment corresponding to dataset does not exists, raise warning or error
576
607
  pass
577
608
 
609
+ # Terminate if terminate option is given, and critical error occurs
610
+ if critical_flag == 1 and opt.terminate is True:
611
+ raise Exception
612
+
578
613
  # Remove bad datasets
579
614
  for fail in fail_list:
580
615
  group = fail[0]
@@ -709,27 +709,6 @@ class Tree_information:
709
709
 
710
710
  if diff_min < self.zero:
711
711
  self.zero = diff_min - 0.00000001
712
- """
713
- print("Calculate zero")
714
-
715
- for name, size in sorted(
716
- ((name, sys.getsizeof(value)) for name, value in list(locals().items())),
717
- key=lambda x: -x[1],
718
- )[:10]:
719
- # print("{:>30}: {:>8}".format(name, sizeof_fmt(size)))
720
- pass
721
-
722
- snapshot = tracemalloc.take_snapshot()
723
- top_stats = snapshot.statistics("lineno")
724
-
725
- # Print the top memory usage lines
726
-
727
- print("[ Top 10 ]")
728
- for stat in top_stats[:10]:
729
- print(stat)
730
-
731
- print("===========================")
732
- """
733
712
 
734
713
  if self.opt.verbose >= 3:
735
714
  print(f"[DEBUG] End of calculate zero")
@@ -763,12 +742,16 @@ class Tree_information:
763
742
  # reroot with outgroup_clade
764
743
  try:
765
744
  # For more than one outgroups, after rerooting, get_common_ancestor of outgroup again
745
+ # Before rerooting, unroot the tree to work properly
766
746
  if len(outgroup_leaves) >= 2:
747
+ print(outgroup_leaves)
748
+ self.t.unroot()
767
749
  self.outgroup_clade = self.t.get_common_ancestor(outgroup_leaves)
768
750
  self.t.set_outgroup(self.outgroup_clade)
769
751
  self.t.ladderize(direction=1)
770
752
  self.outgroup_clade = self.t.get_common_ancestor(outgroup_leaves)
771
753
  elif len(outgroup_leaves) == 1:
754
+ self.t.unroot()
772
755
  self.outgroup_clade = outgroup_leaves[0]
773
756
  self.t.set_outgroup(self.outgroup_clade)
774
757
  self.t.ladderize(direction=1)
@@ -820,34 +803,27 @@ class Tree_information:
820
803
  raise Exception
821
804
 
822
805
  self.Tree_style.ts.show_leaf_name = True
823
- for node in self.t.traverse():
806
+
807
+ # Add bootstrap
808
+ # Before doing this, copy the tree to not interfere final tree
809
+ copied_tree = deepcopy(self.t)
810
+
811
+ for node in copied_tree.traverse():
824
812
  node.img_style["size"] = 0 # removing circles whien size is 0
813
+ if len(node) > 1: # Prevent bootstrap on single branch
814
+ node.add_face(
815
+ TextFace(
816
+ f"{int(node.support)}",
817
+ fsize=self.opt.visualize.fsize_bootstrap,
818
+ fstyle="Arial",
819
+ ),
820
+ column=0,
821
+ position="float",
822
+ )
823
+ copied_tree.render(f"{out}", tree_style=self.Tree_style.ts)
825
824
 
826
- self.t.render(f"{out}", tree_style=self.Tree_style.ts)
827
825
  self.Tree_style.ts.show_leaf_name = False
828
826
 
829
- """
830
- print("reroot outgroup")
831
-
832
- for name, size in sorted(
833
- ((name, sys.getsizeof(value)) for name, value in list(locals().items())),
834
- key=lambda x: -x[1],
835
- )[:10]:
836
- print("{:>30}: {:>8}".format(name, sizeof_fmt(size)))
837
-
838
-
839
- snapshot = tracemalloc.take_snapshot()
840
- top_stats = snapshot.statistics("lineno")
841
-
842
- # Print the top memory usage lines
843
-
844
- print("[ Top 10 ]")
845
- for stat in top_stats[:10]:
846
- print(stat)
847
-
848
- print("===========================")
849
- """
850
-
851
827
  if self.opt.verbose >= 3:
852
828
  print(f"[DEBUG] End of reroot outgroup")
853
829
  process = psutil.Process(os.getpid())
@@ -972,33 +948,9 @@ class Tree_information:
972
948
  self.collapse_dict[taxon].append(collapse_info)
973
949
 
974
950
  ## start of tree_search
975
- # at the last leaf
976
- # tracemalloc.start()
977
951
 
978
952
  if len(clade.children) == 1:
979
953
  local_generate_collapse_information(clade, opt=opt)
980
- """
981
- print("tree search part 1")
982
-
983
- for name, size in sorted(
984
- (
985
- (name, sys.getsizeof(value))
986
- for name, value in list(locals().items())
987
- ),
988
- key=lambda x: -x[1],
989
- )[:10]:
990
- print("{:>30}: {:>8}".format(name, sizeof_fmt(size)))
991
-
992
- snapshot = tracemalloc.take_snapshot()
993
- top_stats = snapshot.statistics("lineno")
994
-
995
- # Print the top memory usage lines
996
- print("[ Top 10 ]")
997
- for stat in top_stats[:10]:
998
- print(stat)
999
-
1000
- print("===========================")
1001
- """
1002
954
 
1003
955
  if self.opt.verbose >= 3:
1004
956
  print(f"[DEBUG] End of Tree search with monophyletic branches")
@@ -1035,29 +987,6 @@ class Tree_information:
1035
987
  else:
1036
988
  self.tree_search(child_clade, gene, opt=opt)
1037
989
 
1038
- """
1039
- print("tree search part 2")
1040
-
1041
- for name, size in sorted(
1042
- (
1043
- (name, sys.getsizeof(value))
1044
- for name, value in list(locals().items())
1045
- ),
1046
- key=lambda x: -x[1],
1047
- )[:10]:
1048
- print("{:>30}: {:>8}".format(name, sizeof_fmt(size)))
1049
-
1050
- snapshot = tracemalloc.take_snapshot()
1051
- top_stats = snapshot.statistics("lineno")
1052
-
1053
- # Print the top memory usage lines
1054
- print("[ Top 10 ]")
1055
- for stat in top_stats[:10]:
1056
- print(stat)
1057
-
1058
- print("===========================")
1059
- """
1060
-
1061
990
  if self.opt.verbose >= 3:
1062
991
  print(f"[DEBUG] End of Tree search with bifurcated branches")
1063
992
  process = psutil.Process(os.getpid())
@@ -1151,14 +1080,6 @@ class Tree_information:
1151
1080
  else:
1152
1081
  taxon_dict[("", "")] = 1
1153
1082
 
1154
- """
1155
- for leaf in c:
1156
- if t in taxon_dict:
1157
- taxon_dict[t(leaf)] += 1
1158
- else:
1159
- taxon_dict[t(leaf)] = 1
1160
- """
1161
-
1162
1083
  if len(taxon_dict) == 0:
1163
1084
  print(
1164
1085
  f"{bold_red}[DEVELOPMENTAL ERROR] Error in tree_interpretation.py line 912 {taxon_dict}\n {c}{reset}"
@@ -1388,21 +1309,6 @@ class Tree_information:
1388
1309
  root_dist=clade.dist,
1389
1310
  root_support=clade.support,
1390
1311
  ).copy("newick")
1391
- """
1392
- print(f"Reconstruct")
1393
-
1394
- for name, size in sorted(
1395
- (
1396
- (name, sys.getsizeof(value))
1397
- for name, value in list(locals().items())
1398
- ),
1399
- key=lambda x: -x[1],
1400
- )[:30]:
1401
- print("{:>30}: {:>8}".format(name, sizeof_fmt(size)))
1402
-
1403
- print("==============================")
1404
- sys.stdout.flush()
1405
- """
1406
1312
 
1407
1313
  if self.opt.verbose >= 3:
1408
1314
  print(f"[DEBUG] End of reconstruct")
@@ -1498,21 +1404,15 @@ class Tree_information:
1498
1404
 
1499
1405
  clade.add_face(space_text, 2, position="branch-right")
1500
1406
  clade.add_face(taxon_text, 3, position="branch-right")
1501
- clade.add_face(space_text, 4, position="branch-right")
1502
- clade.add_face(id_text, 5, position="branch-right")
1407
+ # clade.add_face(space_text, 4, position="branch-right")
1408
+
1409
+ clade.add_face(id_text, 4, position="aligned")
1503
1410
 
1504
1411
  # Get all tip names of the current working clade
1505
1412
  collapse_leaf_name_list = [x[0] for x in collapse_info.leaf_list]
1506
1413
 
1507
1414
  # Check if current working clade includes only outgroup sequences
1508
- """
1509
- if all(
1510
- x in self.outgroup_leaf_name_list or x in collapse_info.query_list
1511
- for x in collapse_leaf_name_list
1512
- ) and any(
1513
- x in self.outgroup_leaf_name_list for x in collapse_leaf_name_list
1514
- ):
1515
- """
1415
+
1516
1416
  # Development, color unintended outgroup in outgroup color
1517
1417
  if any(
1518
1418
  self.funinfo_dict[x].adjusted_group in self.outgroup_group
@@ -1613,7 +1513,7 @@ class Tree_information:
1613
1513
  # relocate text position little bit for better visualization
1614
1514
  text.set("y", f'{int(float(text.get("y")))-2}')
1615
1515
 
1616
- # Problem here: taxon name with cff., aff. etc includes underscore
1516
+ # Problem here: taxon name with cf., aff. etc includes underscore
1617
1517
  if text_type == "taxon":
1618
1518
  genus = taxon_string_dict[text.text][0]
1619
1519
  species = taxon_string_dict[text.text][1]
@@ -1719,19 +1619,6 @@ class Tree_information:
1719
1619
  encoding="utf-8",
1720
1620
  xml_declaration=True,
1721
1621
  )
1722
- """
1723
- print("In tree visualization")
1724
-
1725
- for name, size in sorted(
1726
- ((name, sys.getsizeof(value)) for name, value in list(locals().items())),
1727
- key=lambda x: -x[1],
1728
- )[:10]:
1729
- print("{:>30}: {:>8}".format(name, sizeof_fmt(size)))
1730
-
1731
- print("===========================")
1732
-
1733
-
1734
- """
1735
1622
 
1736
1623
  if self.opt.verbose >= 3:
1737
1624
  print(f"[DEBUG] End of Tree visualization")
@@ -33,17 +33,6 @@ def pipe_module_tree_interpretation(
33
33
  path,
34
34
  opt,
35
35
  ):
36
- # To reduce memory usage in multithreaded performance, copy necessary objects and then remove V
37
-
38
- """
39
- funinfo_dict = V.dict_hash_FI
40
- funinfo_list = V.list_FI
41
- hash_dict = V.dict_hash_name
42
- query_list = V.dict_dataset[group][gene].list_qr_FI
43
- outgroup = V.dict_dataset[group][gene].list_og_FI
44
- partition = V.partition[group]
45
- """
46
-
47
36
  # time_start = time()
48
37
 
49
38
  # for unexpectively included sequence during clustering