dicom-dre 1.0.0.dev1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of dicom-dre might be problematic. Click here for more details.

Files changed (529) hide show
  1. dicom_dre-1.0.0.dev1/.devcontainer/devcontainer-lock.json +24 -0
  2. dicom_dre-1.0.0.dev1/.devcontainer/devcontainer.json +48 -0
  3. dicom_dre-1.0.0.dev1/.devcontainer/post-create.sh +34 -0
  4. dicom_dre-1.0.0.dev1/.github/copilot-instructions.md +232 -0
  5. dicom_dre-1.0.0.dev1/.github/instructions/dicom-io.instructions.md +25 -0
  6. dicom_dre-1.0.0.dev1/.github/instructions/tests.instructions.md +314 -0
  7. dicom_dre-1.0.0.dev1/.github/workflows/deploy.yml +182 -0
  8. dicom_dre-1.0.0.dev1/.gitignore +41 -0
  9. dicom_dre-1.0.0.dev1/.vscode/extensions.json +10 -0
  10. dicom_dre-1.0.0.dev1/.vscode/settings.json +45 -0
  11. dicom_dre-1.0.0.dev1/CHANGELOG.md +11 -0
  12. dicom_dre-1.0.0.dev1/LICENSE +202 -0
  13. dicom_dre-1.0.0.dev1/NOTICE +57 -0
  14. dicom_dre-1.0.0.dev1/PKG-INFO +186 -0
  15. dicom_dre-1.0.0.dev1/README.md +161 -0
  16. dicom_dre-1.0.0.dev1/TODO +14 -0
  17. dicom_dre-1.0.0.dev1/docs/Makefile +16 -0
  18. dicom_dre-1.0.0.dev1/docs/_static/.gitkeep +0 -0
  19. dicom_dre-1.0.0.dev1/docs/api.md +10 -0
  20. dicom_dre-1.0.0.dev1/docs/conf.py +89 -0
  21. dicom_dre-1.0.0.dev1/docs/index.md +19 -0
  22. dicom_dre-1.0.0.dev1/docs/make.bat +35 -0
  23. dicom_dre-1.0.0.dev1/hatch_build.py +53 -0
  24. dicom_dre-1.0.0.dev1/justfile +83 -0
  25. dicom_dre-1.0.0.dev1/pyproject.toml +228 -0
  26. dicom_dre-1.0.0.dev1/src/dicom_dre/__init__.py +66 -0
  27. dicom_dre-1.0.0.dev1/src/dicom_dre/_jpeg_dct_accel.c +1573 -0
  28. dicom_dre-1.0.0.dev1/src/dicom_dre/_jpeg_dct_accel_build.py +581 -0
  29. dicom_dre-1.0.0.dev1/src/dicom_dre/_version.py +24 -0
  30. dicom_dre-1.0.0.dev1/src/dicom_dre/actions.py +278 -0
  31. dicom_dre-1.0.0.dev1/src/dicom_dre/batch.py +409 -0
  32. dicom_dre-1.0.0.dev1/src/dicom_dre/catalog.py +871 -0
  33. dicom_dre-1.0.0.dev1/src/dicom_dre/cli.py +435 -0
  34. dicom_dre-1.0.0.dev1/src/dicom_dre/default_catalog.py +2002 -0
  35. dicom_dre-1.0.0.dev1/src/dicom_dre/jpeg_dct_scrubber.py +915 -0
  36. dicom_dre-1.0.0.dev1/src/dicom_dre/pipeline.py +164 -0
  37. dicom_dre-1.0.0.dev1/src/dicom_dre/pixel_blanker.py +324 -0
  38. dicom_dre-1.0.0.dev1/src/dicom_dre/profile.py +370 -0
  39. dicom_dre-1.0.0.dev1/src/dicom_dre/profiles/__init__.py +14 -0
  40. dicom_dre-1.0.0.dev1/src/dicom_dre/profiles/builder.py +130 -0
  41. dicom_dre-1.0.0.dev1/src/dicom_dre/profiles/default.py +514 -0
  42. dicom_dre-1.0.0.dev1/src/dicom_dre/profiles/lds.py +56 -0
  43. dicom_dre-1.0.0.dev1/src/dicom_dre/profiles/lds_no_dob.py +55 -0
  44. dicom_dre-1.0.0.dev1/src/dicom_dre/profiles/pixels_only.py +419 -0
  45. dicom_dre-1.0.0.dev1/src/dicom_dre/py.typed +0 -0
  46. dicom_dre-1.0.0.dev1/src/dicom_dre/pydicom_config.py +20 -0
  47. dicom_dre-1.0.0.dev1/src/dicom_dre/resources/__init__.py +1 -0
  48. dicom_dre-1.0.0.dev1/src/dicom_dre/resources/allow_lists/__init__.py +1 -0
  49. dicom_dre-1.0.0.dev1/src/dicom_dre/resources/allow_lists/default.csv +32343 -0
  50. dicom_dre-1.0.0.dev1/src/dicom_dre/result.py +107 -0
  51. dicom_dre-1.0.0.dev1/src/dicom_dre/scrub_region.py +42 -0
  52. dicom_dre-1.0.0.dev1/src/dicom_dre/text_redactor.py +836 -0
  53. dicom_dre-1.0.0.dev1/src/dicom_dre/uid_utils.py +35 -0
  54. dicom_dre-1.0.0.dev1/staged.diff +203 -0
  55. dicom_dre-1.0.0.dev1/tests/conftest.py +14 -0
  56. dicom_dre-1.0.0.dev1/tests/unit/__init__.py +1 -0
  57. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/cr/agfa/dxd40_1000c.json +24 -0
  58. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/ct/ge_medical_systems/discovery_ls.json +22 -0
  59. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/ct/ge_medical_systems/qx_i.json +40 -0
  60. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/ct/ge_medical_systems_ct/discovery_qx_i.json +23 -0
  61. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/ct/ge_medical_systems_mimvista/discovery_st.json +21 -0
  62. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/ct/mimvista_corp/unknown.json +24 -0
  63. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/ct/neurologica/ceretom.json +21 -0
  64. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/ct/neusoft/unknown.json +80 -0
  65. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/ct/philips/gemini.json +24 -0
  66. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/ct/siemens_mimvista/emotion_duo.json +22 -0
  67. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/dx/agfa/dx_g.json +24 -0
  68. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/carestream/classic_cr.json +24 -0
  69. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/fischer_imaging_corporation/senoscan_trueview.json +23 -0
  70. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/fujifilm_corporation/clearview_csm.json +24 -0
  71. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/fujifilm_corporation/fdr_1000aws.json +24 -0
  72. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/fujifilm_corporation/fdr_2000aws.json +24 -0
  73. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/ge_healthcare/senographe_pristina.json +23 -0
  74. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/ge_medical_systems/ads_1_0.json +25 -0
  75. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/ge_medical_systems/senograph_2000d_ads_17_2_3.json +25 -0
  76. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/ge_medical_systems/senographe_essential_ads_43_10_1.json +25 -0
  77. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/ge_medical_systems/senographe_essential_ads_56_21_3.json +44 -0
  78. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/ge_medical_systems/senographe_essential_dbt_reconstruction_box_01_10_3.json +42 -0
  79. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/ge_medical_systems/senographe_essential_dbt_reconstruction_box_01_10_4.json +99 -0
  80. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/hologic_inc/lorad_selenia.json +24 -0
  81. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/hologic_inc/selenia_dimensions.json +119 -0
  82. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/ims_s_r_l/giotto_image_3dl.json +23 -0
  83. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/kodak/classic_cr.json +24 -0
  84. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/kodak/elite_cr.json +24 -0
  85. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/lorad/hologic_selenia.json +24 -0
  86. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/lorad/lorad_selenia.json +24 -0
  87. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/lorad_a_hologic_company/dsm.json +22 -0
  88. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/mptronic_software/senographe_essential_ads_43_10_1.json +25 -0
  89. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/philips_digital_mammography_sweden_ab/l30.json +24 -0
  90. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/siemens/mammomat_inspiration.json +101 -0
  91. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/siemens/mammomat_novation_dr.json +23 -0
  92. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/siemens/mammomat_revelation.json +24 -0
  93. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mg/tmsc_fujitsu_ltd/mgu_1000d.json +23 -0
  94. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mr/ge_medical_systems/discovery_mr750.json +80 -0
  95. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mr/ge_medical_systems/signa_architect.json +24 -0
  96. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mr/ge_medical_systems/signa_hdxt.json +148 -0
  97. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mr/ge_medical_systems/signa_pet_mr.json +24 -0
  98. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mr/ge_medical_systems/signa_premier.json +84 -0
  99. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mr/hitachi_medical_corporation/oasis.json +44 -0
  100. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mr/merge_healthcare/cadstream_5_2_7_563.json +22 -0
  101. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mr/philips_medical_systems/ingenia.json +24 -0
  102. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mr/philips_medical_systems/intera.json +24 -0
  103. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mr/siemens/avanto.json +59 -0
  104. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mr/toshiba/titan.json +42 -0
  105. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/mr/toshiba_mec/mrt200pp3.json +42 -0
  106. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/nm/adac/atlantis.json +23 -0
  107. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/nm/segami/mirage.json +42 -0
  108. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/pt/ge_medical_systems/qx_i.json +22 -0
  109. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/pt/ge_medical_systems/signa_pet_mr.json +272 -0
  110. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/pt/ge_medical_systems_pet/discovery_qx_i.json +22 -0
  111. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/pt/gems/advance.json +21 -0
  112. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/pt/gems/unknown.json +23 -0
  113. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/pt/hmsa_mim_software/927.json +21 -0
  114. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/pt/philips_medical_systems/gemini_tf_base_c.json +22 -0
  115. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/pt/philips_medical_systems/guardian_body_c.json +22 -0
  116. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/pt/philips_medical_systems_mimvista/allegro_body_c.json +21 -0
  117. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/pt/siemens/1094.json +40 -0
  118. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/b_k_medical/1202.json +22 -0
  119. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/ge_healthcare/invenia.json +22 -0
  120. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/ge_healthcare/invenia_abus_2_0.json +23 -0
  121. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/ge_healthcare/logiq7.json +22 -0
  122. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/ge_healthcare/logiqbook.json +24 -0
  123. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/ge_healthcare/logiqe.json +22 -0
  124. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/ge_healthcare/logiqe9.json +111 -0
  125. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/ge_healthcare/logiqi.json +23 -0
  126. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/ge_healthcare/logiqp5.json +22 -0
  127. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/ge_healthcare/logiqp6.json +22 -0
  128. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/ge_healthcare/logiqs7.json +22 -0
  129. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/ge_healthcare/logiqs8.json +22 -0
  130. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/ge_healthcare/logiqworkse9.json +21 -0
  131. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/ge_medical_systems/logiq9.json +22 -0
  132. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/ge_vingmed_ultrasound/echopac_pc.json +40 -0
  133. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/ge_vingmed_ultrasound/vivid7.json +22 -0
  134. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/ge_vingmed_ultrasound/vivid_e9.json +22 -0
  135. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/philips_medical_systems/lumify.json +22 -0
  136. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/siemens/s2000.json +40 -0
  137. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/allow/us/siemens_medical_systems_ultrasound_division/antares.json +40 -0
  138. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/cannon/dr_2050c.json +24 -0
  139. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/canon/dr_2010c.json +24 -0
  140. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/canon/dr_2050c.json +24 -0
  141. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/canon/dr_c125.json +24 -0
  142. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/eastman_kodak_company/ls_75.json +25 -0
  143. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/efilm_medical/unknown.json +36 -0
  144. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/fujitsu/fi_6140z.json +24 -0
  145. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/g_e_medical_systems/prodigy.json +22 -0
  146. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/ge_healthcare_it_radiology/centricity_radiology_ra_600.json +308 -0
  147. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/general_electric/centricity_ra_600.json +61 -0
  148. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/hologic/discovery_a_s_n80111.json +22 -0
  149. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/hologic/discovery_a_s_n_85108.json +22 -0
  150. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/infinitt/infinitt_pacs.json +21 -0
  151. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/lexmark/unknown.json +84 -0
  152. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/lifeimagenomination/unknown.json +19 -0
  153. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/lifeimagenotify/unknown.json +19 -0
  154. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/lifeimagereport/unknown.json +20 -0
  155. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/lumisys/unknown.json +242 -0
  156. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/medweb/none.json +56 -0
  157. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/meridian_technique_limited/orthoview_isd.json +25 -0
  158. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/nai_tech_products_inc/the_dicom_box.json +41 -0
  159. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/neurostar_solutions_inc/unknown.json +21 -0
  160. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/north_american_imaging_inc/the_dicom_box.json +40 -0
  161. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/pacs/dr_c125.json +24 -0
  162. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/pacsgear/pacsscan.json +84 -0
  163. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/pacsgear/print2pacs.json +25 -0
  164. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/pacsgear/unknown.json +426 -0
  165. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/pacsgear_inc/the_dicom_box.json +22 -0
  166. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/pacsgear_rii2/unknown.json +24 -0
  167. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/pacslogic/unknown.json +19 -0
  168. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/pacsmatt/unknown.json +68 -0
  169. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/panasonic/kv_s2026c.json +24 -0
  170. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/philips/easydiagnost_super80_cp.json +22 -0
  171. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/philips_medical_systems/unknown.json +18 -0
  172. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/siemens_health_services/unknown.json +167 -0
  173. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/sorna_corporation/unknown.json +21 -0
  174. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/vidar/diagnosticpro_advantage.json +24 -0
  175. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/vidar/unknown.json +157 -0
  176. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/vidar/vidar_digitizer.json +149 -0
  177. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/cr/viztek/unknown.json +21 -0
  178. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/brightspeed.json +40 -0
  179. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/brightspeed_qx_i.json +22 -0
  180. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/brightspeed_s.json +21 -0
  181. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/discovery_600.json +38 -0
  182. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/discovery_610.json +22 -0
  183. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/discovery_690.json +22 -0
  184. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/discovery_710.json +40 -0
  185. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/discovery_ct.json +22 -0
  186. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/discovery_ct590_rt.json +22 -0
  187. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/discovery_ct750_hd.json +58 -0
  188. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/discovery_iq.json +22 -0
  189. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/discovery_mi.json +22 -0
  190. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/discovery_rx.json +21 -0
  191. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/discovery_st.json +55 -0
  192. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/discovery_ste.json +38 -0
  193. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/discovery_xr.json +21 -0
  194. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/hispeed_qx_i.json +22 -0
  195. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/lightspeed.json +21 -0
  196. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/lightspeed16.json +72 -0
  197. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/lightspeed_plus.json +21 -0
  198. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/lightspeed_pro_16.json +21 -0
  199. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/lightspeed_pro_32.json +21 -0
  200. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/lightspeed_qx_i.json +21 -0
  201. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/lightspeed_rt.json +21 -0
  202. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/lightspeed_rt16.json +39 -0
  203. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/lightspeed_ultra.json +21 -0
  204. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/lightspeed_vct.json +129 -0
  205. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/lightspeed_xtra.json +40 -0
  206. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/optima_560.json +22 -0
  207. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/optima_ct520_series.json +22 -0
  208. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/optima_ct540.json +22 -0
  209. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/optima_ct580.json +22 -0
  210. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/optima_ct660.json +58 -0
  211. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/revolution_ct.json +23 -0
  212. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/revolution_evo.json +22 -0
  213. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/revolution_gsi.json +22 -0
  214. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/ge_medical_systems/revolution_hd.json +22 -0
  215. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/medrad_inc/certegra.json +23 -0
  216. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/philips/brilliance_64.json +24 -0
  217. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/philips/gemini_tf_big_bore.json +24 -0
  218. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/philips/precedence_16p.json +44 -0
  219. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/siemens/sensation_64.json +22 -0
  220. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ct/toshiba/aquilion.json +163 -0
  221. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/dx/bioptics_inc/pathvision.json +25 -0
  222. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/dx/efilm_medical/unknown.json +68 -0
  223. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/dx/faxitron_x_ray_llc/dx_50.json +66 -0
  224. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/dx/ge_healthcare/lunar_prodigy.json +22 -0
  225. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/dx/ge_healthcare/lunar_prodigy_advance.json +23 -0
  226. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/dx/hologic/discovery_a_s_n87685.json +22 -0
  227. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/dx/hologic/discovery_c_s_n81330.json +22 -0
  228. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/dx/hologic/discovery_c_s_n84951.json +23 -0
  229. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/dx/hologic/discovery_sl_s_n82250.json +22 -0
  230. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/dx/hologic/horizon_w_s_n_200112.json +23 -0
  231. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/dx/lexmark/unknown.json +124 -0
  232. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/dx/lifeimagenomination/unknown.json +19 -0
  233. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/dx/lifeimagenotify/unknown.json +19 -0
  234. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/dx/lifeimagereport/unknown.json +19 -0
  235. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/dx/pacsgear/unknown.json +1726 -0
  236. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/dx/pacslogic/unknown.json +19 -0
  237. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/dx/pacsmatt/unknown.json +21 -0
  238. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/dx/philips_medical_systems/unknown.json +18 -0
  239. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ko/ge_healthcare_it_radiology/centricity_radiology_ra_1000.json +18 -0
  240. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/bioptics_inc/biovision.json +46 -0
  241. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/bioptics_inc/corevision.json +25 -0
  242. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/bioptics_inc/pixarray100.json +25 -0
  243. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/cadx/cad1.json +18 -0
  244. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/cadx/mmhwdcad.json +18 -0
  245. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/cadx/ohmac2cad.json +18 -0
  246. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/canon/2050c.json +24 -0
  247. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/canon/dr_2010c.json +25 -0
  248. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/confirma_inc/cadstream_4_1_3_985.json +24 -0
  249. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/connect_imaging/unknown.json +22 -0
  250. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/di/document_scanner.json +23 -0
  251. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/eastman_kodak_company/carestream_digitized_priors_input_station_1_1_5_38679_vidar.json +22 -0
  252. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/faxitron_bioptics_llc/biovision.json +25 -0
  253. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/faxitron_x_ray_corporation/dx_50.json +24 -0
  254. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/faxitron_x_ray_llc/dx_50.json +24 -0
  255. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/ge_healthcare/lunar_prodigy_advance.json +22 -0
  256. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/ge_healthcare_it_digital_hardcopy/centricity_digital_hardcopy.json +23 -0
  257. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/ge_healthcare_it_radiology/centricity_radiology_ra_600.json +24 -0
  258. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/hologic/discovery_a_s_n83038.json +23 -0
  259. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/hologic_inc/securview.json +24 -0
  260. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/hologic_inc/trident.json +24 -0
  261. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/icad_inc/7_2_h.json +25 -0
  262. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/icad_inc/icad_powerlook_amp_8_0_1.json +25 -0
  263. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/icad_inc/unknown.json +23 -0
  264. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/kubtec/xpert.json +21 -0
  265. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/kubtec/xpert_20.json +21 -0
  266. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/lexmark/unknown.json +24 -0
  267. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/matakina_technology/unknown.json +22 -0
  268. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/matakina_technology/volpara_server.json +24 -0
  269. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/primordial/unknown.json +19 -0
  270. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/r2_technology_inc/cenova.json +24 -0
  271. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/r2_technology_inc/digitalnow_enhanced.json +23 -0
  272. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/r2_technology_inc/digitalnow_tm.json +23 -0
  273. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/ramsoft_inc/castle_powerreader.json +25 -0
  274. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/siemens_healthcare/syngo_via_va30a.json +23 -0
  275. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/three_palm_software/workstationone.json +23 -0
  276. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/vidar/cad_pro_advantage.json +27 -0
  277. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/vidar/cadpro.json +26 -0
  278. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/vidar/diagnosticpro_advantage.json +25 -0
  279. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/vidar/vidar_digitizer.json +24 -0
  280. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/visage_imaging/senograph_ds_ads_43_10_1.json +25 -0
  281. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/visage_imaging/unknown.json +24 -0
  282. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mg/volpara_limited/unknown.json +21 -0
  283. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/agfa/clinapps.json +23 -0
  284. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/aze/unknown.json +23 -0
  285. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/bammergroup_stanford/rapid_2_0.json +40 -0
  286. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/barco/voxar_3d.json +22 -0
  287. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/cannon/dr_2050c.json +24 -0
  288. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/canon/2050c.json +25 -0
  289. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/circlecvi/unknown.json +40 -0
  290. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/confirma_inc/cadstream_4_1_2_613.json +44 -0
  291. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/dcad/unknown.json +36 -0
  292. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/desacc_inc/health_data_explorer.json +23 -0
  293. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/fujitsu/unknown.json +24 -0
  294. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/ge/signa_1_5t.json +23 -0
  295. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/ge_healthcare_it_radiology/centricity_radiology_ra_600.json +61 -0
  296. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/ge_medical_systems/signa_hdxt.json +59 -0
  297. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/icad/unknown.json +36 -0
  298. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/image_information_systems/unknown.json +20 -0
  299. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/imagenow/unknown.json +20 -0
  300. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/lexmark/unknown.json +24 -0
  301. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/lifeimagenomination/unknown.json +19 -0
  302. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/lifeimagenotify/unknown.json +19 -0
  303. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/lifeimagereport/unknown.json +19 -0
  304. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/lumisys/unknown.json +21 -0
  305. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/medweb/none.json +38 -0
  306. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/merge_healthcare/cadstream_5_2_7_563.json +22 -0
  307. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/merge_healthcare/cadstream_5_2_9_711.json +22 -0
  308. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/merge_healthcare_inc/unknown.json +21 -0
  309. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/neurostar_solutions_inc/unknown.json +38 -0
  310. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/pacsgear/pacsscan.json +44 -0
  311. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/pacsgear/unknown.json +24 -0
  312. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/pacsgear_riipscan/unknown.json +24 -0
  313. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/pacsmatt/unknown.json +55 -0
  314. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/pacsscan/dr_2080c.json +25 -0
  315. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/pacsscan_4_0/unknown.json +24 -0
  316. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/panasonic/kv_s2028c.json +24 -0
  317. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/philips/unknown.json +18 -0
  318. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/philips_medical_systems/unknown.json +18 -0
  319. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/primordial/unknown.json +34 -0
  320. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/radiology_research/hfh.json +41 -0
  321. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/siemens_healthcare/syngo_via_va20a.json +22 -0
  322. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/siemens_healthcare/syngo_via_vb10a.json +38 -0
  323. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/sorna_corporation/unknown.json +22 -0
  324. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/statrad_llc/push2pacs.json +21 -0
  325. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/toshiba_mec/mrt200pp3.json +42 -0
  326. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/toshiba_mec/unknown.json +21 -0
  327. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/urlj/unknown.json +24 -0
  328. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/vassol/unknown.json +23 -0
  329. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/vidar/unknown.json +21 -0
  330. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/vital_images_inc/vitrea_2.json +21 -0
  331. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/mr/viztek/unknown.json +19 -0
  332. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/nm/adac/unknown.json +22 -0
  333. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/nm/ge_medical_systems/discovery_st.json +21 -0
  334. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/nm/segami/mirage.json +59 -0
  335. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ot/ge_medical_systems/qx_i.json +24 -0
  336. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/ot/philips_medical_systems/alluraxper.json +23 -0
  337. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/pct/ge_medical_systems/discovery_ste.json +21 -0
  338. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/pt/ge_medical_systems/discovery_690.json +22 -0
  339. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/pt/ge_medical_systems/discovery_st.json +21 -0
  340. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/pt/ge_medical_systems/discovery_ste.json +21 -0
  341. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/pt/ge_medical_systems/qx_i.json +24 -0
  342. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/pt/philips_medical_systems/allegro_body_c.json +23 -0
  343. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/sc/sante_dicom/unknown.json +24 -0
  344. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/sr/philips_medical_systems/ie33.json +23 -0
  345. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/sr/siemens/biograph128.json +18 -0
  346. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/sr/siemens/sensation_16.json +19 -0
  347. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/sr/siemens/sensation_64.json +19 -0
  348. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/sr/siemens/somatom_definition.json +19 -0
  349. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/sr/siemens/somatom_definition_as.json +32 -0
  350. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/sr/siemens/somatom_definition_edge.json +18 -0
  351. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/sr/siemens/somatom_definition_flash.json +18 -0
  352. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/sr/siemens/somatom_force.json +18 -0
  353. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/sr/sonosite_inc/turbo.json +21 -0
  354. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/acuson/cypress.json +21 -0
  355. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/acuson/sequoia.json +80 -0
  356. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/aloka_co_ltd/ssd_5500.json +22 -0
  357. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/atl/hdi_5000.json +79 -0
  358. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/g_e_medical_systems/logiq_700.json +23 -0
  359. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/ge_healthcare/logiq_s6.json +23 -0
  360. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/ge_healthcare/logiqe.json +61 -0
  361. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/ge_healthcare/logiqe9.json +523 -0
  362. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/ge_healthcare/logiqi.json +24 -0
  363. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/ge_healthcare/logiqp5.json +23 -0
  364. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/ge_healthcare/logiqp6.json +23 -0
  365. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/ge_healthcare/logiqp9.json +24 -0
  366. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/ge_healthcare/logiqs7.json +23 -0
  367. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/ge_healthcare/logiqs8.json +252 -0
  368. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/ge_healthcare/venue_40.json +21 -0
  369. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/ge_healthcare/viewpoint.json +85 -0
  370. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/ge_healthcare_it_radiology/centricity_radiology_ra_600.json +42 -0
  371. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/ge_healthcare_viewpoint/viewpoint.json +49 -0
  372. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/ge_medical_systems/logiq5.json +24 -0
  373. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/ge_medical_systems/logiq9.json +177 -0
  374. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/ge_medical_systems/logiqworks.json +65 -0
  375. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/ge_vingmed_ultrasound/vivid7.json +43 -0
  376. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/gems_ultrasound/vivid_i.json +24 -0
  377. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/gems_ultrasound/vivid_s5.json +26 -0
  378. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/gems_ultrasound/vivid_s6.json +39 -0
  379. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/medison/accuvix.json +20 -0
  380. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/medison/accuvix_xg.json +21 -0
  381. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/philips_medical_systems/affiniti_50g.json +23 -0
  382. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/philips_medical_systems/epiq_5g.json +22 -0
  383. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/philips_medical_systems/epiq_7g.json +22 -0
  384. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/philips_medical_systems/hd15.json +21 -0
  385. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/philips_medical_systems/iu22.json +43 -0
  386. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/samsung_medison_co_ltd/rs80a.json +21 -0
  387. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/samsung_medison_co_ltd/sonoace_r7.json +38 -0
  388. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/siemens/acuson_p500.json +21 -0
  389. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/siemens/acuson_sc2000.json +22 -0
  390. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/siemens/acuson_x300.json +38 -0
  391. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/siemens/acuson_x700.json +21 -0
  392. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/siemens/s2000.json +55 -0
  393. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/siemens_medical_systems_ultrasound_division/antares.json +22 -0
  394. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/siemens_ultrasound/g50_s.json +21 -0
  395. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/sonosite_inc/micromaxx.json +21 -0
  396. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/sonosite_inc/nano.json +21 -0
  397. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/sonosite_inc/x_porte.json +21 -0
  398. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/supersonic_imagine_sa/aixplorer.json +24 -0
  399. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/toshiba_mec/ssa_580a.json +22 -0
  400. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/toshiba_mec_us/tus_a500.json +67 -0
  401. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/u_systems/somoviewer.json +24 -0
  402. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/unknown/unknown.json +38 -0
  403. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/zonare/z_one.json +24 -0
  404. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/us/zonare/zs3.json +26 -0
  405. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/xa/philips/allura_clarity.json +22 -0
  406. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/filter/xa/philips_medical_systems/alluraxper.json +23 -0
  407. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/cr/canon_inc/axiom_multix_m.json +61 -0
  408. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/cr/canon_inc/cxdi.json +44 -0
  409. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/cr/konica/0402.json +49 -0
  410. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/cr/medicatechusa/krystalrad_660vsi.json +303 -0
  411. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/cr/shimadzu/cxdi_control_software_ne.json +24 -0
  412. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/ct/siemens/s1000.json +25 -0
  413. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/dx/canon_inc/cxdi.json +26 -0
  414. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/dx/cuattro_llc/clouddr_medical.json +25 -0
  415. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/dx/medicatechusa/krystalrad_660_vxi.json +257 -0
  416. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/dx/medlink_imaging/altodr.json +27 -0
  417. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/nm/ge_medical_systems_nuclear/unknown.json +50 -0
  418. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/ot/ge_medical_systems/discovery_690.json +28 -0
  419. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/ot/ge_medical_systems/discovery_mi.json +25 -0
  420. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/ot/ge_medical_systems/discovery_st.json +52 -0
  421. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/ot/ge_medical_systems/discovery_ste.json +72 -0
  422. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/ot/ge_medical_systems/signa_pet_mr.json +46 -0
  423. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/pt/ge_medical_systems/discovery_600.json +28 -0
  424. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/pt/ge_medical_systems/discovery_mi.json +25 -0
  425. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/pt/ge_medical_systems/signa_pet_mr.json +29 -0
  426. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/pt/philips_medical_systems/guardian_body_c.json +92 -0
  427. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/acuson/cypress.json +25 -0
  428. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/acuson/sequoia.json +89 -0
  429. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/aloka_co_ltd/ssd_5500.json +25 -0
  430. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/aloka_co_ltd/ssd_alpha10.json +44 -0
  431. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/aloka_co_ltd/ssd_alpha5.json +24 -0
  432. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/aloka_co_ltd/ssd_alpha6.json +24 -0
  433. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/aloka_co_ltd/ssd_alpha7.json +24 -0
  434. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/b_k_medical/1202.json +26 -0
  435. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/b_k_medical/2202.json +46 -0
  436. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/bk_medical/2300.json +46 -0
  437. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/g_e_medical_systems/logiq_700.json +42 -0
  438. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_healthcare/logiq7.json +44 -0
  439. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_healthcare/logiq_s6.json +24 -0
  440. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_healthcare/logiqe.json +64 -0
  441. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_healthcare/logiqe9.json +304 -0
  442. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_healthcare/logiqi.json +25 -0
  443. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_healthcare/logiqp5.json +24 -0
  444. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_healthcare/logiqp6.json +24 -0
  445. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_healthcare/logiqp9.json +25 -0
  446. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_healthcare/logiqs7.json +63 -0
  447. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_healthcare/logiqs8.json +204 -0
  448. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_healthcare/vivide.json +24 -0
  449. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_healthcare/voluson_p.json +25 -0
  450. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_healthcare/voluson_s.json +25 -0
  451. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_healthcare_austria_gmbh_co_og/v830.json +131 -0
  452. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_healthcare_austria_gmbh_co_og/voluson_e8.json +25 -0
  453. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_medical_systems/logiq5.json +25 -0
  454. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_medical_systems/logiq9.json +44 -0
  455. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_medical_systems_kretztechnik_gmbh_co_ohg/v830.json +104 -0
  456. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_ultrasound/vivid_3.json +24 -0
  457. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_vingmed_ultrasound/vivid7.json +47 -0
  458. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_vingmed_ultrasound/vivid_e9.json +67 -0
  459. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/ge_vingmed_ultrasound/vivid_e95.json +25 -0
  460. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/gems_ultrasound/logiq_400.json +21 -0
  461. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/gems_ultrasound/vivid_i.json +45 -0
  462. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/gems_ultrasound/vivid_q.json +25 -0
  463. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/gems_ultrasound/vivid_s5.json +25 -0
  464. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/gems_ultrasound/vivid_s6.json +25 -0
  465. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/hitachi_aloka_medical_ltd/noblus.json +25 -0
  466. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/hitachi_aloka_medical_ltd/prosound_f75.json +64 -0
  467. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/medison/accuvix.json +23 -0
  468. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/medison/accuvix_v10.json +24 -0
  469. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/medison/accuvix_v20.json +24 -0
  470. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/medison/accuvix_xg.json +24 -0
  471. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/medison/sonoace_x8.json +24 -0
  472. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/philips_medical_systems/affiniti_50g.json +26 -0
  473. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/philips_medical_systems/affiniti_70g.json +25 -0
  474. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/philips_medical_systems/clearvue_550.json +24 -0
  475. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/philips_medical_systems/cx30.json +24 -0
  476. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/philips_medical_systems/cx50.json +24 -0
  477. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/philips_medical_systems/epiq_5w.json +25 -0
  478. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/philips_medical_systems/epiq_7g.json +67 -0
  479. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/philips_medical_systems/hd15.json +24 -0
  480. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/philips_medical_systems/ie33.json +46 -0
  481. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/philips_medical_systems/iu22.json +88 -0
  482. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/philips_medical_systems/sparq.json +24 -0
  483. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/samsung_medison_co_ltd/h60.json +24 -0
  484. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/samsung_medison_co_ltd/rs80a.json +44 -0
  485. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/samsung_medison_co_ltd/sonoace_r7.json +24 -0
  486. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/siemens/acuson_freestyle.json +46 -0
  487. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/siemens/acuson_p500.json +25 -0
  488. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/siemens/acuson_sc2000.json +25 -0
  489. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/siemens/acuson_x300.json +46 -0
  490. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/siemens/acuson_x700.json +25 -0
  491. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/siemens/s1000.json +25 -0
  492. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/siemens/s2000.json +25 -0
  493. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/siemens/s3000.json +25 -0
  494. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/siemens_medical_systems_ultrasound_division/antares.json +67 -0
  495. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/siemens_ultrasound/elegra.json +25 -0
  496. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/siemens_ultrasound/g40.json +25 -0
  497. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/siemens_ultrasound/g50_s.json +25 -0
  498. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/siemens_ultrasound/g60_s.json +25 -0
  499. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/siemens_ultrasound/x150.json +25 -0
  500. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/sonosite/sonosite_titan.json +23 -0
  501. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/sonosite_inc/micromaxx.json +24 -0
  502. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/sonosite_inc/nano.json +44 -0
  503. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/sonosite_inc/turbo.json +24 -0
  504. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/sonosite_inc/x_porte.json +24 -0
  505. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/supersonic_imagine_sa/aixplorer.json +291 -0
  506. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/toshiba_mec/aplioxg.json +46 -0
  507. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/toshiba_mec/viamo.json +24 -0
  508. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/toshiba_mec/xarioxg.json +45 -0
  509. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/toshiba_mec_us/ssh_880cv.json +25 -0
  510. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/toshiba_mec_us/tus_a300.json +27 -0
  511. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/toshiba_mec_us/tus_a400.json +27 -0
  512. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/toshiba_mec_us/tus_a500.json +28 -0
  513. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/toshiba_mec_us/tus_ai700.json +28 -0
  514. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/toshiba_mec_us/tus_x200.json +27 -0
  515. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/zonare/z_one.json +45 -0
  516. dicom_dre-1.0.0.dev1/tests/unit/catalog_fixtures/scrub/us/zonare/zs3.json +46 -0
  517. dicom_dre-1.0.0.dev1/tests/unit/conftest.py +115 -0
  518. dicom_dre-1.0.0.dev1/tests/unit/test_batch.py +425 -0
  519. dicom_dre-1.0.0.dev1/tests/unit/test_catalog.py +577 -0
  520. dicom_dre-1.0.0.dev1/tests/unit/test_catalog_regression_fixtures.py +113 -0
  521. dicom_dre-1.0.0.dev1/tests/unit/test_cli.py +311 -0
  522. dicom_dre-1.0.0.dev1/tests/unit/test_default_catalog.py +570 -0
  523. dicom_dre-1.0.0.dev1/tests/unit/test_jpeg_dct_scrubber.py +307 -0
  524. dicom_dre-1.0.0.dev1/tests/unit/test_pipeline_preservation.py +200 -0
  525. dicom_dre-1.0.0.dev1/tests/unit/test_pipeline_redaction.py +141 -0
  526. dicom_dre-1.0.0.dev1/tests/unit/test_pixel_blanker.py +674 -0
  527. dicom_dre-1.0.0.dev1/tests/unit/test_profile.py +531 -0
  528. dicom_dre-1.0.0.dev1/tests/unit/test_text_redactor.py +827 -0
  529. dicom_dre-1.0.0.dev1/uv.lock +1294 -0
