rsna-anonymizer 19.1.0.dev4__tar.gz → 19.1.0.dev6__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 (482) hide show
  1. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/CHANGELOG.md +13 -0
  2. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/PKG-INFO +5 -5
  3. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/pyproject.toml +1 -1
  4. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/readme.de.md +4 -4
  5. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/readme.es.md +4 -4
  6. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/readme.fr.md +4 -4
  7. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/readme.md +4 -4
  8. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/batch_process.py +128 -37
  9. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/metadata/detect.py +53 -28
  10. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/ner/entity.py +3 -2
  11. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/pixel/ocr_pipeline.py +82 -25
  12. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/pixel/remove_pixel_phi.py +26 -5
  13. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/pixel/whitelist_io.py +4 -1
  14. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/term_similarity.py +10 -4
  15. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/__init__.py +6 -0
  16. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/pipeline.py +125 -18
  17. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/phi/phi_io.py +22 -2
  18. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/series/create_projections.py +9 -5
  19. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/series/series_io.py +3 -2
  20. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/model/anonymizer.py +119 -0
  21. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/utils/dicom.py +19 -3
  22. rsna_anonymizer-19.1.0.dev6/src/anonymizer/utils/windowing.py +209 -0
  23. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/ai/ai_batch_process_options_dialog.py +152 -30
  24. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/common/app_window.py +23 -1
  25. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/common/tk_mouse.py +4 -0
  26. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/project/dataset.py +61 -6
  27. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/reports/report_text_review.py +8 -2
  28. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/series/histogram.py +40 -8
  29. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/series/image.py +46 -20
  30. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/series/metadata_assessment_dialog.py +41 -0
  31. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/series/projection.py +307 -9
  32. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/series/series.py +5 -7
  33. rsna_anonymizer-19.1.0.dev4/src/anonymizer/utils/windowing.py +0 -90
  34. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/.gitignore +0 -0
  35. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/LICENSE +0 -0
  36. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/__init__.py +0 -0
  37. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/anonymizer.py +0 -0
  38. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/analytics/organ_volume_ranges_ml.json +0 -0
  39. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/dicom_standard/2025e/json/dict_info.json +0 -0
  40. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/dicom_standard/2025e/json/iod_info.json +0 -0
  41. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/dicom_standard/2025e/json/module_info.json +0 -0
  42. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/dicom_standard/2025e/json/uid_info.json +0 -0
  43. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/dicom_standard/2025e/json/version +0 -0
  44. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/dicom_standard/SOURCE.md +0 -0
  45. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/fonts/DINAlternate-Bold.ttf +0 -0
  46. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/icons/create_icns.sh +0 -0
  47. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/icons/kaleidoscope.png +0 -0
  48. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/icons/kaleidoscope_flat.svg +0 -0
  49. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/icons/kaleidoscope_stack_angle.svg +0 -0
  50. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/icons/kaleidoscope_stack_vert.svg +0 -0
  51. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/icons/pause.png +0 -0
  52. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/icons/play.png +0 -0
  53. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/icons/rsna_icon.icns +0 -0
  54. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/icons/rsna_icon.ico +0 -0
  55. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/icons/rsna_icon.png +0 -0
  56. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/icons/rsna_logo_alpha.png +0 -0
  57. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/icons/rsna_logo_head_profile.png +0 -0
  58. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/icons/rsna_logo_head_profile_1024x1024.png +0 -0
  59. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/icons/rsna_logo_head_profile_titled.png +0 -0
  60. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/icons/rsna_titled_logo.svg +0 -0
  61. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/icons/rsna_titled_logo_alpha.png +0 -0
  62. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/icons/signpath_logo.svg +0 -0
  63. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/LC_MESSAGES/messages.mo +0 -0
  64. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/LC_MESSAGES/messages.po +0 -0
  65. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/1_/303/274bersicht.html" +0 -0
  66. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/2_deidentifikationsprotokoll.html +0 -0
  67. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/3_anonymisierungsprojekte_verwalten.html +0 -0
  68. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/4_projekteinstellungen.html +0 -0
  69. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/5_bedienung.html +0 -0
  70. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/6_lizenz.html +0 -0
  71. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/AWSCognitoCredentials.png +0 -0
  72. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/AbfrageAbrufenImportieren.png +0 -0
  73. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/Auswahlabfrage.png +0 -0
  74. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/BildarchivQRServer.png +0 -0
  75. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/Dashboard.png +0 -0
  76. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/Dateiauswahloptionen.png +0 -0
  77. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/DateienImportieren.png +0 -0
  78. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/ExportServer.png +0 -0
  79. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/ExportStudienAWS.png +0 -0
  80. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/ExportStudienStatus.png +0 -0
  81. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/ImportlokalenDateisystem.png +0 -0
  82. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/KlonenProjekts.png +0 -0
  83. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/LokalerServer.png +0 -0
  84. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/Modalit/303/244ten.png" +0 -0
  85. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/Netzwerk-Zeit/303/274berschreitungen.png" +0 -0
  86. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/NeueProjekteinstellungen.png +0 -0
  87. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/NeuesProjekt.png +0 -0
  88. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/Patienten-Such-CSV-Datei.png +0 -0
  89. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/PatientenPHI.png +0 -0
  90. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/Projektschlie/303/237en.png" +0 -0
  91. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/Protokollierungsstufen.png +0 -0
  92. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/Speicherklassen.png +0 -0
  93. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/Speicherverzeichnis.png +0 -0
  94. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/TransferSyntaxen.png +0 -0
  95. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/VerzeichnisAusw/303/244hlen.png" +0 -0
  96. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/Welcome_de_osx_light.png +0 -0
  97. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/Welcome_de_win_light.png +0 -0
  98. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/html/images/Wiederer/303/266ffnenProjekts.png" +0 -0
  99. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/whitelists/ct.txt +0 -0
  100. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/whitelists/dx.txt +0 -0
  101. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/whitelists/mg.txt +0 -0
  102. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/whitelists/mr.txt +0 -0
  103. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/de/whitelists/us.txt +0 -0
  104. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/LC_MESSAGES/messages.mo +0 -0
  105. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/LC_MESSAGES/messages.po +0 -0
  106. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/LOINC_StudyDescription.csv +0 -0
  107. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/1_overview.html +0 -0
  108. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/2_ai features.html +0 -0
  109. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/3_deidentification protocol.html +0 -0
  110. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/4_managing anonymization projects.html +0 -0
  111. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/5_project settings.html +0 -0
  112. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/6_operation.html +0 -0
  113. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/7_license.html +0 -0
  114. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/ai_features/ai batch process.html +0 -0
  115. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/ai_features/embedded_phi.html +0 -0
  116. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/ai_features/face de-identify.html +0 -0
  117. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/ai_features/harmonize.html +0 -0
  118. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/ai_features/remove burnt-in annotation.html +0 -0
  119. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/AWSCognitoCredentials.png +0 -0
  120. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/CloneProject.png +0 -0
  121. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/CloseProject.png +0 -0
  122. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/Dashboard.png +0 -0
  123. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/ExportServer.png +0 -0
  124. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/ExportStudiesAWS.png +0 -0
  125. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/ExportStudiesStatus.png +0 -0
  126. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/ImportFilesDialog.png +0 -0
  127. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/ImportFilesMenu.png +0 -0
  128. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/ImportStudiesDialog.png +0 -0
  129. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/ImportStudiesResult.png +0 -0
  130. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/LocalServer.png +0 -0
  131. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/LoggingLevels.png +0 -0
  132. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/Modalities.png +0 -0
  133. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/NetworkTimeouts.png +0 -0
  134. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/NewProject.png +0 -0
  135. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/NewProjectSettings.png +0 -0
  136. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/OpenLogViewer.png +0 -0
  137. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/OpenRecent.png +0 -0
  138. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/PatientLookupData.png +0 -0
  139. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/PatientLookupSave.png +0 -0
  140. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/QueryRetrieveImport.png +0 -0
  141. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/QueryServer.png +0 -0
  142. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/SelectDirectory.png +0 -0
  143. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/SelectFiles.png +0 -0
  144. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/SelectQuery.png +0 -0
  145. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/StorageClasses.png +0 -0
  146. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/StorageDirectory.png +0 -0
  147. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/TransferSyntaxes.png +0 -0
  148. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/Welcome_en_osx_light.png +0 -0
  149. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/html/images/Welcome_en_win_light.png +0 -0
  150. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/whitelists/ct.txt +0 -0
  151. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/whitelists/dx.txt +0 -0
  152. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/whitelists/mg.txt +0 -0
  153. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/whitelists/mr.txt +0 -0
  154. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/en_US/whitelists/us.txt +0 -0
  155. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/LC_MESSAGES/messages.mo +0 -0
  156. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/LC_MESSAGES/messages.po +0 -0
  157. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/1_visi/303/263n general.html" +0 -0
  158. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/2_protocolo de desidentificaci/303/263n.html" +0 -0
  159. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/3_gesti/303/263n de proyectos.html" +0 -0
  160. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/4_configuraci/303/263n del proyecto.html" +0 -0
  161. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/5_operaci/303/263n.html" +0 -0
  162. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/6_licencia.html +0 -0
  163. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/AWSCognitoCredenciales.png +0 -0
  164. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/AbrirReciente.png +0 -0
  165. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/CerrarProyecto.png +0 -0
  166. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/ClasesDeAlmacenamiento.png +0 -0
  167. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/Clonaci/303/263nDeProyecto.png" +0 -0
  168. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/Configuraci/303/263nDelProyecto.png" +0 -0
  169. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/ConsultarRecuperarImportar.png +0 -0
  170. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/DatosDeB/303/272squedaDePaciente.png" +0 -0
  171. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/DirectorioDeAlmacenamiento.png +0 -0
  172. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/ExportarEstudiosAWS.png +0 -0
  173. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/ExportarEstudiosEstado.png +0 -0
  174. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/GuardarB/303/272squedaDePaciente.png" +0 -0
  175. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/ImportarArchivos.png +0 -0
  176. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/ImportarArchivosDi/303/241logo.png" +0 -0
  177. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/ImportarEstudiosDi/303/241logo.png" +0 -0
  178. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/ImportarEstudiosResultado.png +0 -0
  179. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/Modalidades.png +0 -0
  180. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/NivelesDeRegistro.png +0 -0
  181. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/NuevoProyecto.png +0 -0
  182. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/PanelDeControl.png +0 -0
  183. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/SeleccionarArchivos.png +0 -0
  184. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/SeleccionarDirectorio.png +0 -0
  185. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/SeleccionarImportar.png +0 -0
  186. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/ServidorDeConsulta.png +0 -0
  187. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/ServidorDeExportaci/303/263n.png" +0 -0
  188. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/ServidorLocal.png +0 -0
  189. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/SintaxisDeTransferencia.png +0 -0
  190. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/TimeoutsDeRed.png +0 -0
  191. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/Welcome_es_osx_light.png +0 -0
  192. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html/images/Welcome_es_win_light.png +0 -0
  193. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html_bak/1_visi/303/263n general.html" +0 -0
  194. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html_bak/2_protocolo de desidentificaci/303/263n.html" +0 -0
  195. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html_bak/3_gesti/303/263n de proyectos.html" +0 -0
  196. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html_bak/4_configuraci/303/263n del proyecto.html" +0 -0
  197. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html_bak/5_operaci/303/263n.html" +0 -0
  198. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/html_bak/6_licencia.html +0 -0
  199. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/whitelists/ct.txt +0 -0
  200. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/whitelists/dx.txt +0 -0
  201. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/whitelists/mg.txt +0 -0
  202. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/whitelists/mr.txt +0 -0
  203. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/es/whitelists/us.txt +0 -0
  204. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/extract_translations.sh +0 -0
  205. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/fr/LC_MESSAGES/messages.mo +0 -0
  206. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/fr/LC_MESSAGES/messages.po +0 -0
  207. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/fr/html/1_aper/303/247u.html" +0 -0
  208. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/fr/html/2_protocole de d/303/251sidentification.html" +0 -0
  209. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/fr/html/3_gestion de projet.html +0 -0
  210. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/fr/html/4_param/303/250tres du projet.html" +0 -0
  211. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/fr/html/5_op/303/251ration.html" +0 -0
  212. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/fr/html/6_licence.html +0 -0
  213. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/fr/html/images/Welcome_fr_osx_light.png +0 -0
  214. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/fr/html/images/Welcome_fr_win_light.png +0 -0
  215. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/fr/whitelists/ct.txt +0 -0
  216. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/fr/whitelists/dx.txt +0 -0
  217. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/fr/whitelists/mg.txt +0 -0
  218. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/fr/whitelists/mr.txt +0 -0
  219. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/fr/whitelists/us.txt +0 -0
  220. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/messages.pot +0 -0
  221. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/locales/update_translations.sh +0 -0
  222. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/scripts/README.md +0 -0
  223. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/scripts/default-anonymizer.script +0 -0
  224. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/tcia_kb/TCIAPrivateTagKB-02-01-2024-formatted.csv +0 -0
  225. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/themes/dark-blue.json +0 -0
  226. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/assets/themes/rsna_theme.json +0 -0
  227. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/__init__.py +0 -0
  228. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/__init__.py +0 -0
  229. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/batch_config.py +0 -0
  230. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/blur_face/__init__.py +0 -0
  231. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/blur_face/pipeline.py +0 -0
  232. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/blur_face/status.py +0 -0
  233. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/README.md +0 -0
  234. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/__init__.py +0 -0
  235. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/classify_series.py +0 -0
  236. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/entity_labels.py +0 -0
  237. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/metadata/__init__.py +0 -0
  238. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/metadata/extract.py +0 -0
  239. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/metadata/iod_allowlist.py +0 -0
  240. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/metadata/iod_qc.py +0 -0
  241. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/metadata/ner_compile.py +0 -0
  242. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/metadata/scrub.py +0 -0
  243. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/metadata/series_assessment.py +0 -0
  244. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/metadata/series_index.py +0 -0
  245. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/metadata/viewer_tree.py +0 -0
  246. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/ner/__init__.py +0 -0
  247. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/ner/cache.py +0 -0
  248. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/ner/engine.py +0 -0
  249. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/ner/pools/en_US/SOURCE.md +0 -0
  250. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/ner/pools/en_US/cities.txt +0 -0
  251. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/ner/pools/en_US/first_names.txt +0 -0
  252. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/ner/pools/en_US/first_names_female.txt +0 -0
  253. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/ner/pools/en_US/first_names_male.txt +0 -0
  254. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/ner/pools/en_US/last_names.txt +0 -0
  255. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/ner/pools/en_US/streets.txt +0 -0
  256. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/ner/radiology_filters.py +0 -0
  257. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/ner/synthetic_phi.py +0 -0
  258. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/pixel/__init__.py +0 -0
  259. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/pixel/cache.py +0 -0
  260. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/pixel/detect_text.py +0 -0
  261. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/pixel/exclude_zones.py +0 -0
  262. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/pixel/ocr_transcript_sr.py +0 -0
  263. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/pixel/remove_scope.py +0 -0
  264. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/report/__init__.py +0 -0
  265. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/embedded_phi/report/process_report_text.py +0 -0
  266. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/feature_availability.py +0 -0
  267. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/feature_ids.py +0 -0
  268. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/_playbook_gettext.py +0 -0
  269. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/description_components.py +0 -0
  270. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/description_mapping_store.py +0 -0
  271. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/docs/XR_US_MG.md +0 -0
  272. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/loinc_study.py +0 -0
  273. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/model_slot.py +0 -0
  274. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/playbook.py +0 -0
  275. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/playbook_planar.py +0 -0
  276. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/profile_2d.py +0 -0
  277. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/timings.py +0 -0
  278. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/xp_bodypart/__init__.py +0 -0
  279. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/xp_bodypart/cache.py +0 -0
  280. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/xp_bodypart/fuse.py +0 -0
  281. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/xp_bodypart/labels.py +0 -0
  282. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/xp_bodypart/model.py +0 -0
  283. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/xp_bodypart/predict.py +0 -0
  284. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/xp_bodypart/preprocess.py +0 -0
  285. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/xr_chest_view/__init__.py +0 -0
  286. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/xr_chest_view/cache.py +0 -0
  287. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/xr_chest_view/fuse.py +0 -0
  288. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/xr_chest_view/labels.py +0 -0
  289. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/xr_chest_view/model.py +0 -0
  290. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/xr_chest_view/predict.py +0 -0
  291. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/harmonize/xr_chest_view/preprocess.py +0 -0
  292. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/model_download.py +0 -0
  293. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/tseg/__init__.py +0 -0
  294. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/tseg/cache.py +0 -0
  295. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/tseg/config.py +0 -0
  296. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/tseg/contrast.py +0 -0
  297. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/tseg/dicom_geometry.py +0 -0
  298. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/tseg/docs/README.md +0 -0
  299. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/tseg/face_gate.py +0 -0
  300. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/tseg/geometry_types.py +0 -0
  301. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/tseg/head_signals.py +0 -0
  302. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/tseg/ml_env.py +0 -0
  303. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/tseg/modality_profile.py +0 -0
  304. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/tseg/model_cache.py +0 -0
  305. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/tseg/readiness.py +0 -0
  306. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/tseg/regions.py +0 -0
  307. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/tseg/seg_retention.py +0 -0
  308. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/tseg/segment.py +0 -0
  309. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/tseg/series_classification.py +0 -0
  310. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ai/tseg/ts_probe.py +0 -0
  311. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/analytics/__init__.py +0 -0
  312. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/analytics/dataset.py +0 -0
  313. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/analytics/ledger.py +0 -0
  314. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/analytics/prefs.py +0 -0
  315. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/annotations/__init__.py +0 -0
  316. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/annotations/brush.py +0 -0
  317. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/annotations/export_dicom_seg.py +0 -0
  318. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/annotations/export_nii.py +0 -0
  319. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/annotations/import_nii.py +0 -0
  320. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/annotations/planar_geometry.py +0 -0
  321. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/annotations/store.py +0 -0
  322. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/annotations/volumes.py +0 -0
  323. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/anonymizer.py +0 -0
  324. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/ctp_lookup.py +0 -0
  325. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/dates.py +0 -0
  326. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/dicom/__init__.py +0 -0
  327. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/dicom/association.py +0 -0
  328. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/dicom/dicomweb/__init__.py +0 -0
  329. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/dicom/dicomweb/qido.py +0 -0
  330. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/dicom/dicomweb/session.py +0 -0
  331. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/dicom/dicomweb/stow.py +0 -0
  332. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/dicom/dicomweb/wado.py +0 -0
  333. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/dicom/echo_scu.py +0 -0
  334. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/dicom/find_scu.py +0 -0
  335. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/dicom/hierarchies.py +0 -0
  336. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/dicom/requests.py +0 -0
  337. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/dicom/retrieve_scu.py +0 -0
  338. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/dicom/scp.py +0 -0
  339. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/dicom/store_scu.py +0 -0
  340. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/headless.py +0 -0
  341. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/headless_io.py +0 -0
  342. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/jobs/__init__.py +0 -0
  343. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/jobs/runner.py +0 -0
  344. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/jobs/work_state.py +0 -0
  345. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/phi/__init__.py +0 -0
  346. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/private_tags/__init__.py +0 -0
  347. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/private_tags/convert_tcia_private_kb.py +0 -0
  348. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/private_tags/dateinc.txt +0 -0
  349. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/private_tags/private_tags.py +0 -0
  350. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/private_tags/tcia_kb_data.py +0 -0
  351. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/project.py +0 -0
  352. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/script/__init__.py +0 -0
  353. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/script/compile.py +0 -0
  354. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/script/date_rules.py +0 -0
  355. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/script/document.py +0 -0
  356. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/script/e1_1_basic_profile.json +0 -0
  357. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/script/e1_1_retain_tags.json +0 -0
  358. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/script/operands.py +0 -0
  359. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/script/option_explanations.py +0 -0
  360. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/script/options.py +0 -0
  361. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/script/paths.py +0 -0
  362. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/script/retain_option_tags.py +0 -0
  363. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/script/tcia_research_operands.json +0 -0
  364. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/series/__init__.py +0 -0
  365. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/series/series_overlay.py +0 -0
  366. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/controller/series/workspace.py +0 -0
  367. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/mcp/__init__.py +0 -0
  368. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/mcp/api/__init__.py +0 -0
  369. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/mcp/api/catalog.py +0 -0
  370. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/mcp/api/handlers.py +0 -0
  371. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/mcp/api/schema_json.py +0 -0
  372. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/mcp/api/schemas.py +0 -0
  373. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/mcp/api/wire.py +0 -0
  374. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/mcp/assets/__init__.py +0 -0
  375. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/mcp/assets/instructions.md +0 -0
  376. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/mcp/assets/setup_help.json +0 -0
  377. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/mcp/instructions.py +0 -0
  378. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/mcp/middleware/__init__.py +0 -0
  379. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/mcp/middleware/call_logging.py +0 -0
  380. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/mcp/modality_tokens.py +0 -0
  381. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/mcp/ops.py +0 -0
  382. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/mcp/server.py +0 -0
  383. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/mcp/session.py +0 -0
  384. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/mcp/snapshots.py +0 -0
  385. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/model/__init__.py +0 -0
  386. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/model/project.py +0 -0
  387. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/model/settings_validate.py +0 -0
  388. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/model/sqlite_schema.py +0 -0
  389. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/utils/__init__.py +0 -0
  390. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/utils/app_state.py +0 -0
  391. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/utils/dicom_dictionary.py +0 -0
  392. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/utils/logging.py +0 -0
  393. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/utils/memory.py +0 -0
  394. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/utils/modalities.py +0 -0
  395. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/utils/network.py +0 -0
  396. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/utils/storage/__init__.py +0 -0
  397. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/utils/storage/dicom_tree.py +0 -0
  398. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/utils/storage/java_index.py +0 -0
  399. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/utils/translate.py +0 -0
  400. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/utils/version.py +0 -0
  401. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/__init__.py +0 -0
  402. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/ai/__init__.py +0 -0
  403. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/ai/ai_batch_process_dialog.py +0 -0
  404. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/ai/ai_features_dialog.py +0 -0
  405. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/ai/blur_face_results.py +0 -0
  406. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/ai/face_blur_review_dialog.py +0 -0
  407. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/ai/features/__init__.py +0 -0
  408. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/ai/features/availability.py +0 -0
  409. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/ai/features/catalog.py +0 -0
  410. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/ai/features/look.py +0 -0
  411. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/ai/features/panel.py +0 -0
  412. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/ai/harmonize_description.py +0 -0
  413. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/ai/harmonize_results.py +0 -0
  414. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/ai/harmonize_run_options_dialog.py +0 -0
  415. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/ai/modality_whitelist_preview_dialog.py +0 -0
  416. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/ai/set_description_dialog.py +0 -0
  417. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/common/__init__.py +0 -0
  418. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/common/ctk_safe.py +0 -0
  419. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/common/filesystem_drop.py +0 -0
  420. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/common/fonts.py +0 -0
  421. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/common/help_docs.py +0 -0
  422. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/common/html_view.py +0 -0
  423. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/common/job_poller.py +0 -0
  424. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/common/navigation.py +0 -0
  425. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/common/phi_action_labels.py +0 -0
  426. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/common/tooltip.py +0 -0
  427. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/common/treeview_chrome.py +0 -0
  428. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/common/ux_fields.py +0 -0
  429. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/ocr_ui.py +0 -0
  430. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/project/__init__.py +0 -0
  431. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/project/delete_studies_dialog.py +0 -0
  432. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/project/description_mappings.py +0 -0
  433. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/project/export.py +0 -0
  434. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/project/import_files_dialog.py +0 -0
  435. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/project/import_studies_dialog.py +0 -0
  436. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/project/query_retrieve_import.py +0 -0
  437. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/reports/__init__.py +0 -0
  438. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/reports/entity_colors.py +0 -0
  439. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/reports/entity_legend.py +0 -0
  440. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/reports/open_workspace.py +0 -0
  441. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/reports/pdf_page_view.py +0 -0
  442. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/reports/report_canvas.py +0 -0
  443. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/series/__init__.py +0 -0
  444. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/series/anatomy_overlay.py +0 -0
  445. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/series/new_segment_dialog.py +0 -0
  446. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/series/series_overlay.py +0 -0
  447. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/settings/anonymizer_script_dialog.py +0 -0
  448. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/settings/aws_cognito_dialog.py +0 -0
  449. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/settings/deidentification_options_dialog.py +0 -0
  450. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/settings/dicom_node_dialog.py +0 -0
  451. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/settings/logging_levels_dialog.py +0 -0
  452. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/settings/lookup_table_dialog.py +0 -0
  453. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/settings/modalites_dialog.py +0 -0
  454. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/settings/network_timeouts_dialog.py +0 -0
  455. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/settings/script_editor.py +0 -0
  456. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/settings/settings_dialog.py +0 -0
  457. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/settings/sop_classes_dialog.py +0 -0
  458. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/settings/transfer_syntaxes_dialog.py +0 -0
  459. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/shell/__init__.py +0 -0
  460. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/shell/analytics_charts.py +0 -0
  461. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/shell/dashboard.py +0 -0
  462. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/anonymizer/view/shell/welcome.py +0 -0
  463. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/__init__.py +0 -0
  464. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/README.md +0 -0
  465. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/__init__.py +0 -0
  466. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/__main__.py +0 -0
  467. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/answer_filter.py +0 -0
  468. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/assets/AiBatchConfig.json +0 -0
  469. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/assets/ProjectModel.json +0 -0
  470. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/assets/smoke20_random_patients.json +0 -0
  471. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/cli.py +0 -0
  472. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/inventory.py +0 -0
  473. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/ner_presentation_probe.py +0 -0
  474. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/paths.py +0 -0
  475. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/project_prep.py +0 -0
  476. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/report.py +0 -0
  477. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/score_official.py +0 -0
  478. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/scorecards/README.md +0 -0
  479. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/scorecards/source_answer_errors.md +0 -0
  480. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/scorecards/test_20261101_full.md +0 -0
  481. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/scorecards/validation_20261101_full.md +0 -0
  482. {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev6}/src/eval/midi_b/vendor/README.md +0 -0
