monai-weekly 1.7.dev2636__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.dev2636 → monai_weekly-1.7.dev2638}/MANIFEST.in +1 -0
  2. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/PKG-INFO +5 -1
  3. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/__init__.py +1 -1
  4. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/_version.py +3 -3
  5. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/auto3dseg/auto_runner.py +15 -3
  6. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/networks/retinanet_detector.py +10 -6
  7. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/nnunet/nnunetv2_runner.py +55 -6
  8. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/utils.py +1 -1
  9. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/auto3dseg/utils.py +44 -7
  10. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/bundle/workflows.py +211 -23
  11. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/config/__init__.py +0 -1
  12. monai_weekly-1.7.dev2638/monai/config/__main__.py +15 -0
  13. monai_weekly-1.7.dev2638/monai/config/check_env.py +184 -0
  14. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/config/deviceconfig.py +33 -32
  15. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/__init__.py +10 -1
  16. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/image_reader.py +152 -2
  17. monai_weekly-1.7.dev2638/monai/data/nvimgcodec_pydicom_plugin.py +80 -0
  18. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/tensorboard_handlers.py +11 -1
  19. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/inferers/inferer.py +1 -1
  20. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/dice.py +17 -1
  21. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/focal_loss.py +58 -18
  22. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/tversky.py +17 -1
  23. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/unified_focal_loss.py +78 -23
  24. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/utils.py +13 -0
  25. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/confusion_matrix.py +46 -5
  26. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/embedding_collapse.py +4 -1
  27. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/generalized_dice.py +71 -25
  28. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/hausdorff_distance.py +44 -6
  29. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/meandice.py +34 -3
  30. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/meaniou.py +38 -3
  31. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/surface_dice.py +40 -5
  32. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/surface_distance.py +37 -4
  33. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/utils.py +110 -14
  34. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/fullyconnectednet.py +23 -3
  35. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/quicknat.py +24 -3
  36. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/varautoencoder.py +24 -4
  37. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/utils.py +1 -1
  38. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/inverse.py +12 -3
  39. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/io/array.py +29 -3
  40. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/io/dictionary.py +3 -1
  41. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/post/dictionary.py +110 -7
  42. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/utils/misc.py +11 -1
  43. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai_weekly.egg-info/PKG-INFO +5 -1
  44. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai_weekly.egg-info/SOURCES.txt +3 -0
  45. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai_weekly.egg-info/requires.txt +7 -0
  46. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/pyproject.toml +12 -0
  47. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/LICENSE +0 -0
  48. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/README.md +0 -0
  49. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/_extensions/__init__.py +0 -0
  50. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/_extensions/gmm/gmm.cpp +0 -0
  51. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/_extensions/gmm/gmm.h +0 -0
  52. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/_extensions/gmm/gmm_cpu.cpp +0 -0
  53. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/_extensions/gmm/gmm_cuda.cu +0 -0
  54. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/_extensions/gmm/gmm_cuda_linalg.cuh +0 -0
  55. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/_extensions/loader.py +0 -0
  56. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/__init__.py +0 -0
  57. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/auto3dseg/__init__.py +0 -0
  58. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/auto3dseg/__main__.py +0 -0
  59. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/auto3dseg/bundle_gen.py +0 -0
  60. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/auto3dseg/data_analyzer.py +0 -0
  61. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/auto3dseg/ensemble_builder.py +0 -0
  62. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/auto3dseg/hpo_gen.py +0 -0
  63. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/auto3dseg/transforms.py +0 -0
  64. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/auto3dseg/utils.py +0 -0
  65. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/datasets.py +0 -0
  66. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/deepedit/__init__.py +0 -0
  67. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/deepedit/interaction.py +0 -0
  68. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/deepedit/transforms.py +0 -0
  69. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/deepgrow/__init__.py +0 -0
  70. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/deepgrow/dataset.py +0 -0
  71. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/deepgrow/interaction.py +0 -0
  72. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/deepgrow/transforms.py +0 -0
  73. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/__init__.py +0 -0
  74. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/metrics/__init__.py +0 -0
  75. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/metrics/coco.py +0 -0
  76. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/metrics/matching.py +0 -0
  77. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/networks/__init__.py +0 -0
  78. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/networks/retinanet_network.py +0 -0
  79. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/transforms/__init__.py +0 -0
  80. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/transforms/array.py +0 -0
  81. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/transforms/box_ops.py +0 -0
  82. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/transforms/dictionary.py +0 -0
  83. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/utils/ATSS_matcher.py +0 -0
  84. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/utils/__init__.py +0 -0
  85. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/utils/anchor_utils.py +0 -0
  86. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/utils/box_coder.py +0 -0
  87. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/utils/box_selector.py +0 -0
  88. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/utils/detector_utils.py +0 -0
  89. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/utils/hard_negative_sampler.py +0 -0
  90. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/detection/utils/predict_utils.py +0 -0
  91. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/generation/__init__.py +0 -0
  92. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/generation/maisi/__init__.py +0 -0
  93. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/generation/maisi/networks/__init__.py +0 -0
  94. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/generation/maisi/networks/autoencoderkl_maisi.py +0 -0
  95. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/generation/maisi/networks/controlnet_maisi.py +0 -0
  96. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/generation/maisi/networks/diffusion_model_unet_maisi.py +0 -0
  97. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/mmars/__init__.py +0 -0
  98. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/mmars/mmars.py +0 -0
  99. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/mmars/model_desc.py +0 -0
  100. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/nnunet/__init__.py +0 -0
  101. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/nnunet/__main__.py +0 -0
  102. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/nnunet/nnunet_bundle.py +0 -0
  103. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/nnunet/utils.py +0 -0
  104. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/nuclick/__init__.py +0 -0
  105. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/nuclick/transforms.py +0 -0
  106. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/__init__.py +0 -0
  107. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/engines/__init__.py +0 -0
  108. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/engines/utils.py +0 -0
  109. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/handlers/__init__.py +0 -0
  110. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/handlers/utils.py +0 -0
  111. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/inferers/__init__.py +0 -0
  112. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/inferers/inferer.py +0 -0
  113. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/losses/__init__.py +0 -0
  114. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/losses/hovernet_loss.py +0 -0
  115. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/metrics/__init__.py +0 -0
  116. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/metrics/lesion_froc.py +0 -0
  117. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/transforms/__init__.py +0 -0
  118. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/transforms/post/__init__.py +0 -0
  119. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/transforms/post/array.py +0 -0
  120. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/transforms/post/dictionary.py +0 -0
  121. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/transforms/stain/__init__.py +0 -0
  122. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/transforms/stain/array.py +0 -0
  123. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/transforms/stain/dictionary.py +0 -0
  124. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/pathology/utils.py +0 -0
  125. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/__init__.py +0 -0
  126. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/complex_utils.py +0 -0
  127. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/fastmri_reader.py +0 -0
  128. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/mri_utils.py +0 -0
  129. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/networks/__init__.py +0 -0
  130. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/networks/blocks/__init__.py +0 -0
  131. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/networks/blocks/varnetblock.py +0 -0
  132. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/networks/nets/__init__.py +0 -0
  133. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/networks/nets/coil_sensitivity_model.py +0 -0
  134. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/networks/nets/complex_unet.py +0 -0
  135. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/networks/nets/utils.py +0 -0
  136. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/networks/nets/varnet.py +0 -0
  137. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/transforms/__init__.py +0 -0
  138. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/transforms/array.py +0 -0
  139. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/reconstruction/transforms/dictionary.py +0 -0
  140. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/tcia/__init__.py +0 -0
  141. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/tcia/label_desc.py +0 -0
  142. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/tcia/utils.py +0 -0
  143. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/vista3d/__init__.py +0 -0
  144. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/vista3d/inferer.py +0 -0
  145. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/vista3d/sampler.py +0 -0
  146. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/apps/vista3d/transforms.py +0 -0
  147. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/auto3dseg/__init__.py +0 -0
  148. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/auto3dseg/algo_gen.py +0 -0
  149. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/auto3dseg/analyzer.py +0 -0
  150. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/auto3dseg/operations.py +0 -0
  151. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/auto3dseg/seg_summarizer.py +0 -0
  152. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/bundle/__init__.py +0 -0
  153. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/bundle/__main__.py +0 -0
  154. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/bundle/config_item.py +0 -0
  155. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/bundle/config_parser.py +0 -0
  156. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/bundle/properties.py +0 -0
  157. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/bundle/reference_resolver.py +0 -0
  158. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/bundle/scripts.py +0 -0
  159. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/bundle/utils.py +0 -0
  160. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/config/print_dependencies.py +0 -0
  161. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/config/type_definitions.py +0 -0
  162. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/box_utils.py +0 -0
  163. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/csv_saver.py +0 -0
  164. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/dataloader.py +0 -0
  165. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/dataset.py +0 -0
  166. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/dataset_summary.py +0 -0
  167. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/decathlon_datalist.py +0 -0
  168. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/fft_utils.py +0 -0
  169. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/folder_layout.py +0 -0
  170. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/grid_dataset.py +0 -0
  171. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/image_dataset.py +0 -0
  172. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/image_writer.py +0 -0
  173. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/iterable_dataset.py +0 -0
  174. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/itk_torch_bridge.py +0 -0
  175. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/meta_obj.py +0 -0
  176. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/meta_tensor.py +0 -0
  177. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/samplers.py +0 -0
  178. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/synthetic.py +0 -0
  179. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/test_time_augmentation.py +0 -0
  180. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/thread_buffer.py +0 -0
  181. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/torchscript_utils.py +0 -0
  182. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/ultrasound_confidence_map.py +0 -0
  183. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/utils.py +0 -0
  184. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/video_dataset.py +0 -0
  185. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/wsi_datasets.py +0 -0
  186. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/data/wsi_reader.py +0 -0
  187. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/engines/__init__.py +0 -0
  188. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/engines/evaluator.py +0 -0
  189. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/engines/trainer.py +0 -0
  190. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/engines/utils.py +0 -0
  191. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/engines/workflow.py +0 -0
  192. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/fl/__init__.py +0 -0
  193. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/fl/client/__init__.py +0 -0
  194. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/fl/client/client_algo.py +0 -0
  195. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/fl/client/monai_algo.py +0 -0
  196. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/fl/utils/__init__.py +0 -0
  197. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/fl/utils/constants.py +0 -0
  198. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/fl/utils/exchange_object.py +0 -0
  199. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/fl/utils/filters.py +0 -0
  200. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/__init__.py +0 -0
  201. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/average_precision.py +0 -0
  202. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/calibration.py +0 -0
  203. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/checkpoint_loader.py +0 -0
  204. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/checkpoint_saver.py +0 -0
  205. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/classification_saver.py +0 -0
  206. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/clearml_handlers.py +0 -0
  207. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/confusion_matrix.py +0 -0
  208. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/decollate_batch.py +0 -0
  209. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/earlystop_handler.py +0 -0
  210. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/garbage_collector.py +0 -0
  211. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/hausdorff_distance.py +0 -0
  212. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/ignite_metric.py +0 -0
  213. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/logfile_handler.py +0 -0
  214. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/lr_schedule_handler.py +0 -0
  215. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/mean_dice.py +0 -0
  216. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/mean_iou.py +0 -0
  217. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/metric_logger.py +0 -0
  218. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/metrics_reloaded_handler.py +0 -0
  219. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/metrics_saver.py +0 -0
  220. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/mlflow_handler.py +0 -0
  221. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/nvtx_handlers.py +0 -0
  222. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/panoptic_quality.py +0 -0
  223. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/parameter_scheduler.py +0 -0
  224. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/postprocessing.py +0 -0
  225. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/probability_maps.py +0 -0
  226. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/regression_metrics.py +0 -0
  227. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/roc_auc.py +0 -0
  228. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/smartcache_handler.py +0 -0
  229. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/stats_handler.py +0 -0
  230. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/surface_distance.py +0 -0
  231. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/trt_handler.py +0 -0
  232. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/utils.py +0 -0
  233. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/handlers/validation_handler.py +0 -0
  234. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/inferers/__init__.py +0 -0
  235. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/inferers/merger.py +0 -0
  236. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/inferers/splitter.py +0 -0
  237. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/inferers/utils.py +0 -0
  238. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/__init__.py +0 -0
  239. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/adversarial_loss.py +0 -0
  240. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/aucm_loss.py +0 -0
  241. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/barlow_twins.py +0 -0
  242. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/boundary_loss.py +0 -0
  243. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/cldice.py +0 -0
  244. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/contrastive.py +0 -0
  245. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/deform.py +0 -0
  246. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/ds_loss.py +0 -0
  247. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/giou_loss.py +0 -0
  248. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/hausdorff_loss.py +0 -0
  249. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/image_dissimilarity.py +0 -0
  250. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/mcc_loss.py +0 -0
  251. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/multi_scale.py +0 -0
  252. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/nacl_loss.py +0 -0
  253. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/perceptual.py +0 -0
  254. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/spatial_mask.py +0 -0
  255. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/spectral_loss.py +0 -0
  256. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/ssim_loss.py +0 -0
  257. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/losses/sure_loss.py +0 -0
  258. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/__init__.py +0 -0
  259. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/absolute_volume_difference.py +0 -0
  260. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/active_learning_metrics.py +0 -0
  261. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/average_precision.py +0 -0
  262. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/calibration.py +0 -0
  263. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/cumulative_average.py +0 -0
  264. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/f_beta_score.py +0 -0
  265. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/fid.py +0 -0
  266. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/froc.py +0 -0
  267. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/loss_metric.py +0 -0
  268. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/metric.py +0 -0
  269. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/mmd.py +0 -0
  270. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/panoptic_quality.py +0 -0
  271. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/regression.py +0 -0
  272. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/rocauc.py +0 -0
  273. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/metrics/wrapper.py +0 -0
  274. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/__init__.py +0 -0
  275. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/__init__.py +0 -0
  276. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/acti_norm.py +0 -0
  277. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/activation.py +0 -0
  278. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/activation_checkpointing.py +0 -0
  279. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/aspp.py +0 -0
  280. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/attention_utils.py +0 -0
  281. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/backbone_fpn_utils.py +0 -0
  282. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/cablock.py +0 -0
  283. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/convolutions.py +0 -0
  284. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/crf.py +0 -0
  285. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/crossattention.py +0 -0
  286. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/denseblock.py +0 -0
  287. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/dints_block.py +0 -0
  288. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/downsample.py +0 -0
  289. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/dynunet_block.py +0 -0
  290. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/encoder.py +0 -0
  291. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/fcn.py +0 -0
  292. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/feature_pyramid_network.py +0 -0
  293. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/fft_utils_t.py +0 -0
  294. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/hyena.py +0 -0
  295. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/localnet_block.py +0 -0
  296. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/mednext_block.py +0 -0
  297. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/mlp.py +0 -0
  298. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/patchembedding.py +0 -0
  299. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/pos_embed_utils.py +0 -0
  300. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/regunet_block.py +0 -0
  301. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/rel_pos_embedding.py +0 -0
  302. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/segresnet_block.py +0 -0
  303. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/selfattention.py +0 -0
  304. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/spade_norm.py +0 -0
  305. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/spatialattention.py +0 -0
  306. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/squeeze_and_excitation.py +0 -0
  307. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/text_embedding.py +0 -0
  308. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/transformerblock.py +0 -0
  309. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/unetr_block.py +0 -0
  310. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/upsample.py +0 -0
  311. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/blocks/warp.py +0 -0
  312. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/layers/__init__.py +0 -0
  313. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/layers/conjugate_gradient.py +0 -0
  314. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/layers/convutils.py +0 -0
  315. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/layers/drop_path.py +0 -0
  316. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/layers/factories.py +0 -0
  317. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/layers/filtering.py +0 -0
  318. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/layers/gmm.py +0 -0
  319. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/layers/simplelayers.py +0 -0
  320. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/layers/spatial_transforms.py +0 -0
  321. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/layers/utils.py +0 -0
  322. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/layers/vector_quantizer.py +0 -0
  323. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/layers/weight_init.py +0 -0
  324. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/__init__.py +0 -0
  325. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/ahnet.py +0 -0
  326. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/attentionunet.py +0 -0
  327. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/autoencoder.py +0 -0
  328. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/autoencoderkl.py +0 -0
  329. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/basic_unet.py +0 -0
  330. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/basic_unetplusplus.py +0 -0
  331. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/cell_sam_wrapper.py +0 -0
  332. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/classifier.py +0 -0
  333. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/controlnet.py +0 -0
  334. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/daf3d.py +0 -0
  335. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/densenet.py +0 -0
  336. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/diffusion_model_unet.py +0 -0
  337. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/dints.py +0 -0
  338. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/dynunet.py +0 -0
  339. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/efficientnet.py +0 -0
  340. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/flexible_unet.py +0 -0
  341. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/generator.py +0 -0
  342. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/highresnet.py +0 -0
  343. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/hovernet.py +0 -0
  344. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/hyena_nd_unetr.py +0 -0
  345. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/masked_autoencoder_vit.py +0 -0
  346. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/mednext.py +0 -0
  347. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/milmodel.py +0 -0
  348. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/navit.py +0 -0
  349. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/netadapter.py +0 -0
  350. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/patchgan_discriminator.py +0 -0
  351. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/regressor.py +0 -0
  352. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/regunet.py +0 -0
  353. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/resnet.py +0 -0
  354. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/restormer.py +0 -0
  355. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/segresnet.py +0 -0
  356. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/segresnet_ds.py +0 -0
  357. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/senet.py +0 -0
  358. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/spade_autoencoderkl.py +0 -0
  359. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/spade_diffusion_model_unet.py +0 -0
  360. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/spade_network.py +0 -0
  361. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/swin_unetr.py +0 -0
  362. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/torchvision_fc.py +0 -0
  363. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/transchex.py +0 -0
  364. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/transformer.py +0 -0
  365. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/unet.py +0 -0
  366. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/unetr.py +0 -0
  367. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/vista3d.py +0 -0
  368. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/vit.py +0 -0
  369. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/vitautoenc.py +0 -0
  370. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/vnet.py +0 -0
  371. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/voxelmorph.py +0 -0
  372. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/nets/vqvae.py +0 -0
  373. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/schedulers/__init__.py +0 -0
  374. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/schedulers/ddim.py +0 -0
  375. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/schedulers/ddpm.py +0 -0
  376. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/schedulers/pndm.py +0 -0
  377. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/schedulers/rectified_flow.py +0 -0
  378. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/schedulers/scheduler.py +0 -0
  379. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/networks/trt_compiler.py +0 -0
  380. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/optimizers/__init__.py +0 -0
  381. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/optimizers/lr_finder.py +0 -0
  382. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/optimizers/lr_scheduler.py +0 -0
  383. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/optimizers/novograd.py +0 -0
  384. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/optimizers/utils.py +0 -0
  385. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/py.typed +0 -0
  386. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/__init__.py +0 -0
  387. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/adaptors.py +0 -0
  388. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/compose.py +0 -0
  389. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/croppad/__init__.py +0 -0
  390. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/croppad/array.py +0 -0
  391. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/croppad/batch.py +0 -0
  392. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/croppad/dictionary.py +0 -0
  393. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/croppad/functional.py +0 -0
  394. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/intensity/__init__.py +0 -0
  395. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/intensity/array.py +0 -0
  396. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/intensity/dictionary.py +0 -0
  397. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/inverse_batch_transform.py +0 -0
  398. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/io/__init__.py +0 -0
  399. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/lazy/__init__.py +0 -0
  400. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/lazy/array.py +0 -0
  401. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/lazy/dictionary.py +0 -0
  402. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/lazy/functional.py +0 -0
  403. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/lazy/utils.py +0 -0
  404. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/meta_utility/__init__.py +0 -0
  405. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/meta_utility/dictionary.py +0 -0
  406. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/nvtx.py +0 -0
  407. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/post/__init__.py +0 -0
  408. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/post/array.py +0 -0
  409. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/regularization/__init__.py +0 -0
  410. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/regularization/array.py +0 -0
  411. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/regularization/dictionary.py +0 -0
  412. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/signal/__init__.py +0 -0
  413. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/signal/array.py +0 -0
  414. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/signal/dictionary.py +0 -0
  415. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/smooth_field/__init__.py +0 -0
  416. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/smooth_field/array.py +0 -0
  417. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/smooth_field/dictionary.py +0 -0
  418. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/spatial/__init__.py +0 -0
  419. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/spatial/array.py +0 -0
  420. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/spatial/dictionary.py +0 -0
  421. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/spatial/functional.py +0 -0
  422. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/traits.py +0 -0
  423. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/transform.py +0 -0
  424. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/utility/__init__.py +0 -0
  425. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/utility/array.py +0 -0
  426. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/utility/dictionary.py +0 -0
  427. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/utils.py +0 -0
  428. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/utils_create_transform_ims.py +0 -0
  429. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/utils_morphological_ops.py +0 -0
  430. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/transforms/utils_pytorch_numpy_unification.py +0 -0
  431. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/utils/__init__.py +0 -0
  432. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/utils/component_store.py +0 -0
  433. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/utils/decorators.py +0 -0
  434. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/utils/deprecate_utils.py +0 -0
  435. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/utils/dist.py +0 -0
  436. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/utils/enums.py +0 -0
  437. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/utils/jupyter_utils.py +0 -0
  438. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/utils/module.py +0 -0
  439. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/utils/nvtx.py +0 -0
  440. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/utils/ordering.py +0 -0
  441. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/utils/profiling.py +0 -0
  442. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/utils/safeeval.py +0 -0
  443. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/utils/state_cacher.py +0 -0
  444. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/utils/tf32.py +0 -0
  445. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/utils/type_conversion.py +0 -0
  446. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/visualize/__init__.py +0 -0
  447. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/visualize/class_activation_maps.py +0 -0
  448. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/visualize/gradient_based.py +0 -0
  449. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/visualize/img2tensorboard.py +0 -0
  450. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/visualize/occlusion_sensitivity.py +0 -0
  451. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/visualize/utils.py +0 -0
  452. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai/visualize/visualizer.py +0 -0
  453. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai_weekly.egg-info/dependency_links.txt +0 -0
  454. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai_weekly.egg-info/not-zip-safe +0 -0
  455. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/monai_weekly.egg-info/top_level.txt +0 -0
  456. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/setup.cfg +0 -0
  457. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/setup.py +0 -0
  458. {monai_weekly-1.7.dev2636 → monai_weekly-1.7.dev2638}/versioneer.py +0 -0