@@ -0,0 +1,24 @@
1
+ {
2
+ "features": {
3
+ "ghcr.io/devcontainers-extra/features/apt-packages:1": {
4
+ "version": "1.0.6",
5
+ "resolved": "ghcr.io/devcontainers-extra/features/apt-packages@sha256:55c54412112da81b9381e470cdbbe55278564950d1ff536ce925b1e8e096babd",
6
+ "integrity": "sha256:55c54412112da81b9381e470cdbbe55278564950d1ff536ce925b1e8e096babd"
7
+ },
8
+ "ghcr.io/devcontainers/features/common-utils:2": {
9
+ "version": "2.5.9",
10
+ "resolved": "ghcr.io/devcontainers/features/common-utils@sha256:cb0c4d3c276f157eed17935747e364178d75fee17f55c4e129966f64633deb3a",
11
+ "integrity": "sha256:cb0c4d3c276f157eed17935747e364178d75fee17f55c4e129966f64633deb3a"
12
+ },
13
+ "ghcr.io/devcontainers/features/github-cli:1": {
14
+ "version": "1.1.0",
15
+ "resolved": "ghcr.io/devcontainers/features/github-cli@sha256:d22f50b70ed75339b4eed1ba9ecde3a1791f90e88d37936517e3bace0bbad671",
16
+ "integrity": "sha256:d22f50b70ed75339b4eed1ba9ecde3a1791f90e88d37936517e3bace0bbad671"
17
+ },
18
+ "ghcr.io/jsburckhardt/devcontainer-features/uv:1": {
19
+ "version": "1.0.0",
20
+ "resolved": "ghcr.io/jsburckhardt/devcontainer-features/uv@sha256:542a0bc2203205b3c696de650ba862f280b20af3543493cc232edd9ac35791f7",
21
+ "integrity": "sha256:542a0bc2203205b3c696de650ba862f280b20af3543493cc232edd9ac35791f7"
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,48 @@
1
+ // For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
2
+ // https://containers.dev/
3
+ {
4
+ "name": "dicom-dre",
5
+ "image": "python:3.12-slim-trixie",
6
+ "remoteUser": "${localEnv:USER}${localEnv:USERNAME}",
7
+ "containerEnv": {
8
+ "UV_COMPILE_BYTECODE": "1",
9
+ "UV_LINK_MODE": "copy",
10
+ "UV_PYTHON_DOWNLOADS": "never",
11
+ "UV_TOOL_BIN_DIR": "/usr/local/bin"
12
+ },
13
+ "customizations": {
14
+ "vscode": {
15
+ "settings": {
16
+ "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
17
+ "extensions.verifySignature": false, // https://github.com/microsoft/vscode-remote-release/issues/9628
18
+ "remote.autoForwardPorts": false,
19
+ "extensions.ignoreRecommendations": true
20
+ },
21
+ "extensions": [
22
+ "bierner.markdown-mermaid",
23
+ "charliermarsh.ruff",
24
+ "GitHub.copilot",
25
+ "GitHub.vscode-pull-request-github",
26
+ "ms-python.python",
27
+ "meta.pyrefly",
28
+ "redhat.vscode-yaml"
29
+ ]
30
+ }
31
+ },
32
+ "features": {
33
+ "ghcr.io/devcontainers/features/common-utils:2": {
34
+ "username": "${localEnv:USER}${localEnv:USERNAME}",
35
+ "userUid": "1000",
36
+ "userGid": "1000",
37
+ "upgradePackages": "false",
38
+ "configureZshAsDefaultShell": "false"
39
+ },
40
+ "ghcr.io/devcontainers-extra/features/apt-packages:1": {
41
+ "packages": "build-essential,ca-certificates,cmake,curl,dcmtk,file,git,just,ninja-build,patchelf,pkg-config,swig,unzip,wget,zip"
42
+ },
43
+ "ghcr.io/jsburckhardt/devcontainer-features/uv:1": {},
44
+ "ghcr.io/devcontainers/features/github-cli:1": {}
45
+ },
46
+ "postCreateCommand": "bash ./.devcontainer/post-create.sh",
47
+ "waitFor": "postCreateCommand"
48
+ }
@@ -0,0 +1,34 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+
4
+ WORKSPACE_DIR="$(pwd)"
5
+
6
+ BLUE='\033[0;34m'
7
+ NC='\033[0m'
8
+
9
+ # Git doesn't like the UID changes from bind-mounting the source into the container.
10
+ if ! git config --global --get-all safe.directory | grep -qx "${WORKSPACE_DIR}"; then
11
+ git config --global --add safe.directory "${WORKSPACE_DIR}"
12
+ fi
13
+
14
+ # Convenience aliases.
15
+ if ! grep -q "#dicom-dre#" "${HOME}/.bashrc" 2>/dev/null; then
16
+ {
17
+ echo '#dicom-dre#'
18
+ echo 'alias ll="ls -alF"'
19
+ echo 'alias la="ls -A"'
20
+ echo 'alias l="ls -CF"'
21
+ } >> "${HOME}/.bashrc"
22
+ fi
23
+
24
+ # Sync dependencies and build the CFFI JPEG-DCT extension (and python-gdcm from source).
25
+ echo -e "${BLUE}Running uv sync...${NC}"
26
+ uv sync
27
+
28
+ # Compile the CFFI JPEG-DCT acceleration extension into src/dicom_dre/.
29
+ # Without this the engine silently falls back to the ~300x-slower pure-Python
30
+ # entropy codec. Building from src/ so the module 'dicom_dre._jpeg_dct_accel'
31
+ # lands at src/dicom_dre/_jpeg_dct_accel.*.so.
32
+ echo -e "${BLUE}Compiling JPEG-DCT acceleration extension...${NC}"
33
+ (cd src && uv run python -m dicom_dre._jpeg_dct_accel_build)
34
+ rm -f src/dicom_dre/_jpeg_dct_accel.c src/dicom_dre/_jpeg_dct_accel.o
@@ -0,0 +1,232 @@
1
+ COPILOT INSTRUCTIONS
2
+
3
+ This document defines how the AI pair programmer should reason, communicate, and write code.
4
+ It sets style rules, workflow expectations, and interaction guidelines to ensure consistent,
5
+ high-quality, and safe contributions.
6
+
7
+ CORE DIRECTIVE
8
+ You are an expert AI pair programmer.
9
+ Your primary goal is to make precise, high-quality, and safe code modifications.
10
+ Follow every rule in this document meticulously.
11
+
12
+ INTERACTION & REASONING GUIDELINES
13
+
14
+ - Concise communication:
15
+ Use one clear sentence before each tool call to explain what you are doing.
16
+
17
+ - Continuity:
18
+ If the user says "resume" or "continue", pick up exactly where your last step ended.
19
+
20
+ - Thorough thinking:
21
+ Think rigorously and document reasoning internally.
22
+ Share only concise results externally.
23
+
24
+ - Communication style:
25
+ Use factual, descriptive language in the style of internal engineering specifications.
26
+ Never use marketing terms (efficient, compelling, comprehensively, effectively, successfully).
27
+ Never use promotional adjectives (comprehensive, robust, powerful, optimized, seamless, flexible, scalable, intuitive, advanced, cutting-edge).
28
+ Never use enthusiastic phrases (Perfect! Excellent! Great! Awesome! I have successfully...).
29
+ Avoid evaluative or subjective judgments.
30
+ Prefer verbs and concrete nouns over adjectives.
31
+ Omit unverifiable or unquantifiable claims.
32
+ Provide factual summaries that describe actions and results without celebration.
33
+ When uncertain if a word is promotional, omit it.
34
+ Do not use emphatic markers (CRITICAL, IMPORTANT, WARNING) in code comments or documentation unless explicitly requested by the user.
35
+
36
+ - File creation:
37
+ Do not create summary documentation unless explicitly requested.
38
+ Do not create test files without asking first.
39
+ Only create files directly required to fulfill the user's request.
40
+
41
+ - Error checking:
42
+ After making any code changes, automatically check for linter errors using get_errors.
43
+ Fix all errors before reporting completion.
44
+ Never wait for the user to point out linter errors.
45
+
46
+ CODING STANDARDS
47
+ General Rule:
48
+
49
+ - Implement the smallest possible change that satisfies the request.
50
+ - Follow the Google Python coding standards except when they conflict with this document.
51
+ - Do not create trailing whitespace, and immediately remove trailing whitespace when found.
52
+ - Avoid spaces in empty lines.
53
+ - Avoid the use of emojis in log messages or documentation.
54
+
55
+ Naming Conventions:
56
+
57
+ - Modules: lowercase_with_underscores
58
+ - Classes: CapWords
59
+ - Functions & variables: lowercase_with_underscores
60
+ - Constants: UPPERCASE_WITH_UNDERSCORES
61
+ - Private members: prefix with \_
62
+
63
+ Strings:
64
+
65
+ - Prefer double quotes ("...")
66
+ - Use triple quotes ("""...""") for docstrings
67
+
68
+ Error Handling:
69
+
70
+ - CRITICAL: Never use assert statements for runtime validation
71
+ - Assert statements are removed in optimized byte code compilation
72
+ - Use explicit ValueError, TypeError, or other appropriate exceptions instead
73
+ - Provide clear, descriptive error messages
74
+
75
+ Example:
76
+ # Wrong
77
+ assert value is not None
78
+ assert len(items) > 0
79
+
80
+ # Correct
81
+ if value is None:
82
+ raise ValueError("value must not be None")
83
+ if len(items) == 0:
84
+ raise ValueError("items list cannot be empty")
85
+
86
+ IMPORTS
87
+
88
+ Rules:
89
+
90
+ - All imports must be at the top of the file
91
+ - Only use inline imports when necessary for performance or to avoid circular import issues
92
+ - One import per line
93
+ - Order: standard library -> third-party -> local
94
+ - Always use absolute imports, inside **init**.py is ok
95
+ - Avoid importing Prefect functions and modules in a file that does not contain @task and @flow functions.
96
+
97
+ PACKAGE RESOURCES
98
+
99
+ - Use importlib.resources, never Path(__file__).parent
100
+ - Pattern: import importlib.resources as pkg_resources, then Path(str(pkg_resources.files(resource_module)))
101
+
102
+ DOCSTRINGS & COMMENTS
103
+
104
+ - Follow PEP 257
105
+ - First line: short summary sentence
106
+ - Document all public classes, methods, and functions
107
+ - Never write obvious comments that simply restate what the code does
108
+
109
+ Example:
110
+ def add(x: int, y: int) -> int:
111
+ """Return the sum of x and y."""
112
+ return x + y
113
+
114
+ TYPE ANNOTATIONS
115
+
116
+ - Use PEP 484 type hints
117
+ - Forward-declare types with TYPE_CHECKING if needed
118
+ - Use quoted annotations ("State") when types are not available at runtime
119
+
120
+ DATACLASSES
121
+
122
+ - Fields with default values MUST come after fields without defaults
123
+ - Order fields: required fields first, then optional/default fields
124
+ - Use field(default=...) or field(default_factory=...) for fields with defaults
125
+ - Never mix required and default fields in arbitrary order
126
+
127
+ Example:
128
+ @dataclass
129
+ class MyClass:
130
+ # Required fields first
131
+ name: str
132
+ age: int
133
+ # Default fields last
134
+ status: str = "active"
135
+ tags: List[str] = field(default_factory=list)
136
+
137
+ TESTING
138
+
139
+ - Run tests using `uv run pytest` (NEVER `python -m pytest`)
140
+ - Place tests in tests/ using pytest
141
+ - Mock external services in unit tests especially if they use network calls
142
+ - Prefer small, isolated tests over broad coverage in a single test
143
+ - Avoid disabling, skipping, or commenting out failing unit tests. If a unit test fails, fix the root cause of the exception.
144
+ - Avoid removing assertions, adding empty try/catch blocks, or making tests trivial in order to make tests pass.
145
+ - Avoid introducing conditional logic that skips test cases under certain conditions, for example a missing dependency.
146
+ - Always ensure the unit test continues to properly validate the intended functionality.
147
+
148
+ DOCUMENTATION
149
+
150
+ - When making changes to workflows, always update the corresponding documentation in the docs/ folder
151
+ - Keep workflow documentation synchronized with code changes
152
+ - Update relevant .md files in docs/workflows/ when modifying flow implementations
153
+ - When adding CLI documentation, verify all commands and options against actual --help output
154
+ - When adding new documentation files, add them to the `nav` section in mkdocs.yml
155
+
156
+ CLI REGISTRATION
157
+
158
+ - When creating new CLI commands, always register them in src/dicom_dre/cli.py
159
+ - Add the new command or command group to the `cli` group following the pattern of existing subcommands
160
+ - Group related subcommands under a click group (as done for the redactor subgroup)
161
+
162
+ PYTHON PACKAGE MANAGEMENT
163
+
164
+ - Always use `uv` instead of `pip` for all package management operations
165
+ - Installation: `uv pip install <package>`
166
+ - Editable install: `uv pip install -e .`
167
+ - Multiple packages: `uv pip install package1 package2`
168
+ - Upgrading packages: `uv add package_name>=package_version --upgrade-package package_name`
169
+ - Never use bare `pip` commands
170
+ - `uv` is faster and more reliable than pip for this project
171
+
172
+ SAFETY & ERROR HANDLING
173
+
174
+ - Never suggest destructive commands without confirmation
175
+ - Validate API usage against latest documentation
176
+ - Do not expose secrets, credentials, or tokens in code
177
+
178
+ PHI PROTECTION
179
+
180
+ This project processes medical imaging data. Protected Health Information (PHI) must never
181
+ be transmitted to external services, including MCP servers configured in .vscode/mcp.json.
182
+
183
+ - Never include PHI in tool queries sent to external MCP servers
184
+ - PHI includes: patient names, MRNs, accession numbers, dates of birth, addresses,
185
+ phone numbers, Social Security numbers, and any other HIPAA-defined identifiers
186
+ - When formulating search queries for external documentation servers, use generic
187
+ placeholders (e.g., "accession number" instead of an actual value)
188
+ - If the user pastes PHI in the chat, do not echo it in tool queries
189
+ - Safe test values: The accession numbers "TEST" and "TESTING" exist on the server
190
+ and contain no PHI. These are safe to use in examples and testing.
191
+
192
+ GIT
193
+
194
+ - Avoid suggesting git commands that modify history (rebase, reset, amend) without explicit user confirmation.
195
+
196
+ COMMIT MESSAGES
197
+
198
+ Use Conventional Commits format for all commit messages. This format is parsed by
199
+ python-semantic-release to determine version bumps automatically.
200
+
201
+ Format: <type>[optional scope]: <description>
202
+
203
+ Types that trigger releases:
204
+ - feat: A new feature (triggers MINOR version bump, e.g., 1.0.0 -> 1.1.0)
205
+ - fix: A bug fix (triggers PATCH version bump, e.g., 1.0.0 -> 1.0.1)
206
+ - perf: A performance improvement (triggers PATCH version bump)
207
+
208
+ Types that do NOT trigger releases:
209
+ - chore: Maintenance tasks, dependency updates
210
+ - docs: Documentation changes
211
+ - refactor: Code refactoring without behavior change
212
+ - style: Formatting, whitespace changes
213
+ - test: Adding or updating tests
214
+ - ci: CI/CD configuration changes
215
+ - build: Build system changes
216
+
217
+ Breaking changes (trigger MAJOR version bump, e.g., 1.0.0 -> 2.0.0):
218
+ - Add ! after type: feat!: remove deprecated API
219
+ - Or add BREAKING CHANGE: footer in commit body
220
+
221
+ Examples:
222
+ - feat: add new DICOM anonymization option
223
+ - fix(pipeline): handle missing patient ID gracefully
224
+ - docs: update workflow documentation
225
+ - feat!: change CLI argument format
226
+ - fix: resolve memory leak in image processing
227
+
228
+ BREAKING CHANGE: The --format flag now requires explicit value
229
+
230
+ FINALLY
231
+
232
+ Provide short, concise summaries without the use of emoji when completing a large task.
@@ -0,0 +1,25 @@
1
+ ---
2
+ description: Reading and writing DICOM with pydicom
3
+ applyTo: "src/dicom_dre/**/*.py"
4
+ ---
5
+
6
+ # DICOM I/O Conventions
7
+
8
+ ## Process-wide pydicom config
9
+
10
+ Any module that reads or writes DICOM with pydicom (`dcmread`, `dcmwrite`,
11
+ `save_as`, `Dataset` I/O) depends on the global settings in
12
+ `dicom_dre.pydicom_config`, which make reads tolerant of malformed
13
+ production data.
14
+
15
+ - The settings are process-global: one import applies them everywhere, so the
16
+ import only has to run before the first read or write in the process.
17
+ - Add the side-effect import to any new DICOM reader/writer whose module (or its
18
+ import chain) does not already reach it:
19
+
20
+ ```python
21
+ import dicom_dre.pydicom_config # noqa: F401 applies process-wide pydicom config
22
+ ```
23
+
24
+ - Modules that import the pipeline (`dicom_dre.pipeline`) or an anonymizer entry
25
+ module already inherit it transitively and do not need the direct import.
@@ -0,0 +1,314 @@
1
+ ---
2
+ description: Writing tests in tests/unit/
3
+ applyTo: "tests/**/*.py"
4
+ ---
5
+
6
+ # Writing Tests in dicom-dre
7
+
8
+ Instructions for creating and maintaining tests in the `tests/` directory.
9
+
10
+ ## Test Structure
11
+
12
+ All tests live in `tests/unit/` and mirror the `src/dicom_dre/` module structure:
13
+
14
+ ```
15
+ tests/
16
+ ├── conftest.py # Root config: GDCM/ARM64 segfault guard (pytest_configure)
17
+ └── unit/
18
+ ├── conftest.py # Shared fixtures: synthetic GE SIGNA Premier MR dataset
19
+ ├── test_catalog.py
20
+ ├── test_cli.py
21
+ ├── test_default_catalog.py
22
+ ├── test_jpeg_dct_anonymizer.py
23
+ ├── test_pipeline_preservation.py
24
+ ├── test_pixel_blanker.py
25
+ ├── test_profile.py
26
+ └── test_text_redactor.py
27
+ ```
28
+
29
+ ## Placing New Tests
30
+
31
+ All new tests go in `tests/unit/`. They must use only mocks, `tmp_path`, pure Python
32
+ logic, or `pydicom` test data — no network calls, no cloud services, no external
33
+ processes. For example, a test for `src/dicom_dre/catalog.py` belongs at
34
+ `tests/unit/test_catalog.py`.
35
+
36
+ ## Test Framework
37
+
38
+ Use pytest for all tests. Configuration is in `pyproject.toml`:
39
+
40
+ - Test timeout: 90 seconds (configurable per test with `@pytest.mark.timeout`)
41
+ - Coverage requirement: 20% minimum
42
+
43
+ ## GDCM / ARM64 Import Note
44
+
45
+ `python-gdcm` (SWIG bindings) can segfault on ARM64 if loaded during pytest's
46
+ assertion-rewriting phase. The root `conftest.py` imports `pydicom` in
47
+ `pytest_configure` to trigger GDCM loading before collection begins. To stay
48
+ safe, import `pydicom` inside test functions or fixtures rather than at module
49
+ level in test files.
50
+
51
+ ## File Naming Conventions
52
+
53
+ - Test files: `test_*.py`
54
+ - Benchmark files: `bench_*.py`
55
+ - Test functions: `test_*`
56
+ - Benchmark functions: `bench_*`
57
+
58
+ ## Test Class Organization
59
+
60
+ Group related tests in classes with descriptive names:
61
+
62
+ ```python
63
+ """Tests for the device catalog lookup."""
64
+
65
+ import pytest
66
+
67
+ from dicom_dre.catalog import DeviceCatalog
68
+ from dicom_dre.catalog import CatalogDecision
69
+
70
+
71
+ class TestDeviceCatalogLookup:
72
+ """Test device catalog manufacturer/model matching."""
73
+
74
+ def test_known_device_returns_decision(self):
75
+ """A known manufacturer/model pair returns a catalog decision."""
76
+ catalog = DeviceCatalog.from_default()
77
+ decision = catalog.lookup("GE MEDICAL SYSTEMS", "SIGNA Premier")
78
+ assert decision is not None, "Known device should return a decision"
79
+
80
+ def test_unknown_device_returns_none(self):
81
+ """An unrecognised manufacturer/model pair returns None."""
82
+ catalog = DeviceCatalog.from_default()
83
+ decision = catalog.lookup("UNKNOWN_MFR", "UNKNOWN_MODEL")
84
+ assert decision is None, "Unknown device should return None"
85
+ ```
86
+
87
+ ## Docstrings
88
+
89
+ - Module docstring: Describe what is being tested
90
+ - Class docstring: Describe the test suite purpose
91
+ - Test function docstring: Describe the expected behavior being validated
92
+ - Use present tense and be specific about what is being tested
93
+ - Avoid vague descriptions like "Test validation" or wordy phrases like "This test validates..."
94
+
95
+ ## Temporary Files and Directories
96
+
97
+ **CRITICAL**: Always use pytest's `tmp_path` fixture. Never use hardcoded paths like `/tmp/test.dcm` or `Path.home()`.
98
+
99
+ ```python
100
+ def test_operation(tmp_path):
101
+ """Test with temporary files."""
102
+ input_file = tmp_path / "test.dcm"
103
+ output_dir = tmp_path / "output"
104
+ output_dir.mkdir()
105
+ # tmp_path is automatically cleaned up after the test
106
+ ```
107
+
108
+ For custom fixtures, use `tempfile.mkdtemp()`:
109
+
110
+ ```python
111
+ @pytest.fixture
112
+ def temp_dir():
113
+ """Create a temporary directory for test files."""
114
+ temp_path = Path(tempfile.mkdtemp())
115
+ yield temp_path
116
+ shutil.rmtree(temp_path, ignore_errors=True)
117
+ ```
118
+
119
+ ## Mocking External Services
120
+
121
+ Mock any calls that cross a process boundary (file I/O to real paths, network calls).
122
+
123
+ ```python
124
+ from unittest.mock import Mock, patch
125
+
126
+ def test_with_mock():
127
+ """Test with mocked external service."""
128
+ mock_client = Mock()
129
+ mock_client.download.return_value = b"test data"
130
+
131
+ with patch("module.get_client", return_value=mock_client):
132
+ result = function_that_uses_client()
133
+ assert result is not None, "Result should not be None"
134
+ ```
135
+
136
+ ## Environment Variables in Tests
137
+
138
+ Use `monkeypatch.setenv()` and `monkeypatch.delenv()` to set and clear environment
139
+ variables. Never use `os.environ` directly in tests or fixtures, as it leaks state
140
+ across tests.
141
+
142
+ ```python
143
+ def test_requires_env_var(monkeypatch):
144
+ """Test behavior when environment variable is set."""
145
+ monkeypatch.setenv("SECRET_KEY", "test-secret-key")
146
+ result = load_config()
147
+ assert result.secret_key == "test-secret-key", "Config should read SECRET_KEY"
148
+
149
+
150
+ def test_missing_env_var(monkeypatch):
151
+ """Test behavior when environment variable is absent."""
152
+ monkeypatch.delenv("DATABASE_URL", raising=False)
153
+ with pytest.raises(ValueError, match="DATABASE_URL"):
154
+ load_config()
155
+ ```
156
+
157
+ ## Session-Scoped Temporary Directories
158
+
159
+ For session-scoped fixtures that need a temporary directory, use `tmp_path_factory`:
160
+
161
+ ```python
162
+ @pytest.fixture(scope="session")
163
+ def shared_output_dir(tmp_path_factory):
164
+ """Shared output directory for session-scoped tests."""
165
+ return tmp_path_factory.mktemp("output")
166
+ ```
167
+
168
+ ## Testing with Real Data
169
+
170
+ ### Using pydicom Test Data
171
+
172
+ Use pydicom test data for DICOM file tests:
173
+
174
+ ```python
175
+ from pathlib import Path
176
+ from pydicom.data import get_testdata_file
177
+
178
+ def test_dicom_processing(tmp_path):
179
+ """Test DICOM file processing."""
180
+ input_file_str = get_testdata_file("CT_small.dcm")
181
+ if not isinstance(input_file_str, str):
182
+ raise ValueError("get_testdata_file did not return a string path")
183
+
184
+ source_file = Path(input_file_str)
185
+ test_file = tmp_path / "test.dcm"
186
+ shutil.copy2(source_file, test_file)
187
+
188
+ result = process_dicom(test_file)
189
+ assert result is not None
190
+ ```
191
+
192
+ **Important**: Do not skip tests if pydicom is not available. All project dependencies (including pydicom) are listed in `pyproject.toml` and must be present. If a test cannot import pydicom, the test should **fail**, not skip. This ensures the development environment is correctly set up.
193
+
194
+ ### Assertions
195
+
196
+ **EVERY assertion MUST include a message.** Never write bare `assert` statements without explanatory text. Include expected and actual values in assertion messages to make test failures immediately understandable.
197
+
198
+ ```python
199
+ # Correct - always include messages
200
+ assert result.success is True, "Operation should succeed"
201
+ assert len(items) == 3, f"Expected 3 items, got {len(items)}"
202
+ assert status.used_percent == 50.0, f"Expected 50.0%, got {status.used_percent}"
203
+
204
+ # Wrong - bare assertions without messages
205
+ assert result.success is True # NO - missing message
206
+ assert len(items) == 3 # NO - missing message
207
+
208
+ # Testing exceptions - use match parameter or check exc_info
209
+ def test_invalid_input_raises_error():
210
+ """Invalid input raises ValueError."""
211
+ with pytest.raises(ValueError, match="cannot be None"):
212
+ validate_input(None)
213
+
214
+ # Or with exc_info for more complex checks
215
+ with pytest.raises(ValueError) as exc_info:
216
+ validate_input(None)
217
+ assert "cannot be None" in str(exc_info.value), f"Expected 'cannot be None' in error, got {exc_info.value}"
218
+
219
+ # Testing optional values - use explicit None checks
220
+ assert result.output_file is None, "No output file should be created"
221
+ ```
222
+
223
+ ### Test Isolation
224
+
225
+ Each test must be independent. Never share state between tests.
226
+
227
+ ```python
228
+ def test_operation(tmp_path):
229
+ """Test operation with fresh data."""
230
+ input_file = tmp_path / "input.txt"
231
+ input_file.write_text("test data")
232
+ result = process_file(input_file)
233
+ assert result.success
234
+
235
+ # Use fixtures for setup/teardown
236
+ @pytest.fixture
237
+ def test_database():
238
+ """Set up test database."""
239
+ db = create_test_db()
240
+ yield db
241
+ db.cleanup()
242
+
243
+ def test_with_database(test_database):
244
+ """Test with isolated database."""
245
+ test_database.insert(record)
246
+ assert test_database.count() == 1
247
+
248
+ ### Maintain Test Integrity
249
+
250
+ If a test fails, fix the root cause in the code or the test. Do not remove assertions, add empty try/catch blocks to hide errors, or add conditional logic to skip test cases. Never skip or disable failing tests. Tests must fail (not skip) when dependencies are missing.
251
+
252
+ ### Parametrized Tests
253
+
254
+ Test multiple inputs efficiently:
255
+
256
+ ```python
257
+ @pytest.mark.parametrize("method,expected", [
258
+ ("equals", True),
259
+ ("contains", True),
260
+ ("startsWith", True),
261
+ ("invalid_method", False),
262
+ ])
263
+ def test_method_validation(method, expected):
264
+ """Test method name validation."""
265
+ result = is_valid_method(method)
266
+ assert result == expected
267
+ ```
268
+
269
+ ### Testing Time-Dependent Code
270
+
271
+ ```python
272
+ from unittest.mock import patch
273
+ from datetime import datetime
274
+
275
+ def test_timestamp_logic():
276
+ """Test time-dependent logic with fixed time."""
277
+ fixed_time = datetime(2024, 1, 1, 12, 0, 0)
278
+ with patch("module.datetime") as mock_datetime:
279
+ mock_datetime.now.return_value = fixed_time
280
+ result = function_using_current_time()
281
+ assert result.timestamp == fixed_time
282
+ ```
283
+
284
+ ## Running Tests
285
+
286
+ ```bash
287
+ # Run the full test suite
288
+ just test
289
+
290
+ # Run tests with coverage report
291
+ just cov
292
+
293
+ # Run a single test file
294
+ just test-one tests/unit/test_pipeline_preservation.py
295
+
296
+ # Verify the pure-Python fallback (without compiled C extension)
297
+ just test-fallback
298
+ ```
299
+
300
+ ## PHI Protection
301
+
302
+ Never use real PHI in tests. Use the synthetic `signa_premier_file` fixture from
303
+ `tests/unit/conftest.py` or pydicom's built-in test files. Never commit test files
304
+ containing real patient data.
305
+
306
+ ## Common Anti-patterns
307
+
308
+ Never use hardcoded paths like `Path("/tmp/test.dcm")`. Always use `tmp_path` for
309
+ temporary files. Never skip failing tests or remove assertions to make tests pass.
310
+ Tests must fail (not skip) when dependencies are missing. Do not share state between
311
+ tests using global variables. Do not comment out failing assertions or catch
312
+ exceptions to hide failures. Keep all dependencies in `pyproject.toml`. **Never
313
+ write bare assertions without messages** — every `assert` statement must include an
314
+ explanatory message with expected and actual values.