FunVIP 0.3.22__tar.gz → 0.3.22.1__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.
- {funvip-0.3.22 → funvip-0.3.22.1}/FunVIP.egg-info/PKG-INFO +1 -1
- {funvip-0.3.22 → funvip-0.3.22.1}/PKG-INFO +1 -1
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/main.py +2 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/dataset.py +4 -4
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/reporter.py +12 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/save.py +1 -1
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/validate_input.py +177 -86
- {funvip-0.3.22 → funvip-0.3.22.1}/pyproject.toml +1 -1
- {funvip-0.3.22 → funvip-0.3.22.1}/FunVIP.egg-info/SOURCES.txt +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/FunVIP.egg-info/dependency_links.txt +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/FunVIP.egg-info/entry_points.txt +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/FunVIP.egg-info/requires.txt +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/FunVIP.egg-info/top_level.txt +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/LICENSE +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/MANIFEST.in +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/README.md +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/FunVIP_GUI.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/__init__.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/data/Option_manager.xlsx +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/data/__init__.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/data/genus_line.txt +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/Uninstall-ncbi-blast-2.12.0+.exe +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/bin/blastn.exe +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/bin/cleanup-blastdb-volumes.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/bin/get_species_taxids.sh +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/bin/legacy_blast.pl +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/bin/makeblastdb.exe +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/bin/nghttp2.dll +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/bin/update_blastdb.pl +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/doc/README.txt +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/FastTree_Windows/FastTree.exe +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/Documentation/Gblocks_documentation.html +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/Gblocks.exe +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/more_alignments/cox2.pir +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/more_alignments/cytb.pir +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/more_alignments/nad3.pir +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/more_alignments/nad5.pir +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/nad3.pir +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/paths +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/MAFFT_LICENSE +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/MAFFT_Windows.zip +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/RAxML_Windows/GPL-3.0.txt +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/RAxML_Windows/README +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/RAxML_Windows/raxmlHPC-PTHREADS-AVX2.exe +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/__init__.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/iqtree/bin/iqtree2-click.exe +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/iqtree/bin/iqtree2.exe +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/iqtree/bin/libiomp5md.dll +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/iqtree/example.cf +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/iqtree/example.nex +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/iqtree/example.phy +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/iqtree/models.nex +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/LICENSE.md +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/README.md +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/bin/busybox.exe +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/bin/cygbz2-1.dll +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/bin/cyggcc_s-seh-1.dll +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/bin/cyggomp-1.dll +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/bin/cygstdc++-6.dll +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/bin/cygwin1.dll +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/bin/cygz.dll +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/bin/mmseqs.exe +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/examples/QUERY.fasta +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM10.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM100.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM110.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM120.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM130.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM140.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM150.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM160.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM170.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM180.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM190.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM20.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM30.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM40.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM50.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM60.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM70.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM80.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM90.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/VTML10.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/VTML120.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/VTML160.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/VTML20.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/VTML40.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/VTML80.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum100.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum30.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum35.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum40.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum45.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum50.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum55.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum60.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum62.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum65.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum70.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum75.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum80.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum85.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum90.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum95.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/nucleotide.out +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/mmseqs.bat +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/util/bash-completion.sh +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/AUTHORS +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/CHANGELOG +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/LICENSE +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/README +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/bin/libgcc_s_dw2-1.dll +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/bin/libstdc++-6.dll +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/bin/trimal.exe +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/scripts/check_codon_alignments.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/scripts/compare_trimmed_msas.sh +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/scripts/generateRandomAlignmentsUsingAsSeedRealAlignments.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/scripts/generate_trimmed_msas.sh +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/scripts/get_sequence_representative_from_alignment.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/scripts/get_sequences_gaps_ratio.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/scripts/remove_shorter_sequences.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/scripts/selective_trimming_for_dNdS_analyses.based_neighbours.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/scripts/set_manual_boundaries.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/alignment.cpp +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/alignment.h +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/alignment.o +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/autAlignment.cpp +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/autAlignment.o +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/compareFiles.cpp +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/compareFiles.h +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/compareFiles.o +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/defines.h +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/main.cpp +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/makefile +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/makefile.MacOS +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/readAl.cpp +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/readal.exe +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/rwAlignment.cpp +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/rwAlignment.o +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/sequencesMatrix.cpp +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/sequencesMatrix.h +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/sequencesMatrix.o +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/similarityMatrix.cpp +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/similarityMatrix.h +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/similarityMatrix.o +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statAl.cpp +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statal.exe +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statisticsConservation.cpp +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statisticsConservation.h +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statisticsConservation.o +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statisticsFiles.cpp +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statisticsFiles.h +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statisticsGaps.cpp +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statisticsGaps.h +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statisticsGaps.o +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/utils.cpp +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/utils.h +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/utils.o +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/values.h +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/preset/.gitignore +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/preset/accurate.yaml +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/preset/fast.yaml +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/.gitignore +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__init__.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/CATV_pipe.cpython-310.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/CAT_V.cpython-310.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/CAT_V.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/CAT_V_pipe.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/__init__.cpython-310.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/__init__.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/align.cpython-310.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/cluster.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/dataset.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/ext.cpython-310.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/ext.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/hasher.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/initialize.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/io.cpython-310.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/io.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/logger.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/modeltest.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/multigene.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/ncbi.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/opt_generator.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/reporter.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/search.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/tool.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/validation.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/__pycache__/visualize.cpython-39.pyc +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/align.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/cluster.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/command.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/concatenate.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/ext.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/hasher.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/initialize.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/logger.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/logics.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/modeltest.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/ncbi.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/opt_generator.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/search.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/templates/template.html +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/tool.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/tree.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/tree_interpretation.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/tree_interpretation_pipe.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/trim.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/validate_option.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/validation.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/src/version.py +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/test_dataset/penicillium/DB/DB_Penicillium.xlsx +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/test_dataset/penicillium/Options.config +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/test_dataset/penicillium/Query/Query.xlsx +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/test_dataset/penicillium/preset.yaml +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/test_dataset/terrei/DB/FunVIP_Aspergillus_db.xlsx +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/test_dataset/terrei/Query/FunVIP_Aspergillus_query.xlsx +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/funvip/test_dataset/terrei/preset.yaml +0 -0
- {funvip-0.3.22 → funvip-0.3.22.1}/setup.cfg +0 -0
|
@@ -434,7 +434,6 @@ class FunVIP_var:
|
|
|
434
434
|
# Validate if any multiple sequence alignment has no overlapping region
|
|
435
435
|
def validate_alignments(self, path, opt):
|
|
436
436
|
fail_list = []
|
|
437
|
-
|
|
438
437
|
remove_dict = {}
|
|
439
438
|
tree_hash_dict = hasher.encode(self.list_FI, newick=True)
|
|
440
439
|
for group in self.dict_dataset:
|
|
@@ -571,10 +570,11 @@ class FunVIP_var:
|
|
|
571
570
|
for fail in fail_list:
|
|
572
571
|
for FI in self.list_FI:
|
|
573
572
|
if FI.adjusted_group == fail[0]:
|
|
574
|
-
if
|
|
575
|
-
FI.
|
|
573
|
+
if fail[1] in FI.seq:
|
|
574
|
+
if FI.seq[fail[1]] != "":
|
|
575
|
+
FI.issues.add(f"alignfail:{fail[1]}")
|
|
576
576
|
|
|
577
|
-
print(fail_list)
|
|
577
|
+
# print(fail_list)
|
|
578
578
|
|
|
579
579
|
logging.debug("Remove dict")
|
|
580
580
|
logging.debug(remove_dict)
|
|
@@ -258,6 +258,7 @@ class Report:
|
|
|
258
258
|
# For unused FI
|
|
259
259
|
else:
|
|
260
260
|
self.result["DATATYPE"].append("unused")
|
|
261
|
+
self.result["GROUP_ASSIGNED"].append("-")
|
|
261
262
|
|
|
262
263
|
for gene in set_gene:
|
|
263
264
|
# Check if data analysis had performed for specific FI, group, gene combination
|
|
@@ -272,6 +273,17 @@ class Report:
|
|
|
272
273
|
self.result["STATUS"].append("unused")
|
|
273
274
|
|
|
274
275
|
## update query only result on report.txt
|
|
276
|
+
|
|
277
|
+
logging.debug(f"ID: {len(self.result['ID'])}")
|
|
278
|
+
logging.debug(f"HASH: {len(self.result['HASH'])}")
|
|
279
|
+
logging.debug(f"DATATYPE: {len(self.result['DATATYPE'])}")
|
|
280
|
+
logging.debug(f"ISSUES: {len(self.result['ISSUES'])}")
|
|
281
|
+
logging.debug(f"GROUP_ORIGINAL: {len(self.result['GROUP_ORIGINAL'])}")
|
|
282
|
+
logging.debug(f"GROUP_ASSIGNED: {len(self.result['GROUP_ASSIGNED'])}")
|
|
283
|
+
logging.debug(f"SPECIES_ORIGINAL: {len(self.result['SPECIES_ORIGINAL'])}")
|
|
284
|
+
logging.debug(f"SPECIES_ASSIGNED: {len(self.result['SPECIES_ASSIGNED'])}")
|
|
285
|
+
logging.debug(f"STATUS: {len(self.result['STATUS'])}")
|
|
286
|
+
|
|
275
287
|
self.query_result = pd.DataFrame(self.result)
|
|
276
288
|
# Filter if queryonly is True
|
|
277
289
|
if opt.queryonly is True:
|
|
@@ -26,7 +26,7 @@ import shelve
|
|
|
26
26
|
# In future, try selectively save to reduce datasize
|
|
27
27
|
# Session saving function
|
|
28
28
|
def save_session(opt, path, global_var: dict, var: dict) -> None:
|
|
29
|
-
managed_keys = ("V", "R", "opt", "path", "model_dict")
|
|
29
|
+
managed_keys = ("V", "R", "opt", "path", "model_dict", "GenMine_flag")
|
|
30
30
|
|
|
31
31
|
# if opt.save_run is True:
|
|
32
32
|
save = shelve.open(path.save, "n")
|
|
@@ -56,17 +56,18 @@ class Funinfo:
|
|
|
56
56
|
self.color = None # color for highlighting in phylogenetic tree
|
|
57
57
|
self.flat = [] # list of flat species in concatenated tree
|
|
58
58
|
self.issues = set() # list of issues to this FI
|
|
59
|
+
self.source = set() # source which FI was from
|
|
60
|
+
|
|
61
|
+
def update_source(self, source):
|
|
62
|
+
self.source.add(source)
|
|
59
63
|
|
|
60
64
|
def update_seqrecord(self, seq, gene=None):
|
|
61
|
-
|
|
65
|
+
error = None
|
|
62
66
|
self.description = seq.description
|
|
63
67
|
self.genus, self.ori_species = get_genus_species(seq.description)
|
|
64
68
|
|
|
65
69
|
if gene in self.seq:
|
|
66
|
-
|
|
67
|
-
f"More than 1 sequence for {gene} found for {self.id} during update_seqrecord"
|
|
68
|
-
)
|
|
69
|
-
flag = -1
|
|
70
|
+
error = f"In {self.source}, More than 1 sequence for {gene} found for {self.id} during update_seqrecord"
|
|
70
71
|
elif gene is None:
|
|
71
72
|
self.unclassified_seq.append(str(seq.seq.ungap("-")))
|
|
72
73
|
else:
|
|
@@ -74,18 +75,15 @@ class Funinfo:
|
|
|
74
75
|
|
|
75
76
|
self.bygene_species[gene] = self.ori_species
|
|
76
77
|
|
|
77
|
-
return
|
|
78
|
+
return error
|
|
78
79
|
|
|
79
80
|
def update_seq(self, gene, seq): # get input as Entrez seqrecord! Important!
|
|
80
|
-
|
|
81
|
+
error = None
|
|
81
82
|
if gene in self.seq:
|
|
82
83
|
if (
|
|
83
84
|
self.seq[gene] != seq
|
|
84
85
|
): # if more than 1 sequence per gene gets in, and if they are different
|
|
85
|
-
|
|
86
|
-
f"More than 1 sequence for {gene} found for {self.id} during update_seq"
|
|
87
|
-
)
|
|
88
|
-
flag = -1
|
|
86
|
+
error = f"In {self.source}, More than 1 sequence for {gene} found for {self.id} during update_seq"
|
|
89
87
|
else:
|
|
90
88
|
pass
|
|
91
89
|
else:
|
|
@@ -96,13 +94,13 @@ class Funinfo:
|
|
|
96
94
|
# Update concatenated
|
|
97
95
|
self.bygene_species["concatenated"] = self.ori_species
|
|
98
96
|
|
|
99
|
-
return
|
|
97
|
+
return error
|
|
100
98
|
|
|
101
99
|
def update_description(self, description):
|
|
102
100
|
self.description = description
|
|
103
101
|
|
|
104
102
|
def update_genus(self, genus):
|
|
105
|
-
|
|
103
|
+
error = None
|
|
106
104
|
# Try to solve illegal unicode characters
|
|
107
105
|
if pd.isnull(genus):
|
|
108
106
|
genus = ""
|
|
@@ -114,10 +112,7 @@ class Funinfo:
|
|
|
114
112
|
|
|
115
113
|
# Check ambiguity
|
|
116
114
|
if self.genus != "" and self.genus != genus:
|
|
117
|
-
|
|
118
|
-
logging.error(
|
|
119
|
-
f"Colliding genus info found for {self.original_id}, {self.genus} and {genus}"
|
|
120
|
-
)
|
|
115
|
+
error = f"In {self.source}, Colliding genus info found for {self.original_id}, {self.genus} and {genus}"
|
|
121
116
|
|
|
122
117
|
# Update original if should
|
|
123
118
|
if self.ori_genus == "":
|
|
@@ -126,10 +121,10 @@ class Funinfo:
|
|
|
126
121
|
# Update genus
|
|
127
122
|
self.genus = genus
|
|
128
123
|
|
|
129
|
-
return
|
|
124
|
+
return error
|
|
130
125
|
|
|
131
126
|
def update_ori_species(self, species):
|
|
132
|
-
|
|
127
|
+
error = None
|
|
133
128
|
# Try to solve illegal unicode characters
|
|
134
129
|
if pd.isnull(species):
|
|
135
130
|
species = ""
|
|
@@ -141,22 +136,19 @@ class Funinfo:
|
|
|
141
136
|
|
|
142
137
|
# Check ambiguity
|
|
143
138
|
if self.ori_species != "" and self.ori_species != species:
|
|
144
|
-
|
|
145
|
-
logging.error(
|
|
146
|
-
f"Colliding species info found for {self.original_id}, {self.ori_species} and {species}"
|
|
147
|
-
)
|
|
139
|
+
error = f"In {self.source}, Colliding species info found for {self.original_id}, {self.ori_species} and {species}"
|
|
148
140
|
|
|
149
141
|
# Update original if should
|
|
150
142
|
if self.ori_species == "":
|
|
151
143
|
self.ori_species = species
|
|
152
144
|
|
|
153
|
-
return
|
|
145
|
+
return error
|
|
154
146
|
|
|
155
147
|
def update_species(self, gene, species):
|
|
156
148
|
self.bygene_species[gene] = species
|
|
157
149
|
|
|
158
150
|
def update_group(self, group):
|
|
159
|
-
|
|
151
|
+
error = None
|
|
160
152
|
# Try to solve illegal unicode characters
|
|
161
153
|
if pd.isnull(group):
|
|
162
154
|
group = ""
|
|
@@ -167,15 +159,12 @@ class Funinfo:
|
|
|
167
159
|
|
|
168
160
|
# Check ambiguity
|
|
169
161
|
if self.group != "" and self.group != group:
|
|
170
|
-
|
|
171
|
-
f"Colliding group info found for {self.original_id}, {self.group} and {group}"
|
|
172
|
-
)
|
|
173
|
-
flag = -1
|
|
162
|
+
error = f"In {self.source}, Colliding group info found for {self.original_id}, {self.group} and {group}"
|
|
174
163
|
|
|
175
164
|
# Update group
|
|
176
165
|
self.group = group
|
|
177
166
|
|
|
178
|
-
return
|
|
167
|
+
return error
|
|
179
168
|
|
|
180
169
|
def update_color(self, color):
|
|
181
170
|
if pd.isnull(color):
|
|
@@ -186,13 +175,14 @@ class Funinfo:
|
|
|
186
175
|
if isvalidcolor(color) is True:
|
|
187
176
|
self.color = color
|
|
188
177
|
else:
|
|
189
|
-
logging.
|
|
190
|
-
f"Color {color} does not seems to be valid svg color nor hex code"
|
|
178
|
+
logging.warning(
|
|
179
|
+
f"Color {color} does not seems to be valid svg color nor hex code. Using default color"
|
|
191
180
|
)
|
|
192
|
-
|
|
181
|
+
self.color = None
|
|
193
182
|
|
|
194
183
|
def update_datatype(self, datatype):
|
|
195
184
|
flag = 0
|
|
185
|
+
error = None
|
|
196
186
|
# Available datatypes : db, query
|
|
197
187
|
if not (datatype in ("db", "query", "outgroup")):
|
|
198
188
|
logging.error(f"DEVELOPMENTAL ERROR: {datatype} is not available datatype")
|
|
@@ -200,14 +190,11 @@ class Funinfo:
|
|
|
200
190
|
|
|
201
191
|
# Check ambiguity
|
|
202
192
|
if self.datatype != "" and self.datatype != datatype:
|
|
203
|
-
|
|
204
|
-
logging.error(
|
|
205
|
-
f"Colliding datatype found for {self.original_id}, {self.datatype} and {datatype}"
|
|
206
|
-
)
|
|
193
|
+
error = f"In {self.source}, Colliding datatype found for {self.original_id}, {self.datatype} and {datatype}"
|
|
207
194
|
|
|
208
195
|
self.datatype = datatype
|
|
209
196
|
|
|
210
|
-
return
|
|
197
|
+
return error
|
|
211
198
|
|
|
212
199
|
def update_id(self, id_, regexs=None):
|
|
213
200
|
if not regexs == None:
|
|
@@ -286,9 +273,15 @@ class Funinfo:
|
|
|
286
273
|
|
|
287
274
|
# getting data input from fasta file
|
|
288
275
|
def input_fasta(path, opt, fasta_list, funinfo_dict, datatype):
|
|
276
|
+
warnings = []
|
|
277
|
+
errors = []
|
|
278
|
+
|
|
289
279
|
# initialize path to use function "get_genus_species"
|
|
290
280
|
initialize_path(path)
|
|
291
281
|
|
|
282
|
+
errors = []
|
|
283
|
+
warnings = []
|
|
284
|
+
|
|
292
285
|
# Fasta files only
|
|
293
286
|
for file in fasta_list:
|
|
294
287
|
# Copy input files to designation
|
|
@@ -304,8 +297,60 @@ def input_fasta(path, opt, fasta_list, funinfo_dict, datatype):
|
|
|
304
297
|
|
|
305
298
|
logging.info(f"{file}: Fasta file")
|
|
306
299
|
|
|
307
|
-
|
|
300
|
+
seq_list = list(SeqIO.parse(file, "fasta"))
|
|
301
|
+
for seq in seq_list:
|
|
302
|
+
if not opt.regex == None:
|
|
303
|
+
id_ = get_id(seq.description, tuple(opt.regex))
|
|
304
|
+
else:
|
|
305
|
+
id_ = seq.description
|
|
306
|
+
|
|
307
|
+
id_ = newick_legal(id_)
|
|
308
|
+
|
|
309
|
+
if id_ in funinfo_dict:
|
|
310
|
+
funinfo_dict[id_].update_source(file)
|
|
311
|
+
errors.append(funinfo_dict[id_].update_seqrecord(seq))
|
|
312
|
+
errors.append(funinfo_dict[id_].update_datatype(datatype))
|
|
313
|
+
errors.append(funinfo_dict[id_].update_group(""))
|
|
314
|
+
if get_genus_species(seq.description)[0] != "":
|
|
315
|
+
errors.append(
|
|
316
|
+
funinfo_dict[id_].update_genus(
|
|
317
|
+
get_genus_species(seq.description)[0]
|
|
318
|
+
)
|
|
319
|
+
)
|
|
320
|
+
|
|
321
|
+
if get_genus_species(seq.description)[1] != "":
|
|
322
|
+
errors.append(
|
|
323
|
+
funinfo_dict[id_].update_ori_species(
|
|
324
|
+
get_genus_species(seq.description)[1]
|
|
325
|
+
)
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
# For new Funinfo
|
|
329
|
+
else:
|
|
330
|
+
newinfo = Funinfo()
|
|
331
|
+
newinfo.update_source(file)
|
|
332
|
+
errors.append(newinfo.update_seqrecord(seq))
|
|
333
|
+
errors.append(newinfo.update_datatype(datatype))
|
|
334
|
+
errors.append(
|
|
335
|
+
newinfo.update_group("")
|
|
336
|
+
) # because group not designated yet
|
|
337
|
+
# id by regex match
|
|
338
|
+
newinfo.update_id(seq.description, regexs=opt.regex)
|
|
339
|
+
if get_genus_species(seq.description)[0] != "":
|
|
340
|
+
errors.append(
|
|
341
|
+
newinfo.update_genus(get_genus_species(seq.description)[0])
|
|
342
|
+
)
|
|
308
343
|
|
|
344
|
+
if get_genus_species(seq.description)[1] != "":
|
|
345
|
+
errors.append(
|
|
346
|
+
newinfo.update_ori_species(
|
|
347
|
+
get_genus_species(seq.description)[1]
|
|
348
|
+
)
|
|
349
|
+
)
|
|
350
|
+
|
|
351
|
+
funinfo_dict[id_] = deepcopy(newinfo)
|
|
352
|
+
|
|
353
|
+
"""
|
|
309
354
|
try:
|
|
310
355
|
seq_list = list(SeqIO.parse(file, "fasta"))
|
|
311
356
|
for seq in seq_list:
|
|
@@ -317,52 +362,60 @@ def input_fasta(path, opt, fasta_list, funinfo_dict, datatype):
|
|
|
317
362
|
id_ = newick_legal(id_)
|
|
318
363
|
|
|
319
364
|
if id_ in funinfo_dict:
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
365
|
+
funinfo_dict[id_].update_source(file)
|
|
366
|
+
errors.append(funinfo_dict[id_].update_seqrecord(seq))
|
|
367
|
+
errors.append(funinfo_dict[id_].update_datatype(datatype))
|
|
368
|
+
errors.append(funinfo_dict[id_].update_group(""))
|
|
323
369
|
if get_genus_species(seq.description)[0] != "":
|
|
324
|
-
|
|
325
|
-
|
|
370
|
+
errors.append(
|
|
371
|
+
funinfo_dict[id_].update_genus(
|
|
372
|
+
get_genus_species(seq.description)[0]
|
|
373
|
+
)
|
|
326
374
|
)
|
|
327
375
|
|
|
328
376
|
if get_genus_species(seq.description)[1] != "":
|
|
329
|
-
|
|
330
|
-
|
|
377
|
+
errors.append(
|
|
378
|
+
funinfo_dict[id_].update_ori_species(
|
|
379
|
+
get_genus_species(seq.description)[1]
|
|
380
|
+
)
|
|
331
381
|
)
|
|
332
382
|
|
|
333
383
|
# For new Funinfo
|
|
334
384
|
else:
|
|
335
385
|
newinfo = Funinfo()
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
386
|
+
newinfo[id_].update_source(file)
|
|
387
|
+
errors.append(newinfo.update_seqrecord(seq))
|
|
388
|
+
errors.append(newinfo.update_datatype(datatype))
|
|
389
|
+
errors.append(
|
|
390
|
+
newinfo.update_group("")
|
|
340
391
|
) # because group not designated yet
|
|
341
392
|
# id by regex match
|
|
342
393
|
newinfo.update_id(seq.description, regexs=opt.regex)
|
|
343
394
|
if get_genus_species(seq.description)[0] != "":
|
|
344
|
-
|
|
345
|
-
get_genus_species(seq.description)[0]
|
|
395
|
+
errors.append(
|
|
396
|
+
newinfo.update_genus(get_genus_species(seq.description)[0])
|
|
346
397
|
)
|
|
347
398
|
|
|
348
399
|
if get_genus_species(seq.description)[1] != "":
|
|
349
|
-
|
|
350
|
-
|
|
400
|
+
errors.append(
|
|
401
|
+
newinfo.update_ori_species(
|
|
402
|
+
get_genus_species(seq.description)[1]
|
|
403
|
+
)
|
|
351
404
|
)
|
|
352
405
|
|
|
353
406
|
funinfo_dict[id_] = deepcopy(newinfo)
|
|
354
407
|
|
|
355
408
|
except:
|
|
356
|
-
|
|
409
|
+
errors.append(f"{file} does not seems to be valid fasta file")
|
|
410
|
+
"""
|
|
357
411
|
|
|
358
412
|
if len(seq_list) == 0:
|
|
359
|
-
|
|
360
|
-
raise Exception
|
|
413
|
+
errors.append(f"Fasta file {file} seems to be empty please check")
|
|
414
|
+
# raise Exception
|
|
361
415
|
|
|
362
|
-
if
|
|
363
|
-
raise Exception
|
|
416
|
+
errors = [err for err in errors if not (err is None)]
|
|
364
417
|
|
|
365
|
-
return funinfo_dict
|
|
418
|
+
return funinfo_dict, warnings, errors
|
|
366
419
|
|
|
367
420
|
|
|
368
421
|
# getting datafile from excel or tabular file
|
|
@@ -370,11 +423,13 @@ def input_table(funinfo_dict, path, opt, table_list, datatype):
|
|
|
370
423
|
# Whether to check if GenMine has run
|
|
371
424
|
GenMine_flag = 0
|
|
372
425
|
string_error = 0
|
|
373
|
-
error_flag = 0
|
|
374
426
|
|
|
375
427
|
initialize_path(path) # this one is ugly
|
|
376
428
|
df_list = []
|
|
377
429
|
|
|
430
|
+
warnings = []
|
|
431
|
+
errors = []
|
|
432
|
+
|
|
378
433
|
# extensionto filetype translation
|
|
379
434
|
dict_extension = {
|
|
380
435
|
".csv": "csv",
|
|
@@ -389,6 +444,7 @@ def input_table(funinfo_dict, path, opt, table_list, datatype):
|
|
|
389
444
|
# Running table by table operations
|
|
390
445
|
for table in table_list:
|
|
391
446
|
# Read each of the table by each of the extensions
|
|
447
|
+
# This is part is double validation after options
|
|
392
448
|
flag_read_table = 0
|
|
393
449
|
for extension in dict_extension:
|
|
394
450
|
if table.endswith(extension):
|
|
@@ -510,7 +566,6 @@ def input_table(funinfo_dict, path, opt, table_list, datatype):
|
|
|
510
566
|
logging.info(
|
|
511
567
|
f"Running GenMine to download {len(download_set)} sequences from GenBank"
|
|
512
568
|
)
|
|
513
|
-
# logging.info(download_set)
|
|
514
569
|
|
|
515
570
|
# Write GenMine input file
|
|
516
571
|
with open(f"{path.GenMine}/Accessions.txt", "w") as fg:
|
|
@@ -572,7 +627,7 @@ def input_table(funinfo_dict, path, opt, table_list, datatype):
|
|
|
572
627
|
elif not (accession_wo_version in download_dict) and (
|
|
573
628
|
accession_w_version in download_set
|
|
574
629
|
):
|
|
575
|
-
logging.warning(f"Failed updating {string}")
|
|
630
|
+
logging.warning(f"Failed updating {string} using GenMine")
|
|
576
631
|
return ""
|
|
577
632
|
|
|
578
633
|
# For sequence input
|
|
@@ -588,9 +643,10 @@ def input_table(funinfo_dict, path, opt, table_list, datatype):
|
|
|
588
643
|
shutil.rmtree(f"{path.GenMine}/{directory}")
|
|
589
644
|
|
|
590
645
|
elif len(GenMine_df_list) == 0:
|
|
591
|
-
|
|
592
|
-
f"None of the GenMine results were succesfully parsed"
|
|
646
|
+
warnings.append(
|
|
647
|
+
f"In table {table}, None of the GenMine results were succesfully parsed"
|
|
593
648
|
)
|
|
649
|
+
|
|
594
650
|
else:
|
|
595
651
|
logging.error(
|
|
596
652
|
f"DEVELOPMENTAL ERROR: Multiple GenMine result colliding!"
|
|
@@ -618,8 +674,7 @@ def input_table(funinfo_dict, path, opt, table_list, datatype):
|
|
|
618
674
|
empty_error.append(n)
|
|
619
675
|
|
|
620
676
|
if len(empty_error) > 0:
|
|
621
|
-
|
|
622
|
-
raise Exception
|
|
677
|
+
errors.append(f"In table {table}, Empty id found, line {empty_error}!")
|
|
623
678
|
|
|
624
679
|
# Generate funinfo by each row
|
|
625
680
|
for n, acc in enumerate(df["id"]):
|
|
@@ -631,31 +686,37 @@ def input_table(funinfo_dict, path, opt, table_list, datatype):
|
|
|
631
686
|
# Duplicate id check
|
|
632
687
|
if df["id"][n] in funinfo_dict:
|
|
633
688
|
newinfo = funinfo_dict[df["id"][n]]
|
|
689
|
+
# Update source
|
|
690
|
+
newinfo.update_source(table)
|
|
634
691
|
new_acc = False
|
|
635
|
-
|
|
692
|
+
warnings.append(
|
|
693
|
+
f"Among table {newinfo.source}, Duplicate id {df['id'][n]} found!"
|
|
694
|
+
)
|
|
636
695
|
else:
|
|
637
696
|
funinfo_dict[df["id"][n]] = Funinfo()
|
|
638
697
|
newinfo = funinfo_dict[df["id"][n]]
|
|
639
698
|
newinfo.update_id(df["id"][n])
|
|
699
|
+
# Update source
|
|
700
|
+
newinfo.update_source(table)
|
|
640
701
|
|
|
641
702
|
# if flag_genus is true, try to parse genus
|
|
642
703
|
if not (flag_genus is None or flag_genus is False):
|
|
643
|
-
|
|
704
|
+
errors.append(newinfo.update_genus(df["genus"][n]))
|
|
644
705
|
|
|
645
706
|
# if flag_species is true, try to parse species
|
|
646
707
|
if not (flag_species is None or flag_species is False):
|
|
647
|
-
|
|
708
|
+
errors.append(newinfo.update_ori_species(df["species"][n]))
|
|
648
709
|
|
|
649
710
|
# if flag_level is true, try to parse the optimal taxonomic group
|
|
650
711
|
if not (flag_level is None or flag_level is False):
|
|
651
|
-
|
|
712
|
+
errors.append(newinfo.update_group(df[flag_level][n]))
|
|
652
713
|
|
|
653
714
|
# if flag_color is true, try to parse color for taxon
|
|
654
715
|
if not (flag_color is None or flag_color is False):
|
|
655
716
|
newinfo.update_color(df[flag_color][n])
|
|
656
717
|
|
|
657
718
|
# update datatype
|
|
658
|
-
|
|
719
|
+
errors.append(newinfo.update_datatype(datatype))
|
|
659
720
|
|
|
660
721
|
# parse each of the genes
|
|
661
722
|
for gene in opt.gene:
|
|
@@ -683,17 +744,19 @@ def input_table(funinfo_dict, path, opt, table_list, datatype):
|
|
|
683
744
|
seq_error_list.append(x)
|
|
684
745
|
|
|
685
746
|
if seq_error_cnt > 0:
|
|
686
|
-
|
|
687
|
-
f"Illegal DNA character {seq_error_list} found in {gene} of {datatype} {df['id'][n]}"
|
|
747
|
+
warnings.append(
|
|
748
|
+
f"In table {table}, Illegal DNA character {seq_error_list} found in {gene} of {datatype} {df['id'][n]}"
|
|
688
749
|
)
|
|
689
750
|
elif seq_string.lower().strip() in ("nan", "na"):
|
|
690
|
-
|
|
691
|
-
f"Sequence {df['id'][n]} {seq_string} detected as nan, removing it"
|
|
751
|
+
warnings.append(
|
|
752
|
+
f"In table {table}, Sequence {df['id'][n]} {seq_string} detected as nan, removing it"
|
|
692
753
|
)
|
|
693
754
|
elif seq_error_cnt == 0:
|
|
694
755
|
# remove gaps for preventing BLAST error
|
|
695
|
-
|
|
696
|
-
|
|
756
|
+
errors.append(
|
|
757
|
+
newinfo.update_seq(
|
|
758
|
+
gene, seq_string.replace("-", "").replace(".", "")
|
|
759
|
+
)
|
|
697
760
|
)
|
|
698
761
|
|
|
699
762
|
# After successfully parsed this table, save it
|
|
@@ -702,20 +765,39 @@ def input_table(funinfo_dict, path, opt, table_list, datatype):
|
|
|
702
765
|
f"{path.out_db}/Saved_{'.'.join(table.split('/')[-1].split('.')[:-1])}.{opt.tableformat}",
|
|
703
766
|
fmt=opt.tableformat,
|
|
704
767
|
)
|
|
705
|
-
|
|
768
|
+
|
|
769
|
+
# Remove non-errors from errors
|
|
770
|
+
errors = [err for err in errors if not (err is None)]
|
|
771
|
+
|
|
772
|
+
return funinfo_dict, GenMine_flag, warnings, errors
|
|
706
773
|
|
|
707
774
|
|
|
708
775
|
def db_input(funinfo_dict, opt, path) -> list:
|
|
709
776
|
# Get DB input
|
|
710
777
|
logging.info(f"Input DB list: {opt.db}")
|
|
711
778
|
|
|
712
|
-
|
|
713
|
-
funinfo_dict
|
|
779
|
+
(
|
|
780
|
+
funinfo_dict,
|
|
781
|
+
GenMine_flag,
|
|
782
|
+
warnings,
|
|
783
|
+
errors,
|
|
784
|
+
) = input_table(
|
|
785
|
+
funinfo_dict=funinfo_dict,
|
|
786
|
+
path=path,
|
|
787
|
+
opt=opt,
|
|
788
|
+
table_list=opt.db,
|
|
789
|
+
datatype="db",
|
|
714
790
|
)
|
|
715
791
|
|
|
716
|
-
|
|
792
|
+
for warning in warnings:
|
|
793
|
+
logging.warning(warning)
|
|
794
|
+
|
|
795
|
+
if len(errors) > 0:
|
|
796
|
+
for error in errors:
|
|
797
|
+
logging.error(error)
|
|
798
|
+
|
|
717
799
|
logging.error(
|
|
718
|
-
f"FunVIP terminated because error found during input validation. Please check [ERROR]
|
|
800
|
+
f"FunVIP terminated because error found during input validation. Please check [ERROR] in log.txt"
|
|
719
801
|
)
|
|
720
802
|
raise Exception
|
|
721
803
|
# validate dataset
|
|
@@ -758,14 +840,14 @@ def query_input(funinfo_dict, opt, path):
|
|
|
758
840
|
)
|
|
759
841
|
]
|
|
760
842
|
|
|
761
|
-
funinfo_dict, GenMine_flag,
|
|
843
|
+
funinfo_dict, GenMine_flag, table_warnings, table_errors = input_table(
|
|
762
844
|
funinfo_dict=funinfo_dict,
|
|
763
845
|
path=path,
|
|
764
846
|
opt=opt,
|
|
765
847
|
table_list=query_table,
|
|
766
848
|
datatype="query",
|
|
767
849
|
)
|
|
768
|
-
funinfo_dict = input_fasta(
|
|
850
|
+
funinfo_dict, fasta_warnings, fasta_errors = input_fasta(
|
|
769
851
|
path=path,
|
|
770
852
|
opt=opt,
|
|
771
853
|
fasta_list=query_fasta,
|
|
@@ -773,7 +855,16 @@ def query_input(funinfo_dict, opt, path):
|
|
|
773
855
|
datatype="query",
|
|
774
856
|
)
|
|
775
857
|
|
|
776
|
-
|
|
858
|
+
warnings = table_warnings + fasta_warnings
|
|
859
|
+
errors = table_errors + fasta_errors
|
|
860
|
+
|
|
861
|
+
for warning in warnings:
|
|
862
|
+
logging.warning(warning)
|
|
863
|
+
|
|
864
|
+
if len(errors) > 0:
|
|
865
|
+
for error in errors:
|
|
866
|
+
logging.error(error)
|
|
867
|
+
|
|
777
868
|
logging.error(
|
|
778
869
|
f"FunVIP terminated because error found during input validation. Please check [ERROR] in log.txt"
|
|
779
870
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "FunVIP"
|
|
3
|
-
version = "0.3.22"
|
|
3
|
+
version = "0.3.22.1"
|
|
4
4
|
description = "Fungal Validation & Identification Pipeline"
|
|
5
5
|
authors = [{name = "Changwan Seo", email = "wan101010@snu.ac.kr"}]
|
|
6
6
|
urls = { "Homepage" = "https://github.com/Changwanseo/FunVIP" }
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/Uninstall-ncbi-blast-2.12.0+.exe
RENAMED
|
File without changes
|
|
File without changes
|
{funvip-0.3.22 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/bin/cleanup-blastdb-volumes.py
RENAMED
|
File without changes
|