@@ -1,5 +1,6 @@
1
1
  include versioneer.py
2
2
  include monai/_version.py
3
+ include monai/config/check_env.py
3
4
 
4
5
  include README.md
5
6
  include LICENSE
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: monai-weekly
3
- Version: 1.7.dev2636
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__ = "d1306f6d1996cffeb9d10984dd1c056b7fe2ed1d"
139
+ __commit_id__ = "f2ec87ae9b536baaeca1d6bcc2b6349369e2af8f"
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2026-09-06T02:14:40+0000",
11
+ "date": "2026-09-20T02:14:58+0000",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "917231cf0496c0a06cc1fe4c78822d570f8a2899",
15
- "version": "1.7.dev2636"
14
+ "full-revisionid": "43b604323beaeca5718d23b2ba4c130da08d84b8",
15
+ "version": "1.7.dev2638"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -202,7 +202,7 @@ class AutoRunner:
202
202
 
203
203
  For the datalist file format, see the description under :py:func:`monai.data.load_decathlon_datalist`.
204
204
  Note that the AutoRunner will use the "validation" key in the datalist file if it exists, otherwise
205
- it will do cross-validation, by default with five folds (this is hardcoded).
205
+ It will do cross-validation with the configured `num_fold` number of folds (default 5).
206
206
  """
207
207
 
208
208
  analyze_params: dict | None
@@ -398,8 +398,15 @@ class AutoRunner:
398
398
  Args:
399
399
  datalist_filename: path to the datalist file.
400
400
 
401
+ Returns:
402
+ Number of existing or generated folds, or 1 when using a validation list.
403
+
404
+ Raises:
405
+ ValueError: If training data is missing, fold IDs are not continuous from zero,
406
+ or the automatic fold count is outside [2, number of training items].
407
+
401
408
  Notes:
402
- If the fold key is not provided, it auto generates 5 folds assignments in the training key list.
409
+ If the fold key is not provided, it generates the configured num_fold assignments (default 5).
403
410
  If validation key list is available, then it assumes a single fold validation.
404
411
  """
