descriptron-core 2.0.1__tar.gz → 2.0.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/NOTICE +15 -8
  2. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/PKG-INFO +1 -1
  3. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/pyproject.toml +1 -1
  4. descriptron_core-2.0.3/pyproject.toml.bak_pre_203_20260924_145320 +81 -0
  5. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_key_feature_filter_v2.py +1 -0
  6. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/.gitignore +0 -0
  7. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/LICENSE +0 -0
  8. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/README.md +0 -0
  9. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/__init__.py +0 -0
  10. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/cli.py +0 -0
  11. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/biorag_system_prompts_v1.txt +0 -0
  12. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/biorag_system_prompts_v2.txt +0 -0
  13. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/diaphorina_user_prompts.txt +0 -0
  14. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/ontologies/aism.obo +0 -0
  15. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/ontologies/pato.obo +0 -0
  16. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/schemas/sdd_1.1/SDD.xsd +0 -0
  17. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/schemas/sdd_1.1/SDD_EnumLib.xsd +0 -0
  18. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/schemas/sdd_1.1/SDD_TypeLib.xsd +0 -0
  19. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/schemas/sdd_1.1/UBIF_BasePattern.xsd +0 -0
  20. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/schemas/sdd_1.1/UBIF_CoreExtensions.xsd +0 -0
  21. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/schemas/sdd_1.1/UBIF_CoreOntology.xsd +0 -0
  22. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/schemas/sdd_1.1/UBIF_EnumLib.xsd +0 -0
  23. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/schemas/sdd_1.1/UBIF_LinneanCore.xsd +0 -0
  24. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/schemas/sdd_1.1/UBIF_TypeLib.xsd +0 -0
  25. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/schemas/sdd_1.1/w3c-schemata/xml.xsd +0 -0
  26. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/schemas/taxpub/sample_treatment_deposit_example.xml +0 -0
  27. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/schemas/taxpub/sample_zookeys_26056_tp.xml +0 -0
  28. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/schemas/taxpub/tax-treatment-NS0-v1_flat.dtd +0 -0
  29. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/taxon_profiles/TEMPLATE_taxon_profile.yaml +0 -0
  30. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/data/biorag_prompts/taxon_profiles/diaphorina_taxon_profile.yaml +0 -0
  31. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/FHS_and_CLAHE_V21.py +0 -0
  32. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_add_discrete_characters_v1.py +0 -0
  33. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_annotation_reorient_v1.py +0 -0
  34. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_annotation_screen_v1.py +0 -0
  35. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_autapomorphy_v1.py +0 -0
  36. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_calibrate_v1.py +0 -0
  37. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_calibration_figures_v1.py +0 -0
  38. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_character_gate_v1.py +0 -0
  39. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_character_reliability_v1.py +0 -0
  40. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_character_robustness_v1.py +0 -0
  41. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_collaborator_forms_v1.py +0 -0
  42. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_computed_sets_v1.py +0 -0
  43. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_confabulation_checker_v2.py +0 -0
  44. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_congruence_compare_v1.py +0 -0
  45. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_description_refiner_v1.py +0 -0
  46. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_descriptive_scoring_v1.py +0 -0
  47. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_feature_policy.py +0 -0
  48. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_frame_orientation_calibrate_v1.py +0 -0
  49. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_frame_orientation_v1.py +0 -0
  50. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_gate_compare_v1.py +0 -0
  51. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_graph_identify_v1.py +0 -0
  52. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_graph_support_figure_v1.py +0 -0
  53. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_homology_frame_v1.py +0 -0
  54. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_instrument_compare_v3.py +0 -0
  55. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_key_builder_v1.py +0 -0
  56. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_key_fuzzy_figures_v1.py +0 -0
  57. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_key_fuzzy_v1.py +0 -0
  58. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_key_holdout_v1.py +0 -0
  59. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_key_jackknife_support_v1.py +0 -0
  60. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_label_conflict_check_v1.py +0 -0
  61. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_llm_backend.py +0 -0
  62. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_make_taxon_profile_v1.py +0 -0
  63. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_methods_summary_figure_v1.py +0 -0
  64. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_novelty_score_v1.py +0 -0
  65. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_ontology_annotator_v2.py +0 -0
  66. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_outgroup_batch_check_v1.py +0 -0
  67. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_outline_shape_v1.py +0 -0
  68. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/biorag_system_prompts_v1.txt +0 -0
  69. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/biorag_system_prompts_v2.txt +0 -0
  70. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/diaphorina_user_prompts.txt +0 -0
  71. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/ontologies/aism.obo +0 -0
  72. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/ontologies/pato.obo +0 -0
  73. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/schemas/sdd_1.1/SDD.xsd +0 -0
  74. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/schemas/sdd_1.1/SDD_EnumLib.xsd +0 -0
  75. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/schemas/sdd_1.1/SDD_TypeLib.xsd +0 -0
  76. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/schemas/sdd_1.1/UBIF_BasePattern.xsd +0 -0
  77. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/schemas/sdd_1.1/UBIF_CoreExtensions.xsd +0 -0
  78. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/schemas/sdd_1.1/UBIF_CoreOntology.xsd +0 -0
  79. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/schemas/sdd_1.1/UBIF_EnumLib.xsd +0 -0
  80. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/schemas/sdd_1.1/UBIF_LinneanCore.xsd +0 -0
  81. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/schemas/sdd_1.1/UBIF_TypeLib.xsd +0 -0
  82. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/schemas/sdd_1.1/w3c-schemata/xml.xsd +0 -0
  83. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/schemas/taxpub/sample_treatment_deposit_example.xml +0 -0
  84. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/schemas/taxpub/sample_zookeys_26056_tp.xml +0 -0
  85. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/schemas/taxpub/tax-treatment-NS0-v1_flat.dtd +0 -0
  86. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/taxon_profiles/TEMPLATE_taxon_profile.yaml +0 -0
  87. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_prompts/taxon_profiles/diaphorina_taxon_profile.yaml +0 -0
  88. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_rebuild_downstream_v1.sh +0 -0
  89. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_reliability_figures_v1.py +0 -0
  90. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_rename_species_v1.py +0 -0
  91. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_rerun_descriptive_tables_v1.sh +0 -0
  92. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_retest_compare_v1.py +0 -0
  93. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_specimen_id.py +0 -0
  94. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_subjective_checks_v1.py +0 -0
  95. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_type_material_v1.py +0 -0
  96. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_vlm_characters_v1.py +0 -0
  97. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_vlm_heatmap_figures_v1.py +0 -0
  98. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_vlm_reliability_figure_v1.py +0 -0
  99. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biorag_vlm_roi_figures_v1.py +0 -0
  100. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biosyslit_rag_retrieval.py +0 -0
  101. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/biosyslit_rag_retrieval_v2.py +0 -0
  102. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/build_monograph_exports_v1.py +0 -0
  103. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/build_species_treatment_docx_v2.py +0 -0
  104. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/color_extraction_with_names-v8.py +0 -0
  105. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/color_phenomics_homology_v2_1.py +0 -0
  106. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/compile_specimen_data.py +0 -0
  107. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/descriptron_rosetta.py +0 -0
  108. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/landmark_gpa_V1.py +0 -0
  109. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/make_reproducibility_bundle.py +0 -0
  110. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/run_full_pipeline_v2.py +0 -0
  111. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/semi_landmark_and_kpts_procrustesV34_GPA.py +0 -0
  112. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/texture_phenomics_from_coco.py +0 -0
  113. {descriptron_core-2.0.1 → descriptron_core-2.0.3}/src/descriptron_core/tools/texture_phenomics_homology.py +0 -0
