monai-weekly 1.7.dev2637__tar.gz → 1.7.dev2638__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (458) hide show
  1. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/PKG-INFO +5 -1
  2. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/__init__.py +1 -1
  3. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/_version.py +3 -3
  4. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/nnunet/nnunetv2_runner.py +55 -6
  5. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/auto3dseg/utils.py +44 -7
  6. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/bundle/workflows.py +211 -23
  7. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/__init__.py +10 -1
  8. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/image_reader.py +152 -2
  9. monai_weekly-1.7.dev2638/monai/data/nvimgcodec_pydicom_plugin.py +80 -0
  10. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/tensorboard_handlers.py +11 -1
  11. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/io/array.py +29 -3
  12. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/io/dictionary.py +3 -1
  13. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/utils/misc.py +11 -1
  14. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai_weekly.egg-info/PKG-INFO +5 -1
  15. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai_weekly.egg-info/SOURCES.txt +1 -0
  16. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai_weekly.egg-info/requires.txt +7 -0
  17. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/pyproject.toml +10 -0
  18. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/LICENSE +0 -0
  19. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/MANIFEST.in +0 -0
  20. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/README.md +0 -0
  21. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/_extensions/__init__.py +0 -0
  22. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/_extensions/gmm/gmm.cpp +0 -0
  23. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/_extensions/gmm/gmm.h +0 -0
  24. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/_extensions/gmm/gmm_cpu.cpp +0 -0
  25. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/_extensions/gmm/gmm_cuda.cu +0 -0
  26. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/_extensions/gmm/gmm_cuda_linalg.cuh +0 -0
  27. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/_extensions/loader.py +0 -0
  28. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/__init__.py +0 -0
  29. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/auto3dseg/__init__.py +0 -0
  30. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/auto3dseg/__main__.py +0 -0
  31. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/auto3dseg/auto_runner.py +0 -0
  32. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/auto3dseg/bundle_gen.py +0 -0
  33. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/auto3dseg/data_analyzer.py +0 -0
  34. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/auto3dseg/ensemble_builder.py +0 -0
  35. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/auto3dseg/hpo_gen.py +0 -0
  36. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/auto3dseg/transforms.py +0 -0
  37. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/auto3dseg/utils.py +0 -0
  38. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/datasets.py +0 -0
  39. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/deepedit/__init__.py +0 -0
  40. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/deepedit/interaction.py +0 -0
  41. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/deepedit/transforms.py +0 -0
  42. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/deepgrow/__init__.py +0 -0
  43. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/deepgrow/dataset.py +0 -0
  44. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/deepgrow/interaction.py +0 -0
  45. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/deepgrow/transforms.py +0 -0
  46. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/__init__.py +0 -0
  47. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/metrics/__init__.py +0 -0
  48. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/metrics/coco.py +0 -0
  49. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/metrics/matching.py +0 -0
  50. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/networks/__init__.py +0 -0
  51. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/networks/retinanet_detector.py +0 -0
  52. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/networks/retinanet_network.py +0 -0
  53. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/transforms/__init__.py +0 -0
  54. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/transforms/array.py +0 -0
  55. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/transforms/box_ops.py +0 -0
  56. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/transforms/dictionary.py +0 -0
  57. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/utils/ATSS_matcher.py +0 -0
  58. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/utils/__init__.py +0 -0
  59. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/utils/anchor_utils.py +0 -0
  60. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/utils/box_coder.py +0 -0
  61. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/utils/box_selector.py +0 -0
  62. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/utils/detector_utils.py +0 -0
  63. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/utils/hard_negative_sampler.py +0 -0
  64. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/detection/utils/predict_utils.py +0 -0
  65. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/generation/__init__.py +0 -0
  66. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/generation/maisi/__init__.py +0 -0
  67. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/generation/maisi/networks/__init__.py +0 -0
  68. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/generation/maisi/networks/autoencoderkl_maisi.py +0 -0
  69. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/generation/maisi/networks/controlnet_maisi.py +0 -0
  70. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/generation/maisi/networks/diffusion_model_unet_maisi.py +0 -0
  71. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/mmars/__init__.py +0 -0
  72. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/mmars/mmars.py +0 -0
  73. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/mmars/model_desc.py +0 -0
  74. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/nnunet/__init__.py +0 -0
  75. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/nnunet/__main__.py +0 -0
  76. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/nnunet/nnunet_bundle.py +0 -0
  77. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/nnunet/utils.py +0 -0
  78. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/nuclick/__init__.py +0 -0
  79. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/nuclick/transforms.py +0 -0
  80. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/__init__.py +0 -0
  81. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/engines/__init__.py +0 -0
  82. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/engines/utils.py +0 -0
  83. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/handlers/__init__.py +0 -0
  84. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/handlers/utils.py +0 -0
  85. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/inferers/__init__.py +0 -0
  86. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/inferers/inferer.py +0 -0
  87. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/losses/__init__.py +0 -0
  88. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/losses/hovernet_loss.py +0 -0
  89. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/metrics/__init__.py +0 -0
  90. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/metrics/lesion_froc.py +0 -0
  91. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/transforms/__init__.py +0 -0
  92. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/transforms/post/__init__.py +0 -0
  93. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/transforms/post/array.py +0 -0
  94. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/transforms/post/dictionary.py +0 -0
  95. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/transforms/stain/__init__.py +0 -0
  96. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/transforms/stain/array.py +0 -0
  97. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/transforms/stain/dictionary.py +0 -0
  98. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/pathology/utils.py +0 -0
  99. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/__init__.py +0 -0
  100. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/complex_utils.py +0 -0
  101. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/fastmri_reader.py +0 -0
  102. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/mri_utils.py +0 -0
  103. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/networks/__init__.py +0 -0
  104. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/networks/blocks/__init__.py +0 -0
  105. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/networks/blocks/varnetblock.py +0 -0
  106. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/networks/nets/__init__.py +0 -0
  107. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/networks/nets/coil_sensitivity_model.py +0 -0
  108. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/networks/nets/complex_unet.py +0 -0
  109. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/networks/nets/utils.py +0 -0
  110. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/networks/nets/varnet.py +0 -0
  111. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/transforms/__init__.py +0 -0
  112. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/transforms/array.py +0 -0
  113. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/transforms/dictionary.py +0 -0
  114. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/tcia/__init__.py +0 -0
  115. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/tcia/label_desc.py +0 -0
  116. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/tcia/utils.py +0 -0
  117. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/utils.py +0 -0
  118. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/vista3d/__init__.py +0 -0
  119. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/vista3d/inferer.py +0 -0
  120. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/vista3d/sampler.py +0 -0
  121. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/apps/vista3d/transforms.py +0 -0
  122. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/auto3dseg/__init__.py +0 -0
  123. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/auto3dseg/algo_gen.py +0 -0
  124. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/auto3dseg/analyzer.py +0 -0
  125. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/auto3dseg/operations.py +0 -0
  126. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/auto3dseg/seg_summarizer.py +0 -0
  127. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/bundle/__init__.py +0 -0
  128. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/bundle/__main__.py +0 -0
  129. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/bundle/config_item.py +0 -0
  130. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/bundle/config_parser.py +0 -0
  131. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/bundle/properties.py +0 -0
  132. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/bundle/reference_resolver.py +0 -0
  133. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/bundle/scripts.py +0 -0
  134. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/bundle/utils.py +0 -0
  135. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/config/__init__.py +0 -0
  136. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/config/__main__.py +0 -0
  137. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/config/check_env.py +0 -0
  138. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/config/deviceconfig.py +0 -0
  139. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/config/print_dependencies.py +0 -0
  140. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/config/type_definitions.py +0 -0
  141. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/box_utils.py +0 -0
  142. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/csv_saver.py +0 -0
  143. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/dataloader.py +0 -0
  144. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/dataset.py +0 -0
  145. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/dataset_summary.py +0 -0
  146. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/decathlon_datalist.py +0 -0
  147. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/fft_utils.py +0 -0
  148. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/folder_layout.py +0 -0
  149. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/grid_dataset.py +0 -0
  150. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/image_dataset.py +0 -0
  151. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/image_writer.py +0 -0
  152. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/iterable_dataset.py +0 -0
  153. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/itk_torch_bridge.py +0 -0
  154. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/meta_obj.py +0 -0
  155. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/meta_tensor.py +0 -0
  156. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/samplers.py +0 -0
  157. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/synthetic.py +0 -0
  158. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/test_time_augmentation.py +0 -0
  159. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/thread_buffer.py +0 -0
  160. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/torchscript_utils.py +0 -0
  161. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/ultrasound_confidence_map.py +0 -0
  162. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/utils.py +0 -0
  163. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/video_dataset.py +0 -0
  164. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/wsi_datasets.py +0 -0
  165. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/data/wsi_reader.py +0 -0
  166. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/engines/__init__.py +0 -0
  167. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/engines/evaluator.py +0 -0
  168. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/engines/trainer.py +0 -0
  169. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/engines/utils.py +0 -0
  170. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/engines/workflow.py +0 -0
  171. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/fl/__init__.py +0 -0
  172. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/fl/client/__init__.py +0 -0
  173. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/fl/client/client_algo.py +0 -0
  174. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/fl/client/monai_algo.py +0 -0
  175. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/fl/utils/__init__.py +0 -0
  176. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/fl/utils/constants.py +0 -0
  177. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/fl/utils/exchange_object.py +0 -0
  178. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/fl/utils/filters.py +0 -0
  179. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/__init__.py +0 -0
  180. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/average_precision.py +0 -0
  181. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/calibration.py +0 -0
  182. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/checkpoint_loader.py +0 -0
  183. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/checkpoint_saver.py +0 -0
  184. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/classification_saver.py +0 -0
  185. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/clearml_handlers.py +0 -0
  186. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/confusion_matrix.py +0 -0
  187. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/decollate_batch.py +0 -0
  188. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/earlystop_handler.py +0 -0
  189. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/garbage_collector.py +0 -0
  190. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/hausdorff_distance.py +0 -0
  191. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/ignite_metric.py +0 -0
  192. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/logfile_handler.py +0 -0
  193. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/lr_schedule_handler.py +0 -0
  194. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/mean_dice.py +0 -0
  195. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/mean_iou.py +0 -0
  196. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/metric_logger.py +0 -0
  197. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/metrics_reloaded_handler.py +0 -0
  198. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/metrics_saver.py +0 -0
  199. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/mlflow_handler.py +0 -0
  200. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/nvtx_handlers.py +0 -0
  201. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/panoptic_quality.py +0 -0
  202. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/parameter_scheduler.py +0 -0
  203. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/postprocessing.py +0 -0
  204. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/probability_maps.py +0 -0
  205. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/regression_metrics.py +0 -0
  206. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/roc_auc.py +0 -0
  207. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/smartcache_handler.py +0 -0
  208. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/stats_handler.py +0 -0
  209. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/surface_distance.py +0 -0
  210. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/trt_handler.py +0 -0
  211. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/utils.py +0 -0
  212. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/handlers/validation_handler.py +0 -0
  213. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/inferers/__init__.py +0 -0
  214. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/inferers/inferer.py +0 -0
  215. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/inferers/merger.py +0 -0
  216. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/inferers/splitter.py +0 -0
  217. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/inferers/utils.py +0 -0
  218. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/__init__.py +0 -0
  219. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/adversarial_loss.py +0 -0
  220. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/aucm_loss.py +0 -0
  221. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/barlow_twins.py +0 -0
  222. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/boundary_loss.py +0 -0
  223. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/cldice.py +0 -0
  224. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/contrastive.py +0 -0
  225. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/deform.py +0 -0
  226. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/dice.py +0 -0
  227. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/ds_loss.py +0 -0
  228. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/focal_loss.py +0 -0
  229. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/giou_loss.py +0 -0
  230. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/hausdorff_loss.py +0 -0
  231. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/image_dissimilarity.py +0 -0
  232. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/mcc_loss.py +0 -0
  233. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/multi_scale.py +0 -0
  234. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/nacl_loss.py +0 -0
  235. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/perceptual.py +0 -0
  236. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/spatial_mask.py +0 -0
  237. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/spectral_loss.py +0 -0
  238. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/ssim_loss.py +0 -0
  239. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/sure_loss.py +0 -0
  240. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/tversky.py +0 -0
  241. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/unified_focal_loss.py +0 -0
  242. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/losses/utils.py +0 -0
  243. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/__init__.py +0 -0
  244. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/absolute_volume_difference.py +0 -0
  245. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/active_learning_metrics.py +0 -0
  246. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/average_precision.py +0 -0
  247. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/calibration.py +0 -0
  248. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/confusion_matrix.py +0 -0
  249. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/cumulative_average.py +0 -0
  250. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/embedding_collapse.py +0 -0
  251. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/f_beta_score.py +0 -0
  252. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/fid.py +0 -0
  253. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/froc.py +0 -0
  254. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/generalized_dice.py +0 -0
  255. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/hausdorff_distance.py +0 -0
  256. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/loss_metric.py +0 -0
  257. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/meandice.py +0 -0
  258. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/meaniou.py +0 -0
  259. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/metric.py +0 -0
  260. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/mmd.py +0 -0
  261. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/panoptic_quality.py +0 -0
  262. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/regression.py +0 -0
  263. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/rocauc.py +0 -0
  264. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/surface_dice.py +0 -0
  265. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/surface_distance.py +0 -0
  266. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/utils.py +0 -0
  267. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/metrics/wrapper.py +0 -0
  268. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/__init__.py +0 -0
  269. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/__init__.py +0 -0
  270. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/acti_norm.py +0 -0
  271. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/activation.py +0 -0
  272. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/activation_checkpointing.py +0 -0
  273. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/aspp.py +0 -0
  274. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/attention_utils.py +0 -0
  275. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/backbone_fpn_utils.py +0 -0
  276. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/cablock.py +0 -0
  277. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/convolutions.py +0 -0
  278. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/crf.py +0 -0
  279. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/crossattention.py +0 -0
  280. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/denseblock.py +0 -0
  281. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/dints_block.py +0 -0
  282. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/downsample.py +0 -0
  283. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/dynunet_block.py +0 -0
  284. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/encoder.py +0 -0
  285. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/fcn.py +0 -0
  286. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/feature_pyramid_network.py +0 -0
  287. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/fft_utils_t.py +0 -0
  288. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/hyena.py +0 -0
  289. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/localnet_block.py +0 -0
  290. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/mednext_block.py +0 -0
  291. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/mlp.py +0 -0
  292. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/patchembedding.py +0 -0
  293. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/pos_embed_utils.py +0 -0
  294. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/regunet_block.py +0 -0
  295. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/rel_pos_embedding.py +0 -0
  296. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/segresnet_block.py +0 -0
  297. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/selfattention.py +0 -0
  298. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/spade_norm.py +0 -0
  299. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/spatialattention.py +0 -0
  300. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/squeeze_and_excitation.py +0 -0
  301. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/text_embedding.py +0 -0
  302. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/transformerblock.py +0 -0
  303. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/unetr_block.py +0 -0
  304. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/upsample.py +0 -0
  305. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/blocks/warp.py +0 -0
  306. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/layers/__init__.py +0 -0
  307. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/layers/conjugate_gradient.py +0 -0
  308. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/layers/convutils.py +0 -0
  309. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/layers/drop_path.py +0 -0
  310. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/layers/factories.py +0 -0
  311. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/layers/filtering.py +0 -0
  312. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/layers/gmm.py +0 -0
  313. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/layers/simplelayers.py +0 -0
  314. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/layers/spatial_transforms.py +0 -0
  315. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/layers/utils.py +0 -0
  316. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/layers/vector_quantizer.py +0 -0
  317. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/layers/weight_init.py +0 -0
  318. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/__init__.py +0 -0
  319. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/ahnet.py +0 -0
  320. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/attentionunet.py +0 -0
  321. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/autoencoder.py +0 -0
  322. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/autoencoderkl.py +0 -0
  323. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/basic_unet.py +0 -0
  324. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/basic_unetplusplus.py +0 -0
  325. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/cell_sam_wrapper.py +0 -0
  326. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/classifier.py +0 -0
  327. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/controlnet.py +0 -0
  328. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/daf3d.py +0 -0
  329. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/densenet.py +0 -0
  330. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/diffusion_model_unet.py +0 -0
  331. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/dints.py +0 -0
  332. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/dynunet.py +0 -0
  333. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/efficientnet.py +0 -0
  334. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/flexible_unet.py +0 -0
  335. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/fullyconnectednet.py +0 -0
  336. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/generator.py +0 -0
  337. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/highresnet.py +0 -0
  338. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/hovernet.py +0 -0
  339. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/hyena_nd_unetr.py +0 -0
  340. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/masked_autoencoder_vit.py +0 -0
  341. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/mednext.py +0 -0
  342. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/milmodel.py +0 -0
  343. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/navit.py +0 -0
  344. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/netadapter.py +0 -0
  345. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/patchgan_discriminator.py +0 -0
  346. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/quicknat.py +0 -0
  347. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/regressor.py +0 -0
  348. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/regunet.py +0 -0
  349. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/resnet.py +0 -0
  350. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/restormer.py +0 -0
  351. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/segresnet.py +0 -0
  352. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/segresnet_ds.py +0 -0
  353. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/senet.py +0 -0
  354. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/spade_autoencoderkl.py +0 -0
  355. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/spade_diffusion_model_unet.py +0 -0
  356. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/spade_network.py +0 -0
  357. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/swin_unetr.py +0 -0
  358. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/torchvision_fc.py +0 -0
  359. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/transchex.py +0 -0
  360. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/transformer.py +0 -0
  361. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/unet.py +0 -0
  362. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/unetr.py +0 -0
  363. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/varautoencoder.py +0 -0
  364. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/vista3d.py +0 -0
  365. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/vit.py +0 -0
  366. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/vitautoenc.py +0 -0
  367. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/vnet.py +0 -0
  368. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/voxelmorph.py +0 -0
  369. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/nets/vqvae.py +0 -0
  370. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/schedulers/__init__.py +0 -0
  371. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/schedulers/ddim.py +0 -0
  372. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/schedulers/ddpm.py +0 -0
  373. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/schedulers/pndm.py +0 -0
  374. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/schedulers/rectified_flow.py +0 -0
  375. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/schedulers/scheduler.py +0 -0
  376. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/trt_compiler.py +0 -0
  377. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/networks/utils.py +0 -0
  378. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/optimizers/__init__.py +0 -0
  379. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/optimizers/lr_finder.py +0 -0
  380. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/optimizers/lr_scheduler.py +0 -0
  381. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/optimizers/novograd.py +0 -0
  382. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/optimizers/utils.py +0 -0
  383. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/py.typed +0 -0
  384. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/__init__.py +0 -0
  385. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/adaptors.py +0 -0
  386. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/compose.py +0 -0
  387. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/croppad/__init__.py +0 -0
  388. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/croppad/array.py +0 -0
  389. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/croppad/batch.py +0 -0
  390. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/croppad/dictionary.py +0 -0
  391. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/croppad/functional.py +0 -0
  392. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/intensity/__init__.py +0 -0
  393. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/intensity/array.py +0 -0
  394. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/intensity/dictionary.py +0 -0
  395. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/inverse.py +0 -0
  396. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/inverse_batch_transform.py +0 -0
  397. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/io/__init__.py +0 -0
  398. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/lazy/__init__.py +0 -0
  399. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/lazy/array.py +0 -0
  400. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/lazy/dictionary.py +0 -0
  401. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/lazy/functional.py +0 -0
  402. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/lazy/utils.py +0 -0
  403. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/meta_utility/__init__.py +0 -0
  404. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/meta_utility/dictionary.py +0 -0
  405. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/nvtx.py +0 -0
  406. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/post/__init__.py +0 -0
  407. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/post/array.py +0 -0
  408. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/post/dictionary.py +0 -0
  409. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/regularization/__init__.py +0 -0
  410. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/regularization/array.py +0 -0
  411. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/regularization/dictionary.py +0 -0
  412. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/signal/__init__.py +0 -0
  413. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/signal/array.py +0 -0
  414. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/signal/dictionary.py +0 -0
  415. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/smooth_field/__init__.py +0 -0
  416. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/smooth_field/array.py +0 -0
  417. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/smooth_field/dictionary.py +0 -0
  418. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/spatial/__init__.py +0 -0
  419. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/spatial/array.py +0 -0
  420. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/spatial/dictionary.py +0 -0
  421. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/spatial/functional.py +0 -0
  422. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/traits.py +0 -0
  423. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/transform.py +0 -0
  424. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/utility/__init__.py +0 -0
  425. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/utility/array.py +0 -0
  426. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/utility/dictionary.py +0 -0
  427. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/utils.py +0 -0
  428. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/utils_create_transform_ims.py +0 -0
  429. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/utils_morphological_ops.py +0 -0
  430. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/transforms/utils_pytorch_numpy_unification.py +0 -0
  431. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/utils/__init__.py +0 -0
  432. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/utils/component_store.py +0 -0
  433. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/utils/decorators.py +0 -0
  434. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/utils/deprecate_utils.py +0 -0
  435. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/utils/dist.py +0 -0
  436. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/utils/enums.py +0 -0
  437. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/utils/jupyter_utils.py +0 -0
  438. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/utils/module.py +0 -0
  439. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/utils/nvtx.py +0 -0
  440. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/utils/ordering.py +0 -0
  441. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/utils/profiling.py +0 -0
  442. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/utils/safeeval.py +0 -0
  443. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/utils/state_cacher.py +0 -0
  444. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/utils/tf32.py +0 -0
  445. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/utils/type_conversion.py +0 -0
  446. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/visualize/__init__.py +0 -0
  447. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/visualize/class_activation_maps.py +0 -0
  448. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/visualize/gradient_based.py +0 -0
  449. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/visualize/img2tensorboard.py +0 -0
  450. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/visualize/occlusion_sensitivity.py +0 -0
  451. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/visualize/utils.py +0 -0
  452. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai/visualize/visualizer.py +0 -0
  453. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai_weekly.egg-info/dependency_links.txt +0 -0
  454. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai_weekly.egg-info/not-zip-safe +0 -0
  455. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/monai_weekly.egg-info/top_level.txt +0 -0
  456. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/setup.cfg +0 -0
  457. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/setup.py +0 -0
  458. {monai_weekly-1.7.dev2637 → monai_weekly-1.7.dev2638}/versioneer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: monai-weekly