@@ -6,6 +6,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [19.1.0.dev6]
10
+ - PyPI development pre-release of 19.1 on branch `dev` (install with `uv pip install --pre rsna-anonymizer`)
11
+ - Dataset Set description: PT/NM-only studies (no CT/MR Harmonize path) can double-click series or study descriptions and pick names from the LOINC table (`PET+CT` when the study wording looks like PET-CT); AI Harmonize for CT/MR studies is unchanged
12
+ - Projection View: loading shell while projections build, then size the window to the tile grid (fixes empty/clipped multi-study opens)
13
+ - AI Batch Embedded PHI logs: series and instance lines use counts only (no OCR/descriptor/report PHI text in the batch log)
14
+ - Docs: refresh Dashboard Analytics, De-identification Options, and related View/Process help screenshots; add Dataset after Metadata Replace PHI + Save shot
15
+
16
+ ## [19.1.0.dev5]
17
+ - PyPI development pre-release of 19.1 on branch `dev` (install with `uv pip install --pre rsna-anonymizer`)
18
+ - After metadata PHI removal (Series View Metadata Save and AI Batch), Dataset Original Description and Embedded PHI columns refresh from cleaned Study/Series Description and removed spans; lookup CSV adds CleanedStudyDescription and CleanedSeriesDescription after the sticky Study/Series Description columns
19
+ - AI Batch Embedded PHI: Pixel PHI / Metadata / Reports path checkboxes; Match strictness and Whitelist stay visible when Pixel PHI is off
20
+ - Series View windowing keeps PET window widths below one, with shared auto-window helpers and projection/default-window alignment
21
+
9
22
  ## [19.1.0.dev4]