@@ -14,9 +14,12 @@ Anyone who uses Descriptron, or any software derived from it (including
14
14
  descriptron-core, descriptron-vision, descriptron-gui and descriptron-mcp), in
15
15
  work that is published, presented or distributed must cite:
16
16
 
17
- 1. The software (Descriptron v2):
18
- Van Dam, A. R. Descriptron (version used). GitHub repository.
19
- https://github.com/alexrvandam/Descriptron
17
+ 1. The software (Descriptron v2), by the DOI of the version used:
18
+ Van Dam, A. R. (2026). Descriptron: morphology-driven species descriptions,
19
+ keys and delimitation for dark taxa (Version 2.0.1). Zenodo.
20
+ https://doi.org/10.5281/zenodo.22918056
21
+ (all versions: https://doi.org/10.5281/zenodo.17077224;
22
+ repository: https://github.com/alexrvandam/Descriptron)
20
23
 
21
24
  2. The first Descriptron paper:
22
25
  Van Dam, A. R. & Štarhová Serbina, L. (2026). Descriptron: Artificial
@@ -29,11 +32,15 @@ work that is published, presented or distributed must cite:
29
32
 
30
33
  BibTeX:
31
34
 
32
- @misc{vandam_descriptron_software,
33
- author = {Van Dam, Alex R.},
34
- title = {Descriptron},
35
- howpublished = {GitHub repository},
36
- url = {https://github.com/alexrvandam/Descriptron}
35
+ @software{vandam_2026_descriptron_v201,
36
+ author = {Van Dam, Alex R.},
37
+ title = {Descriptron: morphology-driven species descriptions, keys and
38
+ delimitation for dark taxa},
39
+ version = {v2.0.1},
40
+ year = {2026},
41
+ publisher = {Zenodo},
42
+ doi = {10.5281/zenodo.22918056},
43
+ url = {https://doi.org/10.5281/zenodo.22918056}
37
44
  }
38
45
 
39
46
  @article{vandam2026descriptron,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: descriptron-core
3
- Version: 2.0.1
3
+ Version: 2.0.3
4
4
  Summary: Evidence-tiered species descriptions, keys and audits from phenomic matrices
5
5
  Project-URL: Homepage, https://github.com/alexrvandam/Descriptron
6
6
  Project-URL: Repository, https://github.com/alexrvandam/Descriptron
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "descriptron-core"
7
- version = "2.0.1"
7
+ version = "2.0.3"
8
8
  description = "Evidence-tiered species descriptions, keys and audits from phenomic matrices"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -0,0 +1,81 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "descriptron-core"
7
+ version = "2.0.2"
8
+ description = "Evidence-tiered species descriptions, keys and audits from phenomic matrices"
9
+ readme = "README.md"
10
+ requires-python = ">=3.9"
11
+ license = { text = "Apache-2.0" }
12
+ authors = [{ name = "Alex R. Van Dam" }]
13
+ keywords = ["taxonomy", "morphometrics", "phenomics", "species description", "COCO"]
14
+ classifiers = [
15
+ "Programming Language :: Python :: 3",
16
+ "Topic :: Scientific/Engineering :: Bio-Informatics",
17
+ "Topic :: Scientific/Engineering :: Image Processing",
18
+ "Intended Audience :: Science/Research",
19
+ "License :: OSI Approved :: Apache Software License",
20
+ "Operating System :: OS Independent",
21
+ ]
22
+
23
+ # Derived from the imports of the 62 programs in this package, not from memory:
24
+ # `python -m descriptron_core.cli --list` names them. No torch, no CUDA, no
25
+ # compiler — this installs in about a minute on Linux, macOS and Windows, and
26
+ # with the deposited COCO files it reproduces every analysis in the methods paper.
27
+ dependencies = [
28
+ "numpy>=1.23",
29
+ "pandas>=1.5",
30
+ "scipy>=1.9",
31
+ "matplotlib>=3.6",
32
+ "scikit-learn>=1.2",
33
+ "scikit-image>=0.20",
34
+ "opencv-python-headless>=4.7", # headless: the analysis half never opens a window
35
+ "pillow>=9",
36
+ "pycocotools>=2.0.6",
37
+ "seaborn>=0.12",
38
+ "statsmodels>=0.14",
39
+ "scikit-posthocs>=0.7",
40
+ "umap-learn>=0.5",
41
+ "networkx>=3",
42
+ "pyefd>=1.6",
43
+ "biopython>=1.81",
44
+ "PyYAML>=6",
45
+ "lxml>=4.9",
46
+ "openpyxl>=3.1",
47
+ "python-docx>=1.0", # treatment and monograph .docx export
48
+ ]
49
+
50
+ [project.optional-dependencies]
51
+ # Only needed to *write* treatments. The audit, key, matrix, novelty scoring and
52
+ # delimitation are all deterministic and need no model at all.
53
+ llm = ["anthropic>=0.40"]
54
+ # literature retrieval (the RAG in BioRAG): BioSysLit treatments from Zenodo and your
55
+ # own PDFs. Keyword retrieval needs only the first two; sentence-embedding retrieval
56
+ # (`index --embeddings`) also needs sentence-transformers + faiss-cpu, which pull in torch.
57
+ rag = ["requests>=2.28", "pdfplumber>=0.10"]
58
+ rag-embeddings = ["requests>=2.28", "pdfplumber>=0.10", "sentence-transformers>=2.2", "faiss-cpu>=1.7"]
59
+ dev = ["pytest>=7", "build>=1", "twine>=5"]
60
+
61
+ [project.scripts]
62
+ descriptron = "descriptron_core.cli:main"
63
+ biorag-pipeline = "descriptron_core.cli:run_pipeline"
64
+ biorag-key = "descriptron_core.cli:run_key_builder"
65
+ biorag-audit = "descriptron_core.cli:run_confabulation_checker"
66
+ biorag-novelty = "descriptron_core.cli:run_novelty_score"
67
+ biorag-calibrate = "descriptron_core.cli:run_calibrate"
68
+
69
+ [project.urls]
70
+ Homepage = "https://github.com/alexrvandam/Descriptron"
71
+ Repository = "https://github.com/alexrvandam/Descriptron"
72
+ Issues = "https://github.com/alexrvandam/Descriptron/issues"
73
+
74
+ [tool.hatch.build.targets.wheel]
75
+ packages = ["src/descriptron_core"]
76
+
77
+ # tools/ and data/ sit inside the package directory, so `packages` already ships
78
+ # them; a force-include here would add every file a second time and the build
79
+ # fails with "a second file is being added to the wheel archive at the same path".
80
+ [tool.hatch.build]
81
+ artifacts = ["src/descriptron_core/tools/**", "src/descriptron_core/data/**"]
@@ -216,6 +216,7 @@ def drop_flagged(df: pd.DataFrame, flags: pd.DataFrame, report: dict,
216
216
  """Remove flagged image x structure rows; remove the whole image when
217
217
  >= whole_image_min of its structures are flagged (wrong-scale signature)."""
218
218
  if flags is None or not len(flags):
219
+ report["flagged_rows_removed"] = {"whole_images": [], "rows_removed": 0}
219
220
  return df
220
221
  per_img = flags.groupby("image_base")["category"].nunique()
221
222
  bad_imgs = set(per_img[per_img >= whole_image_min].index)