3
- Version: 1.7.dev2637
3
+ Version: 1.7.dev2638
4
4
  Summary: AI Toolkit for Healthcare Imaging
5
5
  Author-email: MONAI Consortium <monai.contact@gmail.com>
6
6
  License: Apache License 2.0
@@ -122,6 +122,10 @@ Provides-Extra: nni
122
122
  Requires-Dist: nni; (platform_system == "Linux" and "arm" not in platform_machine and "aarch" not in platform_machine) and extra == "nni"
123
123
  Requires-Dist: filelock<3.12.0; extra == "nni"
124
124
  Requires-Dist: typeguard<3; extra == "nni"
125
+ Provides-Extra: nvimgcodec
126
+ Requires-Dist: pydicom; extra == "nvimgcodec"
127
+ Requires-Dist: cupy-cuda13x[ctk]!=14.1.0; platform_system == "Linux" and extra == "nvimgcodec"
128
+ Requires-Dist: nvidia-nvimgcodec-cu13[all]>=0.8.0; platform_system == "Linux" and extra == "nvimgcodec"
125
129
  Provides-Extra: onnx
126
130
  Requires-Dist: onnx>=1.13.0; extra == "onnx"
127
131
  Requires-Dist: onnxruntime; python_version <= "3.10" and extra == "onnx"
