monai-weekly 1.5.dev2505__py3-none-any.whl → 1.5.dev2507__py3-none-any.whl

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 (779) hide show
  1. monai/__init__.py +1 -1
  2. monai/_version.py +3 -3
  3. monai/apps/auto3dseg/transforms.py +1 -4
  4. monai/data/meta_tensor.py +5 -0
  5. monai/data/utils.py +6 -13
  6. monai/inferers/utils.py +1 -2
  7. monai/losses/dice.py +2 -14
  8. monai/losses/ds_loss.py +1 -3
  9. monai/networks/layers/simplelayers.py +2 -14
  10. monai/networks/utils.py +4 -16
  11. monai/transforms/compose.py +28 -11
  12. monai/transforms/croppad/array.py +1 -6
  13. monai/transforms/io/array.py +0 -1
  14. monai/transforms/transform.py +15 -6
  15. monai/transforms/utils.py +1 -2
  16. monai/utils/jupyter_utils.py +1 -1
  17. monai/utils/tf32.py +0 -10
  18. monai/visualize/class_activation_maps.py +5 -8
  19. monai/visualize/img2tensorboard.py +2 -2
  20. {monai_weekly-1.5.dev2505.dist-info → monai_weekly-1.5.dev2507.dist-info}/METADATA +2 -2
  21. monai_weekly-1.5.dev2507.dist-info/RECORD +1181 -0
  22. {monai_weekly-1.5.dev2505.dist-info → monai_weekly-1.5.dev2507.dist-info}/top_level.txt +1 -0
  23. tests/apps/__init__.py +10 -0
  24. tests/apps/deepedit/__init__.py +10 -0
  25. tests/apps/deepedit/test_deepedit_transforms.py +314 -0
  26. tests/apps/deepgrow/__init__.py +10 -0
  27. tests/apps/deepgrow/test_deepgrow_dataset.py +109 -0
  28. tests/apps/deepgrow/transforms/__init__.py +10 -0
  29. tests/apps/deepgrow/transforms/test_deepgrow_interaction.py +97 -0
  30. tests/apps/deepgrow/transforms/test_deepgrow_transforms.py +556 -0
  31. tests/apps/detection/__init__.py +10 -0
  32. tests/apps/detection/metrics/__init__.py +10 -0
  33. tests/apps/detection/metrics/test_detection_coco_metrics.py +69 -0
  34. tests/apps/detection/networks/__init__.py +10 -0
  35. tests/apps/detection/networks/test_retinanet.py +210 -0
  36. tests/apps/detection/networks/test_retinanet_detector.py +203 -0
  37. tests/apps/detection/test_box_transform.py +370 -0
  38. tests/apps/detection/utils/__init__.py +10 -0
  39. tests/apps/detection/utils/test_anchor_box.py +88 -0
  40. tests/apps/detection/utils/test_atss_box_matcher.py +46 -0
  41. tests/apps/detection/utils/test_box_coder.py +43 -0
  42. tests/apps/detection/utils/test_detector_boxselector.py +67 -0
  43. tests/apps/detection/utils/test_detector_utils.py +96 -0
  44. tests/apps/detection/utils/test_hardnegsampler.py +54 -0
  45. tests/apps/nuclick/__init__.py +10 -0
  46. tests/apps/nuclick/test_nuclick_transforms.py +259 -0
  47. tests/apps/pathology/__init__.py +10 -0
  48. tests/apps/pathology/handlers/__init__.py +10 -0
  49. tests/apps/pathology/handlers/test_from_engine_hovernet.py +38 -0
  50. tests/apps/pathology/test_lesion_froc.py +333 -0
  51. tests/apps/pathology/test_pathology_prob_nms.py +55 -0
  52. tests/apps/pathology/test_prepare_batch_hovernet.py +70 -0
  53. tests/apps/pathology/test_sliding_window_hovernet_inference.py +303 -0
  54. tests/apps/pathology/transforms/__init__.py +10 -0
  55. tests/apps/pathology/transforms/post/__init__.py +10 -0
  56. tests/apps/pathology/transforms/post/test_generate_distance_map.py +51 -0
  57. tests/apps/pathology/transforms/post/test_generate_distance_mapd.py +70 -0
  58. tests/apps/pathology/transforms/post/test_generate_instance_border.py +49 -0
  59. tests/apps/pathology/transforms/post/test_generate_instance_borderd.py +59 -0
  60. tests/apps/pathology/transforms/post/test_generate_instance_centroid.py +53 -0
  61. tests/apps/pathology/transforms/post/test_generate_instance_centroidd.py +56 -0
  62. tests/apps/pathology/transforms/post/test_generate_instance_contour.py +58 -0
  63. tests/apps/pathology/transforms/post/test_generate_instance_contourd.py +61 -0
  64. tests/apps/pathology/transforms/post/test_generate_instance_type.py +51 -0
  65. tests/apps/pathology/transforms/post/test_generate_instance_typed.py +53 -0
  66. tests/apps/pathology/transforms/post/test_generate_succinct_contour.py +55 -0
  67. tests/apps/pathology/transforms/post/test_generate_succinct_contourd.py +57 -0
  68. tests/apps/pathology/transforms/post/test_generate_watershed_markers.py +53 -0
  69. tests/apps/pathology/transforms/post/test_generate_watershed_markersd.py +83 -0
  70. tests/apps/pathology/transforms/post/test_generate_watershed_mask.py +77 -0
  71. tests/apps/pathology/transforms/post/test_generate_watershed_maskd.py +77 -0
  72. tests/apps/pathology/transforms/post/test_hovernet_instance_map_post_processing.py +61 -0
  73. tests/apps/pathology/transforms/post/test_hovernet_instance_map_post_processingd.py +66 -0
  74. tests/apps/pathology/transforms/post/test_hovernet_nuclear_type_post_processing.py +66 -0
  75. tests/apps/pathology/transforms/post/test_watershed.py +60 -0
  76. tests/apps/pathology/transforms/post/test_watershedd.py +70 -0
  77. tests/apps/pathology/transforms/test_pathology_he_stain.py +230 -0
  78. tests/apps/pathology/transforms/test_pathology_he_stain_dict.py +225 -0
  79. tests/apps/reconstruction/__init__.py +10 -0
  80. tests/apps/reconstruction/nets/__init__.py +10 -0
  81. tests/apps/reconstruction/nets/test_recon_net_utils.py +82 -0
  82. tests/apps/reconstruction/test_complex_utils.py +77 -0
  83. tests/apps/reconstruction/test_fastmri_reader.py +82 -0
  84. tests/apps/reconstruction/test_mri_utils.py +37 -0
  85. tests/apps/reconstruction/transforms/__init__.py +10 -0
  86. tests/apps/reconstruction/transforms/test_kspace_mask.py +50 -0
  87. tests/apps/reconstruction/transforms/test_reference_based_normalize_intensity.py +77 -0
  88. tests/apps/reconstruction/transforms/test_reference_based_spatial_cropd.py +57 -0
  89. tests/apps/test_auto3dseg_bundlegen.py +156 -0
  90. tests/apps/test_check_hash.py +53 -0
  91. tests/apps/test_cross_validation.py +74 -0
  92. tests/apps/test_decathlondataset.py +93 -0
  93. tests/apps/test_download_and_extract.py +70 -0
  94. tests/apps/test_download_url_yandex.py +45 -0
  95. tests/apps/test_mednistdataset.py +72 -0
  96. tests/apps/test_mmar_download.py +154 -0
  97. tests/apps/test_tciadataset.py +123 -0
  98. tests/apps/vista3d/__init__.py +10 -0
  99. tests/apps/vista3d/test_point_based_window_inferer.py +77 -0
  100. tests/apps/vista3d/test_vista3d_sampler.py +100 -0
  101. tests/apps/vista3d/test_vista3d_transforms.py +94 -0
  102. tests/bundle/__init__.py +10 -0
  103. tests/bundle/test_bundle_ckpt_export.py +107 -0
  104. tests/bundle/test_bundle_download.py +435 -0
  105. tests/bundle/test_bundle_get_data.py +94 -0
  106. tests/bundle/test_bundle_push_to_hf_hub.py +41 -0
  107. tests/bundle/test_bundle_trt_export.py +147 -0
  108. tests/bundle/test_bundle_utils.py +149 -0
  109. tests/bundle/test_bundle_verify_metadata.py +66 -0
  110. tests/bundle/test_bundle_verify_net.py +76 -0
  111. tests/bundle/test_bundle_workflow.py +272 -0
  112. tests/bundle/test_component_locator.py +38 -0
  113. tests/bundle/test_config_item.py +138 -0
  114. tests/bundle/test_config_parser.py +392 -0
  115. tests/bundle/test_reference_resolver.py +114 -0
  116. tests/config/__init__.py +10 -0
  117. tests/config/test_cv2_dist.py +53 -0
  118. tests/engines/__init__.py +10 -0
  119. tests/engines/test_ensemble_evaluator.py +94 -0
  120. tests/engines/test_prepare_batch_default.py +76 -0
  121. tests/engines/test_prepare_batch_default_dist.py +76 -0
  122. tests/engines/test_prepare_batch_diffusion.py +104 -0
  123. tests/engines/test_prepare_batch_extra_input.py +80 -0
  124. tests/fl/__init__.py +10 -0
  125. tests/fl/monai_algo/__init__.py +10 -0
  126. tests/fl/monai_algo/test_fl_monai_algo.py +251 -0
  127. tests/fl/monai_algo/test_fl_monai_algo_dist.py +117 -0
  128. tests/fl/test_fl_monai_algo_stats.py +81 -0
  129. tests/fl/utils/__init__.py +10 -0
  130. tests/fl/utils/test_fl_exchange_object.py +63 -0
  131. tests/handlers/__init__.py +10 -0
  132. tests/handlers/test_handler_checkpoint_loader.py +182 -0
  133. tests/handlers/test_handler_checkpoint_saver.py +233 -0
  134. tests/handlers/test_handler_classification_saver.py +64 -0
  135. tests/handlers/test_handler_classification_saver_dist.py +77 -0
  136. tests/handlers/test_handler_clearml_image.py +65 -0
  137. tests/handlers/test_handler_clearml_stats.py +65 -0
  138. tests/handlers/test_handler_confusion_matrix.py +104 -0
  139. tests/handlers/test_handler_confusion_matrix_dist.py +70 -0
  140. tests/handlers/test_handler_decollate_batch.py +66 -0
  141. tests/handlers/test_handler_early_stop.py +68 -0
  142. tests/handlers/test_handler_garbage_collector.py +73 -0
  143. tests/handlers/test_handler_hausdorff_distance.py +111 -0
  144. tests/handlers/test_handler_ignite_metric.py +191 -0
  145. tests/handlers/test_handler_lr_scheduler.py +94 -0
  146. tests/handlers/test_handler_mean_dice.py +98 -0
  147. tests/handlers/test_handler_mean_iou.py +76 -0
  148. tests/handlers/test_handler_metrics_reloaded.py +149 -0
  149. tests/handlers/test_handler_metrics_saver.py +89 -0
  150. tests/handlers/test_handler_metrics_saver_dist.py +120 -0
  151. tests/handlers/test_handler_mlflow.py +296 -0
  152. tests/handlers/test_handler_nvtx.py +93 -0
  153. tests/handlers/test_handler_panoptic_quality.py +89 -0
  154. tests/handlers/test_handler_parameter_scheduler.py +136 -0
  155. tests/handlers/test_handler_post_processing.py +74 -0
  156. tests/handlers/test_handler_prob_map_producer.py +111 -0
  157. tests/handlers/test_handler_regression_metrics.py +160 -0
  158. tests/handlers/test_handler_regression_metrics_dist.py +245 -0
  159. tests/handlers/test_handler_rocauc.py +48 -0
  160. tests/handlers/test_handler_rocauc_dist.py +54 -0
  161. tests/handlers/test_handler_stats.py +281 -0
  162. tests/handlers/test_handler_surface_distance.py +113 -0
  163. tests/handlers/test_handler_tb_image.py +61 -0
  164. tests/handlers/test_handler_tb_stats.py +166 -0
  165. tests/handlers/test_handler_validation.py +59 -0
  166. tests/handlers/test_trt_compile.py +145 -0
  167. tests/handlers/test_write_metrics_reports.py +68 -0
  168. tests/inferers/__init__.py +10 -0
  169. tests/inferers/test_avg_merger.py +179 -0
  170. tests/inferers/test_controlnet_inferers.py +1310 -0
  171. tests/inferers/test_diffusion_inferer.py +236 -0
  172. tests/inferers/test_latent_diffusion_inferer.py +824 -0
  173. tests/inferers/test_patch_inferer.py +309 -0
  174. tests/inferers/test_saliency_inferer.py +55 -0
  175. tests/inferers/test_slice_inferer.py +57 -0
  176. tests/inferers/test_sliding_window_inference.py +377 -0
  177. tests/inferers/test_sliding_window_splitter.py +284 -0
  178. tests/inferers/test_wsi_sliding_window_splitter.py +249 -0
  179. tests/inferers/test_zarr_avg_merger.py +326 -0
  180. tests/integration/__init__.py +10 -0
  181. tests/integration/test_auto3dseg_ensemble.py +211 -0
  182. tests/integration/test_auto3dseg_hpo.py +189 -0
  183. tests/integration/test_deepedit_interaction.py +122 -0
  184. tests/integration/test_downsample_block.py +50 -0
  185. tests/integration/test_hovernet_nuclear_type_post_processingd.py +71 -0
  186. tests/integration/test_integration_autorunner.py +201 -0
  187. tests/integration/test_integration_bundle_run.py +240 -0
  188. tests/integration/test_integration_classification_2d.py +282 -0
  189. tests/integration/test_integration_determinism.py +95 -0
  190. tests/integration/test_integration_fast_train.py +231 -0
  191. tests/integration/test_integration_gpu_customization.py +159 -0
  192. tests/integration/test_integration_lazy_samples.py +219 -0
  193. tests/integration/test_integration_nnunetv2_runner.py +96 -0
  194. tests/integration/test_integration_segmentation_3d.py +304 -0
  195. tests/integration/test_integration_sliding_window.py +100 -0
  196. tests/integration/test_integration_stn.py +133 -0
  197. tests/integration/test_integration_unet_2d.py +67 -0
  198. tests/integration/test_integration_workers.py +61 -0
  199. tests/integration/test_integration_workflows.py +365 -0
  200. tests/integration/test_integration_workflows_adversarial.py +173 -0
  201. tests/integration/test_integration_workflows_gan.py +158 -0
  202. tests/integration/test_loader_semaphore.py +48 -0
  203. tests/integration/test_mapping_filed.py +122 -0
  204. tests/integration/test_meta_affine.py +183 -0
  205. tests/integration/test_metatensor_integration.py +114 -0
  206. tests/integration/test_module_list.py +76 -0
  207. tests/integration/test_one_of.py +283 -0
  208. tests/integration/test_pad_collation.py +124 -0
  209. tests/integration/test_reg_loss_integration.py +107 -0
  210. tests/integration/test_retinanet_predict_utils.py +154 -0
  211. tests/integration/test_seg_loss_integration.py +159 -0
  212. tests/integration/test_spatial_combine_transforms.py +185 -0
  213. tests/integration/test_testtimeaugmentation.py +186 -0
  214. tests/integration/test_vis_gradbased.py +69 -0
  215. tests/integration/test_vista3d_utils.py +159 -0
  216. tests/losses/__init__.py +10 -0
  217. tests/losses/deform/__init__.py +10 -0
  218. tests/losses/deform/test_bending_energy.py +88 -0
  219. tests/losses/deform/test_diffusion_loss.py +117 -0
  220. tests/losses/image_dissimilarity/__init__.py +10 -0
  221. tests/losses/image_dissimilarity/test_global_mutual_information_loss.py +150 -0
  222. tests/losses/image_dissimilarity/test_local_normalized_cross_correlation_loss.py +162 -0
  223. tests/losses/test_adversarial_loss.py +94 -0
  224. tests/losses/test_barlow_twins_loss.py +109 -0
  225. tests/losses/test_cldice_loss.py +51 -0
  226. tests/losses/test_contrastive_loss.py +86 -0
  227. tests/losses/test_dice_ce_loss.py +123 -0
  228. tests/losses/test_dice_focal_loss.py +124 -0
  229. tests/losses/test_dice_loss.py +227 -0
  230. tests/losses/test_ds_loss.py +189 -0
  231. tests/losses/test_focal_loss.py +379 -0
  232. tests/losses/test_generalized_dice_focal_loss.py +85 -0
  233. tests/losses/test_generalized_dice_loss.py +221 -0
  234. tests/losses/test_generalized_wasserstein_dice_loss.py +234 -0
  235. tests/losses/test_giou_loss.py +62 -0
  236. tests/losses/test_hausdorff_loss.py +264 -0
  237. tests/losses/test_masked_dice_loss.py +152 -0
  238. tests/losses/test_masked_loss.py +87 -0
  239. tests/losses/test_multi_scale.py +86 -0
  240. tests/losses/test_nacl_loss.py +167 -0
  241. tests/losses/test_perceptual_loss.py +122 -0
  242. tests/losses/test_spectral_loss.py +86 -0
  243. tests/losses/test_ssim_loss.py +59 -0
  244. tests/losses/test_sure_loss.py +72 -0
  245. tests/losses/test_tversky_loss.py +198 -0
  246. tests/losses/test_unified_focal_loss.py +66 -0
  247. tests/metrics/__init__.py +10 -0
  248. tests/metrics/test_compute_confusion_matrix.py +294 -0
  249. tests/metrics/test_compute_f_beta.py +80 -0
  250. tests/metrics/test_compute_fid_metric.py +40 -0
  251. tests/metrics/test_compute_froc.py +143 -0
  252. tests/metrics/test_compute_generalized_dice.py +240 -0
  253. tests/metrics/test_compute_meandice.py +306 -0
  254. tests/metrics/test_compute_meaniou.py +223 -0
  255. tests/metrics/test_compute_mmd_metric.py +56 -0
  256. tests/metrics/test_compute_multiscalessim_metric.py +83 -0
  257. tests/metrics/test_compute_panoptic_quality.py +113 -0
  258. tests/metrics/test_compute_regression_metrics.py +196 -0
  259. tests/metrics/test_compute_roc_auc.py +155 -0
  260. tests/metrics/test_compute_variance.py +147 -0
  261. tests/metrics/test_cumulative.py +63 -0
  262. tests/metrics/test_cumulative_average.py +74 -0
  263. tests/metrics/test_cumulative_average_dist.py +48 -0
  264. tests/metrics/test_hausdorff_distance.py +209 -0
  265. tests/metrics/test_label_quality_score.py +134 -0
  266. tests/metrics/test_loss_metric.py +57 -0
  267. tests/metrics/test_metrics_reloaded.py +96 -0
  268. tests/metrics/test_ssim_metric.py +78 -0
  269. tests/metrics/test_surface_dice.py +416 -0
  270. tests/metrics/test_surface_distance.py +186 -0
  271. tests/networks/__init__.py +10 -0
  272. tests/networks/blocks/__init__.py +10 -0
  273. tests/networks/blocks/dints_block/__init__.py +10 -0
  274. tests/networks/blocks/dints_block/test_acn_block.py +41 -0
  275. tests/networks/blocks/dints_block/test_factorized_increase.py +37 -0
  276. tests/networks/blocks/dints_block/test_factorized_reduce.py +37 -0
  277. tests/networks/blocks/dints_block/test_p3d_block.py +78 -0
  278. tests/networks/blocks/test_adn.py +86 -0
  279. tests/networks/blocks/test_convolutions.py +156 -0
  280. tests/networks/blocks/test_crf_cpu.py +513 -0
  281. tests/networks/blocks/test_crf_cuda.py +528 -0
  282. tests/networks/blocks/test_crossattention.py +185 -0
  283. tests/networks/blocks/test_denseblock.py +105 -0
  284. tests/networks/blocks/test_dynunet_block.py +116 -0
  285. tests/networks/blocks/test_fpn_block.py +88 -0
  286. tests/networks/blocks/test_localnet_block.py +121 -0
  287. tests/networks/blocks/test_mlp.py +78 -0
  288. tests/networks/blocks/test_patchembedding.py +212 -0
  289. tests/networks/blocks/test_regunet_block.py +103 -0
  290. tests/networks/blocks/test_se_block.py +85 -0
  291. tests/networks/blocks/test_se_blocks.py +78 -0
  292. tests/networks/blocks/test_segresnet_block.py +57 -0
  293. tests/networks/blocks/test_selfattention.py +232 -0
  294. tests/networks/blocks/test_simple_aspp.py +87 -0
  295. tests/networks/blocks/test_spatialattention.py +55 -0
  296. tests/networks/blocks/test_subpixel_upsample.py +87 -0
  297. tests/networks/blocks/test_text_encoding.py +49 -0
  298. tests/networks/blocks/test_transformerblock.py +90 -0
  299. tests/networks/blocks/test_unetr_block.py +158 -0
  300. tests/networks/blocks/test_upsample_block.py +134 -0
  301. tests/networks/blocks/warp/__init__.py +10 -0
  302. tests/networks/blocks/warp/test_dvf2ddf.py +72 -0
  303. tests/networks/blocks/warp/test_warp.py +250 -0
  304. tests/networks/layers/__init__.py +10 -0
  305. tests/networks/layers/filtering/__init__.py +10 -0
  306. tests/networks/layers/filtering/test_bilateral_approx_cpu.py +399 -0
  307. tests/networks/layers/filtering/test_bilateral_approx_cuda.py +404 -0
  308. tests/networks/layers/filtering/test_bilateral_precise.py +437 -0
  309. tests/networks/layers/filtering/test_phl_cpu.py +259 -0
  310. tests/networks/layers/filtering/test_phl_cuda.py +167 -0
  311. tests/networks/layers/filtering/test_trainable_bilateral.py +474 -0
  312. tests/networks/layers/filtering/test_trainable_joint_bilateral.py +609 -0
  313. tests/networks/layers/test_affine_transform.py +385 -0
  314. tests/networks/layers/test_apply_filter.py +89 -0
  315. tests/networks/layers/test_channel_pad.py +51 -0
  316. tests/networks/layers/test_conjugate_gradient.py +56 -0
  317. tests/networks/layers/test_drop_path.py +46 -0
  318. tests/networks/layers/test_gaussian.py +317 -0
  319. tests/networks/layers/test_gaussian_filter.py +206 -0
  320. tests/networks/layers/test_get_layers.py +65 -0
  321. tests/networks/layers/test_gmm.py +314 -0
  322. tests/networks/layers/test_grid_pull.py +93 -0
  323. tests/networks/layers/test_hilbert_transform.py +131 -0
  324. tests/networks/layers/test_lltm.py +62 -0
  325. tests/networks/layers/test_median_filter.py +52 -0
  326. tests/networks/layers/test_polyval.py +55 -0
  327. tests/networks/layers/test_preset_filters.py +136 -0
  328. tests/networks/layers/test_savitzky_golay_filter.py +141 -0
  329. tests/networks/layers/test_separable_filter.py +87 -0
  330. tests/networks/layers/test_skip_connection.py +48 -0
  331. tests/networks/layers/test_vector_quantizer.py +89 -0
  332. tests/networks/layers/test_weight_init.py +50 -0
  333. tests/networks/nets/__init__.py +10 -0
  334. tests/networks/nets/dints/__init__.py +10 -0
  335. tests/networks/nets/dints/test_dints_cell.py +110 -0
  336. tests/networks/nets/dints/test_dints_mixop.py +84 -0
  337. tests/networks/nets/regunet/__init__.py +10 -0
  338. tests/networks/nets/regunet/test_localnet.py +86 -0
  339. tests/networks/nets/regunet/test_regunet.py +88 -0
  340. tests/networks/nets/test_ahnet.py +224 -0
  341. tests/networks/nets/test_attentionunet.py +88 -0
  342. tests/networks/nets/test_autoencoder.py +95 -0
  343. tests/networks/nets/test_autoencoderkl.py +337 -0
  344. tests/networks/nets/test_basic_unet.py +102 -0
  345. tests/networks/nets/test_basic_unetplusplus.py +109 -0
  346. tests/networks/nets/test_bundle_init_bundle.py +55 -0
  347. tests/networks/nets/test_cell_sam_wrapper.py +58 -0
  348. tests/networks/nets/test_controlnet.py +215 -0
  349. tests/networks/nets/test_daf3d.py +62 -0
  350. tests/networks/nets/test_densenet.py +121 -0
  351. tests/networks/nets/test_diffusion_model_unet.py +585 -0
  352. tests/networks/nets/test_dints_network.py +168 -0
  353. tests/networks/nets/test_discriminator.py +59 -0
  354. tests/networks/nets/test_dynunet.py +181 -0
  355. tests/networks/nets/test_efficientnet.py +400 -0
  356. tests/networks/nets/test_flexible_unet.py +341 -0
  357. tests/networks/nets/test_fullyconnectednet.py +69 -0
  358. tests/networks/nets/test_generator.py +59 -0
  359. tests/networks/nets/test_globalnet.py +103 -0
  360. tests/networks/nets/test_highresnet.py +67 -0
  361. tests/networks/nets/test_hovernet.py +218 -0
  362. tests/networks/nets/test_mednext.py +122 -0
  363. tests/networks/nets/test_milmodel.py +92 -0
  364. tests/networks/nets/test_net_adapter.py +68 -0
  365. tests/networks/nets/test_network_consistency.py +86 -0
  366. tests/networks/nets/test_patch_gan_dicriminator.py +179 -0
  367. tests/networks/nets/test_quicknat.py +57 -0
  368. tests/networks/nets/test_resnet.py +340 -0
  369. tests/networks/nets/test_segresnet.py +120 -0
  370. tests/networks/nets/test_segresnet_ds.py +156 -0
  371. tests/networks/nets/test_senet.py +151 -0
  372. tests/networks/nets/test_spade_autoencoderkl.py +295 -0
  373. tests/networks/nets/test_spade_diffusion_model_unet.py +574 -0
  374. tests/networks/nets/test_spade_vaegan.py +140 -0
  375. tests/networks/nets/test_swin_unetr.py +139 -0
  376. tests/networks/nets/test_torchvision_fc_model.py +201 -0
  377. tests/networks/nets/test_transchex.py +84 -0
  378. tests/networks/nets/test_transformer.py +108 -0
  379. tests/networks/nets/test_unet.py +208 -0
  380. tests/networks/nets/test_unetr.py +137 -0
  381. tests/networks/nets/test_varautoencoder.py +127 -0
  382. tests/networks/nets/test_vista3d.py +84 -0
  383. tests/networks/nets/test_vit.py +139 -0
  384. tests/networks/nets/test_vitautoenc.py +112 -0
  385. tests/networks/nets/test_vnet.py +81 -0
  386. tests/networks/nets/test_voxelmorph.py +280 -0
  387. tests/networks/nets/test_vqvae.py +274 -0
  388. tests/networks/nets/test_vqvaetransformer_inferer.py +295 -0
  389. tests/networks/schedulers/__init__.py +10 -0
  390. tests/networks/schedulers/test_scheduler_ddim.py +83 -0
  391. tests/networks/schedulers/test_scheduler_ddpm.py +104 -0
  392. tests/networks/schedulers/test_scheduler_pndm.py +108 -0
  393. tests/networks/test_bundle_onnx_export.py +71 -0
  394. tests/networks/test_convert_to_onnx.py +106 -0
  395. tests/networks/test_convert_to_torchscript.py +46 -0
  396. tests/networks/test_convert_to_trt.py +79 -0
  397. tests/networks/test_save_state.py +73 -0
  398. tests/networks/test_to_onehot.py +63 -0
  399. tests/networks/test_varnet.py +63 -0
  400. tests/networks/utils/__init__.py +10 -0
  401. tests/networks/utils/test_copy_model_state.py +187 -0
  402. tests/networks/utils/test_eval_mode.py +34 -0
  403. tests/networks/utils/test_freeze_layers.py +61 -0
  404. tests/networks/utils/test_replace_module.py +98 -0
  405. tests/networks/utils/test_train_mode.py +34 -0
  406. tests/optimizers/__init__.py +10 -0
  407. tests/optimizers/test_generate_param_groups.py +105 -0
  408. tests/optimizers/test_lr_finder.py +108 -0
  409. tests/optimizers/test_lr_scheduler.py +71 -0
  410. tests/optimizers/test_optim_novograd.py +100 -0
  411. tests/profile_subclass/__init__.py +10 -0
  412. tests/profile_subclass/cprofile_profiling.py +29 -0
  413. tests/profile_subclass/min_classes.py +30 -0
  414. tests/profile_subclass/profiling.py +73 -0
  415. tests/profile_subclass/pyspy_profiling.py +41 -0
  416. tests/transforms/__init__.py +10 -0
  417. tests/transforms/compose/__init__.py +10 -0
  418. tests/transforms/compose/test_compose.py +758 -0
  419. tests/transforms/compose/test_some_of.py +258 -0
  420. tests/transforms/croppad/__init__.py +10 -0
  421. tests/transforms/croppad/test_rand_weighted_crop.py +224 -0
  422. tests/transforms/croppad/test_rand_weighted_cropd.py +182 -0
  423. tests/transforms/functional/__init__.py +10 -0
  424. tests/transforms/functional/test_apply.py +75 -0
  425. tests/transforms/functional/test_resample.py +50 -0
  426. tests/transforms/intensity/__init__.py +10 -0
  427. tests/transforms/intensity/test_compute_ho_ver_maps.py +75 -0
  428. tests/transforms/intensity/test_compute_ho_ver_maps_d.py +79 -0
  429. tests/transforms/intensity/test_foreground_mask.py +98 -0
  430. tests/transforms/intensity/test_foreground_maskd.py +106 -0
  431. tests/transforms/intensity/test_rand_histogram_shiftd.py +76 -0
  432. tests/transforms/intensity/test_scale_intensity_range_percentiles.py +96 -0
  433. tests/transforms/intensity/test_scale_intensity_range_percentilesd.py +100 -0
  434. tests/transforms/inverse/__init__.py +10 -0
  435. tests/transforms/inverse/test_inverse_array.py +76 -0
  436. tests/transforms/inverse/test_traceable_transform.py +59 -0
  437. tests/transforms/post/__init__.py +10 -0
  438. tests/transforms/post/test_label_filterd.py +78 -0
  439. tests/transforms/post/test_probnms.py +72 -0
  440. tests/transforms/post/test_probnmsd.py +79 -0
  441. tests/transforms/post/test_remove_small_objects.py +102 -0
  442. tests/transforms/spatial/__init__.py +10 -0
  443. tests/transforms/spatial/test_convert_box_points.py +119 -0
  444. tests/transforms/spatial/test_grid_patch.py +134 -0
  445. tests/transforms/spatial/test_grid_patchd.py +102 -0
  446. tests/transforms/spatial/test_rand_grid_patch.py +150 -0
  447. tests/transforms/spatial/test_rand_grid_patchd.py +117 -0
  448. tests/transforms/spatial/test_spatial_resampled.py +124 -0
  449. tests/transforms/test_activations.py +120 -0
  450. tests/transforms/test_activationsd.py +64 -0
  451. tests/transforms/test_adaptors.py +160 -0
  452. tests/transforms/test_add_coordinate_channels.py +53 -0
  453. tests/transforms/test_add_coordinate_channelsd.py +67 -0
  454. tests/transforms/test_add_extreme_points_channel.py +80 -0
  455. tests/transforms/test_add_extreme_points_channeld.py +77 -0
  456. tests/transforms/test_adjust_contrast.py +70 -0
  457. tests/transforms/test_adjust_contrastd.py +64 -0
  458. tests/transforms/test_affine.py +245 -0
  459. tests/transforms/test_affine_grid.py +152 -0
  460. tests/transforms/test_affined.py +190 -0
  461. tests/transforms/test_as_channel_last.py +38 -0
  462. tests/transforms/test_as_channel_lastd.py +44 -0
  463. tests/transforms/test_as_discrete.py +81 -0
  464. tests/transforms/test_as_discreted.py +82 -0
  465. tests/transforms/test_border_pad.py +49 -0
  466. tests/transforms/test_border_padd.py +45 -0
  467. tests/transforms/test_bounding_rect.py +54 -0
  468. tests/transforms/test_bounding_rectd.py +53 -0
  469. tests/transforms/test_cast_to_type.py +63 -0
  470. tests/transforms/test_cast_to_typed.py +74 -0
  471. tests/transforms/test_center_scale_crop.py +55 -0
  472. tests/transforms/test_center_scale_cropd.py +56 -0
  473. tests/transforms/test_center_spatial_crop.py +56 -0
  474. tests/transforms/test_center_spatial_cropd.py +63 -0
  475. tests/transforms/test_classes_to_indices.py +93 -0
  476. tests/transforms/test_classes_to_indicesd.py +110 -0
  477. tests/transforms/test_clip_intensity_percentiles.py +196 -0
  478. tests/transforms/test_clip_intensity_percentilesd.py +193 -0
  479. tests/transforms/test_compose_get_number_conversions.py +127 -0
  480. tests/transforms/test_concat_itemsd.py +82 -0
  481. tests/transforms/test_convert_to_multi_channel.py +59 -0
  482. tests/transforms/test_convert_to_multi_channeld.py +37 -0
  483. tests/transforms/test_copy_itemsd.py +86 -0
  484. tests/transforms/test_create_grid_and_affine.py +274 -0
  485. tests/transforms/test_crop_foreground.py +164 -0
  486. tests/transforms/test_crop_foregroundd.py +205 -0
  487. tests/transforms/test_cucim_dict_transform.py +142 -0
  488. tests/transforms/test_cucim_transform.py +141 -0
  489. tests/transforms/test_data_stats.py +221 -0
  490. tests/transforms/test_data_statsd.py +249 -0
  491. tests/transforms/test_delete_itemsd.py +58 -0
  492. tests/transforms/test_detect_envelope.py +159 -0
  493. tests/transforms/test_distance_transform_edt.py +202 -0
  494. tests/transforms/test_divisible_pad.py +49 -0
  495. tests/transforms/test_divisible_padd.py +42 -0
  496. tests/transforms/test_ensure_channel_first.py +113 -0
  497. tests/transforms/test_ensure_channel_firstd.py +85 -0
  498. tests/transforms/test_ensure_type.py +94 -0
  499. tests/transforms/test_ensure_typed.py +110 -0
  500. tests/transforms/test_fg_bg_to_indices.py +83 -0
  501. tests/transforms/test_fg_bg_to_indicesd.py +78 -0
  502. tests/transforms/test_fill_holes.py +207 -0
  503. tests/transforms/test_fill_holesd.py +209 -0
  504. tests/transforms/test_flatten_sub_keysd.py +64 -0
  505. tests/transforms/test_flip.py +83 -0
  506. tests/transforms/test_flipd.py +90 -0
  507. tests/transforms/test_fourier.py +70 -0
  508. tests/transforms/test_gaussian_sharpen.py +92 -0
  509. tests/transforms/test_gaussian_sharpend.py +92 -0
  510. tests/transforms/test_gaussian_smooth.py +96 -0
  511. tests/transforms/test_gaussian_smoothd.py +96 -0
  512. tests/transforms/test_generate_label_classes_crop_centers.py +71 -0
  513. tests/transforms/test_generate_pos_neg_label_crop_centers.py +76 -0
  514. tests/transforms/test_generate_spatial_bounding_box.py +114 -0
  515. tests/transforms/test_get_extreme_points.py +57 -0
  516. tests/transforms/test_gibbs_noise.py +75 -0
  517. tests/transforms/test_gibbs_noised.py +88 -0
  518. tests/transforms/test_grid_distortion.py +113 -0
  519. tests/transforms/test_grid_distortiond.py +87 -0
  520. tests/transforms/test_grid_split.py +88 -0
  521. tests/transforms/test_grid_splitd.py +96 -0
  522. tests/transforms/test_histogram_normalize.py +59 -0
  523. tests/transforms/test_histogram_normalized.py +59 -0
  524. tests/transforms/test_image_filter.py +259 -0
  525. tests/transforms/test_intensity_stats.py +73 -0
  526. tests/transforms/test_intensity_statsd.py +90 -0
  527. tests/transforms/test_inverse.py +521 -0
  528. tests/transforms/test_inverse_collation.py +147 -0
  529. tests/transforms/test_invert.py +105 -0
  530. tests/transforms/test_invertd.py +142 -0
  531. tests/transforms/test_k_space_spike_noise.py +81 -0
  532. tests/transforms/test_k_space_spike_noised.py +98 -0
  533. tests/transforms/test_keep_largest_connected_component.py +419 -0
  534. tests/transforms/test_keep_largest_connected_componentd.py +348 -0
  535. tests/transforms/test_label_filter.py +78 -0
  536. tests/transforms/test_label_to_contour.py +179 -0
  537. tests/transforms/test_label_to_contourd.py +182 -0
  538. tests/transforms/test_label_to_mask.py +69 -0
  539. tests/transforms/test_label_to_maskd.py +70 -0
  540. tests/transforms/test_load_image.py +502 -0
  541. tests/transforms/test_load_imaged.py +198 -0
  542. tests/transforms/test_load_spacing_orientation.py +149 -0
  543. tests/transforms/test_map_and_generate_sampling_centers.py +86 -0
  544. tests/transforms/test_map_binary_to_indices.py +75 -0
  545. tests/transforms/test_map_classes_to_indices.py +135 -0
  546. tests/transforms/test_map_label_value.py +89 -0
  547. tests/transforms/test_map_label_valued.py +85 -0
  548. tests/transforms/test_map_transform.py +45 -0
  549. tests/transforms/test_mask_intensity.py +74 -0
  550. tests/transforms/test_mask_intensityd.py +68 -0
  551. tests/transforms/test_mean_ensemble.py +77 -0
  552. tests/transforms/test_mean_ensembled.py +91 -0
  553. tests/transforms/test_median_smooth.py +41 -0
  554. tests/transforms/test_median_smoothd.py +65 -0
  555. tests/transforms/test_morphological_ops.py +101 -0
  556. tests/transforms/test_nifti_endianness.py +107 -0
  557. tests/transforms/test_normalize_intensity.py +143 -0
  558. tests/transforms/test_normalize_intensityd.py +81 -0
  559. tests/transforms/test_nvtx_decorator.py +289 -0
  560. tests/transforms/test_nvtx_transform.py +143 -0
  561. tests/transforms/test_orientation.py +247 -0
  562. tests/transforms/test_orientationd.py +112 -0
  563. tests/transforms/test_rand_adjust_contrast.py +45 -0
  564. tests/transforms/test_rand_adjust_contrastd.py +44 -0
  565. tests/transforms/test_rand_affine.py +201 -0
  566. tests/transforms/test_rand_affine_grid.py +212 -0
  567. tests/transforms/test_rand_affined.py +281 -0
  568. tests/transforms/test_rand_axis_flip.py +50 -0
  569. tests/transforms/test_rand_axis_flipd.py +50 -0
  570. tests/transforms/test_rand_bias_field.py +69 -0
  571. tests/transforms/test_rand_bias_fieldd.py +65 -0
  572. tests/transforms/test_rand_coarse_dropout.py +110 -0
  573. tests/transforms/test_rand_coarse_dropoutd.py +107 -0
  574. tests/transforms/test_rand_coarse_shuffle.py +65 -0
  575. tests/transforms/test_rand_coarse_shuffled.py +59 -0
  576. tests/transforms/test_rand_crop_by_label_classes.py +170 -0
  577. tests/transforms/test_rand_crop_by_label_classesd.py +159 -0
  578. tests/transforms/test_rand_crop_by_pos_neg_label.py +152 -0
  579. tests/transforms/test_rand_crop_by_pos_neg_labeld.py +172 -0
  580. tests/transforms/test_rand_cucim_dict_transform.py +162 -0
  581. tests/transforms/test_rand_cucim_transform.py +162 -0
  582. tests/transforms/test_rand_deform_grid.py +138 -0
  583. tests/transforms/test_rand_elastic_2d.py +127 -0
  584. tests/transforms/test_rand_elastic_3d.py +104 -0
  585. tests/transforms/test_rand_elasticd_2d.py +177 -0
  586. tests/transforms/test_rand_elasticd_3d.py +156 -0
  587. tests/transforms/test_rand_flip.py +60 -0
  588. tests/transforms/test_rand_flipd.py +55 -0
  589. tests/transforms/test_rand_gaussian_noise.py +48 -0
  590. tests/transforms/test_rand_gaussian_noised.py +54 -0
  591. tests/transforms/test_rand_gaussian_sharpen.py +140 -0
  592. tests/transforms/test_rand_gaussian_sharpend.py +143 -0
  593. tests/transforms/test_rand_gaussian_smooth.py +98 -0
  594. tests/transforms/test_rand_gaussian_smoothd.py +98 -0
  595. tests/transforms/test_rand_gibbs_noise.py +103 -0
  596. tests/transforms/test_rand_gibbs_noised.py +117 -0
  597. tests/transforms/test_rand_grid_distortion.py +99 -0
  598. tests/transforms/test_rand_grid_distortiond.py +90 -0
  599. tests/transforms/test_rand_histogram_shift.py +92 -0
  600. tests/transforms/test_rand_k_space_spike_noise.py +92 -0
  601. tests/transforms/test_rand_k_space_spike_noised.py +76 -0
  602. tests/transforms/test_rand_rician_noise.py +52 -0
  603. tests/transforms/test_rand_rician_noised.py +52 -0
  604. tests/transforms/test_rand_rotate.py +166 -0
  605. tests/transforms/test_rand_rotate90.py +100 -0
  606. tests/transforms/test_rand_rotate90d.py +112 -0
  607. tests/transforms/test_rand_rotated.py +187 -0
  608. tests/transforms/test_rand_scale_crop.py +78 -0
  609. tests/transforms/test_rand_scale_cropd.py +98 -0
  610. tests/transforms/test_rand_scale_intensity.py +54 -0
  611. tests/transforms/test_rand_scale_intensity_fixed_mean.py +41 -0
  612. tests/transforms/test_rand_scale_intensity_fixed_meand.py +41 -0
  613. tests/transforms/test_rand_scale_intensityd.py +53 -0
  614. tests/transforms/test_rand_shift_intensity.py +52 -0
  615. tests/transforms/test_rand_shift_intensityd.py +67 -0
  616. tests/transforms/test_rand_simulate_low_resolution.py +83 -0
  617. tests/transforms/test_rand_simulate_low_resolutiond.py +73 -0
  618. tests/transforms/test_rand_spatial_crop.py +107 -0
  619. tests/transforms/test_rand_spatial_crop_samples.py +128 -0
  620. tests/transforms/test_rand_spatial_crop_samplesd.py +147 -0
  621. tests/transforms/test_rand_spatial_cropd.py +112 -0
  622. tests/transforms/test_rand_std_shift_intensity.py +43 -0
  623. tests/transforms/test_rand_std_shift_intensityd.py +38 -0
  624. tests/transforms/test_rand_zoom.py +105 -0
  625. tests/transforms/test_rand_zoomd.py +108 -0
  626. tests/transforms/test_randidentity.py +49 -0
  627. tests/transforms/test_random_order.py +144 -0
  628. tests/transforms/test_randtorchvisiond.py +65 -0
  629. tests/transforms/test_regularization.py +139 -0
  630. tests/transforms/test_remove_repeated_channel.py +34 -0
  631. tests/transforms/test_remove_repeated_channeld.py +44 -0
  632. tests/transforms/test_repeat_channel.py +34 -0
  633. tests/transforms/test_repeat_channeld.py +41 -0
  634. tests/transforms/test_resample_backends.py +65 -0
  635. tests/transforms/test_resample_to_match.py +110 -0
  636. tests/transforms/test_resample_to_matchd.py +93 -0
  637. tests/transforms/test_resampler.py +165 -0
  638. tests/transforms/test_resize.py +140 -0
  639. tests/transforms/test_resize_with_pad_or_crop.py +91 -0
  640. tests/transforms/test_resize_with_pad_or_cropd.py +86 -0
  641. tests/transforms/test_resized.py +163 -0
  642. tests/transforms/test_rotate.py +160 -0
  643. tests/transforms/test_rotate90.py +212 -0
  644. tests/transforms/test_rotate90d.py +106 -0
  645. tests/transforms/test_rotated.py +179 -0
  646. tests/transforms/test_save_classificationd.py +109 -0
  647. tests/transforms/test_save_image.py +80 -0
  648. tests/transforms/test_save_imaged.py +130 -0
  649. tests/transforms/test_savitzky_golay_smooth.py +73 -0
  650. tests/transforms/test_savitzky_golay_smoothd.py +73 -0
  651. tests/transforms/test_scale_intensity.py +76 -0
  652. tests/transforms/test_scale_intensity_fixed_mean.py +94 -0
  653. tests/transforms/test_scale_intensity_range.py +41 -0
  654. tests/transforms/test_scale_intensity_ranged.py +40 -0
  655. tests/transforms/test_scale_intensityd.py +57 -0
  656. tests/transforms/test_select_itemsd.py +41 -0
  657. tests/transforms/test_shift_intensity.py +31 -0
  658. tests/transforms/test_shift_intensityd.py +44 -0
  659. tests/transforms/test_signal_continuouswavelet.py +44 -0
  660. tests/transforms/test_signal_fillempty.py +52 -0
  661. tests/transforms/test_signal_fillemptyd.py +60 -0
  662. tests/transforms/test_signal_rand_add_gaussiannoise.py +50 -0
  663. tests/transforms/test_signal_rand_add_sine.py +52 -0
  664. tests/transforms/test_signal_rand_add_sine_partial.py +50 -0
  665. tests/transforms/test_signal_rand_add_squarepulse.py +58 -0
  666. tests/transforms/test_signal_rand_add_squarepulse_partial.py +62 -0
  667. tests/transforms/test_signal_rand_drop.py +50 -0
  668. tests/transforms/test_signal_rand_scale.py +52 -0
  669. tests/transforms/test_signal_rand_shift.py +55 -0
  670. tests/transforms/test_signal_remove_frequency.py +71 -0
  671. tests/transforms/test_smooth_field.py +177 -0
  672. tests/transforms/test_sobel_gradient.py +189 -0
  673. tests/transforms/test_sobel_gradientd.py +212 -0
  674. tests/transforms/test_spacing.py +381 -0
  675. tests/transforms/test_spacingd.py +178 -0
  676. tests/transforms/test_spatial_crop.py +82 -0
  677. tests/transforms/test_spatial_cropd.py +74 -0
  678. tests/transforms/test_spatial_pad.py +57 -0
  679. tests/transforms/test_spatial_padd.py +43 -0
  680. tests/transforms/test_spatial_resample.py +235 -0
  681. tests/transforms/test_squeezedim.py +62 -0
  682. tests/transforms/test_squeezedimd.py +98 -0
  683. tests/transforms/test_std_shift_intensity.py +76 -0
  684. tests/transforms/test_std_shift_intensityd.py +74 -0
  685. tests/transforms/test_threshold_intensity.py +38 -0
  686. tests/transforms/test_threshold_intensityd.py +58 -0
  687. tests/transforms/test_to_contiguous.py +47 -0
  688. tests/transforms/test_to_cupy.py +112 -0
  689. tests/transforms/test_to_cupyd.py +76 -0
  690. tests/transforms/test_to_device.py +42 -0
  691. tests/transforms/test_to_deviced.py +37 -0
  692. tests/transforms/test_to_numpy.py +85 -0
  693. tests/transforms/test_to_numpyd.py +68 -0
  694. tests/transforms/test_to_pil.py +52 -0
  695. tests/transforms/test_to_pild.py +50 -0
  696. tests/transforms/test_to_tensor.py +60 -0
  697. tests/transforms/test_to_tensord.py +71 -0
  698. tests/transforms/test_torchvision.py +66 -0
  699. tests/transforms/test_torchvisiond.py +63 -0
  700. tests/transforms/test_transform.py +62 -0
  701. tests/transforms/test_transpose.py +41 -0
  702. tests/transforms/test_transposed.py +52 -0
  703. tests/transforms/test_ultrasound_confidence_map_transform.py +711 -0
  704. tests/transforms/test_utils_pytorch_numpy_unification.py +90 -0
  705. tests/transforms/test_vote_ensemble.py +84 -0
  706. tests/transforms/test_vote_ensembled.py +107 -0
  707. tests/transforms/test_with_allow_missing_keys.py +76 -0
  708. tests/transforms/test_zoom.py +120 -0
  709. tests/transforms/test_zoomd.py +94 -0
  710. tests/transforms/transform/__init__.py +10 -0
  711. tests/transforms/transform/test_randomizable.py +52 -0
  712. tests/transforms/transform/test_randomizable_transform_type.py +37 -0
  713. tests/transforms/utility/__init__.py +10 -0
  714. tests/transforms/utility/test_apply_transform_to_points.py +81 -0
  715. tests/transforms/utility/test_apply_transform_to_pointsd.py +185 -0
  716. tests/transforms/utility/test_identity.py +29 -0
  717. tests/transforms/utility/test_identityd.py +30 -0
  718. tests/transforms/utility/test_lambda.py +71 -0
  719. tests/transforms/utility/test_lambdad.py +83 -0
  720. tests/transforms/utility/test_rand_lambda.py +87 -0
  721. tests/transforms/utility/test_rand_lambdad.py +77 -0
  722. tests/transforms/utility/test_simulatedelay.py +36 -0
  723. tests/transforms/utility/test_simulatedelayd.py +36 -0
  724. tests/transforms/utility/test_splitdim.py +52 -0
  725. tests/transforms/utility/test_splitdimd.py +96 -0
  726. tests/transforms/utils/__init__.py +10 -0
  727. tests/transforms/utils/test_correct_crop_centers.py +36 -0
  728. tests/transforms/utils/test_get_unique_labels.py +45 -0
  729. tests/transforms/utils/test_print_transform_backends.py +29 -0
  730. tests/transforms/utils/test_soft_clip.py +125 -0
  731. tests/utils/__init__.py +10 -0
  732. tests/utils/enums/__init__.py +10 -0
  733. tests/utils/enums/test_hovernet_loss.py +190 -0
  734. tests/utils/enums/test_ordering.py +289 -0
  735. tests/utils/enums/test_wsireader.py +663 -0
  736. tests/utils/misc/__init__.py +10 -0
  737. tests/utils/misc/test_ensure_tuple.py +53 -0
  738. tests/utils/misc/test_monai_env_vars.py +44 -0
  739. tests/utils/misc/test_monai_utils_misc.py +103 -0
  740. tests/utils/misc/test_str2bool.py +34 -0
  741. tests/utils/misc/test_str2list.py +33 -0
  742. tests/utils/test_alias.py +44 -0
  743. tests/utils/test_component_store.py +73 -0
  744. tests/utils/test_deprecated.py +455 -0
  745. tests/utils/test_enum_bound_interp.py +75 -0
  746. tests/utils/test_evenly_divisible_all_gather_dist.py +50 -0
  747. tests/utils/test_get_package_version.py +34 -0
  748. tests/utils/test_handler_logfile.py +84 -0
  749. tests/utils/test_handler_metric_logger.py +62 -0
  750. tests/utils/test_list_to_dict.py +43 -0
  751. tests/utils/test_look_up_option.py +87 -0
  752. tests/utils/test_optional_import.py +80 -0
  753. tests/utils/test_pad_mode.py +39 -0
  754. tests/utils/test_profiling.py +208 -0
  755. tests/utils/test_rankfilter_dist.py +77 -0
  756. tests/utils/test_require_pkg.py +83 -0
  757. tests/utils/test_sample_slices.py +43 -0
  758. tests/utils/test_set_determinism.py +74 -0
  759. tests/utils/test_squeeze_unsqueeze.py +71 -0
  760. tests/utils/test_state_cacher.py +67 -0
  761. tests/utils/test_torchscript_utils.py +113 -0
  762. tests/utils/test_version.py +91 -0
  763. tests/utils/test_version_after.py +65 -0
  764. tests/utils/type_conversion/__init__.py +10 -0
  765. tests/utils/type_conversion/test_convert_data_type.py +152 -0
  766. tests/utils/type_conversion/test_get_equivalent_dtype.py +65 -0
  767. tests/utils/type_conversion/test_safe_dtype_range.py +99 -0
  768. tests/visualize/__init__.py +10 -0
  769. tests/visualize/test_img2tensorboard.py +46 -0
  770. tests/visualize/test_occlusion_sensitivity.py +128 -0
  771. tests/visualize/test_plot_2d_or_3d_image.py +74 -0
  772. tests/visualize/test_vis_cam.py +98 -0
  773. tests/visualize/test_vis_gradcam.py +211 -0
  774. tests/visualize/utils/__init__.py +10 -0
  775. tests/visualize/utils/test_blend_images.py +63 -0
  776. tests/visualize/utils/test_matshow3d.py +133 -0
  777. monai_weekly-1.5.dev2505.dist-info/RECORD +0 -427
  778. {monai_weekly-1.5.dev2505.dist-info → monai_weekly-1.5.dev2507.dist-info}/LICENSE +0 -0
  779. {monai_weekly-1.5.dev2505.dist-info → monai_weekly-1.5.dev2507.dist-info}/WHEEL +0 -0
