domainator 1.0.0rc1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of domainator might be problematic. Click here for more details.
- domainator-1.0.0rc1/CHANGELOG.md +220 -0
- domainator-1.0.0rc1/CITATION.cff +38 -0
- domainator-1.0.0rc1/LICENSE.txt +43 -0
- domainator-1.0.0rc1/MANIFEST.in +8 -0
- domainator-1.0.0rc1/MIGRATION.md +560 -0
- domainator-1.0.0rc1/PKG-INFO +470 -0
- domainator-1.0.0rc1/README.md +408 -0
- domainator-1.0.0rc1/pyproject.toml +142 -0
- domainator-1.0.0rc1/rust/Cargo.lock +294 -0
- domainator-1.0.0rc1/rust/Cargo.toml +22 -0
- domainator-1.0.0rc1/rust/src/bgzf_compress.rs +132 -0
- domainator-1.0.0rc1/rust/src/bgzf_scan.rs +226 -0
- domainator-1.0.0rc1/rust/src/lib.rs +126 -0
- domainator-1.0.0rc1/rust/src/parser.rs +960 -0
- domainator-1.0.0rc1/setup.cfg +4 -0
- domainator-1.0.0rc1/setup.py +14 -0
- domainator-1.0.0rc1/src/domainator/__init__.py +38 -0
- domainator-1.0.0rc1/src/domainator/__main__.py +7 -0
- domainator-1.0.0rc1/src/domainator/_hmm_kernels.py +174 -0
- domainator-1.0.0rc1/src/domainator/_mp.py +160 -0
- domainator-1.0.0rc1/src/domainator/bgzf_compress.py +36 -0
- domainator-1.0.0rc1/src/domainator/build_projection.py +256 -0
- domainator-1.0.0rc1/src/domainator/build_ssn.py +471 -0
- domainator-1.0.0rc1/src/domainator/build_tree.py +513 -0
- domainator-1.0.0rc1/src/domainator/clean_sequences.py +263 -0
- domainator-1.0.0rc1/src/domainator/cli/__init__.py +94 -0
- domainator-1.0.0rc1/src/domainator/cli/common.py +383 -0
- domainator-1.0.0rc1/src/domainator/cli/completion.py +69 -0
- domainator-1.0.0rc1/src/domainator/cli/doctor.py +150 -0
- domainator-1.0.0rc1/src/domainator/cli/manifest.py +173 -0
- domainator-1.0.0rc1/src/domainator/cli/registry.py +86 -0
- domainator-1.0.0rc1/src/domainator/color_genbank.py +199 -0
- domainator-1.0.0rc1/src/domainator/color_table_to_legend.py +88 -0
- domainator-1.0.0rc1/src/domainator/colors.py +272 -0
- domainator-1.0.0rc1/src/domainator/compare_contigs.py +684 -0
- domainator-1.0.0rc1/src/domainator/cytoscape.py +311 -0
- domainator-1.0.0rc1/src/domainator/data_matrix.py +1015 -0
- domainator-1.0.0rc1/src/domainator/db_download.py +1102 -0
- domainator-1.0.0rc1/src/domainator/db_index.py +346 -0
- domainator-1.0.0rc1/src/domainator/dedup.py +109 -0
- domainator-1.0.0rc1/src/domainator/deduplicate_genbank.py +444 -0
- domainator-1.0.0rc1/src/domainator/domain_search.py +593 -0
- domainator-1.0.0rc1/src/domainator/domainate.py +1503 -0
- domainator-1.0.0rc1/src/domainator/edge_types.py +94 -0
- domainator-1.0.0rc1/src/domainator/enum_report.py +934 -0
- domainator-1.0.0rc1/src/domainator/errors.py +26 -0
- domainator-1.0.0rc1/src/domainator/expr.py +146 -0
- domainator-1.0.0rc1/src/domainator/external.py +91 -0
- domainator-1.0.0rc1/src/domainator/extract_domains.py +318 -0
- domainator-1.0.0rc1/src/domainator/extract_peptides.py +311 -0
- domainator-1.0.0rc1/src/domainator/extract_unannotated.py +194 -0
- domainator-1.0.0rc1/src/domainator/filter_domains.py +242 -0
- domainator-1.0.0rc1/src/domainator/find_features.py +839 -0
- domainator-1.0.0rc1/src/domainator/foldseek.py +127 -0
- domainator-1.0.0rc1/src/domainator/format_db.py +322 -0
- domainator-1.0.0rc1/src/domainator/genbank.py +101 -0
- domainator-1.0.0rc1/src/domainator/genbank_to_fasta.py +31 -0
- domainator-1.0.0rc1/src/domainator/hmmer_build.py +159 -0
- domainator-1.0.0rc1/src/domainator/hmmer_compare.py +147 -0
- domainator-1.0.0rc1/src/domainator/hmmer_report.py +188 -0
- domainator-1.0.0rc1/src/domainator/hmmer_search.py +434 -0
- domainator-1.0.0rc1/src/domainator/hmmer_select.py +232 -0
- domainator-1.0.0rc1/src/domainator/hmmio.py +402 -0
- domainator-1.0.0rc1/src/domainator/infernal_build.py +187 -0
- domainator-1.0.0rc1/src/domainator/kmer_dist.py +705 -0
- domainator-1.0.0rc1/src/domainator/lean_record.py +494 -0
- domainator-1.0.0rc1/src/domainator/location_ops.py +226 -0
- domainator-1.0.0rc1/src/domainator/locations.py +595 -0
- domainator-1.0.0rc1/src/domainator/matrix_output.py +70 -0
- domainator-1.0.0rc1/src/domainator/matrix_report.py +452 -0
- domainator-1.0.0rc1/src/domainator/model.py +345 -0
- domainator-1.0.0rc1/src/domainator/offsets.py +341 -0
- domainator-1.0.0rc1/src/domainator/output_guardrails.py +157 -0
- domainator-1.0.0rc1/src/domainator/outputs.py +126 -0
- domainator-1.0.0rc1/src/domainator/partial.py +236 -0
- domainator-1.0.0rc1/src/domainator/plot_contigs.py +288 -0
- domainator-1.0.0rc1/src/domainator/report_columns.py +87 -0
- domainator-1.0.0rc1/src/domainator/report_html.py +117 -0
- domainator-1.0.0rc1/src/domainator/rotate_contigs.py +382 -0
- domainator-1.0.0rc1/src/domainator/select_by_cds.py +713 -0
- domainator-1.0.0rc1/src/domainator/select_by_contig.py +392 -0
- domainator-1.0.0rc1/src/domainator/select_by_coord.py +241 -0
- domainator-1.0.0rc1/src/domainator/seq_dist.py +970 -0
- domainator-1.0.0rc1/src/domainator/seqio.py +512 -0
- domainator-1.0.0rc1/src/domainator/sort_contigs.py +142 -0
- domainator-1.0.0rc1/src/domainator/sparse_scores.py +124 -0
- domainator-1.0.0rc1/src/domainator/sparsify.py +161 -0
- domainator-1.0.0rc1/src/domainator/split_by_cluster.py +395 -0
- domainator-1.0.0rc1/src/domainator/ssn_bundle.py +314 -0
- domainator-1.0.0rc1/src/domainator/ssn_edges.py +769 -0
- domainator-1.0.0rc1/src/domainator/ssn_hierarchy.py +601 -0
- domainator-1.0.0rc1/src/domainator/ssn_navigator.py +345 -0
- domainator-1.0.0rc1/src/domainator/structure_dist.py +504 -0
- domainator-1.0.0rc1/src/domainator/structure_domainate.py +167 -0
- domainator-1.0.0rc1/src/domainator/structure_lib.py +1343 -0
- domainator-1.0.0rc1/src/domainator/structure_search.py +286 -0
- domainator-1.0.0rc1/src/domainator/structure_to_genbank.py +117 -0
- domainator-1.0.0rc1/src/domainator/summary_report.py +475 -0
- domainator-1.0.0rc1/src/domainator/table_writers.py +103 -0
- domainator-1.0.0rc1/src/domainator/taxonomy/__init__.py +4 -0
- domainator-1.0.0rc1/src/domainator/taxonomy/ncbi.py +502 -0
- domainator-1.0.0rc1/src/domainator/taxonomy/records.py +255 -0
- domainator-1.0.0rc1/src/domainator/text_plot.py +38 -0
- domainator-1.0.0rc1/src/domainator/transform_matrix.py +249 -0
- domainator-1.0.0rc1/src/domainator/trim_contigs.py +226 -0
- domainator-1.0.0rc1/src/domainator/viewer.py +76 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/common/appearance.js +340 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/common/bundle_io.js +117 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/common/canvas_view.js +131 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/common/color_picker.js +701 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/common/colors.js +374 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/common/column_charts.js +1449 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/common/controls.js +91 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/common/export.js +88 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/common/gradient_stops.js +512 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/common/metadata.js +143 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/common/metadata_table.js +593 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/common/selection_presets.js +159 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/common/session_state.js +431 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/common/shapes.js +165 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/common/svg_context.js +119 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/common/table_editing.js +851 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/viewer.js +322 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/views/projection/projection.js +529 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/views/projection/view.js +84 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/views/ssn/cluster_view.js +1377 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/views/ssn/controls.js +199 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/views/ssn/extraction.js +582 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/views/ssn/layout_core.js +861 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/views/ssn/layout_worker.js +15 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/views/ssn/layouts.js +1046 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/views/ssn/slider.js +561 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/views/ssn/split_chart.js +543 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/views/ssn/split_chart_hover.js +448 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/views/ssn/view.js +218 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/views/tree/controls.js +426 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/views/tree/msa.js +113 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/views/tree/render.js +586 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/views/tree/rooting.js +308 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/views/tree/tree.js +292 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/js/views/tree/view.js +145 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/viewer.css +1204 -0
- domainator-1.0.0rc1/src/domainator/viewer_app/viewer.html +531 -0
- domainator-1.0.0rc1/src/domainator/viewer_bundle.py +216 -0
- domainator-1.0.0rc1/src/domainator/viewer_html.py +163 -0
- domainator-1.0.0rc1/src/domainator/web/common/charts.js +426 -0
- domainator-1.0.0rc1/src/domainator/web/common/download.js +70 -0
- domainator-1.0.0rc1/src/domainator/web/common/hierarchy.js +165 -0
- domainator-1.0.0rc1/src/domainator/web/common/line_chart.js +348 -0
- domainator-1.0.0rc1/src/domainator/web/common/pack.js +330 -0
- domainator-1.0.0rc1/src/domainator/web/common/panels.js +54 -0
- domainator-1.0.0rc1/src/domainator/web/common/payload.js +48 -0
- domainator-1.0.0rc1/src/domainator/web/common/report.css +298 -0
- domainator-1.0.0rc1/src/domainator/web/common/table.js +515 -0
- domainator-1.0.0rc1/src/domainator/web/reports/matrix_report.html +21 -0
- domainator-1.0.0rc1/src/domainator/web/reports/matrix_report.js +534 -0
- domainator-1.0.0rc1/src/domainator/web/reports/plot_contigs.html +21 -0
- domainator-1.0.0rc1/src/domainator/web/reports/plot_contigs.js +340 -0
- domainator-1.0.0rc1/src/domainator/web/reports/summary_report.html +21 -0
- domainator-1.0.0rc1/src/domainator/web/reports/summary_report.js +132 -0
- domainator-1.0.0rc1/src/domainator/web/reports/table_report.html +25 -0
- domainator-1.0.0rc1/src/domainator/web/reports/table_report.js +21 -0
- domainator-1.0.0rc1/src/domainator.egg-info/PKG-INFO +470 -0
- domainator-1.0.0rc1/src/domainator.egg-info/SOURCES.txt +252 -0
- domainator-1.0.0rc1/src/domainator.egg-info/dependency_links.txt +1 -0
- domainator-1.0.0rc1/src/domainator.egg-info/entry_points.txt +2 -0
- domainator-1.0.0rc1/src/domainator.egg-info/requires.txt +39 -0
- domainator-1.0.0rc1/src/domainator.egg-info/top_level.txt +1 -0
- domainator-1.0.0rc1/test/test_agent_outputs.py +408 -0
- domainator-1.0.0rc1/test/test_annotation_selection.py +278 -0
- domainator-1.0.0rc1/test/test_build_projection.py +224 -0
- domainator-1.0.0rc1/test/test_build_ssn.py +592 -0
- domainator-1.0.0rc1/test/test_build_tree.py +304 -0
- domainator-1.0.0rc1/test/test_cds_selection.py +221 -0
- domainator-1.0.0rc1/test/test_clean_sequences.py +280 -0
- domainator-1.0.0rc1/test/test_cli.py +252 -0
- domainator-1.0.0rc1/test/test_color_genbank.py +233 -0
- domainator-1.0.0rc1/test/test_color_table_to_legend.py +33 -0
- domainator-1.0.0rc1/test/test_compare_contigs.py +795 -0
- domainator-1.0.0rc1/test/test_coordinates.py +141 -0
- domainator-1.0.0rc1/test/test_cytoscape.py +40 -0
- domainator-1.0.0rc1/test/test_data_matrix.py +1483 -0
- domainator-1.0.0rc1/test/test_db_download.py +502 -0
- domainator-1.0.0rc1/test/test_db_index.py +229 -0
- domainator-1.0.0rc1/test/test_dedup.py +255 -0
- domainator-1.0.0rc1/test/test_deduplicate_genbank.py +447 -0
- domainator-1.0.0rc1/test/test_defaults_match_cli.py +37 -0
- domainator-1.0.0rc1/test/test_docs_commands.py +122 -0
- domainator-1.0.0rc1/test/test_domain_search.py +1199 -0
- domainator-1.0.0rc1/test/test_domainate.py +1026 -0
- domainator-1.0.0rc1/test/test_enum_report.py +1088 -0
- domainator-1.0.0rc1/test/test_external.py +79 -0
- domainator-1.0.0rc1/test/test_extract_domains.py +358 -0
- domainator-1.0.0rc1/test/test_extract_peptides.py +341 -0
- domainator-1.0.0rc1/test/test_extract_unannotated.py +112 -0
- domainator-1.0.0rc1/test/test_filter_domains.py +252 -0
- domainator-1.0.0rc1/test/test_find_features.py +431 -0
- domainator-1.0.0rc1/test/test_foldseek.py +185 -0
- domainator-1.0.0rc1/test/test_format_db.py +252 -0
- domainator-1.0.0rc1/test/test_genbank.py +90 -0
- domainator-1.0.0rc1/test/test_genbank_to_fasta.py +21 -0
- domainator-1.0.0rc1/test/test_hmmer_build.py +224 -0
- domainator-1.0.0rc1/test/test_hmmer_compare.py +91 -0
- domainator-1.0.0rc1/test/test_hmmer_report.py +100 -0
- domainator-1.0.0rc1/test/test_hmmer_search.py +189 -0
- domainator-1.0.0rc1/test/test_hmmer_select.py +157 -0
- domainator-1.0.0rc1/test/test_infernal_build.py +148 -0
- domainator-1.0.0rc1/test/test_kmer_dist.py +311 -0
- domainator-1.0.0rc1/test/test_lean_record.py +421 -0
- domainator-1.0.0rc1/test/test_library_api.py +165 -0
- domainator-1.0.0rc1/test/test_list_arguments.py +171 -0
- domainator-1.0.0rc1/test/test_location_ops.py +151 -0
- domainator-1.0.0rc1/test/test_manifest.py +106 -0
- domainator-1.0.0rc1/test/test_matrix_report.py +739 -0
- domainator-1.0.0rc1/test/test_mp.py +145 -0
- domainator-1.0.0rc1/test/test_ncbi_taxonomy.py +156 -0
- domainator-1.0.0rc1/test/test_outputs.py +53 -0
- domainator-1.0.0rc1/test/test_partition.py +142 -0
- domainator-1.0.0rc1/test/test_plot_contigs.py +177 -0
- domainator-1.0.0rc1/test/test_region_naming.py +260 -0
- domainator-1.0.0rc1/test/test_report_browser.py +643 -0
- domainator-1.0.0rc1/test/test_report_columns.py +42 -0
- domainator-1.0.0rc1/test/test_report_html.py +134 -0
- domainator-1.0.0rc1/test/test_rotate_contigs.py +399 -0
- domainator-1.0.0rc1/test/test_select_by_cds.py +583 -0
- domainator-1.0.0rc1/test/test_select_by_contig.py +286 -0
- domainator-1.0.0rc1/test/test_select_by_coord.py +158 -0
- domainator-1.0.0rc1/test/test_seq_dist.py +850 -0
- domainator-1.0.0rc1/test/test_sort_contigs.py +188 -0
- domainator-1.0.0rc1/test/test_sparsify.py +92 -0
- domainator-1.0.0rc1/test/test_split_by_cluster.py +420 -0
- domainator-1.0.0rc1/test/test_ssn_edges.py +162 -0
- domainator-1.0.0rc1/test/test_ssn_hierarchy.py +335 -0
- domainator-1.0.0rc1/test/test_ssn_viewer_browser.py +7119 -0
- domainator-1.0.0rc1/test/test_ssn_viewer_js.py +75 -0
- domainator-1.0.0rc1/test/test_structure_dist.py +570 -0
- domainator-1.0.0rc1/test/test_structure_domainate.py +192 -0
- domainator-1.0.0rc1/test/test_structure_lib.py +509 -0
- domainator-1.0.0rc1/test/test_structure_reseek.py +498 -0
- domainator-1.0.0rc1/test/test_structure_search.py +207 -0
- domainator-1.0.0rc1/test/test_structure_to_genbank.py +135 -0
- domainator-1.0.0rc1/test/test_summary_report.py +311 -0
- domainator-1.0.0rc1/test/test_taxonomy_filters.py +360 -0
- domainator-1.0.0rc1/test/test_taxonomy_records.py +84 -0
- domainator-1.0.0rc1/test/test_transform_matrix.py +707 -0
- domainator-1.0.0rc1/test/test_trim_contigs.py +138 -0
- domainator-1.0.0rc1/test/test_utils.py +924 -0
- domainator-1.0.0rc1/test/test_viewer.py +1181 -0
- domainator-1.0.0rc1/test/test_viewer_appearance_browser.py +645 -0
- domainator-1.0.0rc1/test/test_viewer_appearance_js.py +98 -0
- domainator-1.0.0rc1/test/test_viewer_image_export_browser.py +329 -0
- domainator-1.0.0rc1/test/test_viewer_projection_browser.py +221 -0
- domainator-1.0.0rc1/test/test_viewer_rooting_js.py +203 -0
- domainator-1.0.0rc1/test/test_viewer_tree_browser.py +594 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). From 1.0 on,
|
|
4
|
+
Domainator follows [Semantic Versioning](https://semver.org/): what stays stable is listed in
|
|
5
|
+
[docs/stability.md](docs/stability.md).
|
|
6
|
+
|
|
7
|
+
## v.1.0.0rc1
|
|
8
|
+
|
|
9
|
+
The 1.0rc1 release: one `domainator` command, consistent options, a documented Python API and
|
|
10
|
+
documented, versioned file formats. Many options were renamed; [MIGRATION.md](MIGRATION.md)
|
|
11
|
+
lists every change from 0.x.
|
|
12
|
+
|
|
13
|
+
Extraction options and matching Python keywords now use `keep_parent_id` instead
|
|
14
|
+
of `keep_name` on all three extract tools. `extract_unannotated` also renames
|
|
15
|
+
`min_length` to `min_region_length` and `min_score` to `min_annotation_score`.
|
|
16
|
+
Defaults and extraction behavior are unchanged; old names are not aliases.
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
- domainate `--prostt5_weights` (and `--prostt5_device`): `--foldseek` searches can predict
|
|
20
|
+
their query 3Di sequences with foldseek's built-in ProstT5 instead of ESM-2 3B 3Di, which
|
|
21
|
+
needs only the foldseek binary and its weights (`foldseek databases ProstT5`), not PyTorch
|
|
22
|
+
or esmologs. `--foldseek` now needs exactly one of `--esm2_3di_weights` and
|
|
23
|
+
`--prostt5_weights`.
|
|
24
|
+
- db_download `--uniprot_dir` reads the UniProt release files from a local mirror instead of
|
|
25
|
+
downloading them, and an `--ncbi_summary` whose `ftp_path` is a local directory (relative to
|
|
26
|
+
the summary) is read from a local mirror of the NCBI genomes server. The tests now run
|
|
27
|
+
offline against small mirrors under `test/data/db_download/`.
|
|
28
|
+
- Shared additive contig/domain list and file argument setup for extract tools,
|
|
29
|
+
`select_by_cds`, and `select_by_contig`. Help now documents supported file formats,
|
|
30
|
+
normalization, empty-file behavior, and record selectors versus input restrictions;
|
|
31
|
+
existing defaults and selection behavior are unchanged.
|
|
32
|
+
- `extract_peptides --domain_expr` for Boolean domain selection and
|
|
33
|
+
`select_by_cds --name_field` for explicit CDS name resolution, with matching
|
|
34
|
+
keyword-only library parameters. Existing default name precedence is preserved.
|
|
35
|
+
- Shared taxonomy filters on extract_domains, extract_peptides, extract_unannotated,
|
|
36
|
+
and select_by_cds, consistent with select_by_contig and domain_search. CDS/domain
|
|
37
|
+
extraction filters original anchors, not expanded neighborhoods.
|
|
38
|
+
- `--taxonomy_unknown {exclude,include,evaluate,error}` on these selection, extraction,
|
|
39
|
+
and sequence-search tools. The default excludes unresolved taxonomy even for
|
|
40
|
+
negated criteria such as `~2`; empty-lineage evaluation is an explicit opt-in.
|
|
41
|
+
- `--has_search_hit` on select_by_cds, select_by_contig, extract_peptides, extract_domains,
|
|
42
|
+
and rotate_contigs: an independent search-hit selection criterion that bypasses domain
|
|
43
|
+
names, expressions, and database restrictions, honors quality cutoffs, and participates
|
|
44
|
+
in `--invert` where available. `--annotation_type {domainator,domain_search,all}` now
|
|
45
|
+
consistently selects annotation sources rather than implicitly adding search hits.
|
|
46
|
+
- The `domainator <command>` dispatcher, with `domainator --help`, `domainator completion
|
|
47
|
+
{bash,zsh,tcsh}` (shell tab completion) and `domainator doctor` (which optional programs
|
|
48
|
+
and packages are installed, and whether PyTorch can use the GPU).
|
|
49
|
+
- `-v/--verbose` and `-q/--quiet` on every command; errors you can fix are one-line messages.
|
|
50
|
+
- `--fasta_out` on every command that writes GenBank, alongside `-o/--genbank_out`.
|
|
51
|
+
- `docs/stability.md`, and a reference for every GenBank qualifier Domainator writes in
|
|
52
|
+
`docs/file_formats.md`.
|
|
53
|
+
- A `schema_version` key in the `--json_out` of summary_report, matrix_report and ssn_navigator.
|
|
54
|
+
- hmmer_compare `--alignments_out`.
|
|
55
|
+
- The Domainator Viewer: build_ssn, build_tree and build_projection now write one HTML page
|
|
56
|
+
(`--html_out`) and one bundle format (`--dvb_out`, `.dvb`, docs/file_formats.md) for networks,
|
|
57
|
+
trees and projections alike, with the same selection-driven metadata table, editing, colors,
|
|
58
|
+
presets, column charts and saved sessions for all three. `domainator viewer` writes the page
|
|
59
|
+
empty, or opening a bundle (`-i`).
|
|
60
|
+
- build_ssn `--html_out`, `--dvb_out`, `--merge_impact_metric`, `--label_by`, `--categorical` and
|
|
61
|
+
`--name`, replacing build_ssn_viewer; `--xgmml_out` is no longer required.
|
|
62
|
+
- build_tree `--html_out` and `--dvb_out`: the tree in the Domainator Viewer, with a multiple
|
|
63
|
+
sequence alignment beside it (`--msa`, aligned FASTA); clade selection, collapsing,
|
|
64
|
+
ladderizing, a cut slider that numbers the clades below it, and Newick and FASTA exports of
|
|
65
|
+
the selection. `--newick` reads a tree built elsewhere instead of a matrix. Also
|
|
66
|
+
`--color_by`, `--color_table`, `--color_table_out`, `--palette_offset`, `--max_color_groups`,
|
|
67
|
+
`--label_by`, `--categorical`, `--name`, `--subset`, `--subset_file` and `--max_output_gb`.
|
|
68
|
+
- build_projection `--dvb_out`, `--label_by`, `--categorical` and `--name`.
|
|
69
|
+
- `--palette_offset` on build_ssn, build_projection and plot_contigs, and a matching start
|
|
70
|
+
offset in the SSN viewer's color picker,
|
|
71
|
+
for coloring a second column without reusing the palette colors a first one used.
|
|
72
|
+
- A Zoom box in the SSN viewer's View Settings that shows and sets the zoom, so a zoom can
|
|
73
|
+
be copied from one viewer into another.
|
|
74
|
+
- `domainator describe`: a JSON description of every command and its options (the tool
|
|
75
|
+
manifest, docs/tool_manifest.md), for GUIs and workflow systems.
|
|
76
|
+
- A command-line reference generated from the parsers (docs/cli/), and a documentation site
|
|
77
|
+
with the Python API reference, published at https://nebiolabs.github.io/domainator/.
|
|
78
|
+
- Python extras: `projection` (UMAP), `structure` (torch and fair-esm), `dev`.
|
|
79
|
+
- `scripts/bench/bench.py`, a benchmark of common steps.
|
|
80
|
+
- The `domain_search` function searches SeqRecords as well as file partitions, reading a stream
|
|
81
|
+
of records only a few batches ahead of the search; it has a `batch_size` parameter.
|
|
82
|
+
- On free-threaded Python with the GIL off, parallel work runs in threads instead of processes
|
|
83
|
+
(`DOMAINATOR_MP_START_METHOD` overrides this). Domainator builds on free-threaded Python.
|
|
84
|
+
|
|
85
|
+
### Changed
|
|
86
|
+
- Taxonomy follows NCBI's rank changes: `superkingdom` is gone from current taxdumps, so
|
|
87
|
+
enum_report's `taxid:`/`taxname:` examples use `domain` (Bacteria, Archaea, Eukaryota;
|
|
88
|
+
use `realm` for viruses). summary_report's taxonomy tree keeps the new `cellular root`
|
|
89
|
+
("cellular organisms") and `acellular root` ("Viruses") ranks as nodes, as it does
|
|
90
|
+
domains, realms and kingdoms.
|
|
91
|
+
- Peptide and CDS-neighborhood selection now invert only the combined OR selectors,
|
|
92
|
+
never strand or other independent restrictions. With no selectors, both library
|
|
93
|
+
and CLI calls select all eligible CDSs; inversion warns and is ignored.
|
|
94
|
+
- domain_search and select_by_cds replace deduplication switches with the single-choice
|
|
95
|
+
`--dedup {none,id,sequence,sequence_rc}` policy. Their defaults remain
|
|
96
|
+
none and id, respectively. Ranked searches retain the top `--max_hits` winners
|
|
97
|
+
incrementally in each worker and the global merge, replacing weaker copies
|
|
98
|
+
without buffering all candidates. Deduplication relies on Domainator's
|
|
99
|
+
invariant that the same record ID identifies the same sequence.
|
|
100
|
+
The pre-release multi-value syntax is removed; configuration and library APIs
|
|
101
|
+
also use one policy string.
|
|
102
|
+
- Commands run as `domainator <command>`; the `<command>.py` scripts are gone.
|
|
103
|
+
- build_projection `--html_out` writes the Domainator Viewer, which selects points into a metadata
|
|
104
|
+
table; its on-screen legend is now the viewer's legend export.
|
|
105
|
+
- build_tree's xgmml output is laid out as a rectangular tree, colored with `--color_by`; its
|
|
106
|
+
internal nodes are named by their place in the tree in preorder.
|
|
107
|
+
- The SSN viewer is now the Domainator Viewer, and its sources moved from `ssn_viewer/` to
|
|
108
|
+
`viewer_app/` (`ssn_viewer_html.py` is now `viewer_html.py`).
|
|
109
|
+
- Networks for the viewer are `.dvb` bundles, and the viewer saves sessions and extractions as
|
|
110
|
+
`.dvb`. The viewer, `domainator viewer -i` and ssn_navigator still read `.dsnv` bundles.
|
|
111
|
+
- Every output is an explicit `--<content>_out` option, and nothing reads standard input or
|
|
112
|
+
writes standard output unless given `-`.
|
|
113
|
+
- Options with the same meaning have the same name everywhere (see MIGRATION.md).
|
|
114
|
+
- enum_report and hmmer_report choose their columns with one ordered `--columns` list
|
|
115
|
+
(`--columns domains length taxid:genus`) instead of one flag per column.
|
|
116
|
+
- Domainator uses upstream Biopython (1.85 to 1.88) instead of a bundled fork.
|
|
117
|
+
- Python 3.12 or newer is required; wheels use the stable ABI, so one wheel serves every
|
|
118
|
+
Python from 3.12 on (free-threaded Python builds its own).
|
|
119
|
+
- Matrix files are version 2.0 (symmetric matrices are stored as their upper triangle).
|
|
120
|
+
- The conda environment no longer installs TMbed and PyTorch; the README's "Optional: TMbed"
|
|
121
|
+
section says how to add them for `find_features --tmbed`.
|
|
122
|
+
- The command functions take only their main input positionally and are importable as
|
|
123
|
+
`from domainator.<command> import <command>`; their keyword parameters are named like the
|
|
124
|
+
command's options and default like them (domainate's e-value 0.001, not 10; `cpu=0`, all
|
|
125
|
+
cores). Every one has a docstring and type hints.
|
|
126
|
+
- Faster: neighborhood extraction (select_by_cds, domain_search) and extract_domains look only
|
|
127
|
+
at nearby features; HMM databases are prepared once per search, not once per batch.
|
|
128
|
+
- enum_report and hmmer_report `--html_out` pages work offline: the table (sort, per-column
|
|
129
|
+
filters, paging with first/last and go-to-page, movable and resizable columns, a right-click
|
|
130
|
+
"Copy cell value", CSV/TSV/JSON downloads) is Domainator's own JavaScript
|
|
131
|
+
instead of Tabulator from a CDN. The page carries the same rows as `--json_out`, so the
|
|
132
|
+
downloads keep full precision; the table still shows floats to one decimal place.
|
|
133
|
+
- summary_report's `--html_out` page works offline and no longer needs matplotlib or seaborn:
|
|
134
|
+
the contig length histogram (with hover counts, wheel zoom and drag to pan, a bin width box,
|
|
135
|
+
and SVG/PNG downloads) and the zoomable
|
|
136
|
+
taxonomy icicle are drawn by Domainator's own JavaScript instead of a seaborn PNG and d3
|
|
137
|
+
from a CDN, and the domain frequency and co-occurrence tables are sortable, filterable
|
|
138
|
+
tables like enum_report's. The page carries the `--json_out` document, so it shows the
|
|
139
|
+
same numbers. The taxonomy tree's children are now in a fixed order (most contigs first).
|
|
140
|
+
- summary_report's text report (`-o`) lays out its tables as plain aligned columns instead of
|
|
141
|
+
pandas' `to_string`, so the layout no longer changes with the pandas version: numbers are
|
|
142
|
+
right-aligned, `avg score` has one decimal place, and the co-occurrence and taxonomy tables
|
|
143
|
+
lose pandas' row numbers.
|
|
144
|
+
- matrix_report's `--html_out` page works offline: its charts are Domainator's own JavaScript
|
|
145
|
+
instead of Plotly and d3 from a CDN. The clusters-by-threshold and clusters-by-edges charts
|
|
146
|
+
zoom by dragging across them; the split chart lines up with the threshold slider under it,
|
|
147
|
+
and clicking it moves the threshold there; the arrow keys step the slider from stop to stop;
|
|
148
|
+
and each chart, the 100-largest-clusters bubble chart included, downloads as SVG or PNG. The
|
|
149
|
+
page carries the `--json_out` document, so its summary shows the same numbers, in a compact
|
|
150
|
+
block of figures beside each other. Dragging across a chart never selects the page's text.
|
|
151
|
+
- plot_contigs works offline: the plot is Domainator's own JavaScript instead of d3 from a CDN,
|
|
152
|
+
with zoom buttons, SVG/PNG downloads and a details box that lists every value in full. Each
|
|
153
|
+
part of a multi-part feature is now drawn where it is, not all at the feature's start. A
|
|
154
|
+
contig's details list a fixed set of record annotations (references and structured comments
|
|
155
|
+
are left out), and its metadata as the text in the file. `--color_by` needs `--metadata`
|
|
156
|
+
and must name one of its columns; a contig with no value is drawn gray instead of failing.
|
|
157
|
+
- build_projection `--html_out` replaces `--png_out`: an offline, interactive plot of the
|
|
158
|
+
projection, colored as the xgmml is, with each point's metadata on hover, legend entries that
|
|
159
|
+
hide and show their group, zoom and pan, a search by name, X/Y, X/Z and Y/Z views of a 3D
|
|
160
|
+
projection, and SVG/PNG downloads of the current view. A value missing from `--color_table`
|
|
161
|
+
is gray instead of failing.
|
|
162
|
+
|
|
163
|
+
### Removed
|
|
164
|
+
- Taxonomy filters, `--hits_only`, and `--no_annotations` from domainate;
|
|
165
|
+
structure_domainate also drops the latter two. Their public Python functions
|
|
166
|
+
drop the corresponding keywords. Annotation tools retain every input record
|
|
167
|
+
and annotate hits; use the search tools for hit selection.
|
|
168
|
+
- `partition_seqfile` and `partition_seqids` (domainate and domain_search partition their
|
|
169
|
+
input themselves), and `--offset`/`--recs_to_read` (index the database with
|
|
170
|
+
`domainator format_db --index` instead).
|
|
171
|
+
- The `bashplotlib` dependency; `umap-learn` is now an optional extra.
|
|
172
|
+
- The matplotlib and seaborn dependencies: no command needs them. `build_projection
|
|
173
|
+
--png_out` is gone; its `--html_out` page downloads the plot as PNG or SVG.
|
|
174
|
+
- The bundled web GUI (`domainator_server`) and its Flask dependency; a separate GUI project is
|
|
175
|
+
being built on `domainator describe`.
|
|
176
|
+
- build_ssn_viewer: build_ssn `--html_out` and `--dvb_out` write the viewer and its bundle, and
|
|
177
|
+
`domainator viewer` writes the page on its own (see MIGRATION.md).
|
|
178
|
+
|
|
179
|
+
### Fixed
|
|
180
|
+
- hmmer_build reads its input MSA by path, as hmmbuild does. Read through an open file, an
|
|
181
|
+
input whose format could not be guessed (including a blank one) crashed the interpreter with
|
|
182
|
+
a segmentation fault, a SELEX alignment failed with "illegal residue(s)", and the A2M,
|
|
183
|
+
sequential PHYLIP and PSI-BLAST formats were unreachable, since only a file's suffix tells
|
|
184
|
+
them apart (`.a2m`, `.phys`, `.pb`). Standard input is read from a temporary copy, with its
|
|
185
|
+
format guessed from the content.
|
|
186
|
+
- Strand-independent exact deduplication no longer collapses complement-only or
|
|
187
|
+
reverse-only nucleotide sequences; only reverse-complement copies are equivalent.
|
|
188
|
+
- A taxid missing from the NCBI taxonomy database (one newer than the database) crashed
|
|
189
|
+
summary_report and enum_report's taxonomy columns. It is now treated as unknown, with
|
|
190
|
+
blank names and ranks and one warning per taxid suggesting `--taxonomy_update`.
|
|
191
|
+
- summary_report listed domains with equal counts in an arbitrary order once there were more
|
|
192
|
+
than 16 domains; they are now in the order they were first seen.
|
|
193
|
+
- Many bugs found in the 1.0 review, including: `-e` cutoffs that dropped hits equal to the
|
|
194
|
+
cutoff; XGMML values escaped twice; Newick branch lengths rounded to two decimals;
|
|
195
|
+
build_tree crashing on deep trees; extract_peptides `-e` parsed as text; compressed output
|
|
196
|
+
ignored by some commands; a missing-qualifier error that printed a record to standard output;
|
|
197
|
+
matrix_report's kNN edge counts with long neighbor lists; build_projection with
|
|
198
|
+
`--color_table_out` and no colors, and `--pca_args` on sparse matrices.
|
|
199
|
+
- seq_dist's hmmer modes read the target profiles again for every query profile, and
|
|
200
|
+
hmmer_search and hmmer_compare sent every reference profile with every query; each worker
|
|
201
|
+
now gets them once.
|
|
202
|
+
- domain_search's `--batch_size` set the partition size but not how many CDSs were searched at
|
|
203
|
+
once.
|
|
204
|
+
- Output files were created readable only by their owner (mode 0600); they now get the usual
|
|
205
|
+
permissions from the umask.
|
|
206
|
+
- format_db `--shards` failed on compressed (gzip or BGZF) input, and format_db left an empty
|
|
207
|
+
temporary file next to the output whenever its input was compressed.
|
|
208
|
+
- db_download `--db uniprot` and `--db uniprot_gb` wrote only TrEMBL: the TrEMBL download
|
|
209
|
+
overwrote the SwissProt records already written. `--max_records` now caps the total across
|
|
210
|
+
both rather than each.
|
|
211
|
+
- db_download wrote NCBI genomes in the order their downloads finished, so the output, and
|
|
212
|
+
which genomes `--max_records` kept, depended on timing. Genomes are now appended in
|
|
213
|
+
assembly-summary order (rehydrated-file order for the datasets backend), by the parent
|
|
214
|
+
process, so a worker that fails partway never leaves part of a genome in the database.
|
|
215
|
+
- db_download `--append` was ignored for the UniProt databases, which overwrote the file.
|
|
216
|
+
- db_download `--db ncbi_nonredundant_all` failed unless a taxonomy filter was given, because
|
|
217
|
+
the taxonomy it needs to keep one genome per taxid was not loaded.
|
|
218
|
+
- db_download `--db ncbi_representative_all` kept genomes whose `refseq_category` is `na`,
|
|
219
|
+
the same set as `ncbi_all`; like `ncbi_representative_proks`, it now keeps only
|
|
220
|
+
representative and reference genomes.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: "If you use Domainator, please cite the paper below."
|
|
3
|
+
title: Domainator
|
|
4
|
+
type: software
|
|
5
|
+
license: MIT
|
|
6
|
+
repository-code: "https://github.com/nebiolabs/domainator"
|
|
7
|
+
authors:
|
|
8
|
+
- family-names: Johnson
|
|
9
|
+
given-names: Sean R.
|
|
10
|
+
- family-names: Ge
|
|
11
|
+
given-names: Andrew
|
|
12
|
+
- family-names: Lin
|
|
13
|
+
given-names: Yu-Cheng
|
|
14
|
+
- family-names: Sun
|
|
15
|
+
given-names: Zhiyi
|
|
16
|
+
preferred-citation:
|
|
17
|
+
type: article
|
|
18
|
+
title: "Domainator, a Flexible Software Suite for Domain-Based Annotation and Neighborhood Analysis, Identifies Proteins Involved in Antiviral Systems"
|
|
19
|
+
journal: Nucleic Acids Research
|
|
20
|
+
year: 2024
|
|
21
|
+
doi: 10.1093/nar/gkae1175
|
|
22
|
+
authors:
|
|
23
|
+
- family-names: Johnson
|
|
24
|
+
given-names: Sean R.
|
|
25
|
+
- family-names: Weigele
|
|
26
|
+
given-names: Peter
|
|
27
|
+
- family-names: Fomenkov
|
|
28
|
+
given-names: Alexey
|
|
29
|
+
- family-names: Ge
|
|
30
|
+
given-names: Andrew
|
|
31
|
+
- family-names: Vincze
|
|
32
|
+
given-names: Anna
|
|
33
|
+
- family-names: Eaglesham
|
|
34
|
+
given-names: James B.
|
|
35
|
+
- family-names: Roberts
|
|
36
|
+
given-names: Richard J.
|
|
37
|
+
- family-names: Sun
|
|
38
|
+
given-names: Zhiyi
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
Code derived from Biopython (found in src/domainator/Bio) is released under the "Biopython License Agreement" (given in full below). Unless stated otherwise in individual file headers, all Biopython's files are under the "Biopython License Agreement".
|
|
2
|
+
|
|
3
|
+
Some files are explicitly dual licensed under your choice of the "Biopython License Agreement" or the "BSD 3-Clause License" (both given in full below). This is with the intention of later offering all of Biopython under this dual licensing approach.
|
|
4
|
+
|
|
5
|
+
All other code (that is, code not in the "src/domainator/Bio" directory) is Licensed under the MIT License agreement (given in full below).
|
|
6
|
+
|
|
7
|
+
MIT License
|
|
8
|
+
|
|
9
|
+
Copyright (c) 2023 Sean R. Johnson
|
|
10
|
+
|
|
11
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
12
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
13
|
+
in the Software without restriction, including without limitation the rights
|
|
14
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
15
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
16
|
+
furnished to do so, subject to the following conditions:
|
|
17
|
+
|
|
18
|
+
The above copyright notice and this permission notice shall be included in all
|
|
19
|
+
copies or substantial portions of the Software.
|
|
20
|
+
|
|
21
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
22
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
23
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
24
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
25
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
26
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
27
|
+
SOFTWARE.
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
Biopython License Agreement
|
|
31
|
+
Permission to use, copy, modify, and distribute this software and its documentation with or without modifications and for any purpose and without fee is hereby granted, provided that any copyright notices appear in all copies and that both those copyright notices and this permission notice appear in supporting documentation, and that the names of the contributors or copyright holders not be used in advertising or publicity pertaining to distribution of the software without specific prior permission.
|
|
32
|
+
|
|
33
|
+
THE CONTRIBUTORS AND COPYRIGHT HOLDERS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
34
|
+
|
|
35
|
+
BSD 3-Clause License
|
|
36
|
+
Copyright (c) 1999-2023, The Biopython Contributors All rights reserved.
|
|
37
|
+
|
|
38
|
+
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
|
39
|
+
|
|
40
|
+
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
|
41
|
+
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
|
42
|
+
Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
|
43
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Include the native (Rust) extension sources in the sdist so source installs can
|
|
2
|
+
# compile domainator._gbfast (the build falls back to pure Python if Rust is absent).
|
|
3
|
+
include rust/Cargo.toml
|
|
4
|
+
recursive-include rust/src *.rs
|
|
5
|
+
exclude rust/.gitignore
|
|
6
|
+
prune rust/target
|
|
7
|
+
include rust/Cargo.lock
|
|
8
|
+
include CHANGELOG.md MIGRATION.md CITATION.cff
|