@@ -136,4 +136,4 @@ except Exception:
136
136
 
137
137
  if MONAIEnvVars.debug():
138
138
  raise
139
- __commit_id__ = "3103fe7c3bed7952685ff05956fb85f112389a4f"
139
+ __commit_id__ = "f2ec87ae9b536baaeca1d6bcc2b6349369e2af8f"
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2026-09-13T02:14:44+0000",
11
+ "date": "2026-09-20T02:14:58+0000",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "d127996ee583969c8495840104c3c3326c0614ff",
15
- "version": "1.7.dev2637"
14
+ "full-revisionid": "43b604323beaeca5718d23b2ba4c130da08d84b8",
15
+ "version": "1.7.dev2638"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -25,8 +25,8 @@ import monai
25
25
  from monai.apps.nnunet.utils import NNUNETMode as M
26
26
  from monai.apps.nnunet.utils import analyze_data, create_new_data_copy, create_new_dataset_json
27
27
  from monai.bundle import ConfigParser
28
- from monai.utils import ensure_tuple, optional_import
29
- from monai.utils.misc import run_cmd
28
+ from monai.utils import ensure_tuple, optional_import, require_pkg
29
+ from monai.utils.misc import MONAIEnvVars, run_cmd
30
30
 
31
31
  load_pickle, _ = optional_import("batchgenerators.utilities.file_and_folder_operations", name="load_pickle")
