FunVIP 0.3.21__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.21 → funvip-0.3.22.1}/FunVIP.egg-info/PKG-INFO +2 -2
- {funvip-0.3.21 → funvip-0.3.22.1}/FunVIP.egg-info/SOURCES.txt +29 -1
- {funvip-0.3.21 → funvip-0.3.22.1}/FunVIP.egg-info/requires.txt +1 -1
- funvip-0.3.22.1/MANIFEST.in +5 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/PKG-INFO +2 -2
- {funvip-0.3.21 → funvip-0.3.22.1}/README.md +33 -36
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/main.py +2 -1
- funvip-0.3.22.1/funvip/src/.gitignore +0 -0
- funvip-0.3.22.1/funvip/src/__init__.py +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/CATV_pipe.cpython-310.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/CAT_V.cpython-310.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/CAT_V.cpython-39.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/CAT_V_pipe.cpython-39.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/__init__.cpython-310.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/__init__.cpython-39.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/align.cpython-310.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/cluster.cpython-39.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/dataset.cpython-39.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/ext.cpython-310.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/ext.cpython-39.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/hasher.cpython-39.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/initialize.cpython-39.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/io.cpython-310.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/io.cpython-39.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/logger.cpython-39.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/modeltest.cpython-39.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/multigene.cpython-39.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/ncbi.cpython-39.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/opt_generator.cpython-39.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/reporter.cpython-39.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/search.cpython-39.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/tool.cpython-39.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/validation.cpython-39.pyc +0 -0
- funvip-0.3.22.1/funvip/src/__pycache__/visualize.cpython-39.pyc +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/dataset.py +4 -4
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/reporter.py +12 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/save.py +1 -1
- funvip-0.3.22.1/funvip/src/templates/template.html +17 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/validate_input.py +949 -846
- {funvip-0.3.21 → funvip-0.3.22.1}/pyproject.toml +5 -3
- funvip-0.3.21/funvip/src/patch.py +0 -261
- {funvip-0.3.21 → funvip-0.3.22.1}/FunVIP.egg-info/dependency_links.txt +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/FunVIP.egg-info/entry_points.txt +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/FunVIP.egg-info/top_level.txt +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/LICENSE +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/FunVIP_GUI.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/__init__.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/data/Option_manager.xlsx +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/data/__init__.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/data/genus_line.txt +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/Uninstall-ncbi-blast-2.12.0+.exe +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/bin/blastn.exe +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/bin/cleanup-blastdb-volumes.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/bin/get_species_taxids.sh +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/bin/legacy_blast.pl +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/bin/makeblastdb.exe +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/bin/nghttp2.dll +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/bin/update_blastdb.pl +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/BLAST_Windows/doc/README.txt +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/FastTree_Windows/FastTree.exe +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/Documentation/Gblocks_documentation.html +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/Gblocks.exe +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/more_alignments/cox2.pir +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/more_alignments/cytb.pir +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/more_alignments/nad3.pir +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/more_alignments/nad5.pir +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/nad3.pir +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/paths +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/MAFFT_LICENSE +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/MAFFT_Windows.zip +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/RAxML_Windows/GPL-3.0.txt +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/RAxML_Windows/README +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/RAxML_Windows/raxmlHPC-PTHREADS-AVX2.exe +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/__init__.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/iqtree/bin/iqtree2-click.exe +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/iqtree/bin/iqtree2.exe +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/iqtree/bin/libiomp5md.dll +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/iqtree/example.cf +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/iqtree/example.nex +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/iqtree/example.phy +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/iqtree/models.nex +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/LICENSE.md +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/README.md +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/bin/busybox.exe +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/bin/cygbz2-1.dll +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/bin/cyggcc_s-seh-1.dll +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/bin/cyggomp-1.dll +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/bin/cygstdc++-6.dll +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/bin/cygwin1.dll +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/bin/cygz.dll +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/bin/mmseqs.exe +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/examples/QUERY.fasta +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM10.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM100.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM110.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM120.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM130.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM140.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM150.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM160.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM170.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM180.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM190.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM20.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM30.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM40.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM50.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM60.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM70.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM80.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/PAM90.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/VTML10.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/VTML120.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/VTML160.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/VTML20.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/VTML40.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/VTML80.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum100.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum30.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum35.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum40.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum45.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum50.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum55.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum60.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum62.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum65.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum70.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum75.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum80.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum85.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum90.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/blosum95.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/matrices/nucleotide.out +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/mmseqs.bat +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/mmseqs_Windows/util/bash-completion.sh +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/AUTHORS +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/CHANGELOG +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/LICENSE +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/README +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/bin/libgcc_s_dw2-1.dll +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/bin/libstdc++-6.dll +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/bin/trimal.exe +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/scripts/check_codon_alignments.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/scripts/compare_trimmed_msas.sh +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/scripts/generateRandomAlignmentsUsingAsSeedRealAlignments.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/scripts/generate_trimmed_msas.sh +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/scripts/get_sequence_representative_from_alignment.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/scripts/get_sequences_gaps_ratio.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/scripts/remove_shorter_sequences.py +0 -0
- {funvip-0.3.21 → 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.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/scripts/set_manual_boundaries.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/alignment.cpp +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/alignment.h +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/alignment.o +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/autAlignment.cpp +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/autAlignment.o +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/compareFiles.cpp +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/compareFiles.h +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/compareFiles.o +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/defines.h +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/main.cpp +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/makefile +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/makefile.MacOS +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/readAl.cpp +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/readal.exe +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/rwAlignment.cpp +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/rwAlignment.o +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/sequencesMatrix.cpp +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/sequencesMatrix.h +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/sequencesMatrix.o +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/similarityMatrix.cpp +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/similarityMatrix.h +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/similarityMatrix.o +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statAl.cpp +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statal.exe +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statisticsConservation.cpp +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statisticsConservation.h +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statisticsConservation.o +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statisticsFiles.cpp +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statisticsFiles.h +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statisticsGaps.cpp +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statisticsGaps.h +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/statisticsGaps.o +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/utils.cpp +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/utils.h +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/utils.o +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/external/trimal.v1.4/trimAl/source/values.h +0 -0
- /funvip-0.3.21/funvip/src/__init__.py → /funvip-0.3.22.1/funvip/preset/.gitignore +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/preset/accurate.yaml +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/preset/fast.yaml +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/align.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/cluster.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/command.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/concatenate.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/ext.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/hasher.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/initialize.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/logger.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/logics.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/modeltest.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/ncbi.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/opt_generator.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/search.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/tool.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/tree.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/tree_interpretation.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/tree_interpretation_pipe.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/trim.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/validate_option.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/validation.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/src/version.py +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/test_dataset/penicillium/DB/DB_Penicillium.xlsx +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/test_dataset/penicillium/Options.config +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/test_dataset/penicillium/Query/Query.xlsx +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/test_dataset/penicillium/preset.yaml +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/test_dataset/terrei/DB/FunVIP_Aspergillus_db.xlsx +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/test_dataset/terrei/Query/FunVIP_Aspergillus_query.xlsx +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/funvip/test_dataset/terrei/preset.yaml +0 -0
- {funvip-0.3.21 → funvip-0.3.22.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: FunVIP
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.22.1
|
|
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.78
|
|
|
11
11
|
Requires-Dist: ete3==3.1.3
|
|
12
12
|
Requires-Dist: Cython
|
|
13
13
|
Requires-Dist: dendropy
|
|
14
|
-
Requires-Dist: GenMine
|
|
14
|
+
Requires-Dist: GenMine<1.2.0,>=1.1.0
|
|
15
15
|
Requires-Dist: lxml
|
|
16
16
|
Requires-Dist: matplotlib
|
|
17
17
|
Requires-Dist: numpy
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
LICENSE
|
|
2
|
+
MANIFEST.in
|
|
2
3
|
README.md
|
|
3
4
|
pyproject.toml
|
|
4
5
|
FunVIP.egg-info/PKG-INFO
|
|
@@ -151,8 +152,10 @@ funvip/external/trimal.v1.4/trimAl/source/utils.cpp
|
|
|
151
152
|
funvip/external/trimal.v1.4/trimAl/source/utils.h
|
|
152
153
|
funvip/external/trimal.v1.4/trimAl/source/utils.o
|
|
153
154
|
funvip/external/trimal.v1.4/trimAl/source/values.h
|
|
155
|
+
funvip/preset/.gitignore
|
|
154
156
|
funvip/preset/accurate.yaml
|
|
155
157
|
funvip/preset/fast.yaml
|
|
158
|
+
funvip/src/.gitignore
|
|
156
159
|
funvip/src/__init__.py
|
|
157
160
|
funvip/src/align.py
|
|
158
161
|
funvip/src/cluster.py
|
|
@@ -167,7 +170,6 @@ funvip/src/logics.py
|
|
|
167
170
|
funvip/src/modeltest.py
|
|
168
171
|
funvip/src/ncbi.py
|
|
169
172
|
funvip/src/opt_generator.py
|
|
170
|
-
funvip/src/patch.py
|
|
171
173
|
funvip/src/reporter.py
|
|
172
174
|
funvip/src/save.py
|
|
173
175
|
funvip/src/search.py
|
|
@@ -180,6 +182,32 @@ funvip/src/validate_input.py
|
|
|
180
182
|
funvip/src/validate_option.py
|
|
181
183
|
funvip/src/validation.py
|
|
182
184
|
funvip/src/version.py
|
|
185
|
+
funvip/src/__pycache__/CATV_pipe.cpython-310.pyc
|
|
186
|
+
funvip/src/__pycache__/CAT_V.cpython-310.pyc
|
|
187
|
+
funvip/src/__pycache__/CAT_V.cpython-39.pyc
|
|
188
|
+
funvip/src/__pycache__/CAT_V_pipe.cpython-39.pyc
|
|
189
|
+
funvip/src/__pycache__/__init__.cpython-310.pyc
|
|
190
|
+
funvip/src/__pycache__/__init__.cpython-39.pyc
|
|
191
|
+
funvip/src/__pycache__/align.cpython-310.pyc
|
|
192
|
+
funvip/src/__pycache__/cluster.cpython-39.pyc
|
|
193
|
+
funvip/src/__pycache__/dataset.cpython-39.pyc
|
|
194
|
+
funvip/src/__pycache__/ext.cpython-310.pyc
|
|
195
|
+
funvip/src/__pycache__/ext.cpython-39.pyc
|
|
196
|
+
funvip/src/__pycache__/hasher.cpython-39.pyc
|
|
197
|
+
funvip/src/__pycache__/initialize.cpython-39.pyc
|
|
198
|
+
funvip/src/__pycache__/io.cpython-310.pyc
|
|
199
|
+
funvip/src/__pycache__/io.cpython-39.pyc
|
|
200
|
+
funvip/src/__pycache__/logger.cpython-39.pyc
|
|
201
|
+
funvip/src/__pycache__/modeltest.cpython-39.pyc
|
|
202
|
+
funvip/src/__pycache__/multigene.cpython-39.pyc
|
|
203
|
+
funvip/src/__pycache__/ncbi.cpython-39.pyc
|
|
204
|
+
funvip/src/__pycache__/opt_generator.cpython-39.pyc
|
|
205
|
+
funvip/src/__pycache__/reporter.cpython-39.pyc
|
|
206
|
+
funvip/src/__pycache__/search.cpython-39.pyc
|
|
207
|
+
funvip/src/__pycache__/tool.cpython-39.pyc
|
|
208
|
+
funvip/src/__pycache__/validation.cpython-39.pyc
|
|
209
|
+
funvip/src/__pycache__/visualize.cpython-39.pyc
|
|
210
|
+
funvip/src/templates/template.html
|
|
183
211
|
funvip/test_dataset/penicillium/Options.config
|
|
184
212
|
funvip/test_dataset/penicillium/preset.yaml
|
|
185
213
|
funvip/test_dataset/penicillium/DB/DB_Penicillium.xlsx
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: FunVIP
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.22.1
|
|
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.78
|
|
|
11
11
|
Requires-Dist: ete3==3.1.3
|
|
12
12
|
Requires-Dist: Cython
|
|
13
13
|
Requires-Dist: dendropy
|
|
14
|
-
Requires-Dist: GenMine
|
|
14
|
+
Requires-Dist: GenMine<1.2.0,>=1.1.0
|
|
15
15
|
Requires-Dist: lxml
|
|
16
16
|
Requires-Dist: matplotlib
|
|
17
17
|
Requires-Dist: numpy
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
[](https://zenodo.org/doi/10.5281/zenodo.10714946)
|
|
2
2
|
|
|
3
|
-
#### This is Beta release.
|
|
3
|
+
#### This is Beta release. Bug reports are welcomed
|
|
4
4
|
|
|
5
5
|
## Scheduling
|
|
6
6
|
### Beta release part 1 (2023 Feburary ~ As paper published, ver 0.3)
|
|
7
|
-
- ~~Will operate normally most of the case~~ We tried our best, but it's still very buggy. Please report bugs for us
|
|
8
7
|
- Will be tested by our lab memebers to fix bugs and advance features
|
|
9
8
|
|
|
10
9
|
### Beta release part 2 (As paper published ~ When pipeline gets stabled, ver 0.4)
|
|
@@ -13,77 +12,75 @@
|
|
|
13
12
|
### Stable release (ver 1.0)
|
|
14
13
|
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
|
|
18
15
|
# FunVIP
|
|
19
16
|
"Fun"gal "V"alidation & "I"dentification "P"ipeline
|
|
20
17
|
|
|
21
|
-
|
|
18
|
+
An automatic tree-based sequence identification and validation pipeline for fungal species
|
|
22
19
|
|
|
23
20
|
- Automatic tree-based identification
|
|
24
21
|
- Works with multigene
|
|
25
22
|
- Data validation algorithm implemented
|
|
26
23
|
|
|
27
24
|
|
|
28
|
-
# See [tutorial](https://github.com/Changwanseo/
|
|
25
|
+
# See [tutorial](https://github.com/Changwanseo/FunVIP/blob/main/tutorial/tutorial.md) for detailed usage
|
|
29
26
|
|
|
30
27
|
|
|
31
28
|
## Requirements
|
|
32
|
-
- Conda environment (See https://www.anaconda.com/products/individual to install)
|
|
29
|
+
- Conda environment (See [https://www.anaconda.com/products/individual](https://conda.io/projects/conda/en/latest/user-guide/install/index.html) to how to install conda environment)
|
|
33
30
|
|
|
34
31
|
<!--
|
|
35
32
|
## Installation with conda (May not work with Linux or Mac)
|
|
36
|
-
1. ```conda create -n
|
|
37
|
-
2. ```conda activate
|
|
38
|
-
3. ```conda install -c cwseo
|
|
39
|
-
4. run ```
|
|
33
|
+
1. ```conda create -n FunVO{ python=3.10```
|
|
34
|
+
2. ```conda activate FunVIP```
|
|
35
|
+
3. ```conda install -c cwseo FunVIP```
|
|
36
|
+
4. run ```FunVIP --test Terrei --email [your email] ``` to check installation
|
|
40
37
|
If this one fails, use next one
|
|
41
38
|
-->
|
|
42
39
|
|
|
43
40
|
## Windows
|
|
44
|
-
1. Install visual c++ [here](https://visualstudio.microsoft.com/
|
|
45
|
-
2. ```conda create -n
|
|
46
|
-
3. ```conda activate
|
|
47
|
-
4. ```pip install
|
|
48
|
-
5. run ```
|
|
41
|
+
1. Install visual c++ [here](https://visualstudio.microsoft.com/visual-cpp-build-tools/)
|
|
42
|
+
2. ```conda create -n FunVIP python>=3.8```
|
|
43
|
+
3. ```conda activate FunVIP```
|
|
44
|
+
4. ```pip install FunVIP```
|
|
45
|
+
5. run ```FunVIP --test Terrei --email [your email] ``` to check installation
|
|
49
46
|
|
|
50
47
|
* For upgrade use this command
|
|
51
|
-
``` pip install
|
|
48
|
+
``` pip install FunVIP --upgrade ```
|
|
52
49
|
|
|
53
50
|
## Linux
|
|
54
|
-
1. ```conda create -n
|
|
55
|
-
2. ```conda activate
|
|
56
|
-
3. ```pip install
|
|
51
|
+
1. ```conda create -n FunVIP python>=3.8```
|
|
52
|
+
2. ```conda activate FunVIP```
|
|
53
|
+
3. ```pip install FunVIP```
|
|
57
54
|
4. ```conda install -c bioconda raxml iqtree modeltest-ng mmseqs2 "blast>=2.12" mafft trimal gblocks fasttree```
|
|
58
|
-
5. run ```
|
|
55
|
+
5. run ```FunVIP --test Terrei --email [your email] ``` to check installation
|
|
59
56
|
|
|
60
57
|
|
|
61
58
|
* For intel mac system, this method probably work, but we couldn't test it because we don't have any intel mac device. We're looking for feedbacks in intel mac
|
|
62
59
|
|
|
63
60
|
## Apple Silicon Mac
|
|
64
|
-
1. ```CONDA_SUBDIR=osx-64 conda create -n
|
|
65
|
-
2. ```conda activate
|
|
61
|
+
1. ```CONDA_SUBDIR=osx-64 conda create -n FunVIP python>=3.8```
|
|
62
|
+
2. ```conda activate FunVIP```
|
|
66
63
|
3. ```conda config --env --set subdir osx-64```
|
|
67
64
|
4. ```conda install pyqt```
|
|
68
|
-
5. ```pip install
|
|
65
|
+
5. ```pip install FunVIP```
|
|
69
66
|
6. ```conda install -c bioconda raxml iqtree mmseqs2 "blast>=2.12" mafft trimal gblocks fasttree```
|
|
70
|
-
7. run ```
|
|
67
|
+
7. run ```FunVIP --test Terrei --email [your email] ``` to check installation
|
|
71
68
|
|
|
72
|
-
## Installation from source (For developers)
|
|
69
|
+
## Installation from source (For developers and core users)
|
|
73
70
|
* this is for developmental steps
|
|
74
|
-
1. ```git clone https://github.com/Changwanseo/
|
|
75
|
-
2. Move to ```~/
|
|
76
|
-
3. ```conda create -n
|
|
77
|
-
4. ```conda activate
|
|
71
|
+
1. ```git clone https://github.com/Changwanseo/FunVIP.git```
|
|
72
|
+
2. Move to ```~/FunVIP```
|
|
73
|
+
3. ```conda create -n FunVIP python=3.10```
|
|
74
|
+
4. ```conda activate FunVIP```
|
|
78
75
|
5. ```pip install ./```
|
|
79
|
-
6. run ```
|
|
76
|
+
6. run ```FunVIP --test Terrei --email [your email]``` to check installation
|
|
80
77
|
|
|
81
78
|
|
|
82
79
|
## Usage
|
|
83
|
-
```
|
|
80
|
+
```FunVIP --db {Your database file} --query {Your query file} --email {Your email} --gene {Your genes} --preset {fast or accurate}```
|
|
84
81
|
|
|
85
82
|
### Example
|
|
86
|
-
```
|
|
83
|
+
```FunVIP --db Penicillium.xlsx --query Query.xlsx --email {Your email} --gene ITS BenA RPB2 CaM --preset fast```
|
|
87
84
|
|
|
88
85
|
|
|
89
86
|
\* See documentation for detailed usage
|
|
@@ -101,12 +98,12 @@ If this one fails, use next one
|
|
|
101
98
|
|
|
102
99
|
|
|
103
100
|
## How to make database?
|
|
104
|
-
|
|
101
|
+

|
|
105
102
|
|
|
106
103
|
|
|
107
104
|
|
|
108
105
|
|
|
109
|
-
[See example database here](https://github.com/Changwanseo/
|
|
106
|
+
[See example database here](https://github.com/Changwanseo/FunVIP/blob/main/funvip/test_dataset/penicillium/DB/DB_Penicillium.xlsx)
|
|
110
107
|
|
|
111
108
|
|
|
112
109
|
<!--##
|
|
@@ -132,7 +129,7 @@ tabular (```.xlsx```, ```.csv```, ```.parquet```, ```.ftr```) form
|
|
|
132
129
|
* ```/Tree/{section}_{gene}.svg``` : Final collapsed tree in svg format. Can be edited in vector graphics programs, or in powerpoint (by ungroup)
|
|
133
130
|
* ```/Tree/{section}_{gene}_original.svg ``` : Uncollapsed tree for inspection
|
|
134
131
|
|
|
135
|
-
## How does
|
|
132
|
+
## How does FunVIP work?
|
|
136
133
|

|
|
137
134
|
|
|
138
135
|
|
|
@@ -10,7 +10,6 @@ def main():
|
|
|
10
10
|
from funvip.src import validate_input
|
|
11
11
|
from funvip.src import modeltest
|
|
12
12
|
from funvip.src import concatenate
|
|
13
|
-
from funvip.src import patch
|
|
14
13
|
from funvip.src import reporter
|
|
15
14
|
from funvip.src import tool
|
|
16
15
|
from funvip.src import save
|
|
@@ -84,6 +83,8 @@ def main():
|
|
|
84
83
|
path = var["path"]
|
|
85
84
|
if "model_dict" in var:
|
|
86
85
|
model_dict = var["model_dict"]
|
|
86
|
+
if "GenMine_flag" in var:
|
|
87
|
+
GenMine_flag = var["GenMine_flag"]
|
|
87
88
|
|
|
88
89
|
# To deal with location changes when rerun
|
|
89
90
|
path_root = f"{os.getcwd()}/{opt.runname}"
|
|
File without changes
|
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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")
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<title>Identification Report</title>
|
|
5
|
+
</head>
|
|
6
|
+
<body>
|
|
7
|
+
<ul id="navigation">
|
|
8
|
+
{% for item in navigation %}
|
|
9
|
+
<li><a href= "{{ item.href }}" > {{ item.caption }} </a></li>
|
|
10
|
+
{% endfor %}
|
|
11
|
+
</ul>
|
|
12
|
+
|
|
13
|
+
<h1>Identification Result</h1>
|
|
14
|
+
{{ table | safe }}
|
|
15
|
+
{# a comment #}
|
|
16
|
+
</body>
|
|
17
|
+
</html>
|