10
23
  - PyPI development pre-release of 19.1 on branch `dev` (install with `uv pip install --pre rsna-anonymizer`)
11
24
  - PyPI source archive and wheel ship the installable packages. Pixel PHI experiment output is no longer stored in the repository. Help-site screenshots and the curated DICOM fixtures stay in git.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: rsna-anonymizer
3
- Version: 19.1.0.dev4
3
+ Version: 19.1.0.dev6
4
4
  Summary: RSNA DICOM Anonymizer
5
5
  Project-URL: Homepage, https://github.com/RSNA/anonymizer
6
6
  Author-email: Algorhythm Software <michael@dx.life>
@@ -62,7 +62,7 @@ Other languages: [Deutsch](readme.de.md), [Español](readme.es.md), [Français](
62
62
  [![PyPI](https://img.shields.io/pypi/v/rsna-anonymizer.svg)](https://pypi.org/project/rsna-anonymizer/)
63
63
  [![Python](https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-blue.svg)](https://www.python.org/downloads/)
64
64
 
65
- **Version 19.1.0.dev4** is the current 19.1 development pre-release on the `dev` branch (`uv pip install --pre rsna-anonymizer`). Stable **19.0.10** remains on `master`. Requires **Python 3.11–3.14** with **tkinter** built in. Prefer **3.12** for the widest Tk/AI wheel coverage; avoid **3.14.1** (torchvision excludes that patch).
65
+ **Version 19.1.0.dev6** is the current 19.1 development pre-release on the `dev` branch (`uv pip install --pre rsna-anonymizer`). Stable **19.0.10** remains on `master`. Requires **Python 3.11–3.14** with **tkinter** built in. Prefer **3.12** for the widest Tk/AI wheel coverage; avoid **3.14.1** (torchvision excludes that patch).
66
66
 
67
67
  ## Install
68
68
 
@@ -88,7 +88,7 @@ uv --version
88
88
 
89
89
  ### 2. Install Python with tkinter, then the app
90
90
 
91
- The desktop UI needs **tkinter**. Install a Python that ships with it, then create the venv and install **19.1.0.dev4** (`--pre`):
91
+ The desktop UI needs **tkinter**. Install a Python that ships with it, then create the venv and install **19.1.0.dev6** (`--pre`):
92
92
 
93
93
  | Platform | Ensure tkinter is available |
94
94
  | --- | --- |
@@ -101,7 +101,7 @@ uv python install 3.12 # or: 3.11 / 3.13 / 3.14
101
101
  uv venv rsna-anonymizer --python 3.12 # or: --python 3.11 / 3.13 / 3.14
102
102
  source rsna-anonymizer/bin/activate # Windows: rsna-anonymizer\Scripts\activate
103
103
 
104
- uv pip install --pre rsna-anonymizer # version 19.1.0.dev4
104
+ uv pip install --pre rsna-anonymizer # version 19.1.0.dev6
105
105
  ```
106
106
 
107
107
  ### 3. Verify the install
@@ -109,7 +109,7 @@ uv pip install --pre rsna-anonymizer # version 19.1.0.dev4
109
109
  ```bash
110
110
  python --version # 3.11.x–3.14.x
111
111
  python -m tkinter # a small Tk window must open — required for the UI
112
- rsna-anonymizer --version # should report 19.1.0.dev4
112
+ rsna-anonymizer --version # should report 19.1.0.dev6
113
113
  ```
114
114
 
115
115
  If `python -m tkinter` fails, the venv’s Python was built without Tk: fix the platform step above, recreate the venv, and reinstall.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "rsna-anonymizer"
7
- version = "19.1.0.dev4"
7
+ version = "19.1.0.dev6"
8
8
  description = "RSNA DICOM Anonymizer"
9
9
  readme = "readme.md"
10
10
  license = { text = "Apache-2.0" }
@@ -7,7 +7,7 @@
7
7
  [![PyPI](https://img.shields.io/pypi/v/rsna-anonymizer.svg)](https://pypi.org/project/rsna-anonymizer/)
8
8
  [![Python](https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-blue.svg)](https://www.python.org/downloads/)
9
9
 
10
- **Version 19.1.0.dev4** ist die aktuelle 19.1-Entwicklungs-Vorabversion auf dem Branch `dev` (`uv pip install --pre rsna-anonymizer`). Stabil bleibt **19.0.10** auf `master`. Benötigt **Python 3.11–3.14** mit eingebautem **tkinter**. Empfohlen ist **3.12**; **3.14.1** vermeiden (torchvision schließt diesen Patch aus).
10
+ **Version 19.1.0.dev6** ist die aktuelle 19.1-Entwicklungs-Vorabversion auf dem Branch `dev` (`uv pip install --pre rsna-anonymizer`). Stabil bleibt **19.0.10** auf `master`. Benötigt **Python 3.11–3.14** mit eingebautem **tkinter**. Empfohlen ist **3.12**; **3.14.1** vermeiden (torchvision schließt diesen Patch aus).
11
11
 
12
12
  ## Installation
13
13
 
@@ -33,7 +33,7 @@ uv --version
33
33
 
34
34
  ### 2. Python mit tkinter und die App installieren
35
35
 
36
- Die Desktop-Oberfläche braucht **tkinter**. Installieren Sie ein Python mit tkinter, erstellen Sie die venv und installieren Sie **19.1.0.dev4** (`--pre`):
36
+ Die Desktop-Oberfläche braucht **tkinter**. Installieren Sie ein Python mit tkinter, erstellen Sie die venv und installieren Sie **19.1.0.dev6** (`--pre`):
37
37
 
38
38
  | Plattform | tkinter verfügbar machen |
39
39
  | --- | --- |
@@ -46,7 +46,7 @@ uv python install 3.12 # or: 3.11 / 3.13 / 3.14
46
46
  uv venv rsna-anonymizer --python 3.12 # or: --python 3.11 / 3.13 / 3.14
47
47
  source rsna-anonymizer/bin/activate # Windows: rsna-anonymizer\Scripts\activate
48
48
 
49
- uv pip install --pre rsna-anonymizer # version 19.1.0.dev4
49
+ uv pip install --pre rsna-anonymizer # version 19.1.0.dev6
50
50
  ```
51
51
 
52
52
  ### 3. Installation prüfen
@@ -54,7 +54,7 @@ uv pip install --pre rsna-anonymizer # version 19.1.0.dev4
54
54
  ```bash
55
55
  python --version # 3.11.x–3.14.x
56
56
  python -m tkinter # a small Tk window must open — required for the UI
57
- rsna-anonymizer --version # should report 19.1.0.dev4
57
+ rsna-anonymizer --version # should report 19.1.0.dev6
58
58
  ```
59
59
 
60
60
  Wenn `python -m tkinter` fehlschlägt, wurde das Python der venv ohne Tk gebaut: Plattformschritt oben korrigieren, venv neu anlegen und neu installieren.
@@ -7,7 +7,7 @@
7
7
  [![PyPI](https://img.shields.io/pypi/v/rsna-anonymizer.svg)](https://pypi.org/project/rsna-anonymizer/)
8
8
  [![Python](https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-blue.svg)](https://www.python.org/downloads/)
9
9
 
10
- **La versión 19.1.0.dev4** es la prelanzamiento de desarrollo 19.1 actual en la rama `dev` (`uv pip install --pre rsna-anonymizer`). La estable **19.0.10** permanece en `master`. Requiere **Python 3.11–3.14** con **tkinter** incluido. Se recomienda **3.12**; evite **3.14.1** (torchvision excluye ese parche).
10
+ **La versión 19.1.0.dev6** es la prelanzamiento de desarrollo 19.1 actual en la rama `dev` (`uv pip install --pre rsna-anonymizer`). La estable **19.0.10** permanece en `master`. Requiere **Python 3.11–3.14** con **tkinter** incluido. Se recomienda **3.12**; evite **3.14.1** (torchvision excluye ese parche).
11
11
 
12
12
  ## Instalación
13
13
 
@@ -33,7 +33,7 @@ uv --version
33
33
 
34
34
  ### 2. Instalar Python con tkinter y la aplicación
35
35
 
36
- La interfaz de escritorio necesita **tkinter**. Instale un Python que lo incluya, cree el venv e instale **19.1.0.dev4** (`--pre`):
36
+ La interfaz de escritorio necesita **tkinter**. Instale un Python que lo incluya, cree el venv e instale **19.1.0.dev6** (`--pre`):
37
37
 
38
38
  | Plataforma | Asegurar tkinter |
39
39
  | --- | --- |
@@ -46,7 +46,7 @@ uv python install 3.12 # or: 3.11 / 3.13 / 3.14
46
46
  uv venv rsna-anonymizer --python 3.12 # or: --python 3.11 / 3.13 / 3.14
47
47
  source rsna-anonymizer/bin/activate # Windows: rsna-anonymizer\Scripts\activate
48
48
 
49
- uv pip install --pre rsna-anonymizer # version 19.1.0.dev4
49
+ uv pip install --pre rsna-anonymizer # version 19.1.0.dev6
50
50
  ```
51
51
 
52
52
  ### 3. Verificar la instalación
@@ -54,7 +54,7 @@ uv pip install --pre rsna-anonymizer # version 19.1.0.dev4
54
54
  ```bash
55
55
  python --version # 3.11.x–3.14.x
56
56
  python -m tkinter # a small Tk window must open — required for the UI
57
- rsna-anonymizer --version # should report 19.1.0.dev4
57
+ rsna-anonymizer --version # should report 19.1.0.dev6
58
58
  ```
59
59
 
60
60
  Si `python -m tkinter` falla, el Python del venv se compiló sin Tk: corrija el paso de la plataforma, recree el venv y reinstale.
@@ -7,7 +7,7 @@
7
7
  [![PyPI](https://img.shields.io/pypi/v/rsna-anonymizer.svg)](https://pypi.org/project/rsna-anonymizer/)
8
8
  [![Python](https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-blue.svg)](https://www.python.org/downloads/)
9
9
 
10
- **La version 19.1.0.dev4** est la préversion de développement 19.1 actuelle sur la branche `dev` (`uv pip install --pre rsna-anonymizer`). La stable **19.0.10** reste sur `master`. Nécessite **Python 3.11–3.14** avec **tkinter** intégré. Préférez **3.12** ; évitez **3.14.1** (torchvision exclut ce correctif).
10
+ **La version 19.1.0.dev6** est la préversion de développement 19.1 actuelle sur la branche `dev` (`uv pip install --pre rsna-anonymizer`). La stable **19.0.10** reste sur `master`. Nécessite **Python 3.11–3.14** avec **tkinter** intégré. Préférez **3.12** ; évitez **3.14.1** (torchvision exclut ce correctif).
11
11
 
12
12
  ## Installation
13
13
 
@@ -33,7 +33,7 @@ uv --version
33
33
 
34
34
  ### 2. Installer Python avec tkinter, puis l’application
35
35
 
36
- L’interface de bureau a besoin de **tkinter**. Installez un Python qui l’inclut, créez le venv et installez **19.1.0.dev4** (`--pre`) :
36
+ L’interface de bureau a besoin de **tkinter**. Installez un Python qui l’inclut, créez le venv et installez **19.1.0.dev6** (`--pre`) :
37
37
 
38
38
  | Plateforme | Assurer la disponibilité de tkinter |
39
39
  | --- | --- |
@@ -46,7 +46,7 @@ uv python install 3.12 # or: 3.11 / 3.13 / 3.14
46
46
  uv venv rsna-anonymizer --python 3.12 # or: --python 3.11 / 3.13 / 3.14
47
47
  source rsna-anonymizer/bin/activate # Windows: rsna-anonymizer\Scripts\activate
48
48
 
49
- uv pip install --pre rsna-anonymizer # version 19.1.0.dev4
49
+ uv pip install --pre rsna-anonymizer # version 19.1.0.dev6
50
50
  ```
51
51
 
52
52
  ### 3. Vérifier l’installation
@@ -54,7 +54,7 @@ uv pip install --pre rsna-anonymizer # version 19.1.0.dev4
54
54
  ```bash
55
55
  python --version # 3.11.x–3.14.x
56
56
  python -m tkinter # a small Tk window must open — required for the UI
57
- rsna-anonymizer --version # should report 19.1.0.dev4
57
+ rsna-anonymizer --version # should report 19.1.0.dev6
58
58
  ```
59
59
 
60
60
  Si `python -m tkinter` échoue, le Python du venv a été compilé sans Tk : corrigez l’étape plateforme ci-dessus, recréez le venv et réinstallez.
@@ -9,7 +9,7 @@ Other languages: [Deutsch](readme.de.md), [Español](readme.es.md), [Français](
9
9
  [![PyPI](https://img.shields.io/pypi/v/rsna-anonymizer.svg)](https://pypi.org/project/rsna-anonymizer/)
10
10
  [![Python](https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-blue.svg)](https://www.python.org/downloads/)
11
11
 
12
- **Version 19.1.0.dev4** is the current 19.1 development pre-release on the `dev` branch (`uv pip install --pre rsna-anonymizer`). Stable **19.0.10** remains on `master`. Requires **Python 3.11–3.14** with **tkinter** built in. Prefer **3.12** for the widest Tk/AI wheel coverage; avoid **3.14.1** (torchvision excludes that patch).
12
+ **Version 19.1.0.dev6** is the current 19.1 development pre-release on the `dev` branch (`uv pip install --pre rsna-anonymizer`). Stable **19.0.10** remains on `master`. Requires **Python 3.11–3.14** with **tkinter** built in. Prefer **3.12** for the widest Tk/AI wheel coverage; avoid **3.14.1** (torchvision excludes that patch).
13
13
 
14
14
  ## Install
15
15
 
@@ -35,7 +35,7 @@ uv --version
35
35
 
36
36
  ### 2. Install Python with tkinter, then the app
37
37
 
38
- The desktop UI needs **tkinter**. Install a Python that ships with it, then create the venv and install **19.1.0.dev4** (`--pre`):
38
+ The desktop UI needs **tkinter**. Install a Python that ships with it, then create the venv and install **19.1.0.dev6** (`--pre`):
39
39
 
40
40
  | Platform | Ensure tkinter is available |
41
41
  | --- | --- |
@@ -48,7 +48,7 @@ uv python install 3.12 # or: 3.11 / 3.13 / 3.14
48
48
  uv venv rsna-anonymizer --python 3.12 # or: --python 3.11 / 3.13 / 3.14
49
49
  source rsna-anonymizer/bin/activate # Windows: rsna-anonymizer\Scripts\activate
50
50
 
51
- uv pip install --pre rsna-anonymizer # version 19.1.0.dev4
51
+ uv pip install --pre rsna-anonymizer # version 19.1.0.dev6
52
52
  ```
53
53
 
54
54
  ### 3. Verify the install
@@ -56,7 +56,7 @@ uv pip install --pre rsna-anonymizer # version 19.1.0.dev4
56
56
  ```bash
57
57
  python --version # 3.11.x–3.14.x
58
58
  python -m tkinter # a small Tk window must open — required for the UI
59
- rsna-anonymizer --version # should report 19.1.0.dev4
59
+ rsna-anonymizer --version # should report 19.1.0.dev6
60
60
  ```
61
61
 
62
62
  If `python -m tkinter` fails, the venv’s Python was built without Tk: fix the platform step above, recreate the venv, and reinstall.
@@ -129,7 +129,13 @@ format_remove_pixel_phi_series_message(*, modified_count: int, total: int, texts
129
129
  Series outcome line: Series View wording, counts only (never OCR/PHI strings).
130
130
 
131
131
  format_remove_pixel_phi_instance_detail(*, instance_index: int, instance_total: int, modified: bool, texts: Sequence[str], removal_mode: PixelPhiRemovalMode=PixelPhiRemovalMode.BLACKOUT, pixels_changed: int=0, ocr_remove_mode: OcrRemoveMode=...) -> str
132
- Per-instance detail: Series View wording, counts only (never OCR/PHI strings).
132
+ Per-instance detail for detections only: Series View wording, counts only (never OCR/PHI strings).
133
+
134
+ format_clean_descriptors_series_message(*, modified_count: int, total: int, texts_removed: Sequence[str]=()) -> str
135
+ Series Clean Descriptors summary: counts only (never descriptor/PHI strings).
136
+
137
+ format_report_phi_series_message(*, modified_count: int, total: int, texts_removed: Sequence[str]=()) -> str
138
+ Series report-text PHI summary: counts only (never report/PHI strings).
133
139
 
134
140
  normalize_selected_algorithms(algorithms: Sequence[AiBatchAlgorithm]) -> tuple[AiBatchAlgorithm, ...]
135
141
  Return selected algorithms in fixed execution order.
@@ -907,6 +913,8 @@ def format_remove_pixel_phi_series_message(
907
913
  ) -> str:
908
914
  """Series outcome line: Series View wording, counts only (never OCR/PHI strings)."""
909
915
  del pixels_changed # Kept for call-site compatibility; not logged.
916
+ if modified_count <= 0:
917
+ return _("No burnt-in text detected") + f" ({total} " + _("instances scanned") + ")"
910
918
  parts = [
911
919
  _("PHI removed"),
912
920
  f"{modified_count}/{total} " + _("instance(s)"),
@@ -929,7 +937,7 @@ def format_remove_pixel_phi_instance_detail(
929
937
  pixels_changed: int = 0,
930
938
  ocr_remove_mode: OcrRemoveMode = OcrRemoveMode.NON_WHITELISTED,
931
939
  ) -> str:
932
- """Per-instance detail: Series View wording, counts only (never OCR/PHI strings)."""
940
+ """Per-instance detail for detections only: counts only (never OCR/PHI strings)."""
933
941
  del pixels_changed # Kept for call-site compatibility; not logged.
934
942
  position = _("Instance") + f" {instance_index}/{instance_total}"
935
943
  region_count = _ocr_text_region_count(texts)
@@ -946,6 +954,44 @@ def format_remove_pixel_phi_instance_detail(
946
954
  return f"{position}: {_('no burnt-in text detected')}"
947
955
 
948
956
 
957
+ def format_clean_descriptors_series_message(
958
+ *,
959
+ modified_count: int,
960
+ total: int,
961
+ texts_removed: Sequence[str] = (),
962
+ ) -> str:
963
+ """Series Clean Descriptors summary: counts only (never descriptor/PHI strings)."""
964
+ if modified_count <= 0:
965
+ return _("Clean Descriptors") + ": " + _("no changes") + f" ({total} " + _("instances scanned") + ")"
966
+ parts = [
967
+ _("Clean Descriptors"),
968
+ f"{modified_count}/{total} " + _("instance(s)"),
969
+ ]
970
+ region_count = _ocr_text_region_count(texts_removed)
971
+ if region_count:
972
+ parts.append(_format_phi_removed_count(region_count))
973
+ return " · ".join(parts)
974
+
975
+
976
+ def format_report_phi_series_message(
977
+ *,
978
+ modified_count: int,
979
+ total: int,
980
+ texts_removed: Sequence[str] = (),
981
+ ) -> str:
982
+ """Series report-text PHI summary: counts only (never report/PHI strings)."""
983
+ if modified_count <= 0:
984
+ return _("No report PHI detected") + f" ({total} " + _("instances scanned") + ")"
985
+ parts = [
986
+ _("Report PHI removed"),
987
+ f"{modified_count}/{total} " + _("instance(s)"),
988
+ ]
989
+ region_count = _ocr_text_region_count(texts_removed)
990
+ if region_count:
991
+ parts.append(_format_phi_removed_count(region_count))
992
+ return " · ".join(parts)
993
+
994
+
949
995
  def _log_workflow_progress_step(
950
996
  log_workflow: Callable[[str], None],
951
997
  step_progress: Callable[[float, str], None],
@@ -1229,7 +1275,8 @@ def _apply_report_text_phi_series(
1229
1275
 
1230
1276
  modified_count = 0
1231
1277
  all_removed: list[str] = []
1232
- for dcm_path in dcm_paths:
1278
+ instance_total = len(dcm_paths)
1279
+ for instance_index, dcm_path in enumerate(dcm_paths, start=1):
1233
1280
  try:
1234
1281
 
1235
1282
  ds = dcmread(dcm_path)
@@ -1265,7 +1312,13 @@ def _apply_report_text_phi_series(
1265
1312
  all_removed.extend(removed_texts)
1266
1313
  modified_count += 1
1267
1314
  if on_log_detail is not None and removed_texts:
1268
- on_log_detail(f"{dcm_path.name}: " + ", ".join(removed_texts[:8]))
1315
+ region_count = _ocr_text_region_count(removed_texts)
1316
+ on_log_detail(
1317
+ _("Instance")
1318
+ + f" {instance_index}/{instance_total}: "
1319
+ + _("Report PHI removed")
1320
+ + f" · {_format_phi_removed_count(region_count)}"
1321
+ )
1269
1322
  except Exception as exc: # noqa: BLE001
1270
1323
  logger.error("Report text PHI failed for %s: %s", dcm_path, exc)
1271
1324
  return AiBatchOutcome(
@@ -1275,6 +1328,13 @@ def _apply_report_text_phi_series(
1275
1328
  str(exc),
1276
1329
  )
1277
1330
 
1331
+ series_message = format_report_phi_series_message(
1332
+ modified_count=modified_count,
1333
+ total=instance_total,
1334
+ texts_removed=all_removed,
1335
+ )
1336
+ if on_log_detail is not None:
1337
+ on_log_detail(series_message)
1278
1338
  if mark_scanned:
1279
1339
  anon_model.set_series_embedded_phi_scanned(series_uid, scanned=True)
1280
1340
  if modified_count == 0:
@@ -1282,13 +1342,13 @@ def _apply_report_text_phi_series(
1282
1342
  series_path,
1283
1343
  AiBatchAlgorithm.REMOVE_PIXEL_PHI,
1284
1344
  "complete",
1285
- _("No report PHI detected"),
1345
+ series_message,
1286
1346
  )
1287
1347
  return AiBatchOutcome(
1288
1348
  series_path,
1289
1349
  AiBatchAlgorithm.REMOVE_PIXEL_PHI,
1290
1350
  "ok",
1291
- _("Report PHI removed") + f" ({modified_count})",
1351
+ series_message,
1292
1352
  )
1293
1353
 
1294
1354
 
@@ -1298,12 +1358,19 @@ def _scrub_series_descriptors(
1298
1358
  dcm_paths: Sequence[Path],
1299
1359
  replace_mode: str = "blank",
1300
1360
  project_dir: Path | None = None,
1361
+ anon_model: AnonymizerModel | None = None,
1301
1362
  on_log_detail: Callable[[str], None] | None = None,
1302
1363
  ) -> tuple[int, list[str]]:
1303
- """Run Clean Descriptors on each instance; return (modified_count, removed texts)."""
1364
+ """Run Clean Descriptors on each instance; return (modified_count, removed texts).
1365
+
1366
+ When anon_model is set, removed spans are merged into Instance.embedded_phi so
1367
+ the Dataset series row Embedded PHI column updates after the batch refresh.
1368
+ """
1369
+ del series_path # retained for call-site clarity / future series-level hooks
1304
1370
  mode = "synth" if str(replace_mode).strip().lower() == "synth" else "blank"
1305
1371
  modified_count = 0
1306
1372
  all_removed: list[str] = []
1373
+ instance_total = len(dcm_paths)
1307
1374
  for dcm_path in dcm_paths:
1308
1375
  try:
1309
1376
  changed, removed = scrub_file_descriptors(
@@ -1317,8 +1384,28 @@ def _scrub_series_descriptors(
1317
1384
  if changed:
1318
1385
  modified_count += 1
1319
1386
  all_removed.extend(removed)
1320
- if on_log_detail is not None and removed:
1321
- on_log_detail(f"{dcm_path.name}: " + ", ".join(removed[:8]))
1387
+ if anon_model is not None:
1388
+ if removed:
1389
+ apply_instance_embedded_phi_for_dcm(
1390
+ anon_model, dcm_path, removed, merge=True
1391
+ )
1392
+ # Keep Dataset Original Description in sync with cleaned tags.
1393
+ try:
1394
+ ds = dcmread(str(dcm_path), stop_before_pixels=True, force=True)
1395
+ anon_model.sync_descriptions_from_dataset(ds)
1396
+ except Exception:
1397
+ logger.exception(
1398
+ "Failed to sync Dataset descriptions after Clean Descriptors for %s",
1399
+ dcm_path,
1400
+ )
1401
+ if on_log_detail is not None and modified_count > 0:
1402
+ on_log_detail(
1403
+ format_clean_descriptors_series_message(
1404
+ modified_count=modified_count,
1405
+ total=instance_total,
1406
+ texts_removed=all_removed,
1407
+ )
1408
+ )
1322
1409
  return modified_count, all_removed
1323
1410
 
1324
1411
 
@@ -1386,6 +1473,7 @@ def _apply_remove_pixel_phi_series(
1386
1473
  dcm_paths=sorted(get_dcm_files(series_path)),
1387
1474
  replace_mode=metadata_replace_mode,
1388
1475
  project_dir=project_dir,
1476
+ anon_model=anon_model,
1389
1477
  on_log_detail=on_log_detail,
1390
1478
  )
1391
1479
  except Exception as exc: # noqa: BLE001
@@ -1442,13 +1530,13 @@ def _apply_remove_pixel_phi_series(
1442
1530
  )
1443
1531
 
1444
1532
  modified_count = 0
1445
- unchanged_count = 0
1446
- all_removed_texts: list[str] = []
1533
+ pixel_removed_texts: list[str] = []
1447
1534
  total_pixels_changed = 0
1448
1535
  instance_total = len(dcm_paths)
1449
1536
  ocr_remove_mode = ocr_remove_mode or ocr_remove_mode_from_legacy_whitelist(
1450
1537
  use_modality_whitelist=True if use_modality_whitelist is None else use_modality_whitelist
1451
1538
  )
1539
+ pixel_series_message = ""
1452
1540
  if pixel_enabled:
1453
1541
  ocr_whitelist = whitelist_arg_for_ocr_remove_mode(ocr_remove_mode)
1454
1542
  series_match_mode = phi_match_mode or load_modality_phi_match_mode(
@@ -1483,9 +1571,10 @@ def _apply_remove_pixel_phi_series(
1483
1571
  "failed",
1484
1572
  str(exc),
1485
1573
  )
1574
+ # Log only instances with detections; quiet files stay out of the workflow log.
1486
1575
  if modified and pixels_changed > 0:
1487
1576
  apply_instance_embedded_phi_for_dcm(anon_model, dcm_path, texts)
1488
- all_removed_texts.extend(texts)
1577
+ pixel_removed_texts.extend(texts)
1489
1578
  modified_count += 1
1490
1579
  total_pixels_changed += pixels_changed
1491
1580
  if on_log_detail is not None and texts:
@@ -1501,7 +1590,7 @@ def _apply_remove_pixel_phi_series(
1501
1590
  )
1502
1591
  )
1503
1592
  elif texts:
1504
- all_removed_texts.extend(texts)
1593
+ pixel_removed_texts.extend(texts)
1505
1594
  if on_log_detail is not None:
1506
1595
  on_log_detail(
1507
1596
  format_remove_pixel_phi_instance_detail(
@@ -1513,26 +1602,20 @@ def _apply_remove_pixel_phi_series(
1513
1602
  ocr_remove_mode=ocr_remove_mode,
1514
1603
  )
1515
1604
  )
1516
- else:
1517
- unchanged_count += 1
1518
- if on_log_detail is not None and texts:
1519
- on_log_detail(
1520
- format_remove_pixel_phi_instance_detail(
1521
- instance_index=instance_index,
1522
- instance_total=instance_total,
1523
- modified=False,
1524
- texts=texts,
1525
- removal_mode=removal_mode,
1526
- ocr_remove_mode=ocr_remove_mode,
1527
- )
1528
- )
1529
1605
 
1530
- if on_log_detail is not None and unchanged_count > 0 and modified_count > 0:
1531
- on_log_detail(
1532
- f"{unchanged_count}/{instance_total} " + _("instances") + ": " + _("no burnt-in text detected")
1533
- )
1606
+ pixel_series_message = format_remove_pixel_phi_series_message(
1607
+ modified_count=modified_count,
1608
+ total=instance_total,
1609
+ texts_removed=pixel_removed_texts,
1610
+ pixels_changed=total_pixels_changed,
1611
+ removal_mode=removal_mode,
1612
+ ocr_remove_mode=ocr_remove_mode,
1613
+ )
1614
+ if on_log_detail is not None:
1615
+ on_log_detail(pixel_series_message)
1534
1616
 
1535
1617
  meta_modified = 0
1618
+ meta_removed: list[str] = []
1536
1619
  if metadata_enabled:
1537
1620
  try:
1538
1621
  meta_modified, meta_removed = _scrub_series_descriptors(
@@ -1540,9 +1623,9 @@ def _apply_remove_pixel_phi_series(
1540
1623
  dcm_paths=dcm_paths,
1541
1624
  replace_mode=metadata_replace_mode,
1542
1625
  project_dir=project_dir,
1626
+ anon_model=anon_model,
1543
1627
  on_log_detail=on_log_detail,
1544
1628
  )
1545
- all_removed_texts.extend(meta_removed)
1546
1629
  except Exception as exc: # noqa: BLE001
1547
1630
  return AiBatchOutcome(
1548
1631
  series_path,
@@ -1554,9 +1637,12 @@ def _apply_remove_pixel_phi_series(
1554
1637
  anon_model.set_series_embedded_phi_scanned(series_uid, scanned=True)
1555
1638
 
1556
1639
  if modified_count == 0 and meta_modified == 0:
1557
- message = _("No burnt-in text detected") if pixel_enabled else _("No Embedded PHI detected")
1558
- if instance_total > 1:
1559
- message += f" ({instance_total} " + _("instances scanned") + ")"
1640
+ if pixel_enabled and pixel_series_message:
1641
+ message = pixel_series_message
1642
+ else:
1643
+ message = _("No burnt-in text detected") if pixel_enabled else _("No Embedded PHI detected")
1644
+ if instance_total > 1:
1645
+ message += f" ({instance_total} " + _("instances scanned") + ")"
1560
1646
  return AiBatchOutcome(
1561
1647
  series_path,
1562
1648
  AiBatchAlgorithm.REMOVE_PIXEL_PHI,
@@ -1568,10 +1654,11 @@ def _apply_remove_pixel_phi_series(
1568
1654
  series_path,
1569
1655
  AiBatchAlgorithm.REMOVE_PIXEL_PHI,
1570
1656
  "ok",
1571
- format_remove_pixel_phi_series_message(
1657
+ pixel_series_message
1658
+ or format_remove_pixel_phi_series_message(
1572
1659
  modified_count=modified_count,
1573
1660
  total=instance_total,
1574
- texts_removed=all_removed_texts,
1661
+ texts_removed=pixel_removed_texts,
1575
1662
  pixels_changed=total_pixels_changed,
1576
1663
  removal_mode=removal_mode,
1577
1664
  ocr_remove_mode=ocr_remove_mode,
@@ -1581,7 +1668,11 @@ def _apply_remove_pixel_phi_series(
1581
1668
  series_path,
1582
1669
  AiBatchAlgorithm.REMOVE_PIXEL_PHI,
1583
1670
  "ok",
1584
- _("Clean Descriptors") + f" ({meta_modified})",
1671
+ format_clean_descriptors_series_message(
1672
+ modified_count=meta_modified,
1673
+ total=instance_total,
1674
+ texts_removed=meta_removed,
1675
+ ),
1585
1676
  )
1586
1677
 
1587
1678