32
32
  join, _ = optional_import("batchgenerators.utilities.file_and_folder_operations", name="join")
@@ -40,6 +40,39 @@ __all__ = ["nnUNetV2Runner"]
40
40
  DATASET_ID_FORMAT = r"Dataset[0-9]{3}|[0-9]+" # regex format for a valid nnUnet dataset name
41
41
 
42
42
 
43
+ def _confine_to_dir(candidate: str, allowed_dir: str, description: str) -> str:
44
+ """
45
+ Resolve ``candidate`` and require that it stays inside ``allowed_dir``.
46
+
47
+ ``inference_information.json`` is produced by nnU-Net inside the results directory, but its
48
+ contents are plain JSON: whoever can write that file chooses the paths this runner then loads.
49
+ Confining the path means a tampered ``inference_information.json`` cannot redirect a load to an
50
+ attacker-planted file elsewhere on the filesystem.
51
+
52
+ Args:
53
+ candidate: the path read from the configuration file.
54
+ allowed_dir: the directory the path must resolve inside.
55
+ description: name of the field, used in the error message.
56
+
57
+ Returns:
58
+ The resolved absolute path.
59
+
60
+ Raises:
61
+ ValueError: if the resolved path escapes ``allowed_dir``.
62
+ """
63
+ resolved = os.path.realpath(candidate)
64
+ allowed_root = os.path.realpath(allowed_dir)
65
+ if os.path.commonpath([resolved, allowed_root]) != allowed_root:
66
+ raise ValueError(
67
+ f"Refusing to load {description} from '{candidate}': it resolves to '{resolved}', outside the "
68
+ f"expected directory '{allowed_root}'. This path is read from `inference_information.json`; a "
69
+ "value pointing outside the results directory indicates that file has been tampered with "
70
+ "(see https://github.com/Project-MONAI/MONAI/security/advisories/GHSA-8f32-8649-rv87)."
71
+ )
72
+ return resolved
73
+
74
+
75
+ @require_pkg(pkg_name="nnunetv2")
43
76
  class nnUNetV2Runner: # noqa: N801
