| Next changeset 1:ff68835adb2b (2025-10-20) |
|
Commit message:
planemo upload for repository https://github.com/Onnodg/Naturalis_NLOOR/tree/main/NLOOR_scripts/process_clusters_tool commit c944fd5685f295acba06679e85b67973c173b137 |
|
added:
__init__.py __pycache__/__init__.cpython-312.pyc __pycache__/__init__.cpython-313.pyc __pycache__/cdhit_analysis.cpython-312.pyc __pycache__/cdhit_analysis.cpython-313.pyc cdhit_analysis.py cdhit_analysis.xml test-data/29-test.clstr.txt test-data/__pycache__/test_cdhit_analysis.cpython-312-pytest-8.4.1.pyc test-data/__pycache__/test_data_generator.cpython-312-pytest-8.4.2.pyc test-data/count_out.txt test-data/empty_cluster.clstr test-data/evalue_out.png test-data/evalue_out.txt test-data/header_anno.out test-data/header_anno_29_test.xlsx test-data/header_anno_cluster_test.xlsx test-data/header_anno_excel.xlsx test-data/header_anno_genbank_test.xlsx test-data/header_anno_test.out test-data/input1.clstr test-data/input2_test.clstr.txt test-data/malformed_cluster.clstr test-data/processed.out test-data/processed.xlsx test-data/sim_out.png test-data/sim_out.txt test-data/simple_cluster.clstr test-data/taxa_out.clstr test-data/taxa_out.xlsx test-data/test2_evalue_out.png test-data/test2_evalue_out.txt test-data/test2_sim_extra_out.png test-data/test2_sim_extra_out.txt test-data/test2_sim_out.png test-data/test2_sim_out.txt test-data/test_2count_extra_out.txt test-data/test_2count_out.txt test-data/test_2processed.xlsx test-data/test_2processed_extra.xlsx test-data/test_2taxa_extra_out.xlsx test-data/test_2taxa_out.xlsx test-data/test_count.txt test-data/test_evalue.txt test-data/test_processed_taxa.xlsx test-data/test_pytest.xlsx test-data/test_similarity.txt test-data/test_taxa_clusters.xlsx tests/__pycache__/pytest3.cpython-313-pytest-8.4.2.pyc tests/__pycache__/test_cdhit_analysis.cpython-312-pytest-8.4.2.pyc tests/__pycache__/test_cdhit_analysis.cpython-313-pytest-8.4.2.pyc tests/test_cdhit_analysis.py |
| b |
| diff -r 000000000000 -r 00d56396b32a __pycache__/__init__.cpython-312.pyc |
| b |
| Binary file __pycache__/__init__.cpython-312.pyc has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a __pycache__/__init__.cpython-313.pyc |
| b |
| Binary file __pycache__/__init__.cpython-313.pyc has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a __pycache__/cdhit_analysis.cpython-312.pyc |
| b |
| Binary file __pycache__/cdhit_analysis.cpython-312.pyc has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a __pycache__/cdhit_analysis.cpython-313.pyc |
| b |
| Binary file __pycache__/cdhit_analysis.cpython-313.pyc has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a cdhit_analysis.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cdhit_analysis.py Tue Oct 14 09:09:46 2025 +0000 |
| [ |
| b'@@ -0,0 +1,787 @@\n+#!/usr/bin/env python3\n+\n+import argparse\n+import os\n+import re\n+from collections import Counter, defaultdict\n+from math import sqrt\n+import pandas as pd\n+import matplotlib\n+\n+matplotlib.use(\'Agg\') # Non-interactive backend for Galaxy\n+import matplotlib.pyplot as plt\n+\n+"""\n+This script processes cluster output files from cd-hit-est for use in Galaxy.\n+It extracts cluster information, associates taxa and e-values from annotation files,\n+performs statistical calculations, and generates text and plot outputs\n+summarizing similarity and taxonomic distributions.\n+\n+\n+Main steps:\n+1. Parse cd-hit-est cluster file and (optional) annotation file.\n+2. Process each cluster to extract similarity, taxa, and e-value information.\n+3. Aggregate results across clusters.\n+4. Generate requested outputs: text summaries, plots, and Excel reports.\n+\n+\n+Note: Uses a non-interactive matplotlib backend (Agg) for compatibility with Galaxy.\n+"""\n+\n+\n+def parse_arguments(args_list=None):\n+ """Parse command-line arguments for the script."""\n+ parser = argparse.ArgumentParser(\n+ description=\'Create taxa analysis from cd-hit cluster files\')\n+ parser.add_argument(\'--input_cluster\', type=str, required=True,\n+ help=\'Input cluster file (.clstr)\')\n+ parser.add_argument(\'--input_annotation\', type=str, required=False,\n+ help=\'Input annotation file (.out)\')\n+\n+ # Galaxy output files\n+ parser.add_argument(\'--output_similarity_txt\', type=str,\n+ help=\'Similarity text output file\')\n+ parser.add_argument(\'--output_similarity_plot\', type=str,\n+ help=\'Similarity plot output file\')\n+ parser.add_argument(\'--output_evalue_txt\', type=str,\n+ help=\'E-value text output file\')\n+ parser.add_argument(\'--output_evalue_plot\', type=str,\n+ help=\'E-value plot output file\')\n+ parser.add_argument(\'--output_count\', type=str,\n+ help=\'Count summary output file\')\n+ parser.add_argument(\'--output_taxa_clusters\', type=str,\n+ help=\'Taxa per cluster output file\')\n+ parser.add_argument(\'--output_taxa_processed\', type=str,\n+ help=\'Processed taxa output file\')\n+ # Plot parameters\n+ parser.add_argument(\'--simi_plot_y_min\', type=float, default=95.0,\n+ help=\'Minimum value of the y-axis in the similarity plot\')\n+ parser.add_argument(\'--simi_plot_y_max\', type=float, default=100.0,\n+ help=\'Maximum value of the y-axis in the similarity plot\')\n+\n+ # Uncertain taxa configuration\n+ parser.add_argument(\'--uncertain_taxa_use_ratio\', type=float, default=0.5,\n+ help=\'Ratio at which uncertain taxa count toward the correct taxa\')\n+ parser.add_argument(\'--min_to_split\', type=float, default=0.45,\n+ help=\'Minimum percentage for taxonomic split\')\n+ parser.add_argument(\'--min_count_to_split\', type=int, default=10,\n+ help=\'Minimum count for taxonomic split\')\n+\n+ # Processing options\n+ parser.add_argument(\'--show_unannotated_clusters\', action=\'store_true\', default=False,\n+ help=\'Show unannotated clusters in output\')\n+ parser.add_argument(\'--make_taxa_in_cluster_split\', action=\'store_true\', default=False,\n+ help=\'Split clusters with multiple taxa\')\n+ parser.add_argument(\'--print_empty_files\', action=\'store_true\', default=False,\n+ help=\'Print messages about empty annotation files\')\n+\n+ return parser.parse_args(args_list)\n+\n+\n+# Color map for plots\n+COLORMAP = [\n+# List of RGBA tuples for bar coloring in plots\n+ (0.12156862745098039, 0.4666666666666667, 0.7058823529411765, 1.0),\n+ (1.0, 0.4980392156862745, 0.054901960784313725, 1.0),\n+ (0.17254901960784313, 0.6274509803921569, 0.17254901960784313, 1.0),\n+ (0.8392156862745098, 0.15'..b' counts, bins, _ = plt.hist(data, bins=50, range=(0, 1))\n+ plt.close()\n+ return counts, bins\n+\n+def create_evalue_plot_test(evalue_list, unannotated_list, output_file):\n+ """\n+ Create and save an E-value distribution plot, returning the computed histogram data.\n+\n+ This function visualizes the frequency distribution of E-values from BLAST or\n+ annotation results. It saves the plot to the specified output file and returns\n+ the histogram data (counts and bins) for testing with pytests.\n+\n+ :param evalue_list: List of numeric E-values to plot\n+ :type evalue_list: list[float | int]\n+ :param unannotated_list: Optional list of E-values for unannotated sequences.\n+ :type unannotated_list: list\n+ :param output_file: Path where the histogram image will be saved.\n+ :type output_file: str\n+\n+ :return: Tuple containing:\n+ - **counts** (*numpy.ndarray*): Frequency counts per histogram bin.\n+ - **bins** (*numpy.ndarray*): Histogram bin edges.\n+ Returns ``(None, None)`` if no valid data was available for plotting.\n+ :rtype: tuple[numpy.ndarray, numpy.ndarray] | tuple[None, None]\n+ """\n+ counts, bins = prepare_evalue_histogram(evalue_list, unannotated_list)\n+ if counts is None:\n+ return None, None\n+\n+ plt.hist([ev for ev in evalue_list if isinstance(ev, (int, float)) and ev > 0],\n+ bins=50, range=(0, 1))\n+ plt.xlabel("E-value")\n+ plt.ylabel("Frequency")\n+ plt.title("E-value Distribution")\n+ plt.savefig(output_file)\n+ plt.close()\n+ return counts, bins\n+\n+\n+def main(arg_list=None):\n+ """\n+ Main entry point of the script.\n+\n+ Parses arguments, processes cd-hit cluster data, aggregates results,\n+ and generates requested outputs (text summaries, plots, and Excel reports).\n+\n+ :param arg_list: List of arguments for testing purposes.\n+ :type arg_list: list, optional\n+ :return: None\n+ :rtype: None\n+ """\n+ args = parse_arguments(arg_list)\n+ # Parse cluster file\n+ clusters = parse_cluster_file(\n+ args.input_cluster,\n+ args.input_annotation,\n+ args.print_empty_files\n+ )\n+ # Process each cluster\n+ all_eval_data = [0] # For full sample statistics\n+ all_simi_data = []\n+ cluster_eval_lengths = []\n+ cluster_simi_lengths = []\n+ cluster_data_list = []\n+\n+ for cluster in clusters:\n+ eval_list, simi_list, taxa_dict = process_cluster_data(cluster)\n+ cluster_data_list.append((eval_list, simi_list, taxa_dict))\n+ # Collect data for full sample plots\n+ all_eval_data[0] += eval_list[0]\n+ if len(eval_list) > 1:\n+ all_eval_data.extend(sorted(eval_list[1:]))\n+ cluster_eval_lengths.append(len(eval_list[1:]))\n+\n+ if simi_list:\n+ all_simi_data.extend(sorted(simi_list, reverse=True))\n+ cluster_simi_lengths.append(len(simi_list))\n+\n+ # Generate outputs based on what was requested\n+ if args.output_similarity_txt:\n+ write_similarity_output(all_simi_data, args.output_similarity_txt)\n+\n+ if args.output_similarity_plot and all_simi_data:\n+ create_similarity_plot(all_simi_data, cluster_simi_lengths, args, args.output_similarity_plot)\n+\n+ if args.output_evalue_txt:\n+ write_evalue_output(all_eval_data, args.output_evalue_txt)\n+\n+ if args.output_evalue_plot and len(all_eval_data) > 1:\n+ create_evalue_plot(all_eval_data, cluster_eval_lengths, args.output_evalue_plot)\n+\n+ if args.output_count:\n+ write_count_output(all_eval_data, cluster_data_list, args.output_count)\n+\n+ if args.output_taxa_clusters:\n+ write_taxa_clusters_output(cluster_data_list, args.output_taxa_clusters)\n+\n+ if args.output_taxa_processed:\n+ write_taxa_processed_output(cluster_data_list, args, args.output_taxa_processed)\n+\n+ print(f"Processing complete. Processed {len(clusters)} clusters.")\n+\n+\n+if __name__ == "__main__":\n+ main()\n\\ No newline at end of file\n' |
| b |
| diff -r 000000000000 -r 00d56396b32a cdhit_analysis.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cdhit_analysis.xml Tue Oct 14 09:09:46 2025 +0000 |
| [ |
| b'@@ -0,0 +1,243 @@\n+<tool id="cdhit_cluster_analysis" name="CD-HIT Cluster Analysis" version="1.0.0">\n+ <description>Analyze CD-HIT clustering results with taxonomic annotation</description>\n+\n+ <requirements>\n+ <requirement type="package" version="3.12.3">python</requirement>\n+ <requirement type="package" version="3.10.6">matplotlib</requirement>\n+ <requirement type="package" version="2.3.2">pandas</requirement>\n+ <requirement type="package" version="3.1.5">openpyxl</requirement>\n+ </requirements>\n+\n+ <command detect_errors="exit_code"><![CDATA[\n+ python \'$__tool_directory__/cdhit_analysis.py\'\n+ --input_cluster \'$input_cluster\'\n+ --input_annotation \'$input_annotation\'\n+\n+ #if $output_options.similarity_output:\n+ --output_similarity_txt \'$output_similarity_txt\'\n+ --output_similarity_plot \'$output_similarity_plot\'\n+ #end if\n+ #if $output_options.evalue_output:\n+ --output_evalue_txt \'$output_evalue_txt\'\n+ --output_evalue_plot \'$output_evalue_plot\'\n+ #end if\n+ #if $output_options.count_output:\n+ --output_count \'$output_count\'\n+ #end if\n+ #if $output_options.taxa_output:\n+ --output_taxa_clusters \'$output_taxa_clusters\'\n+ --output_taxa_processed \'$output_taxa_processed\'\n+ #end if\n+\n+ --simi_plot_y_min \'$plot_params.simi_plot_y_min\'\n+ --simi_plot_y_max \'$plot_params.simi_plot_y_max\'\n+\n+ --uncertain_taxa_use_ratio \'$taxa_params.uncertain_taxa_use_ratio\'\n+ --min_to_split \'$taxa_params.min_to_split\'\n+ --min_count_to_split \'$taxa_params.min_count_to_split\'\n+\n+ #if $processing_options.show_unannotated_clusters:\n+ --show_unannotated_clusters\n+ #end if\n+ #if $processing_options.make_taxa_in_cluster_split:\n+ --make_taxa_in_cluster_split\n+ #end if\n+ #if $processing_options.print_empty_files:\n+ --print_empty_files\n+ #end if\n+ ]]></command>\n+\n+ <inputs>\n+ <param name="input_cluster" type="data" format="txt" label="CD-HIT cluster file (.clstr/.txt)"\n+ help="Output cluster file from cd-hit-est" />\n+ <param name="input_annotation" type="data" format="xlsx"\n+ label="Annotation file"\n+ help="Excel workfile with sequence annotations (header, evalue, taxa)" />\n+\n+ <section name="output_options" title="Output Options" expanded="true">\n+ <param name="similarity_output" type="boolean" truevalue="true" falsevalue="false"\n+ checked="true" label="Create similarity output"\n+ help="Generate similarity analysis and plots" />\n+ <param name="evalue_output" type="boolean" truevalue="true" falsevalue="false"\n+ checked="true" label="Create E-value output"\n+ help="Generate E-value analysis and plots" />\n+ <param name="count_output" type="boolean" truevalue="true" falsevalue="false"\n+ checked="true" label="Create count output"\n+ help="Generate read count summaries" />\n+ <param name="taxa_output" type="boolean" truevalue="true" falsevalue="false"\n+ checked="true" label="Create taxa output"\n+ help="Generate taxonomic analysis" />\n+ </section>\n+\n+ <section name="plot_params" title="Plot Parameters" expanded="false">\n+ <param name="simi_plot_y_min" type="float" value="95.0" min="0" max="100"\n+ label="Similarity plot Y-axis minimum"\n+ help="Minimum value for similarity plot Y-axis" />\n+ <param name="simi_plot_y_max" type="float" value="100.0" min="0" max="100"\n+ label="Similarity plot Y-axis maximum"\n+ help="Maximum value for similarity plot Y-axis" />\n+ </section>\n+\n+ <section name="taxa_params" titl'..b'put_taxa_processed" file="test_2processed.xlsx" decompress="true"/>\n+ </test>\n+ <test expect_num_outputs="5">\n+ <param name="input_cluster" value="input2_test.clstr.txt" />\n+ <param name="input_annotation" value="header_anno_excel.xlsx" />\n+ <section name="output_options">\n+ <param name="similarity_output" value="true" />\n+ <param name="count_output" value="true" />\n+ <param name="taxa_output" value="true" />\n+ <param name="evalue_output" value="false" />\n+ </section>\n+ <section name="processing_options">\n+ <param name="show_unnanotated_clusters" value="true"/>\n+ <param name="make_taxa_in_cluster_split" value="true"/>\n+ <param name="print_empty_files" value="true"/>\n+ </section>\n+ <section name="taxa_params">\n+ <param name="uncertain_taxa_use_ratio" value="0.6"/>\n+ <param name="min_to_split" value="0.6"/>\n+ <param name="min_count_to_split" value="6"/>\n+ </section>\n+ <section name="plot_params" title="Plot Parameters" expanded="false">\n+ <param name="simi_plot_y_min" value="0.4" />\n+ <param name="simi_plot_y_max" value="0.4" />\n+ </section>\n+ <output name="output_similarity_txt" file="test2_sim_extra_out.txt" />\n+ <output name="output_similarity_plot" file="test2_sim_extra_out.png" compare="sim_size"/>\n+ <output name="output_count" file="test_2count_extra_out.txt" />\n+ <output name="output_taxa_clusters" file="test_2taxa_extra_out.xlsx" decompress="true"/>\n+ <output name="output_taxa_processed" file="test_2processed_extra.xlsx" decompress="true"/>\n+ </test>\n+ </tests>\n+\n+ <help><![CDATA[\n+**CD-HIT Cluster Analysis**\n+\n+This tool analyzes CD-HIT clustering results and provides various outputs including taxonomic analysis, similarity analysis, E-value analysis, and read count summaries.\n+\n+**Input Files:**\n+\n+1. **CD-HIT cluster file (.txt/.clstr)**: Required. The cluster file output from cd-hit-est containing clustered sequences.\n+\n+2. **Annotation file (.xlsx)**: Tab-separated file containing sequence annotations with columns:\n+\n+**Output Options:**\n+\n+- **Similarity output**: Creates similarity analysis with plots and text files showing intra-cluster similarity distributions\n+- **E-value output**: Creates E-value analysis with plots and text files showing E-value distributions\n+- **Count output**: Creates summary tables with annotated/unannotated read counts per cluster\n+- **Taxa output**: Creates taxonomic analysis determining the most likely taxa for each cluster\n+\n+**Parameters:**\n+\n+- **Plot Parameters**: Control the size of similarity plots (X and Y-axis limits)\n+- **Taxonomic Analysis Parameters**: Control how uncertain taxa are handled and when clusters are split\n+- **Processing Options**: Control display of unannotated clusters and verbose output\n+\n+**Output Files:**\n+\n+- **Similarity data**: Tab-separated file with similarity statistics\n+- **Similarity plot**: PNG image showing similarity distribution across clusters\n+- **E-value data**: Tab-separated file with E-value statistics\n+- **E-value plot**: PNG image showing E-value distribution\n+- **Count summary**: Tab-separated file with read counts per cluster\n+- **Raw taxa per cluster**: Excel file showing all taxa found in each cluster\n+- **Processed taxa**: Excel file with clusters where a taxon was assigned\n+\n+**Note**: The tool expects that sequence counts are included in the cluster file headers in the format "header(count)".\n+\n+**Credits**\n+Authors = Onno de Gorter, 2025.\n+Based on a script by Nick Kortleven, translated, modified and wrapped by Onno de Gorter,\n+Developed for the New light on old remedies project, a PhD research by Anja Fischer\n+ ]]></help>\n+</tool>\n\\ No newline at end of file\n' |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/29-test.clstr.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/29-test.clstr.txt Tue Oct 14 09:09:46 2025 +0000 |
| b |
| b'@@ -0,0 +1,116 @@\n+>Cluster 0\n+0\t90nt, >M01687:476:000000000-LL5F5:1:1102:8813:1648_CONS(365)... at 1:90:1:90/+/98.89%\n+1\t89nt, >M01687:476:000000000-LL5F5:1:1102:23329:6743_CONS(2)... at 1:89:1:90/+/98.88%\n+2\t89nt, >M01687:476:000000000-LL5F5:1:1102:22397:8283_CONS(1)... at 1:89:1:90/+/98.88%\n+3\t90nt, >M01687:476:000000000-LL5F5:1:1101:12981:18414_CONS(1)... at 1:90:1:90/+/97.78%\n+4\t89nt, >M01687:476:000000000-LL5F5:1:2115:14293:1261_CONS(1)... at 1:89:1:90/+/98.88%\n+5\t90nt, >M01687:476:000000000-LL5F5:1:2114:23821:14217_CONS(1)... at 1:90:1:90/+/97.78%\n+6\t90nt, >M01687:476:000000000-LL5F5:1:2113:8900:5403_CONS(2)... at 1:90:1:90/+/97.78%\n+7\t90nt, >M01687:476:000000000-LL5F5:1:2113:19934:7483_CONS(1)... at 1:90:1:90/+/97.78%\n+8\t90nt, >M01687:476:000000000-LL5F5:1:2113:27014:9568_CONS(1)... at 1:90:1:90/+/97.78%\n+9\t89nt, >M01687:476:000000000-LL5F5:1:2111:11120:19867_CONS(2)... at 1:89:1:90/+/98.88%\n+10\t89nt, >M01687:476:000000000-LL5F5:1:2110:14480:1097_CONS(1)... at 1:89:1:89/+/97.75%\n+11\t90nt, >M01687:476:000000000-LL5F5:1:2108:12471:11056_CONS(1)... at 1:90:1:90/+/97.78%\n+12\t89nt, >M01687:476:000000000-LL5F5:1:2106:6399:13942_CONS(1)... at 1:89:1:90/+/97.75%\n+13\t90nt, >M01687:476:000000000-LL5F5:1:2106:7157:21740_CONS(2)... at 1:90:1:90/+/97.78%\n+14\t90nt, >M01687:476:000000000-LL5F5:1:2107:12198:7133_CONS(1)... at 1:90:1:90/+/97.78%\n+15\t90nt, >M01687:476:000000000-LL5F5:1:2107:23364:14939_CONS(1)... at 1:90:1:90/+/97.78%\n+16\t90nt, >M01687:476:000000000-LL5F5:1:2104:18884:14966_CONS(1)... at 1:90:1:90/+/97.78%\n+17\t90nt, >M01687:476:000000000-LL5F5:1:2105:13735:5005_CONS(2)... at 1:90:1:90/+/97.78%\n+18\t90nt, >M01687:476:000000000-LL5F5:1:2102:25473:9203_CONS(1)... at 1:90:1:90/+/97.78%\n+19\t90nt, >M01687:476:000000000-LL5F5:1:2103:18560:6298_CONS(1)... at 1:90:1:90/+/97.78%\n+20\t88nt, >M01687:476:000000000-LL5F5:1:2116:7379:11104_CONS(1)... at 1:88:1:89/+/97.73%\n+21\t90nt, >M01687:476:000000000-LL5F5:1:2116:20472:23674_CONS(1)... at 1:90:1:90/+/97.78%\n+22\t46nt, >M01687:476:000000000-LL5F5:1:1114:19619:17564_CONS(1)... at 1:46:1:46/+/100.00%\n+23\t90nt, >M01687:476:000000000-LL5F5:1:1113:27031:6298_CONS(1)... at 1:90:1:90/+/97.78%\n+24\t90nt, >M01687:476:000000000-LL5F5:1:1113:10450:12029_CONS(1)... at 1:90:1:90/+/97.78%\n+25\t90nt, >M01687:476:000000000-LL5F5:1:1113:24917:23549_CONS(1)... at 1:90:1:90/+/97.78%\n+26\t89nt, >M01687:476:000000000-LL5F5:1:1112:22792:12782_CONS(1)... at 1:89:1:90/+/98.88%\n+27\t90nt, >M01687:476:000000000-LL5F5:1:1111:27666:20157_CONS(1)... at 1:90:1:90/+/97.78%\n+28\t90nt, >M01687:476:000000000-LL5F5:1:1110:19793:5429_CONS(1)... at 1:90:1:90/+/97.78%\n+29\t90nt, >M01687:476:000000000-LL5F5:1:1109:16190:7357_CONS(1)... at 1:90:1:90/+/97.78%\n+30\t223nt, >M01687:476:000000000-LL5F5:1:1107:11168:7701_CONS(1)... *\n+31\t89nt, >M01687:476:000000000-LL5F5:1:1107:11260:19063_CONS(1)... at 1:89:2:90/+/98.88%\n+32\t91nt, >M01687:476:000000000-LL5F5:1:1106:23871:2658_CONS(1)... at 1:91:1:90/+/97.80%\n+33\t90nt, >M01687:476:000000000-LL5F5:1:1106:23295:14677_CONS(1)... at 1:90:1:90/+/97.78%\n+34\t90nt, >M01687:476:000000000-LL5F5:1:1106:24932:15730_CONS(1)... at 1:90:1:90/+/97.78%\n+35\t91nt, >M01687:476:000000000-LL5F5:1:1103:26333:15920_CONS(1)... at 2:91:1:90/+/97.80%\n+36\t90nt, >M01687:476:000000000-LL5F5:1:1103:4781:21073_CONS(1)... at 1:90:1:90/+/97.78%\n+37\t90nt, >M01687:476:000000000-LL5F5:1:1118:7252:16681_CONS(1)... at 1:90:1:90/+/97.78%\n+38\t90nt, >M01687:476:000000000-LL5F5:1:1117:21225:8122_CONS(1)... at 1:90:1:90/+/97.78%\n+39\t89nt, >M01687:476:000000000-LL5F5:1:2118:2579:13588_CONS(1)... at 1:89:1:90/+/98.88%\n+40\t90nt, >M01687:476:000000000-LL5F5:1:2119:23468:21624_CONS(1)... at 1:90:1:90/+/97.78%\n+>Cluster 1\n+0\t181nt, >M01687:476:000000000-LL5F5:1:2102:18967:5026_PairEnd(1)... *\n+>Cluster 2\n+0\t91nt, >M01687:476:000000000-LL5F5:1:2108:17627:10678_CONS(1)... *\n+>Cluster 3\n+0\t90nt, >M01687:476:000000000-LL5F5:1:1101:13606:4665_CONS(49)... *\n+1\t90nt, >M01687:476:000000000-LL5F5:1:2102:17942:13728_CONS(1)... at 1:90:1:90/+/98.'..b'7:476:000000000-LL5F5:1:1111:19965:15266_CONS(1)... at 1:90:1:90/+/98.89%\n+3\t90nt, >M01687:476:000000000-LL5F5:1:1107:17618:13842_CONS(1)... at 1:90:1:90/+/98.89%\n+>Cluster 4\n+0\t90nt, >M01687:476:000000000-LL5F5:1:2106:11309:16764_CONS(1)... *\n+>Cluster 5\n+0\t89nt, >M01687:476:000000000-LL5F5:1:1102:8237:4093_CONS(164)... *\n+1\t89nt, >M01687:476:000000000-LL5F5:1:2115:4173:9615_CONS(1)... at 1:89:1:89/+/98.88%\n+2\t89nt, >M01687:476:000000000-LL5F5:1:2112:10233:6066_CONS(2)... at 1:89:1:89/+/98.88%\n+3\t89nt, >M01687:476:000000000-LL5F5:1:2110:19366:13444_CONS(1)... at 1:89:1:89/+/98.88%\n+4\t88nt, >M01687:476:000000000-LL5F5:1:2107:17376:5785_CONS(1)... at 1:88:1:89/+/100.00%\n+5\t89nt, >M01687:476:000000000-LL5F5:1:2105:13892:8960_CONS(1)... at 1:89:1:89/+/98.88%\n+6\t88nt, >M01687:476:000000000-LL5F5:1:1119:14291:7649_CONS(1)... at 1:88:1:89/+/100.00%\n+7\t89nt, >M01687:476:000000000-LL5F5:1:1111:26431:5086_CONS(1)... at 1:89:1:89/+/98.88%\n+8\t88nt, >M01687:476:000000000-LL5F5:1:1109:10397:1947_CONS(1)... at 1:88:1:88/+/98.86%\n+9\t89nt, >M01687:476:000000000-LL5F5:1:1117:16805:11449_CONS(1)... at 1:89:1:89/+/98.88%\n+10\t89nt, >M01687:476:000000000-LL5F5:1:2119:4216:6805_CONS(1)... at 1:89:1:89/+/98.88%\n+11\t89nt, >M01687:476:000000000-LL5F5:1:2119:20434:13913_CONS(1)... at 1:89:1:89/+/98.88%\n+>Cluster 6\n+0\t88nt, >M01687:476:000000000-LL5F5:1:2102:3076:18608_CONS(1)... *\n+>Cluster 7\n+0\t79nt, >M01687:476:000000000-LL5F5:1:1102:15796:4670_CONS(72)... *\n+1\t79nt, >M01687:476:000000000-LL5F5:1:2110:17405:16879_CONS(2)... at 1:79:1:79/+/98.73%\n+2\t79nt, >M01687:476:000000000-LL5F5:1:2106:25640:19275_CONS(1)... at 1:79:1:79/+/98.73%\n+3\t79nt, >M01687:476:000000000-LL5F5:1:2107:20039:2082_CONS(1)... at 1:79:1:79/+/98.73%\n+4\t79nt, >M01687:476:000000000-LL5F5:1:2102:9297:20420_CONS(1)... at 1:79:1:79/+/98.73%\n+5\t79nt, >M01687:476:000000000-LL5F5:1:1108:21080:8455_CONS(1)... at 1:79:1:79/+/98.73%\n+6\t79nt, >M01687:476:000000000-LL5F5:1:1118:24896:9405_CONS(1)... at 1:79:1:79/+/98.73%\n+>Cluster 8\n+0\t79nt, >M01687:476:000000000-LL5F5:1:2111:13737:11786_CONS(1)... *\n+>Cluster 9\n+0\t74nt, >M01687:476:000000000-LL5F5:1:2112:29673:13958_CONS(8)... at 1:74:1:75/+/100.00%\n+1\t75nt, >M01687:476:000000000-LL5F5:1:1111:12124:7307_CONS(1)... *\n+>Cluster 10\n+0\t74nt, >M01687:476:000000000-LL5F5:1:1101:5199:14638_CONS(3)... *\n+>Cluster 11\n+0\t69nt, >M01687:476:000000000-LL5F5:1:1113:12163:20390_CONS(2)... *\n+>Cluster 12\n+0\t66nt, >M01687:476:000000000-LL5F5:1:2110:12902:11860_CONS(1)... *\n+>Cluster 13\n+0\t65nt, >M01687:476:000000000-LL5F5:1:2109:21225:22693_CONS(1)... *\n+>Cluster 14\n+0\t65nt, >M01687:476:000000000-LL5F5:1:1119:7365:12136_CONS(1)... *\n+>Cluster 15\n+0\t59nt, >M01687:476:000000000-LL5F5:1:2113:21521:9151_CONS(5)... *\n+>Cluster 16\n+0\t58nt, >M01687:476:000000000-LL5F5:1:1102:25400:11650_CONS(20)... *\n+1\t58nt, >M01687:476:000000000-LL5F5:1:2105:5136:6633_CONS(1)... at 1:58:1:58/+/98.28%\n+>Cluster 17\n+0\t56nt, >M01687:476:000000000-LL5F5:1:1102:17745:8732_CONS(32)... *\n+1\t56nt, >M01687:476:000000000-LL5F5:1:1101:25192:18501_CONS(1)... at 1:56:1:56/+/98.21%\n+2\t56nt, >M01687:476:000000000-LL5F5:1:2112:27488:19524_CONS(2)... at 1:56:1:56/+/98.21%\n+3\t56nt, >M01687:476:000000000-LL5F5:1:2111:18138:6590_CONS(1)... at 1:56:1:56/+/98.21%\n+4\t56nt, >M01687:476:000000000-LL5F5:1:2108:16126:4049_CONS(1)... at 1:56:1:56/+/98.21%\n+5\t56nt, >M01687:476:000000000-LL5F5:1:1117:20192:4344_CONS(1)... at 1:56:1:56/+/98.21%\n+>Cluster 18\n+0\t56nt, >M01687:476:000000000-LL5F5:1:2111:4483:9143_CONS(5)... *\n+>Cluster 19\n+0\t56nt, >M01687:476:000000000-LL5F5:1:2110:23335:24088_CONS(3)... *\n+1\t56nt, >M01687:476:000000000-LL5F5:1:2103:19889:1427_CONS(2)... at 1:56:1:56/+/98.21%\n+>Cluster 20\n+0\t56nt, >M01687:476:000000000-LL5F5:1:1113:14234:20635_CONS(1)... *\n+>Cluster 21\n+0\t56nt, >M01687:476:000000000-LL5F5:1:1117:24310:10005_CONS(1)... *\n+>Cluster 22\n+0\t48nt, >M01687:476:000000000-LL5F5:1:2115:7191:13204_CONS(4)... *\n+>Cluster 23\n+0\t42nt, >M01687:476:000000000-LL5F5:1:1114:12212:6093_CONS(1)... *\n' |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/__pycache__/test_cdhit_analysis.cpython-312-pytest-8.4.1.pyc |
| b |
| Binary file test-data/__pycache__/test_cdhit_analysis.cpython-312-pytest-8.4.1.pyc has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/__pycache__/test_data_generator.cpython-312-pytest-8.4.2.pyc |
| b |
| Binary file test-data/__pycache__/test_data_generator.cpython-312-pytest-8.4.2.pyc has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/count_out.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/count_out.txt Tue Oct 14 09:09:46 2025 +0000 |
| b |
| @@ -0,0 +1,26 @@ +cluster unannotated annotated total perc_unannotated perc_annotated +0 2.0 408 410.0 0.49 99.51 +1 1.0 0 1.0 100.00 0.00 +2 0.0 1 1.0 0.00 100.00 +3 0.0 52 52.0 0.00 100.00 +4 1.0 0 1.0 100.00 0.00 +5 0.0 176 176.0 0.00 100.00 +6 1.0 0 1.0 100.00 0.00 +7 0.0 79 79.0 0.00 100.00 +8 1.0 0 1.0 100.00 0.00 +9 9.0 0 9.0 100.00 0.00 +10 3.0 0 3.0 100.00 0.00 +11 2.0 0 2.0 100.00 0.00 +12 1.0 0 1.0 100.00 0.00 +13 1.0 0 1.0 100.00 0.00 +14 1.0 0 1.0 100.00 0.00 +15 5.0 0 5.0 100.00 0.00 +16 21.0 0 21.0 100.00 0.00 +17 38.0 0 38.0 100.00 0.00 +18 5.0 0 5.0 100.00 0.00 +19 5.0 0 5.0 100.00 0.00 +20 1.0 0 1.0 100.00 0.00 +21 1.0 0 1.0 100.00 0.00 +22 4.0 0 4.0 100.00 0.00 +23 0.0 1 1.0 0.00 100.00 +TOTAL 103.0 717 820.0 12.56 87.44 |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/evalue_out.png |
| b |
| Binary file test-data/evalue_out.png has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/evalue_out.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/evalue_out.txt Tue Oct 14 09:09:46 2025 +0000 |
| b |
| @@ -0,0 +1,20 @@ +evalue count +unannotated 103.0 +1.41e-39 414 +4.99e-39 166 +1.54e-33 72 +6.56e-38 25 +2.32e-37 16 +7.17e-32 6 +1.82e-38 4 +5.07e-39 3 +8.21e-37 2 +1.43e-39 1 +6.45e-38 1 +6.66e-38 1 +2.28e-37 1 +8.62e-37 1 +1.06e-35 1 +1.08e-35 1 +3.33e-30 1 +8.16e-12 1 |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/header_anno.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/header_anno.out Tue Oct 14 09:09:46 2025 +0000 |
| b |
| @@ -0,0 +1,33 @@ +header e_value identity percentage coverage bitscore count source taxa +M01687:476:000000000-LL5F5:1:2115:26447:7735_CONS 1.44e-38 100.000 89 152 16 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Ulmaceae / Ulmus / Uncertain taxa +M01687:476:000000000-LL5F5:1:2114:23245:14996_CONS 6.69e-37 98.780 89 147 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Ulmaceae / Ulmus / Uncertain taxa +M01687:476:000000000-LL5F5:1:2114:26495:20130_PairEnd 5.74e-12 100.000 97 62.1 2 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Boraginales / Boraginaceae / Echium / Echium vulgare +M01687:476:000000000-LL5F5:1:2111:23635:6003_PairEnd 4.7e-13 100.000 100 65.8 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Moraceae / Morus / Morus nigra +M01687:476:000000000-LL5F5:1:2111:13710:23471_PairEnd 1.84e-19 98.000 100 87.9 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Malpighiales / Linaceae / Linum / Linum usitatissimum +M01687:476:000000000-LL5F5:1:2110:8045:10072_PairEnd 5.81e-19 100.000 100 86.1 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Fagales / Betulaceae / Carpinus / Carpinus betulus +M01687:476:000000000-LL5F5:1:2110:19424:21789_PairEnd 1.82e-11 100.000 100 60.2 2 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Boraginales / Boraginaceae / Echium / Echium vulgare +M01687:476:000000000-LL5F5:1:2109:4173:12817_PairEnd 1.6e-12 100.000 100 63.9 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Boraginales / Boraginaceae / Echium / Echium vulgare +M01687:476:000000000-LL5F5:1:2108:25788:9128_PairEnd 1.6e-12 100.000 100 63.9 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Uncertain taxa / Uncertain taxa / Uncertain taxa / Uncertain taxa +M01687:476:000000000-LL5F5:1:2106:6185:5045_CONS 4e-39 98.851 95 154 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Ulmaceae / Ulmus / Uncertain taxa +M01687:476:000000000-LL5F5:1:2106:25223:15232_PairEnd 1.82e-11 100.000 100 60.2 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Caryophyllales / Polygonaceae / Persicaria / Persicaria capitata +M01687:476:000000000-LL5F5:1:2106:16583:24900_PairEnd 1.6e-12 100.000 100 63.9 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Moraceae / Morus / Morus nigra +M01687:476:000000000-LL5F5:1:2107:14441:4420_PairEnd 4.18e-21 98.113 100 93.5 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Ulmaceae / Ulmus / Uncertain taxa +M01687:476:000000000-LL5F5:1:2102:6786:11465_PairEnd 1.69e-12 100.000 97 63.9 2 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Ulmaceae / Ulmus / Uncertain taxa +M01687:476:000000000-LL5F5:1:2103:23936:5039_PairEnd 7.77e-18 97.872 100 82.4 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Ulmaceae / Ulmus / Uncertain taxa +M01687:476:000000000-LL5F5:1:2103:8294:17591_PairEnd 4.07e-21 100.000 98 93.5 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Fagales / Betulaceae / Carpinus / Carpinus betulus +M01687:476:000000000-LL5F5:1:2117:17252:13628_PairEnd 1.6e-12 100.000 100 63.9 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Uncertain taxa / Uncertain taxa / Uncertain taxa / Uncertain taxa +M01687:476:000000000-LL5F5:1:2117:27592:18414_PairEnd 1.78e-12 100.000 94 63.9 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Ulmaceae / Ulmus / Uncertain taxa +M01687:476:000000000-LL5F5:1:2101:24893:3903_PairEnd 1.6e-12 100.000 100 63.9 2 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Ulmaceae / Ulmus / Uncertain taxa +M01687:476:000000000-LL5F5:1:1114:20282:19626_PairEnd 1.82e-11 100.000 100 60.2 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Uncertain taxa / Uncertain taxa / Uncertain taxa / Uncertain taxa +M01687:476:000000000-LL5F5:1:1111:16182:6304_PairEnd 6.56e-11 100.000 100 58.4 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Uncertain taxa / Uncertain taxa / Uncertain taxa / Uncertain taxa +M01687:476:000000000-LL5F5:1:1108:26724:9550_CONS 2.37e-36 98.780 89 145 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Ulmaceae / Ulmus / Uncertain taxa +M01687:476:000000000-LL5F5:1:1105:4502:18059_PairEnd 1.67e-19 100.000 100 87.9 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Ulmaceae / Ulmus / Uncertain taxa +M01687:476:000000000-LL5F5:1:1105:26423:19620_CONS 3.11e-35 97.590 89 141 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Ulmaceae / Ulmus / Uncertain taxa +M01687:476:000000000-LL5F5:1:1105:24716:23055_CONS 2.37e-36 98.780 89 145 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Ulmaceae / Ulmus / Uncertain taxa +M01687:476:000000000-LL5F5:1:1105:12483:23534_CONS 2.37e-36 98.780 89 145 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Ulmaceae / Ulmus / Uncertain taxa +M01687:476:000000000-LL5F5:1:1104:20290:19756_PairEnd 6.56e-11 100.000 100 58.4 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Brassicales / Brassicaceae / Arabis / Arabis hirsuta +M01687:476:000000000-LL5F5:1:1103:8194:22770_PairEnd 6.55e-11 100.000 97 58.4 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Lamiales / Orobanchaceae / Orobanche / Orobanche rapum-genistae +M01687:476:000000000-LL5F5:1:1118:10753:8663_PairEnd 2.02e-18 100.000 100 84.2 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Caryophyllales / Polygonaceae / Rumex / Uncertain taxa +M01687:476:000000000-LL5F5:1:1117:24949:20842_PairEnd 1.97e-12 97.368 100 63.9 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Fabales / Fabaceae / Melilotus / Melilotus albus +M01687:476:000000000-LL5F5:1:2118:15163:23154_PairEnd 3.43e-15 100.000 100 73.1 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Ulmaceae / Ulmus / Uncertain taxa +M01687:476:000000000-LL5F5:1:2119:16486:24247_PairEnd 7.42e-12 97.222 92 62.1 1 NCBI Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Ulmaceae / Ulmus / Uncertain taxa \ No newline at end of file |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/header_anno_29_test.xlsx |
| b |
| Binary file test-data/header_anno_29_test.xlsx has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/header_anno_cluster_test.xlsx |
| b |
| Binary file test-data/header_anno_cluster_test.xlsx has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/header_anno_excel.xlsx |
| b |
| Binary file test-data/header_anno_excel.xlsx has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/header_anno_genbank_test.xlsx |
| b |
| Binary file test-data/header_anno_genbank_test.xlsx has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/header_anno_test.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/header_anno_test.out Tue Oct 14 09:09:46 2025 +0000 |
| b |
| b'@@ -0,0 +1,275 @@\n+header\te_value\ttaxa\n+M01687:476:000000000-LL5F5:1:1102:11130:1143\t4.03e-14\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1102:13335:1146\t5.81e-19\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+M01687:476:000000000-LL5F5:1:1102:12788:1545\t5.81e-19\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+M01687:476:000000000-LL5F5:1:1102:13185:1948\t9.92e-40\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+M01687:476:000000000-LL5F5:1:1102:13225:2515\t4.36e-49\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1102:22471:3969\t1.77e-42\tViridiplantae / Streptophyta / Magnoliopsida / Fagales / Juglandaceae / Juglans / Juglans regia\n+M01687:476:000000000-LL5F5:1:1102:15955:7488\t2.80e-40\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+M01687:476:000000000-LL5F5:1:1102:19228:8317\t2.23e-41\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1102:14493:8350\t1.16e-44\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+M01687:476:000000000-LL5F5:1:1102:16191:8877\t1.41e-43\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+M01687:476:000000000-LL5F5:1:1102:27669:11105\t1.82e-11\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+M01687:476:000000000-LL5F5:1:1102:22839:11494\t1.67e-19\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+M01687:476:000000000-LL5F5:1:1102:21193:11910\t2.80e-40\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1102:18919:13706\t1.28e-38\tViridiplantae / Streptophyta / Magnoliopsida / Asparagales / Amaryllidaceae / Allium / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1102:26589:14006\t6.29e-42\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+M01687:476:000000000-LL5F5:1:1102:10289:14793\t1.24e-38\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+M01687:476:000000000-LL5F5:1:1102:24822:16524\t2.42e-17\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1102:28596:17833\t5.40e-12\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1102:13483:18280\t4.40e-38\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+M01687:476:000000000-LL5F5:1:1102:25272:18461\t4.40e-38\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1102:15717:24257\t1.57e-48\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+M01687:476:000000000-LL5F5:1:1101:11171:1541\t1.01e-50\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+M01687:476:000000000-LL5F5:1:1101:16126:2414\t1.98e-47\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1101:15009:4289\t2.23e-41\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1101:10923:5046\t7.90e-41\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1101:18747:5582\t7.90e-41\tViridiplantae / Streptophyta / Magnoliopsida / '..b'9\tViridiplantae / Streptophyta / Magnoliopsida / Asparagales / Hyacinthaceae / Scilla / Scilla siberica\n+M01687:476:000000000-LL5F5:1:1105:21554:11467\t1.60e-12\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1105:26827:11694\t2.08e-30\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1105:16893:17805\t1.19e-33\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1104:6917:12489\t1.26e-38\tViridiplantae / Streptophyta / Magnoliopsida / Fagales / Juglandaceae / Juglans / Juglans regia\n+M01687:476:000000000-LL5F5:1:1104:2893:12757\t1.63e-37\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1104:6093:13533\t5.65e-48\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1104:8893:14508\t2.42e-17\tViridiplantae / Streptophyta / Magnoliopsida / Fagales / Juglandaceae / Juglans / Juglans regia\n+M01687:476:000000000-LL5F5:1:1104:15290:21784\t1.18e-14\tViridiplantae / Streptophyta / Magnoliopsida / Asparagales / Amaryllidaceae / Allium / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1103:4180:5673\t1.19e-33\tViridiplantae / Streptophyta / Magnoliopsida / Asparagales / Amaryllidaceae / Allium / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1103:15265:8121\t1.19e-33\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1103:10055:13671\t2.33e-41\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1103:16680:16940\t1.56e-37\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+M01687:476:000000000-LL5F5:1:1103:13348:23457\t3.95e-21\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1118:7891:7134\t1.63e-37\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+M01687:476:000000000-LL5F5:1:1118:4428:9587\t2.33e-41\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1118:27420:12074\t2.57e-23\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1118:14016:12860\t1.38e-13\tViridiplantae / Streptophyta / Magnoliopsida / Asparagales / Amaryllidaceae / Allium / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1118:4347:17342\t5.56e-32\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1117:21934:5813\t3.40e-28\tViridiplantae / Streptophyta / Magnoliopsida / Asparagales / Amaryllidaceae / Allium / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:1117:23204:10746\t8.25e-41\tViridiplantae / Streptophyta / Magnoliopsida / Fagales / Juglandaceae / Juglans / Juglans regia\n+M01687:476:000000000-LL5F5:1:1117:9292:15028\t2.33e-41\tViridiplantae / Streptophyta / Magnoliopsida / Fagales / Juglandaceae / Juglans / Juglans regia\n+M01687:476:000000000-LL5F5:1:2118:11429:1206\t1.08e-39\tViridiplantae / Streptophyta / Magnoliopsida / Fagales / Juglandaceae / Juglans / Juglans regia\n+M01687:476:000000000-LL5F5:1:2118:12113:17263\t3.40e-28\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+M01687:476:000000000-LL5F5:1:2119:22772:1664\t1.67e-31\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+M01687:476:000000000-LL5F5:1:2119:25128:7209\t6.99e-18\tViridiplantae / Streptophyta / Magnoliopsida / Asparagales / Amaryllidaceae / Allium / Uncertain taxa\n\\ No newline at end of file\n' |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/input1.clstr --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/input1.clstr Tue Oct 14 09:09:46 2025 +0000 |
| b |
| b'@@ -0,0 +1,4997 @@\n+>Cluster 0\n+0\t98nt, >M01687:476:000000000-LL5F5:1:2115:26447:7735:3... at +/98.98%\n+1\t98nt, >M01687:476:000000000-LL5F5:1:1102:15697:1389:8501... at +/100.00%\n+2\t79nt, >M01687:476:000000000-LL5F5:1:1102:8014:1733:18... at +/98.73%\n+3\t99nt, >M01687:476:000000000-LL5F5:1:1102:9935:4644:496... at +/98.99%\n+4\t98nt, >M01687:476:000000000-LL5F5:1:1102:14956:5173:6... at +/98.98%\n+5\t98nt, >M01687:476:000000000-LL5F5:1:1102:18148:5343:62... at +/98.98%\n+6\t98nt, >M01687:476:000000000-LL5F5:1:1102:18967:6017:7... at +/98.98%\n+7\t94nt, >M01687:476:000000000-LL5F5:1:1102:10009:6138:9... at +/98.94%\n+8\t77nt, >M01687:476:000000000-LL5F5:1:1102:17622:8386:22... at +/100.00%\n+9\t98nt, >M01687:476:000000000-LL5F5:1:1102:24057:8815:5... at +/98.98%\n+10\t97nt, >M01687:476:000000000-LL5F5:1:1102:28277:10429:224... at +/100.00%\n+11\t97nt, >M01687:476:000000000-LL5F5:1:1102:23646:10792:31... at +/100.00%\n+12\t97nt, >M01687:476:000000000-LL5F5:1:1102:4264:10829:3... at +/100.00%\n+13\t98nt, >M01687:476:000000000-LL5F5:1:1102:12247:10892:37... at +/98.98%\n+14\t98nt, >M01687:476:000000000-LL5F5:1:1102:2653:10894:15... at +/98.98%\n+15\t98nt, >M01687:476:000000000-LL5F5:1:1102:7438:10940:6... at +/98.98%\n+16\t97nt, >M01687:476:000000000-LL5F5:1:1102:3265:11056:10... at +/100.00%\n+17\t98nt, >M01687:476:000000000-LL5F5:1:1102:19657:11463:18... at +/98.98%\n+18\t98nt, >M01687:476:000000000-LL5F5:1:1102:19389:11743:1... at +/97.96%\n+19\t98nt, >M01687:476:000000000-LL5F5:1:1102:24907:12220:3... at +/98.98%\n+20\t93nt, >M01687:476:000000000-LL5F5:1:1102:8837:13105:35... at +/100.00%\n+21\t98nt, >M01687:476:000000000-LL5F5:1:1102:7856:13853:8... at +/98.98%\n+22\t98nt, >M01687:476:000000000-LL5F5:1:1102:28904:17266:8... at +/98.98%\n+23\t98nt, >M01687:476:000000000-LL5F5:1:1102:25643:18307:81... at +/98.98%\n+24\t88nt, >M01687:476:000000000-LL5F5:1:1102:27151:19146:13... at +/100.00%\n+25\t98nt, >M01687:476:000000000-LL5F5:1:1102:8280:20081:44... at +/98.98%\n+26\t98nt, >M01687:476:000000000-LL5F5:1:1102:16267:21233:22... at +/98.98%\n+27\t98nt, >M01687:476:000000000-LL5F5:1:1102:5351:21607:3... at +/98.98%\n+28\t98nt, >M01687:476:000000000-LL5F5:1:1102:19955:21830:7... at +/98.98%\n+29\t85nt, >M01687:476:000000000-LL5F5:1:1102:24303:22873:4... at +/100.00%\n+30\t98nt, >M01687:476:000000000-LL5F5:1:1101:23554:3184:1... at +/98.98%\n+31\t98nt, >M01687:476:000000000-LL5F5:1:1101:13259:3571:16... at +/98.98%\n+32\t99nt, >M01687:476:000000000-LL5F5:1:1101:13578:5640:3... at +/97.98%\n+33\t98nt, >M01687:476:000000000-LL5F5:1:1101:19927:5708:1... at +/96.94%\n+34\t97nt, >M01687:476:000000000-LL5F5:1:1101:6387:6268:1... at +/98.97%\n+35\t95nt, >M01687:476:000000000-LL5F5:1:1101:3434:7086:6... at +/100.00%\n+36\t98nt, >M01687:476:000000000-LL5F5:1:1101:8411:7196:4... at +/98.98%\n+37\t98nt, >M01687:476:000000000-LL5F5:1:1101:20587:7233:38... at +/98.98%\n+38\t98nt, >M01687:476:000000000-LL5F5:1:1101:24095:7951:3... at +/98.98%\n+39\t98nt, >M01687:476:000000000-LL5F5:1:1101:27271:8277:14... at +/98.98%\n+40\t98nt, >M01687:476:000000000-LL5F5:1:1101:6721:8542:8... at +/98.98%\n+41\t97nt, >M01687:476:000000000-LL5F5:1:1101:19328:11368:1... at +/98.97%\n+42\t98nt, >M01687:476:000000000-LL5F5:1:1101:5511:11480:4... at +/98.98%\n+43\t98nt, >M01687:476:000000000-LL5F5:1:1101:7253:12060:2... at +/97.96%\n+44\t98nt, >M01687:476:000000000-LL5F5:1:1101:5119:12235:3... at +/98.98%\n+45\t80nt, >M01687:476:000000000-LL5F5:1:1101:15732:12847:1... at +/100.00%\n+46\t98nt, >M01687:476:000000000-LL5F5:1:1101:25755:13111:4... at +/98.98%\n+47\t98nt, >M01687:476:000000000-LL5F5:1:1101:5073:13655:11... at +/98.98%\n+48\t98nt, >M01687:476:000000000-LL5F5:1:1101:22086:13829:6... at +/98.98%\n+49\t99nt, >M01687:476:000000000-LL5F5:1:1101:14579:14076:1... at +/97.98%\n+50\t98nt, >M01687:476:000000000-LL5F5:1:1101:28104:14755:4... at +/98.98%\n+51\t98nt, >M01687:476:000000000-LL5F5:1:1101:26847:14940:10... at +/98.98%\n+52\t98nt, >M01687:476:000000000-LL5F5:1:1101:9519:14986:19... at +/98.98%\n+53\t98nt, >M01687:476:000000000-LL5F5:1:1101:20895:15159:4.'..b'F5:1:1103:27414:18460:1... *\n+>Cluster 467\n+0\t56nt, >M01687:476:000000000-LL5F5:1:2119:15472:8326:1... *\n+>Cluster 468\n+0\t54nt, >M01687:476:000000000-LL5F5:1:1103:18531:2774:1... *\n+>Cluster 469\n+0\t44nt, >M01687:476:000000000-LL5F5:1:2109:5368:20522:1... *\n+>Cluster 470\n+0\t44nt, >M01687:476:000000000-LL5F5:1:2103:19766:10471:1... *\n+>Cluster 471\n+0\t45nt, >M01687:476:000000000-LL5F5:1:1107:26016:21462:1... *\n+>Cluster 472\n+0\t45nt, >M01687:476:000000000-LL5F5:1:2119:8301:5066:1... *\n+>Cluster 473\n+0\t41nt, >M01687:476:000000000-LL5F5:1:1109:17965:8702:1... *\n+>Cluster 474\n+0\t40nt, >M01687:476:000000000-LL5F5:1:1101:12969:20831:1... *\n+>Cluster 475\n+0\t42nt, >M01687:476:000000000-LL5F5:1:2106:3959:19121:1... *\n+>Cluster 476\n+0\t41nt, >M01687:476:000000000-LL5F5:1:1110:17614:1821:1... *\n+>Cluster 477\n+0\t50nt, >M01687:476:000000000-LL5F5:1:1113:4813:12936:1... *\n+>Cluster 478\n+0\t50nt, >M01687:476:000000000-LL5F5:1:1104:14798:10546:1... *\n+>Cluster 479\n+0\t53nt, >M01687:476:000000000-LL5F5:1:2104:28107:11453:1... *\n+>Cluster 480\n+0\t51nt, >M01687:476:000000000-LL5F5:1:2117:7786:19971:1... *\n+>Cluster 481\n+0\t46nt, >M01687:476:000000000-LL5F5:1:1115:18207:1561:1... *\n+>Cluster 482\n+0\t45nt, >M01687:476:000000000-LL5F5:1:2115:24299:21956:1... *\n+>Cluster 483\n+0\t49nt, >M01687:476:000000000-LL5F5:1:1115:15877:14964:1... *\n+>Cluster 484\n+0\t48nt, >M01687:476:000000000-LL5F5:1:2110:11857:9899:1... *\n+>Cluster 485\n+0\t57nt, >M01687:476:000000000-LL5F5:1:1118:23494:11044:1... *\n+>Cluster 486\n+0\t62nt, >M01687:476:000000000-LL5F5:1:2111:18032:2598:2... *\n+>Cluster 487\n+0\t62nt, >M01687:476:000000000-LL5F5:1:2111:25302:3500:3... *\n+>Cluster 488\n+0\t62nt, >M01687:476:000000000-LL5F5:1:1102:8197:11322:1... *\n+>Cluster 489\n+0\t62nt, >M01687:476:000000000-LL5F5:1:1101:26353:4793:2... *\n+>Cluster 490\n+0\t61nt, >M01687:476:000000000-LL5F5:1:1101:23786:13000:5... *\n+>Cluster 491\n+0\t61nt, >M01687:476:000000000-LL5F5:1:1107:11691:13515:1... *\n+>Cluster 492\n+0\t62nt, >M01687:476:000000000-LL5F5:1:2109:20429:7004:1... *\n+>Cluster 493\n+0\t62nt, >M01687:476:000000000-LL5F5:1:2107:5137:17417:5... *\n+>Cluster 494\n+0\t64nt, >M01687:476:000000000-LL5F5:1:2105:25595:19999:2... *\n+>Cluster 495\n+0\t64nt, >M01687:476:000000000-LL5F5:1:2101:14104:9551:1... *\n+>Cluster 496\n+0\t65nt, >M01687:476:000000000-LL5F5:1:1110:12526:6585:1... *\n+>Cluster 497\n+0\t64nt, >M01687:476:000000000-LL5F5:1:2114:14742:6677:1... *\n+>Cluster 498\n+0\t63nt, >M01687:476:000000000-LL5F5:1:1101:25485:22437:1... *\n+>Cluster 499\n+0\t63nt, >M01687:476:000000000-LL5F5:1:1117:16163:4572:1... *\n+>Cluster 500\n+0\t64nt, >M01687:476:000000000-LL5F5:1:1116:19244:23342:1... *\n+>Cluster 501\n+0\t64nt, >M01687:476:000000000-LL5F5:1:1108:19646:14682:1... *\n+>Cluster 502\n+0\t61nt, >M01687:476:000000000-LL5F5:1:1103:9065:16041:1... *\n+>Cluster 503\n+0\t57nt, >M01687:476:000000000-LL5F5:1:1102:8305:12597:1... *\n+>Cluster 504\n+0\t57nt, >M01687:476:000000000-LL5F5:1:1102:2258:13965:1... *\n+>Cluster 505\n+0\t59nt, >M01687:476:000000000-LL5F5:1:2103:27687:20311:1... *\n+>Cluster 506\n+0\t58nt, >M01687:476:000000000-LL5F5:1:1113:10397:8827:1... *\n+>Cluster 507\n+0\t57nt, >M01687:476:000000000-LL5F5:1:1110:3216:10623:1... *\n+>Cluster 508\n+0\t57nt, >M01687:476:000000000-LL5F5:1:1106:13059:4373:1... *\n+>Cluster 509\n+0\t57nt, >M01687:476:000000000-LL5F5:1:2114:21594:12732:1... *\n+>Cluster 510\n+0\t57nt, >M01687:476:000000000-LL5F5:1:2109:16762:21422:3... *\n+>Cluster 511\n+0\t60nt, >M01687:476:000000000-LL5F5:1:2101:8835:2007:1... *\n+>Cluster 512\n+0\t60nt, >M01687:476:000000000-LL5F5:1:1103:5577:4456:1... *\n+>Cluster 513\n+0\t60nt, >M01687:476:000000000-LL5F5:1:2111:4634:5095:5... *\n+>Cluster 514\n+0\t60nt, >M01687:476:000000000-LL5F5:1:2102:14168:14163:3... *\n+>Cluster 515\n+0\t59nt, >M01687:476:000000000-LL5F5:1:2113:22493:20004:2... *\n+>Cluster 516\n+0\t59nt, >M01687:476:000000000-LL5F5:1:2108:25955:21183:1... *\n+>Cluster 517\n+0\t59nt, >M01687:476:000000000-LL5F5:1:1102:22455:19018:4... *\n+>Cluster 518\n+0\t59nt, >M01687:476:000000000-LL5F5:1:2113:11989:16356:2... *\n' |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/input2_test.clstr.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/input2_test.clstr.txt Tue Oct 14 09:09:46 2025 +0000 |
| b |
| b'@@ -0,0 +1,5262 @@\n+>Cluster 0\n+0\t357nt, >M01687:476:000000000-LL5F5:1:2113:18579:17490_CONS(1)... *\n+>Cluster 1\n+0\t85nt, >M01687:476:000000000-LL5F5:1:1102:21316:1191_CONS(59577)... at 1:85:1:85/+/98.82%\n+1\t85nt, >M01687:476:000000000-LL5F5:1:1102:19793:1302_CONS(106)... at 1:85:1:85/+/97.65%\n+2\t84nt, >M01687:476:000000000-LL5F5:1:1102:18943:1430_CONS(15)... at 1:84:1:85/+/98.81%\n+3\t85nt, >M01687:476:000000000-LL5F5:1:1102:9619:1460_CONS(38)... at 1:85:1:85/+/97.65%\n+4\t85nt, >M01687:476:000000000-LL5F5:1:1102:8280:1614_CONS(1)... at 1:85:1:85/+/97.65%\n+5\t84nt, >M01687:476:000000000-LL5F5:1:1102:23070:1819_CONS(45)... at 1:84:1:85/+/98.81%\n+6\t85nt, >M01687:476:000000000-LL5F5:1:1102:17953:1828_CONS(34)... at 1:85:1:85/+/97.65%\n+7\t85nt, >M01687:476:000000000-LL5F5:1:1102:23751:1925_CONS(63)... at 1:85:1:85/+/97.65%\n+8\t84nt, >M01687:476:000000000-LL5F5:1:1102:19384:1968_CONS(483)... at 1:84:1:85/+/98.81%\n+9\t84nt, >M01687:476:000000000-LL5F5:1:1102:20052:2016_CONS(1)... at 1:84:1:85/+/97.62%\n+10\t85nt, >M01687:476:000000000-LL5F5:1:1102:14773:2086_CONS(11)... at 1:85:1:85/+/97.65%\n+11\t85nt, >M01687:476:000000000-LL5F5:1:1102:20365:2164_CONS(67)... at 1:85:1:85/+/97.65%\n+12\t85nt, >M01687:476:000000000-LL5F5:1:1102:22578:2370_CONS(330)... at 1:85:1:85/+/97.65%\n+13\t84nt, >M01687:476:000000000-LL5F5:1:1102:22516:2548_CONS(18)... at 1:84:1:85/+/98.81%\n+14\t85nt, >M01687:476:000000000-LL5F5:1:1102:11384:2562_CONS(75)... at 1:85:1:85/+/97.65%\n+15\t85nt, >M01687:476:000000000-LL5F5:1:1102:17809:2601_CONS(16)... at 1:85:1:85/+/97.65%\n+16\t85nt, >M01687:476:000000000-LL5F5:1:1102:8127:2897_CONS(156)... at 1:85:1:85/+/97.65%\n+17\t85nt, >M01687:476:000000000-LL5F5:1:1102:11342:3353_CONS(128)... at 1:85:1:85/+/97.65%\n+18\t85nt, >M01687:476:000000000-LL5F5:1:1102:13896:3358_CONS(50)... at 1:85:1:85/+/97.65%\n+19\t85nt, >M01687:476:000000000-LL5F5:1:1102:25197:3364_CONS(21)... at 1:85:1:85/+/98.82%\n+20\t84nt, >M01687:476:000000000-LL5F5:1:1102:5615:3665_CONS(115)... at 1:84:1:85/+/98.81%\n+21\t85nt, >M01687:476:000000000-LL5F5:1:1102:20549:3689_CONS(57)... at 1:85:1:85/+/97.65%\n+22\t85nt, >M01687:476:000000000-LL5F5:1:1102:12968:3831_CONS(48)... at 1:85:1:85/+/97.65%\n+23\t85nt, >M01687:476:000000000-LL5F5:1:1102:14402:3886_CONS(53)... at 1:85:1:85/+/97.65%\n+24\t85nt, >M01687:476:000000000-LL5F5:1:1102:15186:3974_CONS(62)... at 1:85:1:85/+/97.65%\n+25\t85nt, >M01687:476:000000000-LL5F5:1:1102:7468:4003_CONS(29)... at 1:85:1:85/+/97.65%\n+26\t85nt, >M01687:476:000000000-LL5F5:1:1102:24557:4345_CONS(23)... at 1:85:1:85/+/97.65%\n+27\t84nt, >M01687:476:000000000-LL5F5:1:1102:14693:4390_CONS(38)... at 1:84:1:85/+/98.81%\n+28\t85nt, >M01687:476:000000000-LL5F5:1:1102:11744:4547_CONS(8)... at 1:85:1:85/+/97.65%\n+29\t85nt, >M01687:476:000000000-LL5F5:1:1102:5441:4619_CONS(49)... at 1:85:1:85/+/97.65%\n+30\t85nt, >M01687:476:000000000-LL5F5:1:1102:22032:4762_CONS(55)... at 1:85:1:85/+/97.65%\n+31\t84nt, >M01687:476:000000000-LL5F5:1:1102:18845:4875_CONS(52)... at 1:84:2:85/+/97.62%\n+32\t85nt, >M01687:476:000000000-LL5F5:1:1102:7070:5133_CONS(10)... at 1:85:1:85/+/97.65%\n+33\t85nt, >M01687:476:000000000-LL5F5:1:1102:21606:5198_CONS(24)... at 1:85:1:85/+/97.65%\n+34\t85nt, >M01687:476:000000000-LL5F5:1:1102:10358:5330_CONS(69)... at 1:85:1:85/+/97.65%\n+35\t85nt, >M01687:476:000000000-LL5F5:1:1102:25642:5438_CONS(35)... at 1:85:1:85/+/97.65%\n+36\t85nt, >M01687:476:000000000-LL5F5:1:1102:11715:5504_CONS(22)... at 1:85:1:85/+/97.65%\n+37\t85nt, >M01687:476:000000000-LL5F5:1:1102:5395:5680_CONS(88)... at 1:85:1:85/+/97.65%\n+38\t85nt, >M01687:476:000000000-LL5F5:1:1102:22710:5776_CONS(6)... at 1:85:1:85/+/97.65%\n+39\t85nt, >M01687:476:000000000-LL5F5:1:1102:7297:6159_CONS(12)... at 1:85:1:85/+/97.65%\n+40\t85nt, >M01687:476:000000000-LL5F5:1:1102:13228:6271_CONS(6)... at 1:85:1:85/+/97.65%\n+41\t85nt, >M01687:476:000000000-LL5F5:1:1102:9772:6514_CONS(32)... at 1:85:1:85/+/97.65%\n+42\t85nt, >M01687:476:000000000-LL5F5:1:1102:27439:6526_CONS(26)... at 1:85:1:85/+/97.65%\n+43\t85nt, >M01687:476:000000000-'..b'06:18053:5826_CONS(1)... *\n+>Cluster 492\n+0\t50nt, >M01687:476:000000000-LL5F5:1:1106:18448:17899_CONS(2)... *\n+>Cluster 493\n+0\t49nt, >M01687:476:000000000-LL5F5:1:2111:12743:2441_CONS(1)... *\n+>Cluster 494\n+0\t49nt, >M01687:476:000000000-LL5F5:1:2109:19450:17620_CONS(1)... *\n+>Cluster 495\n+0\t49nt, >M01687:476:000000000-LL5F5:1:2105:24944:4386_CONS(1)... *\n+>Cluster 496\n+0\t49nt, >M01687:476:000000000-LL5F5:1:2103:7076:21810_CONS(1)... *\n+1\t41nt, >M01687:476:000000000-LL5F5:1:2103:13680:23923_CONS(1)... at 1:41:1:42/+/97.56%\n+2\t37nt, >M01687:476:000000000-LL5F5:1:1110:8254:5651_CONS(1)... at 1:37:1:37/+/97.30%\n+>Cluster 497\n+0\t49nt, >M01687:476:000000000-LL5F5:1:1119:20005:6192_CONS(1)... *\n+>Cluster 498\n+0\t49nt, >M01687:476:000000000-LL5F5:1:1113:7362:14701_CONS(1)... *\n+>Cluster 499\n+0\t49nt, >M01687:476:000000000-LL5F5:1:1108:16137:4294_CONS(1)... *\n+>Cluster 500\n+0\t49nt, >M01687:476:000000000-LL5F5:1:1108:20924:18897_CONS(1)... *\n+>Cluster 501\n+0\t49nt, >M01687:476:000000000-LL5F5:1:2119:19514:16968_CONS(1)... *\n+>Cluster 502\n+0\t49nt, >M01687:476:000000000-LL5F5:1:2119:25723:19911_CONS(1)... *\n+>Cluster 503\n+0\t49nt, >M01687:476:000000000-LL5F5:1:2119:9797:23681_CONS(1)... *\n+>Cluster 504\n+0\t48nt, >M01687:476:000000000-LL5F5:1:2115:22314:7756_CONS(1)... *\n+>Cluster 505\n+0\t48nt, >M01687:476:000000000-LL5F5:1:2109:8915:10577_CONS(1)... *\n+>Cluster 506\n+0\t48nt, >M01687:476:000000000-LL5F5:1:2106:4236:18215_CONS(1)... *\n+>Cluster 507\n+0\t48nt, >M01687:476:000000000-LL5F5:1:2102:14409:7630_CONS(3)... *\n+>Cluster 508\n+0\t48nt, >M01687:476:000000000-LL5F5:1:2116:2895:18592_CONS(1)... *\n+>Cluster 509\n+0\t48nt, >M01687:476:000000000-LL5F5:1:1117:14798:22279_CONS(1)... *\n+>Cluster 510\n+0\t47nt, >M01687:476:000000000-LL5F5:1:2114:20646:10081_CONS(1)... *\n+>Cluster 511\n+0\t47nt, >M01687:476:000000000-LL5F5:1:2116:12718:17431_CONS(1)... *\n+>Cluster 512\n+0\t47nt, >M01687:476:000000000-LL5F5:1:1106:17278:21150_CONS(1)... *\n+>Cluster 513\n+0\t46nt, >M01687:476:000000000-LL5F5:1:2112:14259:5247_CONS(1)... *\n+>Cluster 514\n+0\t46nt, >M01687:476:000000000-LL5F5:1:1116:28116:7472_CONS(1)... *\n+>Cluster 515\n+0\t46nt, >M01687:476:000000000-LL5F5:1:1114:7775:11020_CONS(1)... *\n+>Cluster 516\n+0\t45nt, >M01687:476:000000000-LL5F5:1:2110:22717:1584_CONS(1)... *\n+>Cluster 517\n+0\t45nt, >M01687:476:000000000-LL5F5:1:1110:28489:8714_CONS(1)... *\n+>Cluster 518\n+0\t44nt, >M01687:476:000000000-LL5F5:1:2109:14266:24210_CONS(1)... *\n+>Cluster 519\n+0\t44nt, >M01687:476:000000000-LL5F5:1:1116:24297:16984_CONS(1)... *\n+>Cluster 520\n+0\t44nt, >M01687:476:000000000-LL5F5:1:1109:20145:14436_CONS(1)... *\n+>Cluster 521\n+0\t43nt, >M01687:476:000000000-LL5F5:1:2109:12620:5580_CONS(1)... *\n+>Cluster 522\n+0\t43nt, >M01687:476:000000000-LL5F5:1:1112:10150:19488_CONS(1)... *\n+>Cluster 523\n+0\t42nt, >M01687:476:000000000-LL5F5:1:1110:11403:3992_CONS(1)... *\n+>Cluster 524\n+0\t41nt, >M01687:476:000000000-LL5F5:1:2113:6260:18789_CONS(1)... *\n+>Cluster 525\n+0\t41nt, >M01687:476:000000000-LL5F5:1:2108:17078:6560_CONS(1)... *\n+>Cluster 526\n+0\t41nt, >M01687:476:000000000-LL5F5:1:2101:5770:22201_CONS(1)... *\n+>Cluster 527\n+0\t40nt, >M01687:476:000000000-LL5F5:1:1105:10592:17375_CONS(1)... *\n+>Cluster 528\n+0\t40nt, >M01687:476:000000000-LL5F5:1:2118:6142:4616_CONS(1)... *\n+>Cluster 529\n+0\t39nt, >M01687:476:000000000-LL5F5:1:1101:11062:13507_CONS(1)... *\n+1\t39nt, >M01687:476:000000000-LL5F5:1:1116:4266:19390_CONS(1)... at 1:39:1:38/+/97.44%\n+>Cluster 530\n+0\t39nt, >M01687:476:000000000-LL5F5:1:2112:21268:1323_CONS(1)... *\n+>Cluster 531\n+0\t38nt, >M01687:476:000000000-LL5F5:1:2103:25634:11346_CONS(1)... *\n+>Cluster 532\n+0\t33nt, >M01687:476:000000000-LL5F5:1:2106:13260:18932_CONS(1)... *\n+>Cluster 533\n+0\t31nt, >M01687:476:000000000-LL5F5:1:1110:28179:10205_CONS(1)... *\n+>Cluster 534\n+0\t30nt, >M01687:476:000000000-LL5F5:1:1110:23278:23216_CONS(1)... *\n+>Cluster 535\n+0\t29nt, >M01687:476:000000000-LL5F5:1:2117:17691:6487_CONS(1)... *\n+>Cluster 536\n+0\t28nt, >M01687:476:000000000-LL5F5:1:1104:7756:22829_CONS(1)... *\n' |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/malformed_cluster.clstr --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/malformed_cluster.clstr Tue Oct 14 09:09:46 2025 +0000 |
| b |
| @@ -0,0 +1,4 @@ +>Cluster 0 +0 100nt, >read1:50..._CONS(50) * +invalid_line_without_proper_format +1 90nt, >read2:25..._CONS(25) at /+/95% |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/processed.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/processed.out Tue Oct 14 09:09:46 2025 +0000 |
| b |
| @@ -0,0 +1,18 @@ +cluster count taxa +4 1566 Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa +10 385 Viridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum +22 239 Viridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum +24 175 Viridiplantae / Streptophyta / Magnoliopsida / Fagales / Juglandaceae / Juglans / Juglans regia +36 88 Viridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum +42 82 Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa +43 140 Viridiplantae / Streptophyta / Magnoliopsida / Asparagales / Amaryllidaceae / Allium / Uncertain taxa +50 38 Viridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa +125 2 Viridiplantae / Streptophyta / Magnoliopsida / Fagales / Juglandaceae / Juglans / Juglans regia +130 12 Viridiplantae / Streptophyta / Magnoliopsida / Fagales / Juglandaceae / Juglans / Juglans regia +139 7 Viridiplantae / Streptophyta / Magnoliopsida / Asparagales / Hyacinthaceae / Scilla / Scilla siberica +152 1 Viridiplantae / Streptophyta / Magnoliopsida / Asparagales / Amaryllidaceae / Allium / Uncertain taxa +152 3 Viridiplantae / Streptophyta / Magnoliopsida / Asparagales / Hyacinthaceae / Scilla / Scilla siberica +324 2 Viridiplantae / Streptophyta / Magnoliopsida / Fagales / Juglandaceae / Juglans / Juglans regia +395 1 Viridiplantae / Streptophyta / Magnoliopsida / Solanales / Solanaceae / Uncertain taxa / Uncertain taxa +443 1 Viridiplantae / Streptophyta / Magnoliopsida / Ranunculales / Ranunculaceae / Ranunculus / Ranunculus repens +450 1 Viridiplantae / Streptophyta / Magnoliopsida / Fagales / Betulaceae / Alnus / Alnus incana |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/processed.xlsx |
| b |
| Binary file test-data/processed.xlsx has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/sim_out.png |
| b |
| Binary file test-data/sim_out.png has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/sim_out.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/sim_out.txt Tue Oct 14 09:09:46 2025 +0000 |
| b |
| @@ -0,0 +1,14 @@ +# Average similarity: 99.35 +# Standard deviation: 0.65 +similarity count +100.0 383 +98.89 368 +98.88 18 +98.86 1 +98.73 7 +98.28 1 +98.21 8 +97.8 2 +97.78 29 +97.75 2 +97.73 1 |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/simple_cluster.clstr --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/simple_cluster.clstr Tue Oct 14 09:09:46 2025 +0000 |
| b |
| @@ -0,0 +1,2 @@ +>Cluster 0 +0 100nt, >read_no_anno:50... * |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/taxa_out.clstr --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/taxa_out.clstr Tue Oct 14 09:09:46 2025 +0000 |
| b |
| b'@@ -0,0 +1,534 @@\n+cluster\tcount\ttaxa\n+0\t10993\tUnannotated read\n+1\t3950\tUnannotated read\n+2\t5681\tUnannotated read\n+3\t2059\tUnannotated read\n+4\t1566\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+4\t1\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Pyrus / Pyrus communis\n+5\t160\tUnannotated read\n+6\t874\tUnannotated read\n+7\t706\tUnannotated read\n+8\t401\tUnannotated read\n+9\t1109\tUnannotated read\n+10\t75\tUnannotated read\n+10\t385\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+11\t479\tUnannotated read\n+12\t471\tUnannotated read\n+13\t502\tUnannotated read\n+14\t455\tUnannotated read\n+15\t351\tUnannotated read\n+16\t604\tUnannotated read\n+17\t302\tUnannotated read\n+18\t64\tUnannotated read\n+19\t419\tUnannotated read\n+20\t302\tUnannotated read\n+21\t116\tUnannotated read\n+22\t65\tUnannotated read\n+22\t239\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+23\t347\tUnannotated read\n+24\t1\tUnannotated read\n+24\t175\tViridiplantae / Streptophyta / Magnoliopsida / Fagales / Juglandaceae / Juglans / Juglans regia\n+24\t1\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Ulmaceae / Ulmus / Uncertain taxa\n+25\t169\tUnannotated read\n+26\t389\tUnannotated read\n+27\t228\tUnannotated read\n+28\t248\tUnannotated read\n+29\t101\tUnannotated read\n+30\t237\tUnannotated read\n+31\t73\tUnannotated read\n+32\t293\tUnannotated read\n+33\t30\tUnannotated read\n+34\t181\tUnannotated read\n+35\t152\tUnannotated read\n+36\t14\tUnannotated read\n+36\t88\tViridiplantae / Streptophyta / Magnoliopsida / Malvales / Malvaceae / Hibiscus / Hibiscus trionum\n+37\t152\tUnannotated read\n+38\t194\tUnannotated read\n+39\t112\tUnannotated read\n+40\t30\tUnannotated read\n+41\t162\tUnannotated read\n+42\t4\tUnannotated read\n+42\t82\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+42\t1\tViridiplantae / Streptophyta / Magnoliopsida / Uncertain taxa / Uncertain taxa / Uncertain taxa / Uncertain taxa\n+43\t140\tViridiplantae / Streptophyta / Magnoliopsida / Asparagales / Amaryllidaceae / Allium / Uncertain taxa\n+44\t66\tUnannotated read\n+45\t161\tUnannotated read\n+46\t24\tUnannotated read\n+47\t271\tUnannotated read\n+48\t137\tUnannotated read\n+49\t101\tUnannotated read\n+50\t1\tUnannotated read\n+50\t38\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Rosaceae / Uncertain taxa / Uncertain taxa\n+51\t55\tUnannotated read\n+52\t150\tUnannotated read\n+53\t42\tUnannotated read\n+54\t21\tUnannotated read\n+55\t20\tUnannotated read\n+56\t75\tUnannotated read\n+57\t89\tUnannotated read\n+58\t52\tUnannotated read\n+59\t19\tUnannotated read\n+60\t145\tUnannotated read\n+61\t63\tUnannotated read\n+62\t127\tUnannotated read\n+63\t107\tUnannotated read\n+64\t73\tUnannotated read\n+65\t34\tUnannotated read\n+66\t48\tUnannotated read\n+67\t16\tUnannotated read\n+68\t163\tUnannotated read\n+69\t23\tUnannotated read\n+70\t147\tUnannotated read\n+71\t22\tUnannotated read\n+72\t91\tUnannotated read\n+73\t13\tUnannotated read\n+74\t11\tUnannotated read\n+75\t57\tUnannotated read\n+76\t19\tUnannotated read\n+77\t69\tUnannotated read\n+78\t45\tUnannotated read\n+79\t44\tUnannotated read\n+80\t27\tUnannotated read\n+81\t18\tUnannotated read\n+81\t24\tViridiplantae / Streptophyta / Magnoliopsida / Rosales / Uncertain taxa / Uncertain taxa / Uncertain taxa\n+82\t71\tUnannotated read\n+83\t71\tUnannotated read\n+84\t13\tUnannotated read\n+85\t15\tUnannotated read\n+86\t23\tUnannotated read\n+87\t56\tUnannotated read\n+88\t10\tUnannotated read\n+89\t13\tUnannotated read\n+90\t121\tUnannotated read\n+91\t17\tUnannotated read\n+92\t28\tUnannotated read\n+93\t55\tUnannotated read\n+94\t22\tUnannotated read\n+95\t10\tUnannotated read\n+96\t16\tUnannotated read\n+97\t77\tUnannotated read\n+98\t12\tUnannotated read\n+99\t13\tUnannotated read\n+100\t26\tUnannotated read\n+101\t16\tUnannotated read\n+102\t21\tUnannotated read\n+103\t10\tUnannotated read\n+104\t8\tUnannotated read\n+105\t102\tUnannotated read\n+106\t9\tUnannotated read\n+107\t25\tUnannotated read\n+108\t11\tUnannotated read\n+109\t73\tUnannotated read\n+110\t34\tUnannotated read\n+111\t10\tUnannotated'..b'd\n+363\t1\tUnannotated read\n+364\t1\tUnannotated read\n+365\t1\tUnannotated read\n+366\t1\tUnannotated read\n+367\t1\tUnannotated read\n+368\t1\tUnannotated read\n+369\t1\tUnannotated read\n+370\t1\tUnannotated read\n+371\t1\tUnannotated read\n+372\t1\tUnannotated read\n+373\t1\tUnannotated read\n+374\t1\tUnannotated read\n+375\t1\tUnannotated read\n+376\t1\tUnannotated read\n+377\t1\tUnannotated read\n+378\t1\tUnannotated read\n+379\t1\tUnannotated read\n+380\t1\tUnannotated read\n+381\t1\tUnannotated read\n+382\t1\tUnannotated read\n+383\t1\tUnannotated read\n+384\t1\tUnannotated read\n+385\t1\tUnannotated read\n+386\t6\tUnannotated read\n+387\t3\tUnannotated read\n+388\t1\tUnannotated read\n+389\t4\tUnannotated read\n+390\t1\tUnannotated read\n+391\t2\tUnannotated read\n+392\t1\tUnannotated read\n+393\t4\tUnannotated read\n+394\t2\tUnannotated read\n+395\t1\tViridiplantae / Streptophyta / Magnoliopsida / Solanales / Solanaceae / Uncertain taxa / Uncertain taxa\n+396\t1\tUnannotated read\n+397\t1\tUnannotated read\n+398\t1\tUnannotated read\n+399\t2\tUnannotated read\n+400\t1\tUnannotated read\n+401\t1\tUnannotated read\n+402\t2\tUnannotated read\n+403\t2\tUnannotated read\n+404\t1\tUnannotated read\n+405\t9\tUnannotated read\n+406\t1\tUnannotated read\n+407\t1\tUnannotated read\n+408\t1\tUnannotated read\n+409\t3\tUnannotated read\n+410\t2\tUnannotated read\n+411\t1\tUnannotated read\n+412\t1\tUnannotated read\n+413\t4\tUnannotated read\n+414\t1\tUnannotated read\n+415\t1\tUnannotated read\n+416\t2\tUnannotated read\n+417\t1\tUnannotated read\n+418\t3\tUnannotated read\n+419\t1\tUnannotated read\n+420\t1\tUnannotated read\n+421\t1\tUnannotated read\n+422\t1\tUnannotated read\n+423\t1\tUnannotated read\n+424\t6\tUnannotated read\n+425\t1\tUnannotated read\n+426\t1\tUnannotated read\n+427\t1\tUnannotated read\n+428\t1\tUnannotated read\n+429\t1\tUnannotated read\n+430\t6\tUnannotated read\n+431\t1\tUnannotated read\n+432\t1\tUnannotated read\n+433\t1\tUnannotated read\n+434\t1\tUnannotated read\n+435\t3\tUnannotated read\n+436\t1\tUnannotated read\n+437\t1\tUnannotated read\n+438\t1\tUnannotated read\n+439\t1\tUnannotated read\n+440\t1\tUnannotated read\n+441\t1\tUnannotated read\n+442\t1\tUnannotated read\n+443\t1\tViridiplantae / Streptophyta / Magnoliopsida / Ranunculales / Ranunculaceae / Ranunculus / Ranunculus repens\n+444\t3\tUnannotated read\n+445\t2\tUnannotated read\n+446\t1\tUnannotated read\n+447\t1\tUnannotated read\n+448\t2\tUnannotated read\n+449\t1\tUnannotated read\n+450\t1\tViridiplantae / Streptophyta / Magnoliopsida / Fagales / Betulaceae / Alnus / Alnus incana\n+451\t1\tUnannotated read\n+452\t1\tUnannotated read\n+453\t1\tUnannotated read\n+454\t1\tUnannotated read\n+455\t1\tUnannotated read\n+456\t2\tUnannotated read\n+457\t1\tUnannotated read\n+458\t1\tUnannotated read\n+459\t1\tUnannotated read\n+460\t1\tUnannotated read\n+461\t1\tUnannotated read\n+462\t2\tUnannotated read\n+463\t4\tUnannotated read\n+464\t5\tUnannotated read\n+465\t1\tUnannotated read\n+466\t1\tUnannotated read\n+467\t1\tUnannotated read\n+468\t1\tUnannotated read\n+469\t1\tUnannotated read\n+470\t1\tUnannotated read\n+471\t1\tUnannotated read\n+472\t1\tUnannotated read\n+473\t1\tUnannotated read\n+474\t1\tUnannotated read\n+475\t1\tUnannotated read\n+476\t1\tUnannotated read\n+477\t1\tUnannotated read\n+478\t1\tUnannotated read\n+479\t1\tUnannotated read\n+480\t1\tUnannotated read\n+481\t1\tUnannotated read\n+482\t1\tUnannotated read\n+483\t1\tUnannotated read\n+484\t1\tUnannotated read\n+485\t1\tUnannotated read\n+486\t2\tUnannotated read\n+487\t3\tUnannotated read\n+488\t1\tUnannotated read\n+489\t2\tUnannotated read\n+490\t5\tUnannotated read\n+491\t1\tUnannotated read\n+492\t1\tUnannotated read\n+493\t5\tUnannotated read\n+494\t2\tUnannotated read\n+495\t1\tUnannotated read\n+496\t1\tUnannotated read\n+497\t1\tUnannotated read\n+498\t1\tUnannotated read\n+499\t1\tUnannotated read\n+500\t1\tUnannotated read\n+501\t1\tUnannotated read\n+502\t1\tUnannotated read\n+503\t1\tUnannotated read\n+504\t1\tUnannotated read\n+505\t1\tUnannotated read\n+506\t1\tUnannotated read\n+507\t1\tUnannotated read\n+508\t1\tUnannotated read\n+509\t1\tUnannotated read\n+510\t3\tUnannotated read\n+511\t1\tUnannotated read\n+512\t1\tUnannotated read\n+513\t5\tUnannotated read\n+514\t3\tUnannotated read\n+515\t2\tUnannotated read\n+516\t1\tUnannotated read\n+517\t4\tUnannotated read\n+518\t2\tUnannotated read\n' |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/taxa_out.xlsx |
| b |
| Binary file test-data/taxa_out.xlsx has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/test2_evalue_out.png |
| b |
| Binary file test-data/test2_evalue_out.png has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/test2_evalue_out.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test2_evalue_out.txt Tue Oct 14 09:09:46 2025 +0000 |
| b |
| @@ -0,0 +1,330 @@ +evalue count +unannotated 11754.0 +2.8e-40 59691 +2.16e-52 6595 +1.3e-38 6105 +2.57e-35 3332 +1.57e-48 3254 +1.24e-38 1895 +5e-43 1573 +3.97e-44 1530 +4.61e-38 1459 +7.25e-36 1352 +8.25e-41 1259 +6.06e-37 975 +4.74e-32 902 +1.01e-50 820 +7.04e-47 639 +5.52e-37 639 +3.94e-27 601 +5.790000000000001e-37 532 +1.12e-44 476 +7.310000000000001e-47 439 +9.92e-40 349 +7.32e-30 332 +3.51e-39 306 +1.85e-42 246 +3.84e-39 239 +1.19e-33 197 +3.28e-45 193 +3.62e-39 191 +1.01e-39 190 +2.33e-41 179 +3.58e-50 160 +2.5e-46 150 +6.56e-42 142 +2.05e-36 134 +3.37e-34 128 +2.15e-36 127 +1.32e-38 113 +3.15e-45 104 +2.92e-40 91 +1.63e-37 76 +2.6e-46 75 +2.2e-30 70 +5.210000000000001e-43 68 +1.95e-36 65 +1.77e-42 64 +4.68e-49 60 +9.08e-35 57 +2.23e-41 56 +1.28e-38 53 +8.6e-41 48 +2.11e-36 46 +2.69e-35 42 +1.84e-25 38 +6.289999999999999e-42 36 +4.22e-33 35 +1.16e-44 29 +1.36e-38 28 +3.4e-45 27 +1.41e-43 27 +3.400000000000001e-28 27 +2.8e-51 26 +1.66e-48 25 +1.68e-37 24 +3.43e-15 23 +1.02e-50 22 +6.150000000000001e-37 22 +7.78e-52 21 +1.08e-39 21 +9.53e-35 21 +1.07e-39 20 +4.68e-38 20 +7.77e-30 19 +7.689999999999999e-52 18 +2.42e-41 17 +9.97e-16 17 +2.84e-40 16 +1.04e-39 16 +9.72e-51 15 +1.52e-43 15 +1.61e-37 15 +3.05e-40 14 +4.82e-38 14 +1.2e-27 14 +1.18e-14 14 +5.58e-48 13 +2.18e-47 13 +7.299999999999999e-47 13 +9.23e-35 13 +3.46e-50 12 +2.03e-47 12 +1.21e-44 12 +7.600000000000001e-36 12 +1.21e-33 12 +2.89e-16 12 +5.71e-48 10 +1.47e-43 10 +4.47e-38 10 +5.97e-37 10 +3.32e-34 10 +6.45e-25 9 +3.68e-39 8 +1.26e-38 8 +4.54e-38 8 +9.380000000000001e-35 8 +1e-10 8 +9.95e-51 7 +5.65e-48 7 +1.66e-37 7 +6.24e-31 7 +1.58e-43 6 +5.14e-43 6 +2.36e-41 6 +4.4e-38 6 +1.73e-37 6 +7.84e-36 6 +2.61e-35 6 +1.52e-32 6 +1.23e-14 6 +4.03e-14 6 +6.56e-11 6 +3.62e-50 5 +4.74e-49 5 +1.65e-48 5 +7.220000000000001e-47 5 +9.109999999999999e-46 5 +1.8e-42 5 +2.97e-40 5 +3.78e-39 5 +5.88e-37 5 +1.03e-28 5 +2.23e-18 5 +8.38e-17 5 +1.29e-14 5 +4.64e-14 5 +5.48e-13 5 +9.17e-11 5 +9.6e-11 5 +1.45e-43 4 +8.13e-41 4 +2.08e-36 4 +2.18e-36 4 +1.54e-32 4 +1.67e-31 4 +6.130000000000001e-31 4 +2.33e-30 4 +4.8e-20 4 +6.41e-19 4 +6.99e-18 4 +3.74e-15 4 +3.9e-15 4 +6.08e-53 3 +2.63e-46 3 +4.02e-44 3 +4.13e-44 3 +1.43e-43 3 +6.47e-42 3 +6.65e-42 3 +2.29e-41 3 +8.48e-41 3 +4.96e-38 3 +7.37e-36 3 +7.49e-36 3 +2.73e-35 3 +3.43e-34 3 +1.7e-31 3 +3.62e-28 3 +5.1e-26 3 +2.42e-17 3 +4.24e-14 3 +1.27e-49 2 +1.61e-48 2 +6.189999999999999e-48 2 +2.2e-47 2 +2.66e-46 2 +3.32e-45 2 +1.51e-43 2 +5.41e-43 2 +1.87e-42 2 +2.39e-41 2 +7.9e-41 2 +8.36e-41 2 +8.71e-41 2 +1.98e-36 2 +2.78e-35 2 +3.21e-34 2 +1.17e-33 2 +5.56e-32 2 +1.42e-26 2 +1.48e-26 2 +5.460000000000001e-26 2 +5.99e-25 2 +7.35e-24 2 +8.339999999999999e-24 2 +2.57e-23 2 +2.71e-23 2 +1.67e-19 2 +1.78e-19 2 +1.95e-19 2 +2.02e-18 2 +2.38e-18 2 +7.77e-18 2 +3.25e-16 2 +1.08e-15 2 +3.59e-15 2 +4.44e-14 2 +4.84e-14 2 +5.74e-13 2 +1.6e-12 2 +1.97e-12 2 +2.16e-12 2 +2.48e-52 1 +2.73e-51 1 +1.06e-50 1 +3.74e-50 1 +1.23e-49 1 +1.3e-49 1 +4.36e-49 1 +5.78e-48 1 +1.98e-47 1 +2.1e-47 1 +7.75e-47 1 +2.53e-46 1 +9e-46 1 +3.36e-45 1 +1.13e-44 1 +1.18e-44 1 +1.19e-44 1 +1.28e-44 1 +4.24e-44 1 +4.5e-44 1 +5.28e-43 1 +5.620000000000001e-43 1 +6.82e-42 1 +2.45e-41 1 +8.02e-41 1 +9.18e-41 1 +9.51e-41 1 +3.01e-40 1 +1.05e-39 1 +1.1e-39 1 +1.32e-39 1 +3.73e-39 1 +3.89e-39 1 +1.34e-38 1 +1.46e-38 1 +4.89e-38 1 +1.56e-37 1 +1.79e-37 1 +5.7e-37 1 +6.240000000000001e-37 1 +2.02e-36 1 +6.9e-36 1 +7.02e-36 1 +7.14e-36 1 +7.72e-36 1 +8.19e-36 1 +8.31e-36 1 +2.65e-35 1 +8.63e-35 1 +8.930000000000001e-35 1 +9.69e-35 1 +3.05e-34 1 +3.76e-34 1 +1.15e-33 1 +3.8e-33 1 +4.15e-33 1 +4.37e-33 1 +4.65e-33 1 +1.34e-32 1 +1.49e-32 1 +1.67e-32 1 +5.740000000000001e-32 1 +1.74e-31 1 +6.95e-31 1 +2.25e-30 1 +7.93e-30 1 +2.85e-29 1 +9.07e-29 1 +9.46e-29 1 +1.45e-27 1 +4.04e-27 1 +1.39e-26 1 +1.71e-25 1 +6.29e-25 1 +9.5e-23 1 +9.759999999999999e-23 1 +3.24e-22 1 +3.33e-22 1 +3.42e-22 1 +1.13e-21 1 +1.16e-21 1 +1.2e-21 1 +3.95e-21 1 +1.38e-20 1 +1.46e-20 1 +5.11e-20 1 +1.73e-19 1 +5.81e-19 1 +6.01e-19 1 +8.03e-18 1 +2.61e-17 1 +2.7e-17 1 +2.98e-17 1 +9.05e-17 1 +9.38e-17 1 +9.72e-17 1 +1.01e-16 1 +1.04e-16 1 +3.01e-16 1 +3.13e-16 1 +3.86e-16 1 +4.1e-16 1 +4.05e-15 1 +4.99e-15 1 +1.51e-14 1 +1.68e-14 1 +1.74e-14 1 +5.04e-14 1 +5.45e-14 1 +6.45e-14 1 +1.6e-13 1 +1.74e-13 1 +6.26e-13 1 +6.78e-13 1 +7.3e-13 1 +2.06e-12 1 +5.4e-12 1 +8.73e-11 1 |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/test2_sim_extra_out.png |
| b |
| Binary file test-data/test2_sim_extra_out.png has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/test2_sim_extra_out.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test2_sim_extra_out.txt Tue Oct 14 09:09:46 2025 +0000 |
| b |
| @@ -0,0 +1,110 @@ +# Average similarity: 98.94 +# Standard deviation: 0.68 +similarity count +100.0 23803 +99.47 1 +99.46 1 +99.44 3 +99.43 2 +99.42 2 +99.4 1 +99.39 4 +99.38 2 +99.37 1 +99.22 2 +99.21 1 +99.07 6600 +99.06 167 +99.05 3 +99.03 4 +99.02 2 +99.01 5 +99.0 438 +98.99 105 +98.98 174 +98.97 654 +98.96 37 +98.95 694 +98.94 41 +98.92 96 +98.91 777 +98.9 28 +98.89 237 +98.88 308 +98.86 35 +98.85 104 +98.84 6 +98.83 1 +98.82 59663 +98.81 1575 +98.8 238 +98.78 362 +98.77 34 +98.75 145 +98.74 1 +98.73 917 +98.72 113 +98.7 6 +98.67 1 +98.65 2 +98.63 2 +98.59 3 +98.57 77 +98.56 1 +98.55 3 +98.48 28 +98.46 2 +98.41 1 +98.39 2 +98.36 43 +98.35 1 +98.33 2 +98.31 1 +98.28 3 +98.21 92 +98.18 5 +98.15 25 +98.13 853 +98.11 42 +98.1 1 +98.08 4 +98.04 3 +98.02 8 +98.0 36 +97.98 8 +97.96 22 +97.94 188 +97.92 17 +97.89 52 +97.87 14 +97.85 13 +97.83 325 +97.8 20 +97.78 1188 +97.75 197 +97.73 17 +97.7 19 +97.67 159 +97.65 7487 +97.62 387 +97.59 96 +97.56 73 +97.53 8 +97.5 1392 +97.47 132 +97.44 32 +97.4 1 +97.37 14 +97.3 3 +97.27 1 +97.26 12 +97.25 2 +97.22 8 +97.2 91 +97.18 1 +97.17 2 +97.14 11 +97.12 2 +97.1 1 +97.03 5 +97.0 946 |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/test2_sim_out.png |
| b |
| Binary file test-data/test2_sim_out.png has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/test2_sim_out.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test2_sim_out.txt Tue Oct 14 09:09:46 2025 +0000 |
| b |
| @@ -0,0 +1,110 @@ +# Average similarity: 98.94 +# Standard deviation: 0.68 +similarity count +100.0 23803 +99.47 1 +99.46 1 +99.44 3 +99.43 2 +99.42 2 +99.4 1 +99.39 4 +99.38 2 +99.37 1 +99.22 2 +99.21 1 +99.07 6600 +99.06 167 +99.05 3 +99.03 4 +99.02 2 +99.01 5 +99.0 438 +98.99 105 +98.98 174 +98.97 654 +98.96 37 +98.95 694 +98.94 41 +98.92 96 +98.91 777 +98.9 28 +98.89 237 +98.88 308 +98.86 35 +98.85 104 +98.84 6 +98.83 1 +98.82 59663 +98.81 1575 +98.8 238 +98.78 362 +98.77 34 +98.75 145 +98.74 1 +98.73 917 +98.72 113 +98.7 6 +98.67 1 +98.65 2 +98.63 2 +98.59 3 +98.57 77 +98.56 1 +98.55 3 +98.48 28 +98.46 2 +98.41 1 +98.39 2 +98.36 43 +98.35 1 +98.33 2 +98.31 1 +98.28 3 +98.21 92 +98.18 5 +98.15 25 +98.13 853 +98.11 42 +98.1 1 +98.08 4 +98.04 3 +98.02 8 +98.0 36 +97.98 8 +97.96 22 +97.94 188 +97.92 17 +97.89 52 +97.87 14 +97.85 13 +97.83 325 +97.8 20 +97.78 1188 +97.75 197 +97.73 17 +97.7 19 +97.67 159 +97.65 7487 +97.62 387 +97.59 96 +97.56 73 +97.53 8 +97.5 1392 +97.47 132 +97.44 32 +97.4 1 +97.37 14 +97.3 3 +97.27 1 +97.26 12 +97.25 2 +97.22 8 +97.2 91 +97.18 1 +97.17 2 +97.14 11 +97.12 2 +97.1 1 +97.03 5 +97.0 946 |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/test_2count_extra_out.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test_2count_extra_out.txt Tue Oct 14 09:09:46 2025 +0000 |
| b |
| b'@@ -0,0 +1,539 @@\n+cluster\tunannotated\tannotated\ttotal\tperc_unannotated\tperc_annotated\n+0\t1.0\t0\t1.0\t100.00\t0.00\n+1\t16.0\t68214\t68230.0\t0.02\t99.98\n+2\t9.0\t7796\t7805.0\t0.12\t99.88\n+3\t7364.0\t3\t7367.0\t99.96\t0.04\n+4\t49.0\t521\t570.0\t8.60\t91.40\n+5\t1648.0\t1\t1649.0\t99.94\t0.06\n+6\t2.0\t1857\t1859.0\t0.11\t99.89\n+7\t390.0\t1\t391.0\t99.74\t0.26\n+8\t15.0\t2148\t2163.0\t0.69\t99.31\n+9\t142.0\t4337\t4479.0\t3.17\t96.83\n+10\t1.0\t0\t1.0\t100.00\t0.00\n+11\t2.0\t1014\t1016.0\t0.20\t99.80\n+12\t1.0\t0\t1.0\t100.00\t0.00\n+13\t57.0\t0\t57.0\t100.00\t0.00\n+14\t41.0\t0\t41.0\t100.00\t0.00\n+15\t7.0\t18\t25.0\t28.00\t72.00\n+16\t1.0\t2\t3.0\t33.33\t66.67\n+17\t1.0\t12\t13.0\t7.69\t92.31\n+18\t0.0\t1\t1.0\t0.00\t100.00\n+19\t1.0\t0\t1.0\t100.00\t0.00\n+20\t1.0\t1\t2.0\t50.00\t50.00\n+21\t1.0\t1\t2.0\t50.00\t50.00\n+22\t1.0\t0\t1.0\t100.00\t0.00\n+23\t1.0\t0\t1.0\t100.00\t0.00\n+24\t0.0\t33\t33.0\t0.00\t100.00\n+25\t1.0\t0\t1.0\t100.00\t0.00\n+26\t1.0\t1\t2.0\t50.00\t50.00\n+27\t1.0\t0\t1.0\t100.00\t0.00\n+28\t2.0\t0\t2.0\t100.00\t0.00\n+29\t1.0\t0\t1.0\t100.00\t0.00\n+30\t2.0\t7\t9.0\t22.22\t77.78\n+31\t1.0\t16\t17.0\t5.88\t94.12\n+32\t1.0\t0\t1.0\t100.00\t0.00\n+33\t0.0\t15\t15.0\t0.00\t100.00\n+34\t1.0\t0\t1.0\t100.00\t0.00\n+35\t1.0\t0\t1.0\t100.00\t0.00\n+36\t1.0\t3718\t3719.0\t0.03\t99.97\n+37\t0.0\t133\t133.0\t0.00\t100.00\n+38\t1.0\t0\t1.0\t100.00\t0.00\n+39\t1.0\t0\t1.0\t100.00\t0.00\n+40\t0.0\t8\t8.0\t0.00\t100.00\n+41\t0.0\t1\t1.0\t0.00\t100.00\n+42\t1.0\t855\t856.0\t0.12\t99.88\n+43\t1.0\t0\t1.0\t100.00\t0.00\n+44\t0.0\t1\t1.0\t0.00\t100.00\n+45\t1.0\t0\t1.0\t100.00\t0.00\n+46\t0.0\t1\t1.0\t0.00\t100.00\n+47\t0.0\t1\t1.0\t0.00\t100.00\n+48\t1.0\t0\t1.0\t100.00\t0.00\n+49\t1.0\t0\t1.0\t100.00\t0.00\n+50\t1.0\t0\t1.0\t100.00\t0.00\n+51\t1.0\t0\t1.0\t100.00\t0.00\n+52\t1.0\t0\t1.0\t100.00\t0.00\n+53\t0.0\t1\t1.0\t0.00\t100.00\n+54\t0.0\t2\t2.0\t0.00\t100.00\n+55\t1.0\t0\t1.0\t100.00\t0.00\n+56\t1.0\t0\t1.0\t100.00\t0.00\n+57\t0.0\t8\t8.0\t0.00\t100.00\n+58\t0.0\t5\t5.0\t0.00\t100.00\n+59\t1.0\t0\t1.0\t100.00\t0.00\n+60\t0.0\t2\t2.0\t0.00\t100.00\n+61\t1.0\t1\t2.0\t50.00\t50.00\n+62\t0.0\t1\t1.0\t0.00\t100.00\n+63\t0.0\t1\t1.0\t0.00\t100.00\n+64\t0.0\t3\t3.0\t0.00\t100.00\n+65\t1.0\t0\t1.0\t100.00\t0.00\n+66\t0.0\t169\t169.0\t0.00\t100.00\n+67\t1.0\t0\t1.0\t100.00\t0.00\n+68\t27.0\t15\t42.0\t64.29\t35.71\n+69\t1.0\t555\t556.0\t0.18\t99.82\n+70\t1.0\t0\t1.0\t100.00\t0.00\n+71\t1.0\t0\t1.0\t100.00\t0.00\n+72\t1.0\t0\t1.0\t100.00\t0.00\n+73\t0.0\t1\t1.0\t0.00\t100.00\n+74\t1.0\t0\t1.0\t100.00\t0.00\n+75\t1.0\t0\t1.0\t100.00\t0.00\n+76\t1.0\t0\t1.0\t100.00\t0.00\n+77\t1.0\t0\t1.0\t100.00\t0.00\n+78\t2.0\t1\t3.0\t66.67\t33.33\n+79\t1.0\t0\t1.0\t100.00\t0.00\n+80\t1.0\t0\t1.0\t100.00\t0.00\n+81\t0.0\t1\t1.0\t0.00\t100.00\n+82\t2.0\t0\t2.0\t100.00\t0.00\n+83\t1.0\t0\t1.0\t100.00\t0.00\n+84\t1.0\t0\t1.0\t100.00\t0.00\n+85\t1.0\t0\t1.0\t100.00\t0.00\n+86\t0.0\t1\t1.0\t0.00\t100.00\n+87\t2.0\t0\t2.0\t100.00\t0.00\n+88\t1.0\t0\t1.0\t100.00\t0.00\n+89\t1.0\t0\t1.0\t100.00\t0.00\n+90\t1.0\t0\t1.0\t100.00\t0.00\n+91\t1.0\t0\t1.0\t100.00\t0.00\n+92\t58.0\t35\t93.0\t62.37\t37.63\n+93\t1.0\t0\t1.0\t100.00\t0.00\n+94\t1.0\t0\t1.0\t100.00\t0.00\n+95\t1.0\t0\t1.0\t100.00\t0.00\n+96\t1.0\t122\t123.0\t0.81\t99.19\n+97\t1.0\t4\t5.0\t20.00\t80.00\n+98\t1.0\t0\t1.0\t100.00\t0.00\n+99\t1.0\t0\t1.0\t100.00\t0.00\n+100\t1.0\t0\t1.0\t100.00\t0.00\n+101\t0.0\t1\t1.0\t0.00\t100.00\n+102\t1.0\t0\t1.0\t100.00\t0.00\n+103\t1.0\t0\t1.0\t100.00\t0.00\n+104\t30.0\t0\t30.0\t100.00\t0.00\n+105\t0.0\t1\t1.0\t0.00\t100.00\n+106\t1.0\t0\t1.0\t100.00\t0.00\n+107\t2.0\t0\t2.0\t100.00\t0.00\n+108\t0.0\t1\t1.0\t0.00\t100.00\n+109\t0.0\t1\t1.0\t0.00\t100.00\n+110\t1.0\t0\t1.0\t100.00\t0.00\n+111\t1.0\t0\t1.0\t100.00\t0.00\n+112\t0.0\t10\t10.0\t0.00\t100.00\n+113\t1.0\t1\t2.0\t50.00\t50.00\n+114\t1.0\t0\t1.0\t100.00\t0.00\n+115\t0.0\t27\t27.0\t0.00\t100.00\n+116\t1.0\t0\t1.0\t100.00\t0.00\n+117\t1.0\t0\t1.0\t100.00\t0.00\n+118\t1.0\t0\t1.0\t100.00\t0.00\n+119\t1.0\t0\t1.0\t100.00\t0.00\n+120\t1.0\t0\t1.0\t100.00\t0.00\n+121\t8.0\t30\t38.0\t21.05\t78.95\n+122\t2.0\t1\t3.0\t66.67\t33.33\n+123\t2.0\t0\t2.0\t100.00\t0.00\n+124\t0.0\t3\t3.0\t0.00\t100.00\n+125\t1.0\t0\t1.0\t100.00\t0.00\n+126\t0.0\t1\t1.0\t0.00\t100.00\n+127\t0.0\t1\t1.0\t0.00\t100.00\n+128\t0.0\t21\t21.0\t0.00\t100.00\n+129\t13.0\t0\t13.0\t100.00\t0.00\n+130\t1.0\t0\t1.0\t100.00\t0.00\n+131\t0.0\t2\t2.0\t0.00\t100.00\n+132\t1.0\t0\t1.0\t100.00\t0.00\n+133\t0.0\t1\t1.0\t0.00\t100.00\n+134\t1.0\t0\t1.0\t100.00\t0.00\n+135\t0.0\t1\t1.0\t0.00\t100.00\n+136\t8.0\t1292\t1300.0\t0.62\t99.38\n+137\t0.0\t122\t122.0\t0.00\t100.00\n+138\t0.0\t458\t458.0\t0.00\t100.00\n+139\t1.0\t0\t1.0\t100.00\t0.00\n+140\t2.0\t0\t2.0\t100.00\t0.00\n+141\t1.0\t1\t2.0\t50.00\t50.00\n+142\t0.0\t1\t1.0\t0.00\t100.00\n+143\t123.0\t0\t123.0\t100.00\t0.00\n+144\t0.0\t19\t'..b'\n+391\t0.0\t2\t2.0\t0.00\t100.00\n+392\t1.0\t0\t1.0\t100.00\t0.00\n+393\t1.0\t0\t1.0\t100.00\t0.00\n+394\t1.0\t0\t1.0\t100.00\t0.00\n+395\t1.0\t0\t1.0\t100.00\t0.00\n+396\t1.0\t0\t1.0\t100.00\t0.00\n+397\t1.0\t656\t657.0\t0.15\t99.85\n+398\t3.0\t0\t3.0\t100.00\t0.00\n+399\t7.0\t0\t7.0\t100.00\t0.00\n+400\t28.0\t0\t28.0\t100.00\t0.00\n+401\t0.0\t4\t4.0\t0.00\t100.00\n+402\t5.0\t0\t5.0\t100.00\t0.00\n+403\t1.0\t0\t1.0\t100.00\t0.00\n+404\t1.0\t0\t1.0\t100.00\t0.00\n+405\t1.0\t0\t1.0\t100.00\t0.00\n+406\t1.0\t0\t1.0\t100.00\t0.00\n+407\t1.0\t0\t1.0\t100.00\t0.00\n+408\t1.0\t0\t1.0\t100.00\t0.00\n+409\t0.0\t6\t6.0\t0.00\t100.00\n+410\t1.0\t0\t1.0\t100.00\t0.00\n+411\t1.0\t0\t1.0\t100.00\t0.00\n+412\t1.0\t0\t1.0\t100.00\t0.00\n+413\t1.0\t0\t1.0\t100.00\t0.00\n+414\t10.0\t0\t10.0\t100.00\t0.00\n+415\t1.0\t0\t1.0\t100.00\t0.00\n+416\t1.0\t0\t1.0\t100.00\t0.00\n+417\t1.0\t0\t1.0\t100.00\t0.00\n+418\t0.0\t2\t2.0\t0.00\t100.00\n+419\t5.0\t0\t5.0\t100.00\t0.00\n+420\t1.0\t373\t374.0\t0.27\t99.73\n+421\t2.0\t0\t2.0\t100.00\t0.00\n+422\t0.0\t1\t1.0\t0.00\t100.00\n+423\t1.0\t0\t1.0\t100.00\t0.00\n+424\t1.0\t0\t1.0\t100.00\t0.00\n+425\t1.0\t0\t1.0\t100.00\t0.00\n+426\t1.0\t0\t1.0\t100.00\t0.00\n+427\t1.0\t0\t1.0\t100.00\t0.00\n+428\t0.0\t1\t1.0\t0.00\t100.00\n+429\t0.0\t1\t1.0\t0.00\t100.00\n+430\t1.0\t0\t1.0\t100.00\t0.00\n+431\t1.0\t0\t1.0\t100.00\t0.00\n+432\t1.0\t0\t1.0\t100.00\t0.00\n+433\t1.0\t0\t1.0\t100.00\t0.00\n+434\t1.0\t0\t1.0\t100.00\t0.00\n+435\t1.0\t0\t1.0\t100.00\t0.00\n+436\t1.0\t0\t1.0\t100.00\t0.00\n+437\t1.0\t0\t1.0\t100.00\t0.00\n+438\t1.0\t0\t1.0\t100.00\t0.00\n+439\t0.0\t1\t1.0\t0.00\t100.00\n+440\t1.0\t0\t1.0\t100.00\t0.00\n+441\t2.0\t0\t2.0\t100.00\t0.00\n+442\t1.0\t0\t1.0\t100.00\t0.00\n+443\t3.0\t0\t3.0\t100.00\t0.00\n+444\t1.0\t0\t1.0\t100.00\t0.00\n+445\t2.0\t0\t2.0\t100.00\t0.00\n+446\t1.0\t0\t1.0\t100.00\t0.00\n+447\t1.0\t0\t1.0\t100.00\t0.00\n+448\t1.0\t0\t1.0\t100.00\t0.00\n+449\t1.0\t0\t1.0\t100.00\t0.00\n+450\t1.0\t0\t1.0\t100.00\t0.00\n+451\t0.0\t1\t1.0\t0.00\t100.00\n+452\t0.0\t1\t1.0\t0.00\t100.00\n+453\t1.0\t0\t1.0\t100.00\t0.00\n+454\t4.0\t0\t4.0\t100.00\t0.00\n+455\t1.0\t0\t1.0\t100.00\t0.00\n+456\t0.0\t1\t1.0\t0.00\t100.00\n+457\t13.0\t0\t13.0\t100.00\t0.00\n+458\t3.0\t0\t3.0\t100.00\t0.00\n+459\t85.0\t0\t85.0\t100.00\t0.00\n+460\t1.0\t0\t1.0\t100.00\t0.00\n+461\t2.0\t0\t2.0\t100.00\t0.00\n+462\t5.0\t0\t5.0\t100.00\t0.00\n+463\t5.0\t0\t5.0\t100.00\t0.00\n+464\t2.0\t0\t2.0\t100.00\t0.00\n+465\t1.0\t0\t1.0\t100.00\t0.00\n+466\t1.0\t0\t1.0\t100.00\t0.00\n+467\t8.0\t0\t8.0\t100.00\t0.00\n+468\t1.0\t0\t1.0\t100.00\t0.00\n+469\t2.0\t0\t2.0\t100.00\t0.00\n+470\t1.0\t0\t1.0\t100.00\t0.00\n+471\t1.0\t0\t1.0\t100.00\t0.00\n+472\t2.0\t0\t2.0\t100.00\t0.00\n+473\t1.0\t0\t1.0\t100.00\t0.00\n+474\t1.0\t0\t1.0\t100.00\t0.00\n+475\t1.0\t0\t1.0\t100.00\t0.00\n+476\t1.0\t0\t1.0\t100.00\t0.00\n+477\t1.0\t0\t1.0\t100.00\t0.00\n+478\t1.0\t0\t1.0\t100.00\t0.00\n+479\t1.0\t0\t1.0\t100.00\t0.00\n+480\t2.0\t0\t2.0\t100.00\t0.00\n+481\t3.0\t0\t3.0\t100.00\t0.00\n+482\t0.0\t1\t1.0\t0.00\t100.00\n+483\t0.0\t1\t1.0\t0.00\t100.00\n+484\t1.0\t0\t1.0\t100.00\t0.00\n+485\t1.0\t0\t1.0\t100.00\t0.00\n+486\t5.0\t0\t5.0\t100.00\t0.00\n+487\t1.0\t0\t1.0\t100.00\t0.00\n+488\t1.0\t0\t1.0\t100.00\t0.00\n+489\t0.0\t1\t1.0\t0.00\t100.00\n+490\t1.0\t0\t1.0\t100.00\t0.00\n+491\t1.0\t0\t1.0\t100.00\t0.00\n+492\t2.0\t0\t2.0\t100.00\t0.00\n+493\t1.0\t0\t1.0\t100.00\t0.00\n+494\t0.0\t1\t1.0\t0.00\t100.00\n+495\t1.0\t0\t1.0\t100.00\t0.00\n+496\t3.0\t0\t3.0\t100.00\t0.00\n+497\t1.0\t0\t1.0\t100.00\t0.00\n+498\t0.0\t1\t1.0\t0.00\t100.00\n+499\t1.0\t0\t1.0\t100.00\t0.00\n+500\t0.0\t1\t1.0\t0.00\t100.00\n+501\t1.0\t0\t1.0\t100.00\t0.00\n+502\t1.0\t0\t1.0\t100.00\t0.00\n+503\t1.0\t0\t1.0\t100.00\t0.00\n+504\t1.0\t0\t1.0\t100.00\t0.00\n+505\t1.0\t0\t1.0\t100.00\t0.00\n+506\t1.0\t0\t1.0\t100.00\t0.00\n+507\t3.0\t0\t3.0\t100.00\t0.00\n+508\t1.0\t0\t1.0\t100.00\t0.00\n+509\t1.0\t0\t1.0\t100.00\t0.00\n+510\t1.0\t0\t1.0\t100.00\t0.00\n+511\t1.0\t0\t1.0\t100.00\t0.00\n+512\t0.0\t1\t1.0\t0.00\t100.00\n+513\t1.0\t0\t1.0\t100.00\t0.00\n+514\t1.0\t0\t1.0\t100.00\t0.00\n+515\t1.0\t0\t1.0\t100.00\t0.00\n+516\t0.0\t1\t1.0\t0.00\t100.00\n+517\t1.0\t0\t1.0\t100.00\t0.00\n+518\t0.0\t1\t1.0\t0.00\t100.00\n+519\t0.0\t1\t1.0\t0.00\t100.00\n+520\t1.0\t0\t1.0\t100.00\t0.00\n+521\t1.0\t0\t1.0\t100.00\t0.00\n+522\t0.0\t1\t1.0\t0.00\t100.00\n+523\t1.0\t0\t1.0\t100.00\t0.00\n+524\t1.0\t0\t1.0\t100.00\t0.00\n+525\t1.0\t0\t1.0\t100.00\t0.00\n+526\t1.0\t0\t1.0\t100.00\t0.00\n+527\t1.0\t0\t1.0\t100.00\t0.00\n+528\t1.0\t0\t1.0\t100.00\t0.00\n+529\t2.0\t0\t2.0\t100.00\t0.00\n+530\t0.0\t1\t1.0\t0.00\t100.00\n+531\t1.0\t0\t1.0\t100.00\t0.00\n+532\t0.0\t1\t1.0\t0.00\t100.00\n+533\t1.0\t0\t1.0\t100.00\t0.00\n+534\t1.0\t0\t1.0\t100.00\t0.00\n+535\t1.0\t0\t1.0\t100.00\t0.00\n+536\t1.0\t0\t1.0\t100.00\t0.00\n+TOTAL\t11754.0\t99826\t111580.0\t10.53\t89.47\n' |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/test_2count_out.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test_2count_out.txt Tue Oct 14 09:09:46 2025 +0000 |
| b |
| b'@@ -0,0 +1,539 @@\n+cluster\tunannotated\tannotated\ttotal\tperc_unannotated\tperc_annotated\n+0\t1.0\t0\t1.0\t100.00\t0.00\n+1\t16.0\t68214\t68230.0\t0.02\t99.98\n+2\t9.0\t7796\t7805.0\t0.12\t99.88\n+3\t7364.0\t3\t7367.0\t99.96\t0.04\n+4\t49.0\t521\t570.0\t8.60\t91.40\n+5\t1648.0\t1\t1649.0\t99.94\t0.06\n+6\t2.0\t1857\t1859.0\t0.11\t99.89\n+7\t390.0\t1\t391.0\t99.74\t0.26\n+8\t15.0\t2148\t2163.0\t0.69\t99.31\n+9\t142.0\t4337\t4479.0\t3.17\t96.83\n+10\t1.0\t0\t1.0\t100.00\t0.00\n+11\t2.0\t1014\t1016.0\t0.20\t99.80\n+12\t1.0\t0\t1.0\t100.00\t0.00\n+13\t57.0\t0\t57.0\t100.00\t0.00\n+14\t41.0\t0\t41.0\t100.00\t0.00\n+15\t7.0\t18\t25.0\t28.00\t72.00\n+16\t1.0\t2\t3.0\t33.33\t66.67\n+17\t1.0\t12\t13.0\t7.69\t92.31\n+18\t0.0\t1\t1.0\t0.00\t100.00\n+19\t1.0\t0\t1.0\t100.00\t0.00\n+20\t1.0\t1\t2.0\t50.00\t50.00\n+21\t1.0\t1\t2.0\t50.00\t50.00\n+22\t1.0\t0\t1.0\t100.00\t0.00\n+23\t1.0\t0\t1.0\t100.00\t0.00\n+24\t0.0\t33\t33.0\t0.00\t100.00\n+25\t1.0\t0\t1.0\t100.00\t0.00\n+26\t1.0\t1\t2.0\t50.00\t50.00\n+27\t1.0\t0\t1.0\t100.00\t0.00\n+28\t2.0\t0\t2.0\t100.00\t0.00\n+29\t1.0\t0\t1.0\t100.00\t0.00\n+30\t2.0\t7\t9.0\t22.22\t77.78\n+31\t1.0\t16\t17.0\t5.88\t94.12\n+32\t1.0\t0\t1.0\t100.00\t0.00\n+33\t0.0\t15\t15.0\t0.00\t100.00\n+34\t1.0\t0\t1.0\t100.00\t0.00\n+35\t1.0\t0\t1.0\t100.00\t0.00\n+36\t1.0\t3718\t3719.0\t0.03\t99.97\n+37\t0.0\t133\t133.0\t0.00\t100.00\n+38\t1.0\t0\t1.0\t100.00\t0.00\n+39\t1.0\t0\t1.0\t100.00\t0.00\n+40\t0.0\t8\t8.0\t0.00\t100.00\n+41\t0.0\t1\t1.0\t0.00\t100.00\n+42\t1.0\t855\t856.0\t0.12\t99.88\n+43\t1.0\t0\t1.0\t100.00\t0.00\n+44\t0.0\t1\t1.0\t0.00\t100.00\n+45\t1.0\t0\t1.0\t100.00\t0.00\n+46\t0.0\t1\t1.0\t0.00\t100.00\n+47\t0.0\t1\t1.0\t0.00\t100.00\n+48\t1.0\t0\t1.0\t100.00\t0.00\n+49\t1.0\t0\t1.0\t100.00\t0.00\n+50\t1.0\t0\t1.0\t100.00\t0.00\n+51\t1.0\t0\t1.0\t100.00\t0.00\n+52\t1.0\t0\t1.0\t100.00\t0.00\n+53\t0.0\t1\t1.0\t0.00\t100.00\n+54\t0.0\t2\t2.0\t0.00\t100.00\n+55\t1.0\t0\t1.0\t100.00\t0.00\n+56\t1.0\t0\t1.0\t100.00\t0.00\n+57\t0.0\t8\t8.0\t0.00\t100.00\n+58\t0.0\t5\t5.0\t0.00\t100.00\n+59\t1.0\t0\t1.0\t100.00\t0.00\n+60\t0.0\t2\t2.0\t0.00\t100.00\n+61\t1.0\t1\t2.0\t50.00\t50.00\n+62\t0.0\t1\t1.0\t0.00\t100.00\n+63\t0.0\t1\t1.0\t0.00\t100.00\n+64\t0.0\t3\t3.0\t0.00\t100.00\n+65\t1.0\t0\t1.0\t100.00\t0.00\n+66\t0.0\t169\t169.0\t0.00\t100.00\n+67\t1.0\t0\t1.0\t100.00\t0.00\n+68\t27.0\t15\t42.0\t64.29\t35.71\n+69\t1.0\t555\t556.0\t0.18\t99.82\n+70\t1.0\t0\t1.0\t100.00\t0.00\n+71\t1.0\t0\t1.0\t100.00\t0.00\n+72\t1.0\t0\t1.0\t100.00\t0.00\n+73\t0.0\t1\t1.0\t0.00\t100.00\n+74\t1.0\t0\t1.0\t100.00\t0.00\n+75\t1.0\t0\t1.0\t100.00\t0.00\n+76\t1.0\t0\t1.0\t100.00\t0.00\n+77\t1.0\t0\t1.0\t100.00\t0.00\n+78\t2.0\t1\t3.0\t66.67\t33.33\n+79\t1.0\t0\t1.0\t100.00\t0.00\n+80\t1.0\t0\t1.0\t100.00\t0.00\n+81\t0.0\t1\t1.0\t0.00\t100.00\n+82\t2.0\t0\t2.0\t100.00\t0.00\n+83\t1.0\t0\t1.0\t100.00\t0.00\n+84\t1.0\t0\t1.0\t100.00\t0.00\n+85\t1.0\t0\t1.0\t100.00\t0.00\n+86\t0.0\t1\t1.0\t0.00\t100.00\n+87\t2.0\t0\t2.0\t100.00\t0.00\n+88\t1.0\t0\t1.0\t100.00\t0.00\n+89\t1.0\t0\t1.0\t100.00\t0.00\n+90\t1.0\t0\t1.0\t100.00\t0.00\n+91\t1.0\t0\t1.0\t100.00\t0.00\n+92\t58.0\t35\t93.0\t62.37\t37.63\n+93\t1.0\t0\t1.0\t100.00\t0.00\n+94\t1.0\t0\t1.0\t100.00\t0.00\n+95\t1.0\t0\t1.0\t100.00\t0.00\n+96\t1.0\t122\t123.0\t0.81\t99.19\n+97\t1.0\t4\t5.0\t20.00\t80.00\n+98\t1.0\t0\t1.0\t100.00\t0.00\n+99\t1.0\t0\t1.0\t100.00\t0.00\n+100\t1.0\t0\t1.0\t100.00\t0.00\n+101\t0.0\t1\t1.0\t0.00\t100.00\n+102\t1.0\t0\t1.0\t100.00\t0.00\n+103\t1.0\t0\t1.0\t100.00\t0.00\n+104\t30.0\t0\t30.0\t100.00\t0.00\n+105\t0.0\t1\t1.0\t0.00\t100.00\n+106\t1.0\t0\t1.0\t100.00\t0.00\n+107\t2.0\t0\t2.0\t100.00\t0.00\n+108\t0.0\t1\t1.0\t0.00\t100.00\n+109\t0.0\t1\t1.0\t0.00\t100.00\n+110\t1.0\t0\t1.0\t100.00\t0.00\n+111\t1.0\t0\t1.0\t100.00\t0.00\n+112\t0.0\t10\t10.0\t0.00\t100.00\n+113\t1.0\t1\t2.0\t50.00\t50.00\n+114\t1.0\t0\t1.0\t100.00\t0.00\n+115\t0.0\t27\t27.0\t0.00\t100.00\n+116\t1.0\t0\t1.0\t100.00\t0.00\n+117\t1.0\t0\t1.0\t100.00\t0.00\n+118\t1.0\t0\t1.0\t100.00\t0.00\n+119\t1.0\t0\t1.0\t100.00\t0.00\n+120\t1.0\t0\t1.0\t100.00\t0.00\n+121\t8.0\t30\t38.0\t21.05\t78.95\n+122\t2.0\t1\t3.0\t66.67\t33.33\n+123\t2.0\t0\t2.0\t100.00\t0.00\n+124\t0.0\t3\t3.0\t0.00\t100.00\n+125\t1.0\t0\t1.0\t100.00\t0.00\n+126\t0.0\t1\t1.0\t0.00\t100.00\n+127\t0.0\t1\t1.0\t0.00\t100.00\n+128\t0.0\t21\t21.0\t0.00\t100.00\n+129\t13.0\t0\t13.0\t100.00\t0.00\n+130\t1.0\t0\t1.0\t100.00\t0.00\n+131\t0.0\t2\t2.0\t0.00\t100.00\n+132\t1.0\t0\t1.0\t100.00\t0.00\n+133\t0.0\t1\t1.0\t0.00\t100.00\n+134\t1.0\t0\t1.0\t100.00\t0.00\n+135\t0.0\t1\t1.0\t0.00\t100.00\n+136\t8.0\t1292\t1300.0\t0.62\t99.38\n+137\t0.0\t122\t122.0\t0.00\t100.00\n+138\t0.0\t458\t458.0\t0.00\t100.00\n+139\t1.0\t0\t1.0\t100.00\t0.00\n+140\t2.0\t0\t2.0\t100.00\t0.00\n+141\t1.0\t1\t2.0\t50.00\t50.00\n+142\t0.0\t1\t1.0\t0.00\t100.00\n+143\t123.0\t0\t123.0\t100.00\t0.00\n+144\t0.0\t19\t'..b'\n+391\t0.0\t2\t2.0\t0.00\t100.00\n+392\t1.0\t0\t1.0\t100.00\t0.00\n+393\t1.0\t0\t1.0\t100.00\t0.00\n+394\t1.0\t0\t1.0\t100.00\t0.00\n+395\t1.0\t0\t1.0\t100.00\t0.00\n+396\t1.0\t0\t1.0\t100.00\t0.00\n+397\t1.0\t656\t657.0\t0.15\t99.85\n+398\t3.0\t0\t3.0\t100.00\t0.00\n+399\t7.0\t0\t7.0\t100.00\t0.00\n+400\t28.0\t0\t28.0\t100.00\t0.00\n+401\t0.0\t4\t4.0\t0.00\t100.00\n+402\t5.0\t0\t5.0\t100.00\t0.00\n+403\t1.0\t0\t1.0\t100.00\t0.00\n+404\t1.0\t0\t1.0\t100.00\t0.00\n+405\t1.0\t0\t1.0\t100.00\t0.00\n+406\t1.0\t0\t1.0\t100.00\t0.00\n+407\t1.0\t0\t1.0\t100.00\t0.00\n+408\t1.0\t0\t1.0\t100.00\t0.00\n+409\t0.0\t6\t6.0\t0.00\t100.00\n+410\t1.0\t0\t1.0\t100.00\t0.00\n+411\t1.0\t0\t1.0\t100.00\t0.00\n+412\t1.0\t0\t1.0\t100.00\t0.00\n+413\t1.0\t0\t1.0\t100.00\t0.00\n+414\t10.0\t0\t10.0\t100.00\t0.00\n+415\t1.0\t0\t1.0\t100.00\t0.00\n+416\t1.0\t0\t1.0\t100.00\t0.00\n+417\t1.0\t0\t1.0\t100.00\t0.00\n+418\t0.0\t2\t2.0\t0.00\t100.00\n+419\t5.0\t0\t5.0\t100.00\t0.00\n+420\t1.0\t373\t374.0\t0.27\t99.73\n+421\t2.0\t0\t2.0\t100.00\t0.00\n+422\t0.0\t1\t1.0\t0.00\t100.00\n+423\t1.0\t0\t1.0\t100.00\t0.00\n+424\t1.0\t0\t1.0\t100.00\t0.00\n+425\t1.0\t0\t1.0\t100.00\t0.00\n+426\t1.0\t0\t1.0\t100.00\t0.00\n+427\t1.0\t0\t1.0\t100.00\t0.00\n+428\t0.0\t1\t1.0\t0.00\t100.00\n+429\t0.0\t1\t1.0\t0.00\t100.00\n+430\t1.0\t0\t1.0\t100.00\t0.00\n+431\t1.0\t0\t1.0\t100.00\t0.00\n+432\t1.0\t0\t1.0\t100.00\t0.00\n+433\t1.0\t0\t1.0\t100.00\t0.00\n+434\t1.0\t0\t1.0\t100.00\t0.00\n+435\t1.0\t0\t1.0\t100.00\t0.00\n+436\t1.0\t0\t1.0\t100.00\t0.00\n+437\t1.0\t0\t1.0\t100.00\t0.00\n+438\t1.0\t0\t1.0\t100.00\t0.00\n+439\t0.0\t1\t1.0\t0.00\t100.00\n+440\t1.0\t0\t1.0\t100.00\t0.00\n+441\t2.0\t0\t2.0\t100.00\t0.00\n+442\t1.0\t0\t1.0\t100.00\t0.00\n+443\t3.0\t0\t3.0\t100.00\t0.00\n+444\t1.0\t0\t1.0\t100.00\t0.00\n+445\t2.0\t0\t2.0\t100.00\t0.00\n+446\t1.0\t0\t1.0\t100.00\t0.00\n+447\t1.0\t0\t1.0\t100.00\t0.00\n+448\t1.0\t0\t1.0\t100.00\t0.00\n+449\t1.0\t0\t1.0\t100.00\t0.00\n+450\t1.0\t0\t1.0\t100.00\t0.00\n+451\t0.0\t1\t1.0\t0.00\t100.00\n+452\t0.0\t1\t1.0\t0.00\t100.00\n+453\t1.0\t0\t1.0\t100.00\t0.00\n+454\t4.0\t0\t4.0\t100.00\t0.00\n+455\t1.0\t0\t1.0\t100.00\t0.00\n+456\t0.0\t1\t1.0\t0.00\t100.00\n+457\t13.0\t0\t13.0\t100.00\t0.00\n+458\t3.0\t0\t3.0\t100.00\t0.00\n+459\t85.0\t0\t85.0\t100.00\t0.00\n+460\t1.0\t0\t1.0\t100.00\t0.00\n+461\t2.0\t0\t2.0\t100.00\t0.00\n+462\t5.0\t0\t5.0\t100.00\t0.00\n+463\t5.0\t0\t5.0\t100.00\t0.00\n+464\t2.0\t0\t2.0\t100.00\t0.00\n+465\t1.0\t0\t1.0\t100.00\t0.00\n+466\t1.0\t0\t1.0\t100.00\t0.00\n+467\t8.0\t0\t8.0\t100.00\t0.00\n+468\t1.0\t0\t1.0\t100.00\t0.00\n+469\t2.0\t0\t2.0\t100.00\t0.00\n+470\t1.0\t0\t1.0\t100.00\t0.00\n+471\t1.0\t0\t1.0\t100.00\t0.00\n+472\t2.0\t0\t2.0\t100.00\t0.00\n+473\t1.0\t0\t1.0\t100.00\t0.00\n+474\t1.0\t0\t1.0\t100.00\t0.00\n+475\t1.0\t0\t1.0\t100.00\t0.00\n+476\t1.0\t0\t1.0\t100.00\t0.00\n+477\t1.0\t0\t1.0\t100.00\t0.00\n+478\t1.0\t0\t1.0\t100.00\t0.00\n+479\t1.0\t0\t1.0\t100.00\t0.00\n+480\t2.0\t0\t2.0\t100.00\t0.00\n+481\t3.0\t0\t3.0\t100.00\t0.00\n+482\t0.0\t1\t1.0\t0.00\t100.00\n+483\t0.0\t1\t1.0\t0.00\t100.00\n+484\t1.0\t0\t1.0\t100.00\t0.00\n+485\t1.0\t0\t1.0\t100.00\t0.00\n+486\t5.0\t0\t5.0\t100.00\t0.00\n+487\t1.0\t0\t1.0\t100.00\t0.00\n+488\t1.0\t0\t1.0\t100.00\t0.00\n+489\t0.0\t1\t1.0\t0.00\t100.00\n+490\t1.0\t0\t1.0\t100.00\t0.00\n+491\t1.0\t0\t1.0\t100.00\t0.00\n+492\t2.0\t0\t2.0\t100.00\t0.00\n+493\t1.0\t0\t1.0\t100.00\t0.00\n+494\t0.0\t1\t1.0\t0.00\t100.00\n+495\t1.0\t0\t1.0\t100.00\t0.00\n+496\t3.0\t0\t3.0\t100.00\t0.00\n+497\t1.0\t0\t1.0\t100.00\t0.00\n+498\t0.0\t1\t1.0\t0.00\t100.00\n+499\t1.0\t0\t1.0\t100.00\t0.00\n+500\t0.0\t1\t1.0\t0.00\t100.00\n+501\t1.0\t0\t1.0\t100.00\t0.00\n+502\t1.0\t0\t1.0\t100.00\t0.00\n+503\t1.0\t0\t1.0\t100.00\t0.00\n+504\t1.0\t0\t1.0\t100.00\t0.00\n+505\t1.0\t0\t1.0\t100.00\t0.00\n+506\t1.0\t0\t1.0\t100.00\t0.00\n+507\t3.0\t0\t3.0\t100.00\t0.00\n+508\t1.0\t0\t1.0\t100.00\t0.00\n+509\t1.0\t0\t1.0\t100.00\t0.00\n+510\t1.0\t0\t1.0\t100.00\t0.00\n+511\t1.0\t0\t1.0\t100.00\t0.00\n+512\t0.0\t1\t1.0\t0.00\t100.00\n+513\t1.0\t0\t1.0\t100.00\t0.00\n+514\t1.0\t0\t1.0\t100.00\t0.00\n+515\t1.0\t0\t1.0\t100.00\t0.00\n+516\t0.0\t1\t1.0\t0.00\t100.00\n+517\t1.0\t0\t1.0\t100.00\t0.00\n+518\t0.0\t1\t1.0\t0.00\t100.00\n+519\t0.0\t1\t1.0\t0.00\t100.00\n+520\t1.0\t0\t1.0\t100.00\t0.00\n+521\t1.0\t0\t1.0\t100.00\t0.00\n+522\t0.0\t1\t1.0\t0.00\t100.00\n+523\t1.0\t0\t1.0\t100.00\t0.00\n+524\t1.0\t0\t1.0\t100.00\t0.00\n+525\t1.0\t0\t1.0\t100.00\t0.00\n+526\t1.0\t0\t1.0\t100.00\t0.00\n+527\t1.0\t0\t1.0\t100.00\t0.00\n+528\t1.0\t0\t1.0\t100.00\t0.00\n+529\t2.0\t0\t2.0\t100.00\t0.00\n+530\t0.0\t1\t1.0\t0.00\t100.00\n+531\t1.0\t0\t1.0\t100.00\t0.00\n+532\t0.0\t1\t1.0\t0.00\t100.00\n+533\t1.0\t0\t1.0\t100.00\t0.00\n+534\t1.0\t0\t1.0\t100.00\t0.00\n+535\t1.0\t0\t1.0\t100.00\t0.00\n+536\t1.0\t0\t1.0\t100.00\t0.00\n+TOTAL\t11754.0\t99826\t111580.0\t10.53\t89.47\n' |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/test_2processed.xlsx |
| b |
| Binary file test-data/test_2processed.xlsx has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/test_2processed_extra.xlsx |
| b |
| Binary file test-data/test_2processed_extra.xlsx has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/test_2taxa_extra_out.xlsx |
| b |
| Binary file test-data/test_2taxa_extra_out.xlsx has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/test_2taxa_out.xlsx |
| b |
| Binary file test-data/test_2taxa_out.xlsx has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/test_count.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test_count.txt Tue Oct 14 09:09:46 2025 +0000 |
| b |
| @@ -0,0 +1,26 @@ +cluster unannotated annotated total perc_unannotated perc_annotated +0 2.0 408 410.0 0.49 99.51 +1 1.0 0 1.0 100.00 0.00 +2 0.0 1 1.0 0.00 100.00 +3 0.0 52 52.0 0.00 100.00 +4 1.0 0 1.0 100.00 0.00 +5 0.0 176 176.0 0.00 100.00 +6 1.0 0 1.0 100.00 0.00 +7 0.0 79 79.0 0.00 100.00 +8 1.0 0 1.0 100.00 0.00 +9 9.0 0 9.0 100.00 0.00 +10 3.0 0 3.0 100.00 0.00 +11 2.0 0 2.0 100.00 0.00 +12 1.0 0 1.0 100.00 0.00 +13 1.0 0 1.0 100.00 0.00 +14 1.0 0 1.0 100.00 0.00 +15 5.0 0 5.0 100.00 0.00 +16 21.0 0 21.0 100.00 0.00 +17 38.0 0 38.0 100.00 0.00 +18 5.0 0 5.0 100.00 0.00 +19 5.0 0 5.0 100.00 0.00 +20 1.0 0 1.0 100.00 0.00 +21 1.0 0 1.0 100.00 0.00 +22 4.0 0 4.0 100.00 0.00 +23 0.0 1 1.0 0.00 100.00 +TOTAL 103.0 717 820.0 12.56 87.44 |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/test_evalue.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test_evalue.txt Tue Oct 14 09:09:46 2025 +0000 |
| b |
| @@ -0,0 +1,20 @@ +evalue count +unannotated 103.0 +1.41e-39 414 +4.99e-39 166 +1.54e-33 72 +6.56e-38 25 +2.32e-37 16 +7.17e-32 6 +1.82e-38 4 +5.07e-39 3 +8.21e-37 2 +1.43e-39 1 +6.45e-38 1 +6.66e-38 1 +2.28e-37 1 +8.62e-37 1 +1.06e-35 1 +1.08e-35 1 +3.33e-30 1 +8.16e-12 1 |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/test_processed_taxa.xlsx |
| b |
| Binary file test-data/test_processed_taxa.xlsx has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/test_pytest.xlsx |
| b |
| Binary file test-data/test_pytest.xlsx has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/test_similarity.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test_similarity.txt Tue Oct 14 09:09:46 2025 +0000 |
| b |
| @@ -0,0 +1,14 @@ +# Average similarity: 99.35 +# Standard deviation: 0.65 +similarity count +100.0 383 +98.89 368 +98.88 18 +98.86 1 +98.73 7 +98.28 1 +98.21 8 +97.8 2 +97.78 29 +97.75 2 +97.73 1 |
| b |
| diff -r 000000000000 -r 00d56396b32a test-data/test_taxa_clusters.xlsx |
| b |
| Binary file test-data/test_taxa_clusters.xlsx has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a tests/__pycache__/pytest3.cpython-313-pytest-8.4.2.pyc |
| b |
| Binary file tests/__pycache__/pytest3.cpython-313-pytest-8.4.2.pyc has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a tests/__pycache__/test_cdhit_analysis.cpython-312-pytest-8.4.2.pyc |
| b |
| Binary file tests/__pycache__/test_cdhit_analysis.cpython-312-pytest-8.4.2.pyc has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a tests/__pycache__/test_cdhit_analysis.cpython-313-pytest-8.4.2.pyc |
| b |
| Binary file tests/__pycache__/test_cdhit_analysis.cpython-313-pytest-8.4.2.pyc has changed |
| b |
| diff -r 000000000000 -r 00d56396b32a tests/test_cdhit_analysis.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_cdhit_analysis.py Tue Oct 14 09:09:46 2025 +0000 |
| [ |
| b'@@ -0,0 +1,626 @@\n+"""\n+Test suite for CD-HIT cluster analysis processor.\n+"""\n+\n+import pytest\n+from pathlib import Path\n+import pandas as pd\n+import os\n+import sys\n+\n+# Add module path\n+sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))\n+from Stage_1_translated.NLOOR_scripts.process_clusters_tool.cdhit_analysis import (\n+ parse_cluster_file,\n+ process_cluster_data,\n+ calculate_cluster_taxa,\n+ write_similarity_output,\n+ write_evalue_output,\n+ write_count_output,\n+ write_taxa_clusters_output,\n+ write_taxa_processed_output,\n+)\n+\n+class TestCDHitAnalysis:\n+ """Test class for CD-HIT cluster analysis processor using real XLSX test data."""\n+\n+ @pytest.fixture(scope="class")\n+ def test_data_dir(self):\n+ """Return path to the test-data directory with real XLSX files."""\n+ base_dir = Path("Stage_1_translated/NLOOR_scripts/process_clusters_tool/test-data")\n+ assert base_dir.exists(), f"Test data directory does not exist: {base_dir}"\n+ return base_dir\n+\n+ @pytest.fixture(scope="class")\n+ def sample_cluster_file(self, test_data_dir):\n+ """Return path to the sample cluster XLSX file."""\n+ cluster_file = test_data_dir / "29-test.clstr.txt"\n+ assert cluster_file.exists(), f"Sample cluster file not found: {cluster_file}"\n+ return str(cluster_file)\n+\n+ @pytest.fixture(scope="class")\n+ def sample_annotation_file(self, test_data_dir):\n+ """Return path to the sample annotation XLSX file."""\n+ annotation_file = test_data_dir / "header_anno_29_test.xlsx"\n+ assert annotation_file.exists(), f"Sample annotation file not found: {annotation_file}"\n+ return str(annotation_file)\n+\n+ @pytest.fixture(scope="class")\n+ def parsed_clusters(self, sample_cluster_file, sample_annotation_file):\n+ """Parse the sample cluster file with annotations."""\n+ return parse_cluster_file(sample_cluster_file, sample_annotation_file)\n+\n+ def test_cluster_parsing_structure(self, parsed_clusters):\n+ """\n+ Test 1: Cluster File Parsing Structure\n+\n+ Verifies that cluster files are correctly parsed into the expected data structure\n+ with proper extraction of headers, counts, similarities, and cluster groupings.\n+ """\n+ # Should have 4 clusters based on sample data\n+ # for x in parsed_clusters: print(x);\n+ assert len(parsed_clusters) == 24, f"Expected 24 clusters, got {len(parsed_clusters)}"\n+\n+ # Test Cluster 0 structure (3 members)\n+ cluster_0 = parsed_clusters[0]\n+ assert len(cluster_0) == 41, "Cluster 0 should have 41 members"\n+ cluster_3 = parsed_clusters[3]\n+ assert len(cluster_3) == 4, "Cluster 3 should have 4 members"\n+\n+ # Check specific member data\n+ assert \'M01687:476:000000000-LL5F5:1:2119:23468:21624_CONS\' in cluster_0, "this read should be in cluster 0"\n+ read1_data = cluster_0[\'M01687:476:000000000-LL5F5:1:2119:23468:21624_CONS\']\n+ assert read1_data[\'count\'] == 1, "read1 count should be 1"\n+ assert read1_data[\'similarity\'] == 97.78, "read1 should be representative (100% similarity)"\n+ assert \'Viridiplantae / Streptophyta / Magnoliopsida / Ericales / Actinidiaceae / Uncertain taxa / Uncertain taxa\' in read1_data[\'taxa\'], "read1 should have this taxa"\n+\n+ # Check non-representative member\n+ assert \'M01687:476:000000000-LL5F5:1:1107:11168:7701_CONS\' in cluster_0, "this read should be in cluster 0"\n+ read2_data = cluster_0[\'M01687:476:000000000-LL5F5:1:1107:11168:7701_CONS\']\n+ assert read2_data[\'count\'] == 1, "read2 count should be 50"\n+ assert read2_data[\'similarity\'] == 100, "read2 similarity should be 100%"\n+ assert read2_data[\'taxa\'] == "Unannotated read"\n+\n+ # Test single-member cluster (Cluster 2)\n+ cluster_2 = parsed_clusters[2]\n+ assert len(cluster_2) == 1, "Cluster 2 should have 1 member"\n+ '..b'self, tmp_path):\n+ """\n+ Test 14: Count Writer with Zero Data and Taxa Clusters with Incomplete Taxa\n+ """\n+ from Stage_1_translated.NLOOR_scripts.process_clusters_tool import cdhit_analysis as ca\n+ count_file = tmp_path / "count.txt"\n+ taxa_file = tmp_path / "taxa.xlsx"\n+\n+ ca.write_count_output([0], [], str(count_file))\n+ assert "TOTAL" in count_file.read_text()\n+\n+ cluster_data = [([0], [], {"bad": 1})]\n+ ca.write_taxa_clusters_output(cluster_data, str(taxa_file))\n+ assert taxa_file.exists()\n+\n+ def test_15_write_taxa_processed_uncertain_and_settings(self, tmp_path):\n+ """\n+ Test 15: Processed Taxa Output with Settings\n+ """\n+ from Stage_1_translated.NLOOR_scripts.process_clusters_tool import cdhit_analysis as ca\n+\n+ class Args:\n+ uncertain_taxa_use_ratio = 0.5\n+ min_to_split = 0.2\n+ min_count_to_split = 2\n+ show_unannotated_clusters = True\n+\n+ out_file = tmp_path / "processed.xlsx"\n+ cluster_data = [([0], [], {"Unannotated read": 2})]\n+ ca.write_taxa_processed_output(cluster_data, Args(), str(out_file))\n+ assert out_file.exists()\n+\n+ def test_16_create_evalue_plot_edge_cases(self, tmp_path):\n+ """\n+ Test 16: E-value Plot Edge Cases\n+ """\n+ from Stage_1_translated.NLOOR_scripts.process_clusters_tool import cdhit_analysis as ca\n+ out = tmp_path / "plot.png"\n+\n+ # Only unannotated\n+ ca.create_evalue_plot([0], [0], str(out))\n+ assert not out.exists() or out.stat().st_size == 0\n+\n+ # Empty after filtering\n+ ca.create_evalue_plot([0, ], [], str(out))\n+ assert not out.exists() or out.stat().st_size == 0\n+\n+ # With valid values\n+ ca.create_evalue_plot([0, 1e-5, 1e-3], [2], str(out))\n+ assert out.exists()\n+\n+ def test_17_main_runs_and_prints(self, tmp_path, capsys):\n+ """\n+ Test 17: Main Entry Point\n+ """\n+ from Stage_1_translated.NLOOR_scripts.process_clusters_tool import cdhit_analysis as ca\n+ clstr = tmp_path / "simple.clstr"\n+ clstr.write_text(">Cluster 0\\n0 100nt, >seq1... *\\n")\n+\n+ out = tmp_path / "sim.txt"\n+ args = [\n+ \'--input_cluster\', str(clstr),\n+ \'--output_similarity_txt\', str(out)\n+ ]\n+ ca.main(args)\n+ captured = capsys.readouterr()\n+ assert "Processing complete" in captured.out\n+\n+\n+ def test_16a_prepare_evalue_histogram_valid_data(self):\n+ """\n+ Test 16a: prepare_evalue_histogram returns correct counts/bins.\n+ """\n+ from Stage_1_translated.NLOOR_scripts.process_clusters_tool import cdhit_analysis as ca\n+ counts, bins = ca.prepare_evalue_histogram([1e-5, 1e-3, 0.5], [])\n+ assert counts.sum() == 3 # 3 entries counted\n+ assert len(bins) == 51 # 50 bins => 51 edges\n+\n+ def test_16b_prepare_evalue_histogram_empty(self):\n+ """\n+ Test 16b: prepare_evalue_histogram with empty/invalid data returns (None, None).\n+ """\n+ from Stage_1_translated.NLOOR_scripts.process_clusters_tool import cdhit_analysis as ca\n+ counts, bins = ca.prepare_evalue_histogram([0, None, "bad"], [])\n+ assert counts is None\n+ assert bins is None\n+\n+ def test_16c_create_evalue_plot_creates_file_and_returns_data(self, tmp_path):\n+ """\n+ Test 16c: create_evalue_plot saves a PNG and returns numeric data.\n+ """\n+ from Stage_1_translated.NLOOR_scripts.process_clusters_tool import cdhit_analysis as ca\n+ out = tmp_path / "eval.png"\n+ counts, bins = ca.create_evalue_plot_test([1e-5, 1e-3, 0.5], [], str(out))\n+ assert out.exists()\n+ assert counts.sum() == 3\n+ assert len(bins) == 51\n+\n+\n+if __name__ == "__main__":\n+ # Run all tests in this file\n+ pytest.main([__file__])\n\\ No newline at end of file\n' |