405
412
 
@@ -440,7 +447,12 @@ class AutoRunner:
440
447
  num_fold = 1
441
448
 
442
449
  else:
443
- num_fold = 5
450
+ num_fold = int(self.data_src_cfg.get("num_fold", 5))
451
+ if not 2 <= num_fold <= len(datalist["training"]):
452
+ raise ValueError(
453
+ "num_fold must be at least 2 and no greater than the number of training items "
454
+ "when AutoRunner generates folds."
455
+ )
444
456
 
445
457
  warnings.warn(
446
458
  f"Datalist has no folds specified {datalist_filename}..."
@@ -41,7 +41,7 @@ from __future__ import annotations
41
41
 
42
42
  import warnings
43
43
  from collections.abc import Callable, Sequence
44
- from typing import Any
44
+ from typing import TYPE_CHECKING, Any
45
45
 
46
46
  import torch
47
47
  from torch import Tensor, nn
@@ -59,10 +59,13 @@ from monai.inferers import SlidingWindowInferer
59
59
  from monai.networks.nets import resnet
60
60
  from monai.utils import BlendMode, PytorchPadMode, ensure_tuple_rep, optional_import
61
61
 
62
- BalancedPositiveNegativeSampler, _ = optional_import(
63
- "torchvision.models.detection._utils", name="BalancedPositiveNegativeSampler"
64
- )
65
- Matcher, _ = optional_import("torchvision.models.detection._utils", name="Matcher")
62
+ if TYPE_CHECKING:
63
+ from torchvision.models.detection._utils import BalancedPositiveNegativeSampler, Matcher
64
+ else:
65
+ BalancedPositiveNegativeSampler, _ = optional_import(
66
+ "torchvision.models.detection._utils", name="BalancedPositiveNegativeSampler"
67
+ )
68
+ Matcher, _ = optional_import("torchvision.models.detection._utils", name="Matcher")
66
69
 
67
70
 
68
71
  class RetinaNetDetector(nn.Module):
@@ -769,10 +772,11 @@ class RetinaNetDetector(nn.Module):
769
772
  # BELOW_LOW_THRESHOLD = -1, BETWEEN_THRESHOLDS = -2
770
773
  if isinstance(self.proposal_matcher, Matcher):
771
774
  # if torchvision matcher
775
+ matcher: Matcher = self.proposal_matcher
772
776
  match_quality_matrix = self.box_overlap_metric(
773
777
  targets_per_image[self.target_box_key].to(anchors_per_image.device), anchors_per_image
774
778
  )
775
- matched_idxs_per_image = self.proposal_matcher(match_quality_matrix)
779
+ matched_idxs_per_image = matcher(match_quality_matrix)
776
780
  elif isinstance(self.proposal_matcher, ATSSMatcher):
777
781
  # if monai ATSS matcher
778
782
  match_quality_matrix, matched_idxs_per_image = self.proposal_matcher(
@@ -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(
@@ -378,7 +378,7 @@ def get_filename_from_url(data_url: str) -> str:
378
378
  filename = re.findall('filename="?([^";]+)"?', content_disposition)
379
379
  if filename:
380
380
  return str(filename[0])
381
- if "drive.google.com" in data_url:
381
+ if urlparse(data_url).netloc == "drive.google.com":
382
382
  response = requests.get(data_url)
383
383
  if "text/html" in response.headers.get("Content-Type", ""):
384
384
  soup = BeautifulSoup(response.text, "html.parser")
@@ -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()
@@ -14,7 +14,6 @@ from __future__ import annotations
14
14
  from .deviceconfig import (
15
15
  USE_COMPILED,
16
16
  USE_META_DICT,
17
- IgniteInfo,
18
17
  get_config_values,
19
18
  get_gpu_info,
20
19
  get_optional_config_values,
@@ -0,0 +1,15 @@
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
+ if __name__ == "__main__":
13
+ import monai
14
+
15
+ monai.config.print_debug_info() # type: ignore