44
77
  """
45
78
  ``nnUNetV2Runner`` provides an interface in MONAI to use `nnU-Net` V2 library to analyze, train, and evaluate
@@ -1004,22 +1037,38 @@ class nnUNetV2Runner: # noqa: N801
1004
1037
 
1005
1038
  # apply postprocessing
1006
1039
  if run_postprocessing:
1007
- postprocessing_file = self.best_configuration["best_model_or_ensemble"]["postprocessing_file"]
1040
+ results_root = os.path.join(self.nnunet_results, self.dataset_name)
1041
+ postprocessing_file = _confine_to_dir(
1042
+ self.best_configuration["best_model_or_ensemble"]["postprocessing_file"],
1043
+ results_root,
1044
+ "postprocessing_file",
1045
+ )
1046
+ plans_file = _confine_to_dir(
1047
+ self.best_configuration["best_model_or_ensemble"]["some_plans_file"], results_root, "some_plans_file"
1048
+ )
1008
1049
  warnings.warn(
1009
1050
  f"unpickling postprocessing_file {postprocessing_file}: this path is read from "
1010
1051
  "inference_information.json and is loaded with Python pickle without any allow list, "
1011
- "which gives whoever controls that file arbitrary code execution. Only proceed if the "
1012
- "inference_information.json is from a source you trust "
1052
+ "which gives whoever controls that file arbitrary code execution. The path is confined to "
1053
+ "the dataset's results directory, but anyone able to write inside that directory can still "
1054
+ "supply a malicious pickle. Only proceed if the results directory is from a source you trust "
1013
1055
  "(see https://github.com/Project-MONAI/MONAI/security/advisories/GHSA-8f32-8649-rv87).",
1014
1056
  stacklevel=2,
1015
1057
  )
1058
+ if not MONAIEnvVars.allow_pickle():
1059
+ warnings.warn(
1060
+ "Loading nnU-Net postprocessing via Python pickle will require the environment variable "
1061
+ "MONAI_ALLOW_PICKLE=1 from MONAI 1.7. Set it now to keep this call working after the change.",
1062
+ FutureWarning,
1063
+ stacklevel=2,
1064
+ )
1016
1065
  pp_fns, pp_fn_kwargs = load_pickle(postprocessing_file)
1017
1066
  apply_postprocessing_to_folder(
1018
1067
  folder_for_pp,
1019
1068
  join(target_dir_base, "ensemble_predictions_postprocessed"),
1020
1069
  pp_fns,
1021
1070
  pp_fn_kwargs,
1022
- plans_file_or_dict=self.best_configuration["best_model_or_ensemble"]["some_plans_file"],
1071
+ plans_file_or_dict=plans_file,
1023
1072
  )
1024
1073
 
1025
1074
  def run(
@@ -20,6 +20,7 @@ import sys
20
20
  import warnings
21
21
  from copy import deepcopy
22
22
  from numbers import Number
23
+ from pydoc import locate
23
24
  from typing import Any, cast
24
25
 
25
26
  import numpy as np
@@ -62,6 +63,42 @@ def _require_pickle_allowed() -> None:
62
63
  raise RuntimeError(_PICKLE_DISABLED_MSG)
63
64
 
64
65
 
66
+ def _reject_non_algo_target(target: Any, filename: str) -> None:
67
+ """
68
+ Require that ``target`` names an ``Algo`` subclass before it is instantiated.
69
+
70
+ ``algo_from_json`` resolves ``_target_`` through ``ConfigParser``, which imports the dotted path
71
+ and calls it. ``algo_object.json`` has exactly one legitimate target type -- an ``Algo``
72
+ subclass -- so resolving the name and checking it here rejects payloads such as
73
+ ``subprocess.call`` or ``os.system`` before they are ever invoked.
74
+
75
+ Importing the named module still runs that module's top-level code, so this narrows the sink
76
+ rather than closing it: an untrusted ``algo_object.json`` combined with an attacker-controlled
77
+ template directory remains dangerous.
78
+
79
+ Args:
80
+ target: the ``_target_`` value read from the file.
81
+ filename: the file the value came from, used in the error message.
82
+
83
+ Raises:
84
+ ValueError: if ``target`` is not a string, or does not resolve to a concrete ``Algo`` subclass.
85
+ ModuleNotFoundError: if the module cannot be imported, so callers can try the next
86
+ template path.
87
+ """
88
+ if not isinstance(target, str):
89
+ raise ValueError(f"Invalid `_target_` in {filename}: expected a string, got {type(target).__name__}.")
90
+ resolved = locate(target)
91
+ if resolved is None:
92
+ raise ModuleNotFoundError(f"Cannot resolve `_target_` {target!r} from {filename}.")
93
+ if not (isinstance(resolved, type) and resolved is not Algo and issubclass(resolved, Algo)):
94
+ raise ValueError(
95
+ f"Refusing to instantiate `_target_` {target!r} from {filename}: it resolves to "
96
+ f"{resolved!r}, which is not a subclass of `monai.auto3dseg.Algo`. Only Algo subclasses "
97
+ "may be named in a configuration "
98
+ "(see https://github.com/Project-MONAI/MONAI/security/advisories/GHSA-2wx3-8x3w-r8qv)."
99
+ )
100
+
101
+
65
102
  measure_np, has_measure = optional_import("skimage.measure", "0.14.2", min_version)
66
103
  cp, has_cp = optional_import("cupy")
67
104
 
@@ -493,16 +530,16 @@ def algo_from_json(filename: str, template_path: PathLike | None = None, **kwarg
493
530
  if state_template_path:
494
531
  algo_config["template_path"] = state_template_path
495
532
 
496
- warnings.warn(
497
- f"Loading {filename}: the file's `_target_` value is resolved to an imported callable and "
498
- "invoked, and template directories from the file may be added to `sys.path`; only load "
499
- "algo_object.json files from a source you trust "
500
- "(see https://github.com/Project-MONAI/MONAI/security/advisories/GHSA-2wx3-8x3w-r8qv).",
501
- stacklevel=2,
502
- )
533
+ _reject_non_algo_target(target, filename)
503
534
 
504
535
  parser = ConfigParser(algo_config)
505
536
  algo = parser.get_parsed_content()
537
+ if not isinstance(algo, Algo):
538
+ raise ValueError(
539
+ f"refusing to return the object built from '{target}' in {filename}: it is a "
540
+ f"{type(algo).__name__}, not an Algo instance "
541
+ "(see https://github.com/Project-MONAI/MONAI/security/advisories/GHSA-2wx3-8x3w-r8qv)."
542
+ )
506
543
  used_template_path = path
507
544
  break
508
545
  except ModuleNotFoundError as e:
@@ -11,11 +11,15 @@
11
11
 
12
12
  from __future__ import annotations
13
13
 
14
+ import ast
15
+ import configparser
16
+ import io
14
17
  import json
18
+ import logging
19
+ import logging.handlers # ensures `logging.handlers` is importable for the `class=` allowlist check
15
20
  import os
16
21
  import sys
17
22
  import time
18
- import warnings
19
23
  from abc import ABC, abstractmethod
20
24
  from collections.abc import Sequence
21
25
  from copy import copy
@@ -34,22 +38,205 @@ __all__ = ["BundleWorkflow", "ConfigWorkflow"]
34
38
 
35
39
  logger = get_logger(module_name=__name__)
36
40
 
41
+ # `class=` values accepted in a bundle's logging INI. `fileConfig` eval()s this field, so the
42
+ # allowlist is by module: stdlib logging handlers/formatters cover every legitimate bundle.
43
+ _ALLOWED_LOGGING_CLASS_MODULES = {"logging", "logging.handlers"}
37
44
 
38
- def _warn_logging_file_execution(logging_file: str) -> None:
45
+
46
+ def _reject_executable_logging_config(logging_file: str) -> str:
47
+ """
48
+ Reject a logging INI whose ``class=``/``args=`` fields would execute arbitrary code.
49
+
50
+ `logging.config.fileConfig` resolves each handler/formatter ``class=`` through ``eval()`` in a
51
+ namespace containing the ``logging`` module, and evaluates ``args=``/``kwargs=`` the same way.
52
+ A bundle ships ``configs/logging.conf`` and it is applied before any of the bundle's own config
53
+ is parsed, so an untrusted bundle gets code execution from the logging file alone.
54
+
55
+ Legitimate bundles only ever name stdlib logging classes, so ``class=`` is restricted to the
56
+ ``logging`` / ``logging.handlers`` namespaces and ``args=``/``kwargs=`` must be literals.
57
+
58
+ Args:
59
+ logging_file: path to the INI file that is about to be passed to `fileConfig`.
60
+
61
+ Returns:
62
+ The validated file content, so the caller can apply exactly this text without re-reading
63
+ the path (a second read could see swapped-in content and bypass this check).
64
+
65
+ Raises:
66
+ ValueError: if a field would run code that this allowlist does not cover.
67
+ """
68
+ try:
69
+ with open(logging_file, encoding="utf-8") as f:
70
+ content = f.read()
71
+ except OSError as e:
72
+ raise ValueError(f"cannot read logging config file {logging_file}: {e}") from e
73
+
74
+ parser = configparser.RawConfigParser()
75
+ try:
76
+ parser.read_string(content)
77
+ except configparser.Error as e:
78
+ raise ValueError(f"cannot parse logging config file {logging_file}: {e}") from e
79
+
80
+ for section in parser.sections():
81
+ for field in ("class", "args", "kwargs"):
82
+ if not parser.has_option(section, field):
83
+ continue
84
+ value = parser.get(section, field, raw=True).strip()
85
+ if not value:
86
+ continue
87
+ if field == "class":
88
+ # `fileConfig` eval()s this expression, so a bare string prefix is not a safe boundary:
89
+ # a call or subscript without a period (e.g. `__builtins__.eval`) would slip past it.
90
+ # Parse and allow only a bare name or an attribute chain whose root is allowlisted.
91
+ _reject_non_logging_class(value, logging_file, section)
92
+ else:
93
+ # `args`/`kwargs` are eval()ed in a namespace holding `logging`, `os` and `sys`.
94
+ # Literals alone are too strict -- `args=(sys.stdout,)` is the standard
95
+ # StreamHandler form -- so allow literals plus a fixed set of safe stream names,
96
+ # and reject calls, attribute traversal and comprehensions.
97
+ _reject_non_literal_expression(value, logging_file, section, field)
98
+ return content
99
+
100
+
101
+ _ALLOWED_LOGGING_ARG_NAMES = {"sys.stdout", "sys.stderr"}
102
+
103
+
104
+ def _is_allowed_logging_class(module: str, attribute: str) -> bool:
105
+ """
106
+ Return whether ``module.attribute`` names a logging handler or formatter class.
107
+
108
+ The check resolves the attribute on the already-imported allowlisted module and requires the
109
+ object to be a ``logging.Handler`` or ``logging.Formatter`` subclass. Deriving the answer from
110
+ the module keeps the allowlist in step with the standard library instead of hard-coding a name
111
+ list, and it rejects callables such as ``eval`` that are not logging classes at all.
112
+
113
+ Args:
114
+ module: dotted module name; must be one of ``_ALLOWED_LOGGING_CLASS_MODULES``.
115
+ attribute: attribute looked up on that module.
116
+ """
117
+ if module not in _ALLOWED_LOGGING_CLASS_MODULES:
118
+ return False
119
+ resolved = getattr(sys.modules.get(module), attribute, None)
120
+ return isinstance(resolved, type) and issubclass(resolved, (logging.Handler, logging.Formatter))
121
+
122
+
123
+ def _reject_non_logging_class(value: str, logging_file: str, section: str) -> None:
39
124
  """