@@ -0,0 +1,75 @@
1
+ # Copyright (c) MONAI Consortium
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software
7
+ # distributed under the License is distributed on an "AS IS" BASIS,
8
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ # See the License for the specific language governing permissions and
10
+ # limitations under the License.
11
+
12
+ from __future__ import annotations
13
+
14
+ import unittest
15
+
16
+ import numpy as np
17
+ import torch
18
+
19
+ from monai.transforms.lazy.functional import apply_pending
20
+ from monai.transforms.utils import create_rotate
21
+ from monai.utils import LazyAttr, convert_to_tensor
22
+ from tests.test_utils import get_arange_img
23
+
24
+
25
+ def single_2d_transform_cases():
26
+ return [
27
+ (
28
+ torch.as_tensor(get_arange_img((32, 32))),
29
+ [{LazyAttr.AFFINE: create_rotate(2, np.pi / 4)}, {LazyAttr.AFFINE: create_rotate(2, -np.pi / 4)}],
30
+ (1, 32, 32),
31
+ ),
32
+ (torch.as_tensor(get_arange_img((32, 32))), [create_rotate(2, np.pi / 2)], (1, 32, 32)),
33
+ (
34
+ torch.as_tensor(get_arange_img((16, 16))),
35
+ [{LazyAttr.AFFINE: create_rotate(2, np.pi / 2), LazyAttr.SHAPE: (45, 45)}],
36
+ (1, 45, 45),
37
+ ),
38
+ ]
39
+
40
+
41
+ class TestApply(unittest.TestCase):
42
+ def _test_apply_impl(self, tensor, pending_transforms, expected_shape):
43
+ result = apply_pending(tensor, pending_transforms)
44
+ self.assertListEqual(result[1], pending_transforms)
45
+ self.assertEqual(result[0].shape, expected_shape)
46
+
47
+ def _test_apply_metatensor_impl(self, tensor, pending_transforms, expected_shape, pending_as_parameter):
48
+ tensor_ = convert_to_tensor(tensor, track_meta=True)
49
+ if pending_as_parameter:
50
+ result, transforms = apply_pending(tensor_, pending_transforms)
51
+ else:
52
+ for p in pending_transforms:
53
+ tensor_.push_pending_operation(p)
54
+ if not isinstance(p, dict):
55
+ return
56
+ result, transforms = apply_pending(tensor_)
57
+ self.assertEqual(result.shape, expected_shape)
58
+
59
+ SINGLE_TRANSFORM_CASES = single_2d_transform_cases()
60
+
61
+ def test_apply_single_transform(self):
62
+ for case in self.SINGLE_TRANSFORM_CASES:
63
+ self._test_apply_impl(*case)
64
+
65
+ def test_apply_single_transform_metatensor(self):
66
+ for case in self.SINGLE_TRANSFORM_CASES:
67
+ self._test_apply_metatensor_impl(*case, False)
68
+
69
+ def test_apply_single_transform_metatensor_override(self):
70
+ for case in self.SINGLE_TRANSFORM_CASES:
71
+ self._test_apply_metatensor_impl(*case, True)
72
+
73
+
74
+ if __name__ == "__main__":
75
+ unittest.main()
@@ -0,0 +1,50 @@
1
+ # Copyright (c) MONAI Consortium
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software
7
+ # distributed under the License is distributed on an "AS IS" BASIS,
8
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ # See the License for the specific language governing permissions and
10
+ # limitations under the License.
11
+
12
+ from __future__ import annotations
13
+
14
+ import unittest
15
+
16
+ import torch
17
+ from parameterized import parameterized
18
+
19
+ from monai.transforms.lazy.functional import resample
20
+ from monai.utils import convert_to_tensor
21
+ from tests.test_utils import assert_allclose, get_arange_img
22
+
23
+
24
+ def rotate_90_2d():
25
+ t = torch.eye(3)
26
+ t[:, 0] = torch.FloatTensor([0, -1, 0])
27
+ t[:, 1] = torch.FloatTensor([1, 0, 0])
28
+ return t
29
+
30
+
31
+ RESAMPLE_FUNCTION_CASES = [
32
+ (get_arange_img((3, 3)), rotate_90_2d(), [[0, 3, 6], [0, 3, 6], [0, 3, 6]]),
33
+ (get_arange_img((3, 3)), torch.eye(3), get_arange_img((3, 3))[0]),
34
+ ]
35
+
36
+
37
+ class TestResampleFunction(unittest.TestCase):
38
+ @parameterized.expand(RESAMPLE_FUNCTION_CASES)
39
+ def test_resample_function_impl(self, img, matrix, expected):
40
+ out = resample(convert_to_tensor(img), matrix, {"lazy_shape": img.shape[1:], "lazy_padding_mode": "border"})
41
+ assert_allclose(out[0], expected, type_test=False)
42
+
43
+ img = convert_to_tensor(img, dtype=torch.uint8)
44
+ out = resample(img, matrix, {"lazy_resample_mode": "auto", "lazy_dtype": torch.float})
45
+ out_1 = resample(img, matrix, {"lazy_resample_mode": "other value", "lazy_dtype": torch.float})
46
+ self.assertIs(out.dtype, out_1.dtype) # testing dtype in different lazy_resample_mode
47
+
48
+
49
+ if __name__ == "__main__":
50
+ unittest.main()
@@ -0,0 +1,10 @@
1
+ # Copyright (c) MONAI Consortium
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software
7
+ # distributed under the License is distributed on an "AS IS" BASIS,
8
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ # See the License for the specific language governing permissions and
10
+ # limitations under the License.
@@ -0,0 +1,75 @@
1
+ # Copyright (c) MONAI Consortium
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software
7
+ # distributed under the License is distributed on an "AS IS" BASIS,
8
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ # See the License for the specific language governing permissions and
10
+ # limitations under the License.
11
+
12
+ from __future__ import annotations
13
+
14
+ import unittest
15
+
16
+ import numpy as np
17
+ import torch
18
+ from parameterized import parameterized
19
+
20
+ from monai.transforms.intensity.array import ComputeHoVerMaps
21
+ from monai.utils import min_version, optional_import
22
+ from tests.test_utils import TEST_NDARRAYS, assert_allclose
23
+
24
+ _, has_skimage = optional_import("skimage", "0.19.0", min_version)
25
+
26
+ INSTANCE_MASK = np.zeros((1, 16, 16), dtype="int16")
27
+ INSTANCE_MASK[:, 5:8, 4:11] = 1
28
+ INSTANCE_MASK[:, 3:5, 6:9] = 1
29
+ INSTANCE_MASK[:, 8:10, 6:9] = 1
30
+ INSTANCE_MASK[:, 13:, 13:] = 2
31
+ H_MAP = torch.zeros((16, 16), dtype=torch.float32)
32
+ H_MAP[5:8, 4] = -1.0
33
+ H_MAP[5:8, 5] = -2.0 / 3.0
34
+ H_MAP[3:10, 6] = -1.0 / 3.0
35
+ H_MAP[3:10, 7] = 0.0
36
+ H_MAP[3:10, 8] = 1.0 / 3.0
37
+ H_MAP[5:8, 9] = 2.0 / 3.0
38
+ H_MAP[5:8, 10] = 1.0
39
+ H_MAP[13:, 13] = -1.0
40
+ H_MAP[13:, 14] = 0.0
41
+ H_MAP[13:, 15] = 1.0
42
+ V_MAP = torch.zeros((16, 16), dtype=torch.float32)
43
+ V_MAP[3, 6:9] = -1.0
44
+ V_MAP[4, 6:9] = -2.0 / 3.0
45
+ V_MAP[5, 4:11] = -1.0 / 3.0
46
+ V_MAP[6, 4:11] = 0.0
47
+ V_MAP[7, 4:11] = 1.0 / 3.0
48
+ V_MAP[8, 6:9] = 2.0 / 3.0
49
+ V_MAP[9, 6:9] = 1.0
50
+ V_MAP[13, 13:] = -1.0
51
+ V_MAP[14, 13:] = 0.0
52
+ V_MAP[15, 13:] = 1.0
53
+ HV_MAPS = torch.stack([H_MAP, V_MAP])
54
+ TEST_CASE_0 = [{}, INSTANCE_MASK, HV_MAPS]
55
+ TEST_CASE_1 = [{"dtype": "float64"}, INSTANCE_MASK, HV_MAPS]
56
+
57
+ TESTS = []
58
+ for p in TEST_NDARRAYS:
59
+ TESTS.append([p, *TEST_CASE_0])
60
+ TESTS.append([p, *TEST_CASE_1])
61
+
62
+
63
+ @unittest.skipUnless(has_skimage, "Requires scikit-image library.")
64
+ class ComputeHoVerMapsTests(unittest.TestCase):
65
+ @parameterized.expand(TESTS)
66
+ def test_horizontal_certical_maps(self, in_type, arguments, mask, hv_mask):
67
+ input_image = in_type(mask)
68
+ result = ComputeHoVerMaps(**arguments)(input_image)
69
+ self.assertIsInstance(result, torch.Tensor)
70
+ self.assertEqual(str(result.dtype).split(".")[1], arguments.get("dtype", "float32"))
71
+ assert_allclose(result, hv_mask, type_test="tensor")
72
+
73
+
74
+ if __name__ == "__main__":
75
+ unittest.main()
@@ -0,0 +1,79 @@
1
+ # Copyright (c) MONAI Consortium
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software
7
+ # distributed under the License is distributed on an "AS IS" BASIS,
8
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ # See the License for the specific language governing permissions and
10
+ # limitations under the License.
11
+
12
+ from __future__ import annotations
13
+
14
+ import unittest
15
+
16
+ import numpy as np
17
+ import torch
18
+ from parameterized import parameterized
19
+
20
+ from monai.transforms.intensity.dictionary import ComputeHoVerMapsd
21
+ from monai.utils import min_version, optional_import
22
+ from tests.test_utils import TEST_NDARRAYS, assert_allclose
23
+
24
+ _, has_skimage = optional_import("skimage", "0.19.0", min_version)
25
+
26
+ INSTANCE_MASK = np.zeros((1, 16, 16), dtype="int16")
27
+ INSTANCE_MASK[:, 5:8, 4:11] = 1
28
+ INSTANCE_MASK[:, 3:5, 6:9] = 1
29
+ INSTANCE_MASK[:, 8:10, 6:9] = 1
30
+ INSTANCE_MASK[:, 13:, 13:] = 2
31
+ H_MAP = torch.zeros((16, 16), dtype=torch.float32)
32
+ H_MAP[5:8, 4] = -1.0
33
+ H_MAP[5:8, 5] = -2.0 / 3.0
34
+ H_MAP[3:10, 6] = -1.0 / 3.0
35
+ H_MAP[3:10, 7] = 0.0
36
+ H_MAP[3:10, 8] = 1.0 / 3.0
37
+ H_MAP[5:8, 9] = 2.0 / 3.0
38
+ H_MAP[5:8, 10] = 1.0
39
+ H_MAP[13:, 13] = -1.0
40
+ H_MAP[13:, 14] = 0.0
41
+ H_MAP[13:, 15] = 1.0
42
+ V_MAP = torch.zeros((16, 16), dtype=torch.float32)
43
+ V_MAP[3, 6:9] = -1.0
44
+ V_MAP[4, 6:9] = -2.0 / 3.0
45
+ V_MAP[5, 4:11] = -1.0 / 3.0
46
+ V_MAP[6, 4:11] = 0.0
47
+ V_MAP[7, 4:11] = 1.0 / 3.0
48
+ V_MAP[8, 6:9] = 2.0 / 3.0
49
+ V_MAP[9, 6:9] = 1.0
50
+ V_MAP[13, 13:] = -1.0
51
+ V_MAP[14, 13:] = 0.0
52
+ V_MAP[15, 13:] = 1.0
53
+ HV_MAPS = torch.stack([H_MAP, V_MAP])
54
+ TEST_CASE_0 = [{}, {"mask": INSTANCE_MASK}, {"hover_mask": HV_MAPS}]
55
+ TEST_CASE_1 = [{"dtype": "float64"}, {"mask": INSTANCE_MASK}, {"hover_mask": HV_MAPS}]
56
+ TEST_CASE_1 = [{"dtype": "float64", "new_key_prefix": ""}, {"mask": INSTANCE_MASK}, {"mask": HV_MAPS}]
57
+
58
+ TESTS = []
59
+ for p in TEST_NDARRAYS:
60
+ TESTS.append([p, *TEST_CASE_0])
61
+ TESTS.append([p, *TEST_CASE_1])
62
+
63
+
64
+ @unittest.skipUnless(has_skimage, "Requires scikit-image library.")
65
+ class ComputeHoVerMapsDictTests(unittest.TestCase):
66
+ @parameterized.expand(TESTS)
67
+ def test_horizontal_certical_maps(self, in_type, arguments, mask, hv_mask):
68
+ hv_key = list(hv_mask.keys())[0]
69
+ input_image = {}
70
+ for k in mask.keys():
71
+ input_image[k] = in_type(mask[k])
72
+ result = ComputeHoVerMapsd(keys="mask", **arguments)(input_image)[hv_key]
73
+ self.assertIsInstance(result, torch.Tensor)
74
+ self.assertEqual(str(result.dtype).split(".")[1], arguments.get("dtype", "float32"))
75
+ assert_allclose(result, hv_mask[hv_key], type_test="tensor")
76
+
77
+
78
+ if __name__ == "__main__":
79
+ unittest.main()
@@ -0,0 +1,98 @@
1
+ # Copyright (c) MONAI Consortium
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software
7
+ # distributed under the License is distributed on an "AS IS" BASIS,
8
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ # See the License for the specific language governing permissions and
10
+ # limitations under the License.
11
+
12
+ from __future__ import annotations
13
+
14
+ import unittest
15
+
16
+ import numpy as np
17
+ from parameterized import parameterized
18
+
19
+ from monai.transforms.intensity.array import ForegroundMask
20
+ from monai.utils import min_version, optional_import, set_determinism
21
+ from tests.test_utils import TEST_NDARRAYS, assert_allclose
22
+
23
+ skimage, has_skimage = optional_import("skimage", "0.19.0", min_version)
24
+ set_determinism(1234)
25
+
26
+ A = np.random.randint(64, 128, (3, 3, 2)).astype(np.uint8)
27
+ A3D = np.random.randint(64, 128, (3, 3, 2, 2)).astype(np.uint8)
28
+ B = np.ones_like(A[:1])
29
+ B3D = np.ones_like(A3D[:1])
30
+ MASK = np.pad(B, ((0, 0), (2, 2), (2, 2)), constant_values=0)
31
+ MASK3D = np.pad(B3D, ((0, 0), (2, 2), (2, 2), (2, 2)), constant_values=0)
32
+ IMAGE1 = np.pad(A, ((0, 0), (2, 2), (2, 2)), constant_values=255)
33
+ IMAGE3D = np.pad(A3D, ((0, 0), (2, 2), (2, 2), (2, 2)), constant_values=255)
34
+ IMAGE2 = np.copy(IMAGE1)
35
+ IMAGE2[0] = 0
36
+ IMAGE3 = np.pad(A, ((0, 0), (2, 2), (2, 2)), constant_values=0)
37
+ TEST_CASE_0 = [{}, IMAGE1, MASK]
38
+ TEST_CASE_1 = [{"threshold": "otsu"}, IMAGE1, MASK]
39
+ TEST_CASE_2 = [{"threshold": "otsu"}, IMAGE2, MASK]
40
+ TEST_CASE_3 = [{"threshold": 140}, IMAGE1, MASK]
41
+ TEST_CASE_4 = [{"threshold": "otsu", "invert": True}, IMAGE3, MASK]
42
+ TEST_CASE_5 = [{"threshold": 0.5}, MASK, np.logical_not(MASK)]
43
+ TEST_CASE_6 = [{"threshold": 140}, IMAGE2, np.ones_like(MASK)]
44
+ TEST_CASE_7 = [{"threshold": {"R": "otsu", "G": "otsu", "B": "otsu"}}, IMAGE2, MASK]
45
+ TEST_CASE_8 = [{"threshold": {"R": 140, "G": "otsu", "B": "otsu"}}, IMAGE2, np.ones_like(MASK)]
46
+ TEST_CASE_9 = [{"threshold": {"R": 140, "G": skimage.filters.threshold_otsu, "B": "otsu"}}, IMAGE2, np.ones_like(MASK)]
47
+ TEST_CASE_10 = [{"threshold": skimage.filters.threshold_mean}, IMAGE1, MASK]
48
+ TEST_CASE_11 = [{"threshold": None, "hsv_threshold": "otsu"}, IMAGE1, np.ones_like(MASK)]
49
+ TEST_CASE_12 = [{"threshold": None, "hsv_threshold": {"S": "otsu"}}, IMAGE1, MASK]
50
+ TEST_CASE_13 = [{"threshold": 100, "invert": True}, IMAGE1, np.logical_not(MASK)]
51
+ TEST_CASE_14 = [{}, IMAGE3D, MASK3D]
52
+ TEST_CASE_15 = [{"hsv_threshold": {"S": 0.1}}, IMAGE3D, MASK3D]
53
+
54
+ TEST_CASE_ERROR_1 = [{"threshold": None}, IMAGE1]
55
+ TEST_CASE_ERROR_2 = [{"threshold": {"K": 1}}, IMAGE1]
56
+
57
+ TESTS = []
58
+ for p in TEST_NDARRAYS:
59
+ TESTS.append([p, *TEST_CASE_0])
60
+ TESTS.append([p, *TEST_CASE_1])
61
+ TESTS.append([p, *TEST_CASE_2])
62
+ TESTS.append([p, *TEST_CASE_3])
63
+ TESTS.append([p, *TEST_CASE_4])
64
+ TESTS.append([p, *TEST_CASE_5])
65
+ TESTS.append([p, *TEST_CASE_6])
66
+ TESTS.append([p, *TEST_CASE_7])
67
+ TESTS.append([p, *TEST_CASE_8])
68
+ TESTS.append([p, *TEST_CASE_9])
69
+ TESTS.append([p, *TEST_CASE_10])
70
+ TESTS.append([p, *TEST_CASE_11])
71
+ TESTS.append([p, *TEST_CASE_12])
72
+ TESTS.append([p, *TEST_CASE_13])
73
+ TESTS.append([p, *TEST_CASE_14])
74
+ TESTS.append([p, *TEST_CASE_15])
75
+
76
+ TESTS_ERROR = []
77
+ for p in TEST_NDARRAYS:
78
+ TESTS_ERROR.append([p, *TEST_CASE_ERROR_1])
79
+ TESTS_ERROR.append([p, *TEST_CASE_ERROR_2])
80
+
81
+
82
+ @unittest.skipUnless(has_skimage, "Requires sci-kit image")
83
+ class TestForegroundMask(unittest.TestCase):
84
+ @parameterized.expand(TESTS)
85
+ def test_foreground_mask(self, in_type, arguments, image, mask):
86
+ input_image = in_type(image)
87
+ result = ForegroundMask(**arguments)(input_image)
88
+ assert_allclose(result, mask, type_test="tensor")
89
+
90
+ @parameterized.expand(TESTS_ERROR)
91
+ def test_foreground_mask_error(self, in_type, arguments, image):
92
+ input_image = in_type(image)
93
+ with self.assertRaises(ValueError):
94
+ ForegroundMask(**arguments)(input_image)
95
+
96
+
97
+ if __name__ == "__main__":
98
+ unittest.main()
@@ -0,0 +1,106 @@
1
+ # Copyright (c) MONAI Consortium
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software
7
+ # distributed under the License is distributed on an "AS IS" BASIS,
8
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ # See the License for the specific language governing permissions and
10
+ # limitations under the License.
11
+
12
+ from __future__ import annotations
13
+
14
+ import unittest
15
+
16
+ import numpy as np
17
+ from parameterized import parameterized
18
+
19
+ from monai.transforms.intensity.dictionary import ForegroundMaskd
20
+ from monai.utils import min_version, optional_import, set_determinism
21
+ from tests.test_utils import TEST_NDARRAYS, assert_allclose
22
+
23
+ skimage, has_skimage = optional_import("skimage", "0.19.0", min_version)
24
+ set_determinism(1234)
25
+
26
+ A = np.random.randint(64, 128, (3, 3, 2)).astype(np.uint8)
27
+ A3D = np.random.randint(64, 128, (3, 3, 2, 2)).astype(np.uint8)
28
+ B = np.ones_like(A[:1])
29
+ B3D = np.ones_like(A3D[:1])
30
+ MASK = np.pad(B, ((0, 0), (2, 2), (2, 2)), constant_values=0)
31
+ MASK3D = np.pad(B3D, ((0, 0), (2, 2), (2, 2), (2, 2)), constant_values=0)
32
+ IMAGE1 = np.pad(A, ((0, 0), (2, 2), (2, 2)), constant_values=255)
33
+ IMAGE3D = np.pad(A3D, ((0, 0), (2, 2), (2, 2), (2, 2)), constant_values=255)
34
+ IMAGE2 = np.copy(IMAGE1)
35
+ IMAGE2[0] = 0
36
+ IMAGE3 = np.pad(A, ((0, 0), (2, 2), (2, 2)), constant_values=0)
37
+ TEST_CASE_0 = [{"keys": "image"}, {"image": IMAGE1}, MASK]
38
+ TEST_CASE_1 = [{"keys": "image", "threshold": "otsu"}, {"image": IMAGE1}, MASK]
39
+ TEST_CASE_2 = [{"keys": "image", "threshold": "otsu"}, {"image": IMAGE2}, MASK]
40
+ TEST_CASE_3 = [{"keys": "image", "threshold": 140}, {"image": IMAGE1}, MASK]
41
+ TEST_CASE_4 = [{"keys": "image", "threshold": "otsu", "invert": True}, {"image": IMAGE3}, MASK]
42
+ TEST_CASE_5 = [{"keys": "image", "threshold": 0.5}, {"image": MASK}, np.logical_not(MASK)]
43
+ TEST_CASE_6 = [{"keys": "image", "threshold": 140}, {"image": IMAGE2}, np.ones_like(MASK)]
44
+ TEST_CASE_7 = [{"keys": "image", "threshold": {"R": "otsu", "G": "otsu", "B": "otsu"}}, {"image": IMAGE2}, MASK]
45
+ TEST_CASE_8 = [
46
+ {"keys": "image", "threshold": {"R": 140, "G": "otsu", "B": "otsu"}},
47
+ {"image": IMAGE2},
48
+ np.ones_like(MASK),
49
+ ]
50
+ TEST_CASE_9 = [
51
+ {"keys": "image", "threshold": {"R": 140, "G": skimage.filters.threshold_otsu, "B": "otsu"}},
52
+ {"image": IMAGE2},
53
+ np.ones_like(MASK),
54
+ ]
55
+ TEST_CASE_10 = [{"keys": "image", "threshold": skimage.filters.threshold_mean}, {"image": IMAGE1}, MASK]
56
+ TEST_CASE_11 = [{"keys": "image", "threshold": None, "hsv_threshold": "otsu"}, {"image": IMAGE1}, np.ones_like(MASK)]
57
+ TEST_CASE_12 = [{"keys": "image", "threshold": None, "hsv_threshold": {"S": "otsu"}}, {"image": IMAGE1}, MASK]
58
+ TEST_CASE_13 = [{"keys": "image", "threshold": 100, "invert": True}, {"image": IMAGE1}, np.logical_not(MASK)]
59
+ TEST_CASE_14 = [{"keys": "image"}, {"image": IMAGE3D}, MASK3D]
60
+ TEST_CASE_15 = [{"keys": "image", "hsv_threshold": {"S": 0.1}}, {"image": IMAGE3D}, MASK3D]
61
+
62
+ TEST_CASE_ERROR_1 = [{"keys": "image", "threshold": None}, {"image": IMAGE1}]
63
+ TEST_CASE_ERROR_2 = [{"keys": "image", "threshold": {"K": 1}}, {"image": IMAGE1}]
64
+
65
+ TESTS = []
66
+ for p in TEST_NDARRAYS:
67
+ TESTS.append([p, *TEST_CASE_0])
68
+ TESTS.append([p, *TEST_CASE_1])
69
+ TESTS.append([p, *TEST_CASE_2])
70
+ TESTS.append([p, *TEST_CASE_3])
71
+ TESTS.append([p, *TEST_CASE_4])
72
+ TESTS.append([p, *TEST_CASE_5])
73
+ TESTS.append([p, *TEST_CASE_6])
74
+ TESTS.append([p, *TEST_CASE_7])
75
+ TESTS.append([p, *TEST_CASE_8])
76
+ TESTS.append([p, *TEST_CASE_9])
77
+ TESTS.append([p, *TEST_CASE_10])
78
+ TESTS.append([p, *TEST_CASE_11])
79
+ TESTS.append([p, *TEST_CASE_12])
80
+ TESTS.append([p, *TEST_CASE_13])
81
+ TESTS.append([p, *TEST_CASE_14])
82
+ TESTS.append([p, *TEST_CASE_15])
83
+
84
+ TESTS_ERROR = []
85
+ for p in TEST_NDARRAYS:
86
+ TESTS_ERROR.append([p, *TEST_CASE_ERROR_1])
87
+ TESTS_ERROR.append([p, *TEST_CASE_ERROR_2])
88
+
89
+
90
+ @unittest.skipUnless(has_skimage, "Requires sci-kit image")
91
+ class TestForegroundMaskd(unittest.TestCase):
92
+ @parameterized.expand(TESTS)
93
+ def test_foreground_mask(self, in_type, arguments, data_dict, mask):
94
+ data_dict[arguments["keys"]] = in_type(data_dict[arguments["keys"]])
95
+ result = ForegroundMaskd(**arguments)(data_dict)[arguments["keys"]]
96
+ assert_allclose(result, mask, type_test=False)
97
+
98
+ @parameterized.expand(TESTS_ERROR)
99
+ def test_foreground_mask_error(self, in_type, arguments, data_dict):
100
+ data_dict[arguments["keys"]] = in_type(data_dict[arguments["keys"]])
101
+ with self.assertRaises(ValueError):
102
+ ForegroundMaskd(**arguments)(data_dict)[arguments["keys"]]
103
+
104
+
105
+ if __name__ == "__main__":
106
+ unittest.main()
@@ -0,0 +1,76 @@
1
+ # Copyright (c) MONAI Consortium
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software
7
+ # distributed under the License is distributed on an "AS IS" BASIS,
8
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ # See the License for the specific language governing permissions and
10
+ # limitations under the License.
11
+
12
+ from __future__ import annotations
13
+
14
+ import unittest
15
+
16
+ import numpy as np
17
+ from parameterized import parameterized
18
+
19
+ from monai.transforms.intensity.dictionary import RandHistogramShiftd
20
+ from tests.test_utils import TEST_NDARRAYS, assert_allclose
21
+
22
+ TESTS = []
23
+ for p in TEST_NDARRAYS:
24
+ TESTS.append(
25
+ [
26
+ {"keys": ("img",), "num_control_points": 5, "prob": 0.0},
27
+ {"img": p(np.arange(8).reshape((1, 2, 2, 2))), "seg": p(np.ones(8).reshape((1, 2, 2, 2)))},
28
+ {"img": np.arange(8).reshape((1, 2, 2, 2)), "seg": np.ones(8).reshape((1, 2, 2, 2))},
29
+ ]
30
+ )
31
+ TESTS.append(
32
+ [
33
+ {"keys": ("img",), "num_control_points": 5, "prob": 0.9},
34
+ {
35
+ "img": p(np.arange(8).reshape((1, 2, 2, 2)).astype(np.float32)),
36
+ "seg": p(np.ones(8).reshape((1, 2, 2, 2))),
37
+ },
38
+ {
39
+ "img": np.array(
40
+ [[[[0.0, 0.57227867], [1.1391707, 1.68990281]], [[2.75833219, 4.34445884], [5.70913743, 7.0]]]]
41
+ ),
42
+ "seg": np.ones(8).reshape((1, 2, 2, 2)),
43
+ },
44
+ ]
45
+ )
46
+ TESTS.append(
47
+ [
48
+ {"keys": ("img",), "num_control_points": (5, 20), "prob": 0.9},
49
+ {
50
+ "img": p(np.arange(8).reshape((1, 2, 2, 2)).astype(np.float32)),
51
+ "seg": p(np.ones(8).reshape((1, 2, 2, 2))),
52
+ },
53
+ {
54
+ "img": np.array(
55
+ [[[[0.0, 1.17472492], [2.21553091, 2.88292011]], [[3.98407301, 5.01302123], [6.09275004, 7.0]]]]
56
+ ),
57
+ "seg": np.ones(8).reshape((1, 2, 2, 2)),
58
+ },
59
+ ]
60
+ )
61
+
62
+
63
+ class TestRandHistogramShiftD(unittest.TestCase):
64
+ @parameterized.expand(TESTS)
65
+ def test_rand_histogram_shiftd(self, input_param, input_data, expected_val):
66
+ g = RandHistogramShiftd(**input_param)
67
+ g.set_random_state(123)
68
+ res = g(input_data)
69
+ for key in ("img",):
70
+ result = res[key]
71
+ expected = expected_val[key] if isinstance(expected_val, dict) else expected_val
72
+ assert_allclose(result, expected, rtol=1e-4, atol=1e-4, type_test="tensor")
73
+
74
+
75
+ if __name__ == "__main__":
76
+ unittest.main()
@@ -0,0 +1,96 @@
1
+ # Copyright (c) MONAI Consortium
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software
7
+ # distributed under the License is distributed on an "AS IS" BASIS,
8
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ # See the License for the specific language governing permissions and
10
+ # limitations under the License.
11
+
12
+ from __future__ import annotations
13
+
14
+ import unittest
15
+
16
+ import numpy as np
17
+ import torch
18
+
19
+ from monai.transforms.intensity.array import ScaleIntensityRangePercentiles
20
+ from tests.test_utils import TEST_NDARRAYS, NumpyImageTestCase2D, assert_allclose
21
+
22
+
23
+ class TestScaleIntensityRangePercentiles(NumpyImageTestCase2D):
24
+ def test_scaling(self):
25
+ img = self.imt[0]
26
+ lower = 10
27
+ upper = 99
28
+ b_min = 0
29
+ b_max = 255
30
+
31
+ a_min = np.percentile(img, lower)
32
+ a_max = np.percentile(img, upper)
33
+ expected = (((img - a_min) / (a_max - a_min)) * (b_max - b_min) + b_min).astype(np.uint8)
34
+ scaler = ScaleIntensityRangePercentiles(lower=lower, upper=upper, b_min=b_min, b_max=b_max, dtype=np.uint8)
35
+ for p in TEST_NDARRAYS:
36
+ result = scaler(p(img))
37
+ self.assertEqual(result.dtype, torch.uint8)
38
+ assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4)
39
+
40
+ def test_relative_scaling(self):
41
+ img = self.imt[0]
42
+ lower = 10
43
+ upper = 99
44
+ b_min = 100
45
+ b_max = 300
46
+ scaler = ScaleIntensityRangePercentiles(lower=lower, upper=upper, b_min=b_min, b_max=b_max, relative=True)
47
+
48
+ expected_a_min = np.percentile(img, lower)
49
+ expected_a_max = np.percentile(img, upper)
50
+ expected_b_min = ((b_max - b_min) * (lower / 100.0)) + b_min
51
+ expected_b_max = ((b_max - b_min) * (upper / 100.0)) + b_min
52
+ expected_img = (img - expected_a_min) / (expected_a_max - expected_a_min)
53
+ expected_img = (expected_img * (expected_b_max - expected_b_min)) + expected_b_min
54
+
55
+ for p in TEST_NDARRAYS:
56
+ result = scaler(p(img))
57
+ assert_allclose(result, p(expected_img), type_test="tensor", rtol=1e-3)
58
+
59
+ scaler = ScaleIntensityRangePercentiles(
60
+ lower=lower, upper=upper, b_min=b_min, b_max=b_max, relative=True, clip=True
61
+ )
62
+ for p in TEST_NDARRAYS:
63
+ result = scaler(p(img))
64
+ assert_allclose(
65
+ result, p(np.clip(expected_img, expected_b_min, expected_b_max)), type_test="tensor", rtol=0.1
66
+ )
67
+
68
+ def test_invalid_instantiation(self):
69
+ self.assertRaises(ValueError, ScaleIntensityRangePercentiles, lower=-10, upper=99, b_min=0, b_max=255)
70
+ self.assertRaises(ValueError, ScaleIntensityRangePercentiles, lower=101, upper=99, b_min=0, b_max=255)
71
+ self.assertRaises(ValueError, ScaleIntensityRangePercentiles, lower=30, upper=-20, b_min=0, b_max=255)
72
+ self.assertRaises(ValueError, ScaleIntensityRangePercentiles, lower=30, upper=900, b_min=0, b_max=255)
73
+
74
+ def test_channel_wise(self):
75
+ img = np.tile(self.imt, (3, 1, 1, 1))
76
+ lower = 10
77
+ upper = 99
78
+ b_min = 0
79
+ b_max = 255
80
+ scaler = ScaleIntensityRangePercentiles(
81
+ lower=lower, upper=upper, b_min=b_min, b_max=b_max, channel_wise=True, dtype=np.uint8
82
+ )
83
+ expected = []
84
+ for c in img:
85
+ a_min = np.percentile(c, lower)
86
+ a_max = np.percentile(c, upper)
87
+ expected.append((((c - a_min) / (a_max - a_min)) * (b_max - b_min) + b_min).astype(np.uint8))
88
+ expected = np.stack(expected)
89
+
90
+ for p in TEST_NDARRAYS:
91
+ result = scaler(p(img))
92
+ assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4)
93
+
94
+
95
+ if __name__ == "__main__":
96
+ unittest.main()