40
- Warn that ``logging_file`` is about to be executed by `logging.config.fileConfig`.
125
+ Require ``value`` to be a bare name or an attribute chain rooted in an allowlisted module.
41
126
 
42
- Called immediately before every `fileConfig` invocation in this module, so the warning is only
43
- raised when the file is really executed -- not when it is missing or logging is disabled.
127
+ `fileConfig` passes ``class=`` to ``eval()``, so the whole expression -- not just a string
128
+ prefix -- must be inert. A bare identifier is resolved against the ``logging`` module; a
129
+ dotted path is resolved against the ``eval`` namespace. Calls, subscripts, operators and every
130
+ other expression node are rejected.
131
+
132
+ Args:
133
+ value: the raw ``class=`` value from the INI.
134
+ logging_file: path of the file, used in the error message.
135
+ section: INI section name, used in the error message.
136
+
137
+ Raises:
138
+ ValueError: if the expression is not a name or an attribute chain rooted in an allowlisted module.
139
+ """
140
+
141
+ def _fail(reason: str) -> None:
142
+ raise ValueError(
143
+ f"refusing to apply logging config {logging_file}: section [{section}] sets "
144
+ f"class={value!r}, which {reason} and would execute code through "
145
+ f"`logging.config.fileConfig`'s `eval()`. Only classes from "
146
+ f"{sorted(_ALLOWED_LOGGING_CLASS_MODULES)} are allowed "
147
+ "(see https://github.com/Project-MONAI/MONAI/security/advisories/GHSA-wvpx-5qmp-46g3)."
148
+ )
149
+
150
+ try:
151
+ tree = ast.parse(value, mode="eval")
152
+ except SyntaxError as e:
153
+ _fail(f"is not a parsable expression ({e.msg})")
154
+
155
+ node = tree.body # type: ignore[union-attr]
156
+ # A bare name is resolved against the `logging` module in fileConfig's eval namespace, so it
157
+ # must name a real logging handler/formatter there -- `class=eval` is a bare name too, and
158
+ # would hand an attacker-controlled `args=` literal straight to `eval()`.
159
+ if isinstance(node, ast.Name):
160
+ if not _is_allowed_logging_class("logging", node.id):
161
+ _fail(f"does not name a handler or formatter in {sorted(_ALLOWED_LOGGING_CLASS_MODULES)}")
162
+ return
163
+ # An attribute chain must be rooted in an allowlisted module and end at a handler/formatter.
164
+ # `ast.unparse` renders the chain directly; a root that isn't a bare name (e.g. `a().b`) still
165
+ # can't equal a literal allowlist entry once rendered, so no separate root check is needed.
166
+ if isinstance(node, ast.Attribute):
167
+ dotted = ast.unparse(node)
168
+ module, _, attribute = dotted.rpartition(".")
169
+ if module not in _ALLOWED_LOGGING_CLASS_MODULES:
170
+ _fail(f"references {dotted!r}, which is not in {sorted(_ALLOWED_LOGGING_CLASS_MODULES)}")
171
+ if not _is_allowed_logging_class(module, attribute):
172
+ _fail(f"references {dotted!r}, which is not a handler or formatter class")
173
+ return
174
+ _fail("is not a name or an attribute chain")
175
+
176
+
177
+ def _reject_non_literal_expression(value: str, logging_file: str, section: str, field: str) -> None:
178
+ """
179
+ Require ``value`` to be a literal expression, optionally naming a safe stream.
180
+
181
+ `fileConfig` evaluates ``args=``/``kwargs=`` with ``eval()``. Constants, tuples, lists, dicts
182
+ and sets are inert; the only non-literal forms a real logging INI needs are ``sys.stdout`` and
183
+ ``sys.stderr``. Everything else -- calls, subscripts, arbitrary attribute chains, comprehensions
184
+ -- can execute code and is rejected.
185
+
186
+ Args:
187
+ value: the raw field value from the INI.
188
+ logging_file: path of the file, used in the error message.
189
+ section: INI section name, used in the error message.
190
+ field: field name, used in the error message.
191
+
192
+ Raises:
193
+ ValueError: if the expression is not in the allowed subset.
194
+ """
195
+
196
+ def _fail(reason: str) -> None:
197
+ raise ValueError(
198
+ f"refusing to apply logging config {logging_file}: section [{section}] sets "
199
+ f"{field}={value!r}, which {reason} and would execute code through "
200
+ "`logging.config.fileConfig`'s `eval()` "
201
+ "(see https://github.com/Project-MONAI/MONAI/security/advisories/GHSA-wvpx-5qmp-46g3)."
202
+ )
203
+
204
+ try:
205
+ tree = ast.parse(value, mode="eval")
206
+ except SyntaxError as e:
207
+ _fail(f"is not a parsable expression ({e.msg})")
208
+
209
+ for node in ast.walk(tree.body): # type: ignore[union-attr]
210
+ if isinstance(node, (ast.Constant, ast.Tuple, ast.List, ast.Dict, ast.Set, ast.Load)):
211
+ continue
212
+ if isinstance(node, (ast.Attribute, ast.Name)):
213
+ # `ast.unparse` renders the attribute/name chain (e.g. ``sys.stdout``) without
214
+ # re-walking it by hand; a chain rooted in anything but a bare name (e.g. `a().b`) is
215
+ # still rejected below, since it cannot equal a literal entry in the allowlist.
216
+ name = ast.unparse(node)
217
+ # Sub-nodes of an allowed chain (e.g. the `sys` of `sys.stdout`) are reached by the
218
+ # walk too; accept any prefix of a permitted name.
219
+ if name not in _ALLOWED_LOGGING_ARG_NAMES and not any(
220
+ allowed.startswith(f"{name}.") for allowed in _ALLOWED_LOGGING_ARG_NAMES
221
+ ):
222
+ _fail(f"references {name!r}, which is not in {sorted(_ALLOWED_LOGGING_ARG_NAMES)}")
223
+ continue
224
+ _fail(f"contains a {type(node).__name__} node")
225
+
226
+
227
+ def _apply_logging_file(logging_file: str) -> None:
228
+ """
229
+ Validate ``logging_file`` and apply it, using exactly the content that was validated.
230
+
231
+ The single read performed by the validator is what `fileConfig` applies: re-opening the path
232
+ in between would let a swapped-in file bypass the allowlist and reach `fileConfig`'s `eval()`
233
+ calls.
234
+
235
+ Args:
236
+ logging_file: path to the logging INI file.
44
237
  """
45
- warnings.warn(
46
- f"applying logging config {logging_file}: `logging.config.fileConfig` passes the `class=` and "
47
- "`args=` fields of the INI's handler and formatter sections to Python `eval()`, so this file "
48
- "runs as code. A bundle ships its own `configs/logging.conf` and it is applied by default, "
49
- "before any of the bundle's config is parsed. Only proceed if this file is from a source you "
50
- "trust (see https://github.com/Project-MONAI/MONAI/security/advisories/GHSA-wvpx-5qmp-46g3).",
51
- stacklevel=3,
52
- )
238
+ content = _reject_executable_logging_config(logging_file)
239
+ fileConfig(io.StringIO(content), disable_existing_loggers=False)
53
240
 
54
241
 
55
242
  class BundleWorkflow(ABC):
@@ -74,8 +261,9 @@ class BundleWorkflow(ABC):
74
261
  logging_file: config file for `logging` module in the program. for more details:
75
262
  https://docs.python.org/3/library/logging.config.html#logging.config.fileConfig.
76
263
  Security note: `fileConfig` passes the INI's `class=` and `args=` fields to Python
77
- `eval()`, so this file runs as code and applying it raises a warning -- once per call
78
- site, as Python's default warning filter suppresses repeats
264
+ `eval()`, so this file runs as code. `class=` is restricted to the `logging` and
265
+ `logging.handlers` namespaces and `args=`/`kwargs=` to literals plus `sys.stdout` /
266
+ `sys.stderr`; anything else raises `ValueError`
79
267
  (see https://github.com/Project-MONAI/MONAI/security/advisories/GHSA-wvpx-5qmp-46g3).
80
268
 
81
269
  """
@@ -94,8 +282,7 @@ class BundleWorkflow(ABC):
94
282
  if not os.path.isfile(logging_file):
95
283
  raise FileNotFoundError(f"Cannot find the logging config file: {logging_file}.")
96
284
  logger.info(f"Setting logging properties based on config: {logging_file}.")
97
- _warn_logging_file_execution(logging_file)
98
- fileConfig(logging_file, disable_existing_loggers=False)
285
+ _apply_logging_file(logging_file)
99
286
 
100
287
  if meta_file is not None:
101
288
  if isinstance(meta_file, str) and not os.path.isfile(meta_file):
@@ -297,8 +484,9 @@ class PythonicWorkflow(BundleWorkflow):
297
484
  logging_file: config file for `logging` module in the program. for more details:
298
485
  https://docs.python.org/3/library/logging.config.html#logging.config.fileConfig.
299
486
  Security note: `fileConfig` passes the INI's `class=` and `args=` fields to Python
300
- `eval()`, so this file runs as code and applying it raises a warning -- once per call
301
- site, as Python's default warning filter suppresses repeats
487
+ `eval()`, so this file runs as code. `class=` is restricted to the `logging` and
488
+ `logging.handlers` namespaces and `args=`/`kwargs=` to literals plus `sys.stdout` /
489
+ `sys.stderr`; anything else raises `ValueError`
302
490
  (see https://github.com/Project-MONAI/MONAI/security/advisories/GHSA-wvpx-5qmp-46g3).
303
491
 
304
492
  """
@@ -403,8 +591,9 @@ class ConfigWorkflow(BundleWorkflow):
403
591
  If None, default to "configs/logging.conf", which is commonly used for bundles in MONAI model zoo.
404
592
  If False, the logging logic for the bundle will not be modified.
405
593
  Security note: `fileConfig` passes the INI's `class=` and `args=` fields to Python
406
- `eval()`, so this file runs as code and applying it raises a warning -- once per call
407
- site, as Python's default warning filter suppresses repeats
594
+ `eval()`, so this file runs as code. `class=` is restricted to the `logging` and
595
+ `logging.handlers` namespaces and `args=`/`kwargs=` to literals plus `sys.stdout` /
596
+ `sys.stderr`; anything else raises `ValueError`
408
597
  (see https://github.com/Project-MONAI/MONAI/security/advisories/GHSA-wvpx-5qmp-46g3).
409
598
  init_id: ID name of the expected config expression to initialize before running, default to "initialize".
410
599
  allow a config to have no `initialize` logic and the ID.
@@ -475,8 +664,7 @@ class ConfigWorkflow(BundleWorkflow):
475
664
  else:
476
665
  raise FileNotFoundError(f"Cannot find the logging config file: {logging_file}.")
477
666
  else:
478
- _warn_logging_file_execution(str(logging_file))
479
- fileConfig(str(logging_file), disable_existing_loggers=False)
667
+ _apply_logging_file(str(logging_file))
480
668
  logger.info(f"Setting logging properties based on config: {logging_file}.")
481
669
 
482
670
  self.parser = ConfigParser()
@@ -50,7 +50,16 @@ from .decathlon_datalist import (
50
50
  from .folder_layout import FolderLayout, FolderLayoutBase
51
51
  from .grid_dataset import GridPatchDataset, PatchDataset, PatchIter, PatchIterd
52
52
  from .image_dataset import ImageDataset
53
- from .image_reader import ImageReader, ITKReader, NibabelReader, NrrdReader, NumpyReader, PILReader, PydicomReader
53
+ from .image_reader import (
54
+ ImageReader,
55
+ ITKReader,
56
+ NibabelReader,
57
+ NrrdReader,
58
+ NumpyReader,
59
+ NvImgCodecPydicomReader,
60
+ PILReader,
61
+ PydicomReader,
62
+ )
54
63
  from .image_writer import (
55
64
  SUPPORTED_WRITERS,
56
65
  ImageWriter,