monai-weekly 1.7.dev2643__tar.gz → 1.7.dev2644__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 (462) hide show
  1. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/PKG-INFO +1 -1
  2. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/__init__.py +1 -1
  3. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/_version.py +3 -3
  4. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/auto3dseg/auto_runner.py +2 -2
  5. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/auto3dseg/bundle_gen.py +60 -2
  6. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/auto3dseg/hpo_gen.py +81 -1
  7. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/nnunet/__init__.py +1 -0
  8. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/nnunet/nnunet_bundle.py +87 -3
  9. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/auto3dseg/utils.py +13 -12
  10. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/meandice.py +16 -2
  11. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/layers/__init__.py +1 -0
  12. monai_weekly-1.7.dev2644/monai/networks/layers/layer_norm_nd.py +58 -0
  13. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/__init__.py +19 -0
  14. monai_weekly-1.7.dev2644/monai/networks/nets/convnext.py +354 -0
  15. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/dynunet.py +24 -3
  16. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/intensity/array.py +9 -8
  17. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/spatial/functional.py +5 -2
  18. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai_weekly.egg-info/PKG-INFO +1 -1
  19. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai_weekly.egg-info/SOURCES.txt +2 -0
  20. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/LICENSE +0 -0
  21. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/MANIFEST.in +0 -0
  22. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/README.md +0 -0
  23. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/_extensions/__init__.py +0 -0
  24. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/_extensions/gmm/gmm.cpp +0 -0
  25. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/_extensions/gmm/gmm.h +0 -0
  26. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/_extensions/gmm/gmm_cpu.cpp +0 -0
  27. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/_extensions/gmm/gmm_cuda.cu +0 -0
  28. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/_extensions/gmm/gmm_cuda_linalg.cuh +0 -0
  29. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/_extensions/loader.py +0 -0
  30. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/__init__.py +0 -0
  31. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/auto3dseg/__init__.py +0 -0
  32. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/auto3dseg/__main__.py +0 -0
  33. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/auto3dseg/data_analyzer.py +0 -0
  34. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/auto3dseg/ensemble_builder.py +0 -0
  35. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/auto3dseg/transforms.py +0 -0
  36. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/auto3dseg/utils.py +0 -0
  37. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/datasets.py +0 -0
  38. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/deepedit/__init__.py +0 -0
  39. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/deepedit/interaction.py +0 -0
  40. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/deepedit/transforms.py +0 -0
  41. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/deepgrow/__init__.py +0 -0
  42. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/deepgrow/dataset.py +0 -0
  43. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/deepgrow/interaction.py +0 -0
  44. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/deepgrow/transforms.py +0 -0
  45. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/__init__.py +0 -0
  46. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/metrics/__init__.py +0 -0
  47. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/metrics/coco.py +0 -0
  48. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/metrics/matching.py +0 -0
  49. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/networks/__init__.py +0 -0
  50. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/networks/retinanet_detector.py +0 -0
  51. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/networks/retinanet_network.py +0 -0
  52. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/transforms/__init__.py +0 -0
  53. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/transforms/array.py +0 -0
  54. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/transforms/box_ops.py +0 -0
  55. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/transforms/dictionary.py +0 -0
  56. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/utils/ATSS_matcher.py +0 -0
  57. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/utils/__init__.py +0 -0
  58. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/utils/anchor_utils.py +0 -0
  59. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/utils/box_coder.py +0 -0
  60. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/utils/box_selector.py +0 -0
  61. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/utils/detector_utils.py +0 -0
  62. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/utils/hard_negative_sampler.py +0 -0
  63. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/detection/utils/predict_utils.py +0 -0
  64. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/generation/__init__.py +0 -0
  65. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/generation/maisi/__init__.py +0 -0
  66. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/generation/maisi/networks/__init__.py +0 -0
  67. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/generation/maisi/networks/autoencoderkl_maisi.py +0 -0
  68. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/generation/maisi/networks/controlnet_maisi.py +0 -0
  69. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/generation/maisi/networks/diffusion_model_unet_maisi.py +0 -0
  70. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/mmars/__init__.py +0 -0
  71. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/mmars/mmars.py +0 -0
  72. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/mmars/model_desc.py +0 -0
  73. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/nnunet/__main__.py +0 -0
  74. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/nnunet/nnunetv2_runner.py +0 -0
  75. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/nnunet/utils.py +0 -0
  76. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/nuclick/__init__.py +0 -0
  77. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/nuclick/transforms.py +0 -0
  78. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/__init__.py +0 -0
  79. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/engines/__init__.py +0 -0
  80. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/engines/utils.py +0 -0
  81. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/handlers/__init__.py +0 -0
  82. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/handlers/utils.py +0 -0
  83. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/inferers/__init__.py +0 -0
  84. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/inferers/inferer.py +0 -0
  85. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/losses/__init__.py +0 -0
  86. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/losses/hovernet_loss.py +0 -0
  87. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/metrics/__init__.py +0 -0
  88. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/metrics/lesion_froc.py +0 -0
  89. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/transforms/__init__.py +0 -0
  90. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/transforms/post/__init__.py +0 -0
  91. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/transforms/post/array.py +0 -0
  92. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/transforms/post/dictionary.py +0 -0
  93. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/transforms/stain/__init__.py +0 -0
  94. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/transforms/stain/array.py +0 -0
  95. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/transforms/stain/dictionary.py +0 -0
  96. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/pathology/utils.py +0 -0
  97. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/reconstruction/__init__.py +0 -0
  98. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/reconstruction/complex_utils.py +0 -0
  99. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/reconstruction/fastmri_reader.py +0 -0
  100. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/reconstruction/mri_utils.py +0 -0
  101. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/reconstruction/networks/__init__.py +0 -0
  102. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/reconstruction/networks/blocks/__init__.py +0 -0
  103. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/reconstruction/networks/blocks/varnetblock.py +0 -0
  104. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/reconstruction/networks/nets/__init__.py +0 -0
  105. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/reconstruction/networks/nets/coil_sensitivity_model.py +0 -0
  106. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/reconstruction/networks/nets/complex_unet.py +0 -0
  107. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/reconstruction/networks/nets/utils.py +0 -0
  108. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/reconstruction/networks/nets/varnet.py +0 -0
  109. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/reconstruction/transforms/__init__.py +0 -0
  110. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/reconstruction/transforms/array.py +0 -0
  111. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/reconstruction/transforms/dictionary.py +0 -0
  112. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/tcia/__init__.py +0 -0
  113. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/tcia/label_desc.py +0 -0
  114. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/tcia/utils.py +0 -0
  115. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/utils.py +0 -0
  116. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/vista3d/__init__.py +0 -0
  117. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/vista3d/inferer.py +0 -0
  118. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/vista3d/sampler.py +0 -0
  119. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/apps/vista3d/transforms.py +0 -0
  120. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/auto3dseg/__init__.py +0 -0
  121. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/auto3dseg/algo_gen.py +0 -0
  122. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/auto3dseg/analyzer.py +0 -0
  123. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/auto3dseg/operations.py +0 -0
  124. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/auto3dseg/seg_summarizer.py +0 -0
  125. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/bundle/__init__.py +0 -0
  126. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/bundle/__main__.py +0 -0
  127. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/bundle/config_item.py +0 -0
  128. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/bundle/config_parser.py +0 -0
  129. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/bundle/properties.py +0 -0
  130. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/bundle/reference_resolver.py +0 -0
  131. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/bundle/scripts.py +0 -0
  132. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/bundle/utils.py +0 -0
  133. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/bundle/workflows.py +0 -0
  134. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/config/__init__.py +0 -0
  135. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/config/__main__.py +0 -0
  136. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/config/check_env.py +0 -0
  137. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/config/deviceconfig.py +0 -0
  138. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/config/print_dependencies.py +0 -0
  139. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/config/type_definitions.py +0 -0
  140. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/__init__.py +0 -0
  141. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/box_utils.py +0 -0
  142. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/csv_saver.py +0 -0
  143. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/dataloader.py +0 -0
  144. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/dataset.py +0 -0
  145. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/dataset_summary.py +0 -0
  146. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/decathlon_datalist.py +0 -0
  147. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/fft_utils.py +0 -0
  148. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/folder_layout.py +0 -0
  149. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/grid_dataset.py +0 -0
  150. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/image_dataset.py +0 -0
  151. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/image_reader.py +0 -0
  152. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/image_writer.py +0 -0
  153. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/iterable_dataset.py +0 -0
  154. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/itk_torch_bridge.py +0 -0
  155. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/meta_obj.py +0 -0
  156. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/meta_tensor.py +0 -0
  157. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/nvimgcodec_pydicom_plugin.py +0 -0
  158. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/samplers.py +0 -0
  159. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/synthetic.py +0 -0
  160. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/test_time_augmentation.py +0 -0
  161. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/thread_buffer.py +0 -0
  162. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/torchscript_utils.py +0 -0
  163. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/ultrasound_confidence_map.py +0 -0
  164. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/utils.py +0 -0
  165. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/video_dataset.py +0 -0
  166. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/wsi_datasets.py +0 -0
  167. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/data/wsi_reader.py +0 -0
  168. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/engines/__init__.py +0 -0
  169. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/engines/evaluator.py +0 -0
  170. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/engines/trainer.py +0 -0
  171. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/engines/utils.py +0 -0
  172. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/engines/workflow.py +0 -0
  173. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/fl/__init__.py +0 -0
  174. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/fl/client/__init__.py +0 -0
  175. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/fl/client/client_algo.py +0 -0
  176. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/fl/client/monai_algo.py +0 -0
  177. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/fl/utils/__init__.py +0 -0
  178. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/fl/utils/constants.py +0 -0
  179. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/fl/utils/exchange_object.py +0 -0
  180. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/fl/utils/filters.py +0 -0
  181. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/__init__.py +0 -0
  182. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/average_precision.py +0 -0
  183. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/calibration.py +0 -0
  184. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/checkpoint_loader.py +0 -0
  185. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/checkpoint_saver.py +0 -0
  186. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/classification_saver.py +0 -0
  187. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/clearml_handlers.py +0 -0
  188. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/confusion_matrix.py +0 -0
  189. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/decollate_batch.py +0 -0
  190. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/earlystop_handler.py +0 -0
  191. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/garbage_collector.py +0 -0
  192. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/hausdorff_distance.py +0 -0
  193. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/ignite_metric.py +0 -0
  194. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/logfile_handler.py +0 -0
  195. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/lr_schedule_handler.py +0 -0
  196. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/mean_dice.py +0 -0
  197. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/mean_iou.py +0 -0
  198. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/metric_logger.py +0 -0
  199. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/metrics_reloaded_handler.py +0 -0
  200. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/metrics_saver.py +0 -0
  201. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/mlflow_handler.py +0 -0
  202. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/nvtx_handlers.py +0 -0
  203. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/panoptic_quality.py +0 -0
  204. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/parameter_scheduler.py +0 -0
  205. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/postprocessing.py +0 -0
  206. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/probability_maps.py +0 -0
  207. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/regression_metrics.py +0 -0
  208. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/roc_auc.py +0 -0
  209. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/smartcache_handler.py +0 -0
  210. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/stats_handler.py +0 -0
  211. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/surface_distance.py +0 -0
  212. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/tensorboard_handlers.py +0 -0
  213. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/trt_handler.py +0 -0
  214. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/utils.py +0 -0
  215. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/handlers/validation_handler.py +0 -0
  216. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/inferers/__init__.py +0 -0
  217. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/inferers/inferer.py +0 -0
  218. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/inferers/merger.py +0 -0
  219. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/inferers/splitter.py +0 -0
  220. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/inferers/utils.py +0 -0
  221. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/__init__.py +0 -0
  222. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/adversarial_loss.py +0 -0
  223. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/aucm_loss.py +0 -0
  224. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/barlow_twins.py +0 -0
  225. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/boundary_loss.py +0 -0
  226. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/calibration.py +0 -0
  227. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/cldice.py +0 -0
  228. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/contrastive.py +0 -0
  229. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/deform.py +0 -0
  230. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/dice.py +0 -0
  231. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/ds_loss.py +0 -0
  232. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/focal_loss.py +0 -0
  233. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/giou_loss.py +0 -0
  234. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/hausdorff_loss.py +0 -0
  235. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/image_dissimilarity.py +0 -0
  236. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/mcc_loss.py +0 -0
  237. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/multi_scale.py +0 -0
  238. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/nacl_loss.py +0 -0
  239. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/perceptual.py +0 -0
  240. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/spatial_mask.py +0 -0
  241. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/spectral_loss.py +0 -0
  242. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/ssim_loss.py +0 -0
  243. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/sure_loss.py +0 -0
  244. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/tversky.py +0 -0
  245. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/unified_focal_loss.py +0 -0
  246. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/losses/utils.py +0 -0
  247. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/__init__.py +0 -0
  248. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/absolute_volume_difference.py +0 -0
  249. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/active_learning_metrics.py +0 -0
  250. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/average_precision.py +0 -0
  251. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/calibration.py +0 -0
  252. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/confusion_matrix.py +0 -0
  253. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/cumulative_average.py +0 -0
  254. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/embedding_collapse.py +0 -0
  255. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/f_beta_score.py +0 -0
  256. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/fid.py +0 -0
  257. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/froc.py +0 -0
  258. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/generalized_dice.py +0 -0
  259. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/hausdorff_distance.py +0 -0
  260. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/loss_metric.py +0 -0
  261. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/meaniou.py +0 -0
  262. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/metric.py +0 -0
  263. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/mmd.py +0 -0
  264. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/panoptic_quality.py +0 -0
  265. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/regression.py +0 -0
  266. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/rocauc.py +0 -0
  267. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/surface_dice.py +0 -0
  268. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/surface_distance.py +0 -0
  269. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/utils.py +0 -0
  270. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/metrics/wrapper.py +0 -0
  271. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/__init__.py +0 -0
  272. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/__init__.py +0 -0
  273. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/acti_norm.py +0 -0
  274. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/activation.py +0 -0
  275. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/activation_checkpointing.py +0 -0
  276. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/aspp.py +0 -0
  277. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/attention_utils.py +0 -0
  278. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/backbone_fpn_utils.py +0 -0
  279. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/cablock.py +0 -0
  280. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/convolutions.py +0 -0
  281. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/crf.py +0 -0
  282. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/crossattention.py +0 -0
  283. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/denseblock.py +0 -0
  284. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/dints_block.py +0 -0
  285. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/downsample.py +0 -0
  286. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/dynunet_block.py +0 -0
  287. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/encoder.py +0 -0
  288. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/fcn.py +0 -0
  289. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/feature_pyramid_network.py +0 -0
  290. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/fft_utils_t.py +0 -0
  291. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/hyena.py +0 -0
  292. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/localnet_block.py +0 -0
  293. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/mednext_block.py +0 -0
  294. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/mlp.py +0 -0
  295. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/patchembedding.py +0 -0
  296. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/pos_embed_utils.py +0 -0
  297. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/regunet_block.py +0 -0
  298. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/rel_pos_embedding.py +0 -0
  299. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/segresnet_block.py +0 -0
  300. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/selfattention.py +0 -0
  301. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/spade_norm.py +0 -0
  302. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/spatialattention.py +0 -0
  303. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/squeeze_and_excitation.py +0 -0
  304. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/text_embedding.py +0 -0
  305. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/transformerblock.py +0 -0
  306. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/unetr_block.py +0 -0
  307. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/upsample.py +0 -0
  308. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/blocks/warp.py +0 -0
  309. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/layers/conjugate_gradient.py +0 -0
  310. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/layers/convutils.py +0 -0
  311. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/layers/drop_path.py +0 -0
  312. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/layers/factories.py +0 -0
  313. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/layers/filtering.py +0 -0
  314. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/layers/gmm.py +0 -0
  315. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/layers/simplelayers.py +0 -0
  316. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/layers/spatial_transforms.py +0 -0
  317. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/layers/utils.py +0 -0
  318. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/layers/vector_quantizer.py +0 -0
  319. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/layers/weight_init.py +0 -0
  320. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/ahnet.py +0 -0
  321. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/attentionunet.py +0 -0
  322. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/autoencoder.py +0 -0
  323. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/autoencoderkl.py +0 -0
  324. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/basic_unet.py +0 -0
  325. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/basic_unetplusplus.py +0 -0
  326. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/cell_sam_wrapper.py +0 -0
  327. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/classifier.py +0 -0
  328. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/controlnet.py +0 -0
  329. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/daf3d.py +0 -0
  330. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/densenet.py +0 -0
  331. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/diffusion_model_unet.py +0 -0
  332. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/dints.py +0 -0
  333. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/efficientnet.py +0 -0
  334. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/flexible_unet.py +0 -0
  335. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/fullyconnectednet.py +0 -0
  336. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/generator.py +0 -0
  337. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/highresnet.py +0 -0
  338. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/hovernet.py +0 -0
  339. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/hyena_nd_unetr.py +0 -0
  340. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/masked_autoencoder_vit.py +0 -0
  341. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/mednext.py +0 -0
  342. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/milmodel.py +0 -0
  343. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/navit.py +0 -0
  344. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/netadapter.py +0 -0
  345. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/patchgan_discriminator.py +0 -0
  346. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/quicknat.py +0 -0
  347. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/regressor.py +0 -0
  348. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/regunet.py +0 -0
  349. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/resnet.py +0 -0
  350. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/restormer.py +0 -0
  351. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/segresnet.py +0 -0
  352. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/segresnet_ds.py +0 -0
  353. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/senet.py +0 -0
  354. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/spade_autoencoderkl.py +0 -0
  355. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/spade_diffusion_model_unet.py +0 -0
  356. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/spade_network.py +0 -0
  357. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/swin_unetr.py +0 -0
  358. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/torchvision_fc.py +0 -0
  359. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/transchex.py +0 -0
  360. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/transformer.py +0 -0
  361. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/unet.py +0 -0
  362. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/unetr.py +0 -0
  363. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/varautoencoder.py +0 -0
  364. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/vista3d.py +0 -0
  365. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/vit.py +0 -0
  366. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/vitautoenc.py +0 -0
  367. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/vnet.py +0 -0
  368. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/voxelmorph.py +0 -0
  369. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/nets/vqvae.py +0 -0
  370. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/schedulers/__init__.py +0 -0
  371. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/schedulers/ddim.py +0 -0
  372. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/schedulers/ddpm.py +0 -0
  373. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/schedulers/pndm.py +0 -0
  374. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/schedulers/rectified_flow.py +0 -0
  375. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/schedulers/scheduler.py +0 -0
  376. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/trt_compiler.py +0 -0
  377. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/networks/utils.py +0 -0
  378. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/optimizers/__init__.py +0 -0
  379. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/optimizers/lr_finder.py +0 -0
  380. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/optimizers/lr_scheduler.py +0 -0
  381. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/optimizers/novograd.py +0 -0
  382. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/optimizers/utils.py +0 -0
  383. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/py.typed +0 -0
  384. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/__init__.py +0 -0
  385. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/adaptors.py +0 -0
  386. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/compose.py +0 -0
  387. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/croppad/__init__.py +0 -0
  388. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/croppad/array.py +0 -0
  389. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/croppad/batch.py +0 -0
  390. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/croppad/dictionary.py +0 -0
  391. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/croppad/functional.py +0 -0
  392. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/intensity/__init__.py +0 -0
  393. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/intensity/dictionary.py +0 -0
  394. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/inverse.py +0 -0
  395. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/inverse_batch_transform.py +0 -0
  396. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/io/__init__.py +0 -0
  397. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/io/array.py +0 -0
  398. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/io/dictionary.py +0 -0
  399. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/lazy/__init__.py +0 -0
  400. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/lazy/array.py +0 -0
  401. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/lazy/dictionary.py +0 -0
  402. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/lazy/functional.py +0 -0
  403. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/lazy/utils.py +0 -0
  404. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/meta_utility/__init__.py +0 -0
  405. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/meta_utility/dictionary.py +0 -0
  406. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/nvtx.py +0 -0
  407. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/post/__init__.py +0 -0
  408. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/post/array.py +0 -0
  409. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/post/dictionary.py +0 -0
  410. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/regularization/__init__.py +0 -0
  411. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/regularization/array.py +0 -0
  412. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/regularization/dictionary.py +0 -0
  413. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/signal/__init__.py +0 -0
  414. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/signal/array.py +0 -0
  415. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/signal/dictionary.py +0 -0
  416. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/smooth_field/__init__.py +0 -0
  417. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/smooth_field/array.py +0 -0
  418. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/smooth_field/dictionary.py +0 -0
  419. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/spatial/__init__.py +0 -0
  420. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/spatial/array.py +0 -0
  421. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/spatial/dictionary.py +0 -0
  422. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/traits.py +0 -0
  423. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/transform.py +0 -0
  424. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/utility/__init__.py +0 -0
  425. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/utility/array.py +0 -0
  426. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/utility/dictionary.py +0 -0
  427. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/utils.py +0 -0
  428. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/utils_create_transform_ims.py +0 -0
  429. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/utils_morphological_ops.py +0 -0
  430. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/transforms/utils_pytorch_numpy_unification.py +0 -0
  431. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/utils/__init__.py +0 -0
  432. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/utils/compare_sources.py +0 -0
  433. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/utils/component_store.py +0 -0
  434. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/utils/decorators.py +0 -0
  435. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/utils/deprecate_utils.py +0 -0
  436. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/utils/dist.py +0 -0
  437. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/utils/enums.py +0 -0
  438. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/utils/jupyter_utils.py +0 -0
  439. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/utils/misc.py +0 -0
  440. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/utils/module.py +0 -0
  441. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/utils/nvtx.py +0 -0
  442. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/utils/ordering.py +0 -0
  443. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/utils/profiling.py +0 -0
  444. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/utils/safeeval.py +0 -0
  445. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/utils/state_cacher.py +0 -0
  446. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/utils/tf32.py +0 -0
  447. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/utils/type_conversion.py +0 -0
  448. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/visualize/__init__.py +0 -0
  449. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/visualize/class_activation_maps.py +0 -0
  450. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/visualize/gradient_based.py +0 -0
  451. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/visualize/img2tensorboard.py +0 -0
  452. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/visualize/occlusion_sensitivity.py +0 -0
  453. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/visualize/utils.py +0 -0
  454. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai/visualize/visualizer.py +0 -0
  455. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai_weekly.egg-info/dependency_links.txt +0 -0
  456. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai_weekly.egg-info/not-zip-safe +0 -0
  457. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai_weekly.egg-info/requires.txt +0 -0
  458. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/monai_weekly.egg-info/top_level.txt +0 -0
  459. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/pyproject.toml +0 -0
  460. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/setup.cfg +0 -0
  461. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/setup.py +0 -0
  462. {monai_weekly-1.7.dev2643 → monai_weekly-1.7.dev2644}/versioneer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: monai-weekly
3
- Version: 1.7.dev2643
3
+ Version: 1.7.dev2644
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
@@ -137,4 +137,4 @@ except Exception:
137
137
 
138
138
  if MONAIEnvVars.debug():
139
139
  raise
140
- __commit_id__ = "4f150a8f26664d1452a8e420d118f4541597f686"
140
+ __commit_id__ = "827fa24fef4f474f70ead141412a2a0675990684"
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2026-10-25T02:15:18+0000",
11
+ "date": "2026-11-01T02:09:43+0000",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "08aa7d448a8733b13dadffc2f153f7bcb56f41cf",
15
- "version": "1.7.dev2643"
14
+ "full-revisionid": "47589b4b36aee36f5956dc5d440c445c3a7b1e2a",
15
+ "version": "1.7.dev2644"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -23,7 +23,7 @@ import torch
23
23
  from monai.apps.auto3dseg.bundle_gen import BundleGen
24
24
  from monai.apps.auto3dseg.data_analyzer import DataAnalyzer
25
25
  from monai.apps.auto3dseg.ensemble_builder import EnsembleRunner
26
- from monai.apps.auto3dseg.hpo_gen import NNIGen
26
+ from monai.apps.auto3dseg.hpo_gen import NNIGen, _nni_trial_command
27
27
  from monai.apps.auto3dseg.utils import export_bundle_algo_history, import_bundle_algo_history
28
28
  from monai.apps.utils import get_logger
29
29
  from monai.auto3dseg.utils import algo_to_json
@@ -797,7 +797,7 @@ class AutoRunner:
797
797
  nni_config[key] = self.hpo_params[key]
798
798
  nni_config.update({"experimentName": name})
799
799
  nni_config.update({"search_space": self.search_space})
800
- trial_cmd = "python -m monai.apps.auto3dseg NNIGen run_algo " + obj_filename + " " + self.work_dir
800
+ trial_cmd = _nni_trial_command(obj_filename, self.work_dir)
801
801
  nni_config.update({"trialCommand": trial_cmd})
802
802
  nni_config_filename = os.path.abspath(os.path.join(self.work_dir, f"{name}_nni_config.yaml"))
803
803
  ConfigParser.export_config_file(nni_config, nni_config_filename, fmt="yaml", default_flow_style=None)
@@ -12,6 +12,7 @@
12
12
  from __future__ import annotations
13
13
 
14
14
  import importlib
15
+ import ntpath
15
16
  import os
16
17
  import re
17
18
  import shutil
@@ -50,6 +51,52 @@ ALGO_HASH = MONAIEnvVars.algo_hash()
50
51
  __all__ = ["BundleAlgo", "BundleGen"]
51
52
 
52
53
 
54
+ def _check_single_path_component(value: Any, what: str) -> None:
55
+ """
56
+ Require ``value`` to be one non-empty directory name with no path separators, drive or NUL character.
57
+
58
+ Args:
59
+ value: the name to check.
60
+ what: a description of the value, used in the error message.
61
+
62
+ Raises:
63
+ ValueError: if ``value`` is not a plain directory name.
64
+ """
65
+ name = str(value)
66
+ separators = {os.sep, "/"} | ({os.altsep} if os.altsep else set())
67
+ if (
68
+ not name
69
+ or name in (".", "..")
70
+ or "\x00" in name
71
+ or any(sep in name for sep in separators)
72
+ or os.path.isabs(name)
73
+ or ntpath.splitdrive(name)[0]
74
+ ):
75
+ raise ValueError(f"Invalid {what} {value!r}: expected a single directory name without path separators.")
76
+
77
+
78
+ def _confined_join(root: str, name: str) -> str:
79
+ """
80
+ Join ``name`` to ``root`` and check that the resolved result stays inside ``root``.
81
+
82
+ Args:
83
+ root: the parent directory.
84
+ name: the child directory name.
85
+
86
+ Returns:
87
+ the joined path.
88
+
89
+ Raises:
90
+ ValueError: if the resolved path is not inside ``root``.
91
+ """
92
+ path = os.path.join(root, name)
93
+ real_root = os.path.realpath(root)
94
+ real_path = os.path.realpath(path)
95
+ if real_path == real_root or os.path.commonpath([real_root, real_path]) != real_root:
96
+ raise ValueError(f"Invalid path: {path!r} is not inside {root!r}.")
97
+ return path
98
+
99
+
53
100
  class BundleAlgo(Algo):
54
101
  """
55
102
  An algorithm represented by a set of bundle configurations and scripts.
@@ -176,18 +223,29 @@ class BundleAlgo(Algo):
176
223
  Args:
177
224
  output_path: Path to export the 'scripts' and 'configs' directories.
178
225
  algo_name: the identifier of the algorithm (usually contains the name and extra info like fold ID).
226
+ It must be a single directory name: path separators, ``.`` and ``..`` are rejected.
179
227
  kwargs: other parameters, including: "copy_dirs=True/False" means whether to copy the template as output
180
228
  instead of inplace operation, "fill_template=True/False" means whether to fill the placeholders
181
229
  in the template. other parameters are for `fill_template_config` function.
182
230
 
231
+
232
+ Raises:
233
+ ValueError: if ``algo_name`` or the Algo ``name`` is not a single directory name, or the destination
234
+ does not resolve inside ``output_path``.
183
235
  """
184
236
  if kwargs.pop("copy_dirs", True):
185
- self.output_path = os.path.join(output_path, algo_name)
237
+ _check_single_path_component(algo_name, "algo_name")
238
+ if self.name: # an empty name copies the whole template_path
239
+ _check_single_path_component(self.name, "the Algo name")
240
+ source = os.path.join(str(self.template_path), self.name)
241
+ if not os.path.isdir(source):
242
+ raise ValueError(f"Algo template folder {source!r} does not exist.")
243
+ self.output_path = _confined_join(output_path, algo_name)
186
244
  os.makedirs(self.output_path, exist_ok=True)
187
245
  if os.path.isdir(self.output_path):
188
246
  shutil.rmtree(self.output_path)
189
247
  # copy algorithm_templates/<Algo> to the working directory output_path
190
- shutil.copytree(os.path.join(str(self.template_path), self.name), self.output_path)
248
+ shutil.copytree(source, self.output_path)
191
249
  else:
192
250
  self.output_path = str(self.template_path)
193
251
  if kwargs.pop("fill_template", True):
@@ -12,6 +12,8 @@
12
12
  from __future__ import annotations
13
13
 
14
14
  import os
15
+ import shlex
16
+ import sys
15
17
  from abc import abstractmethod
16
18
  from copy import deepcopy
17
19
  from typing import Any, cast
@@ -32,6 +34,84 @@ logger = get_logger(module_name=__name__)
32
34
  __all__ = ["HPOGen", "NNIGen", "OptunaGen"]
33
35
 
34
36
 
37
+ # cmd.exe expands or ends a quoted argument at these characters even inside double quotes
38
+ _CMD_UNSAFE_CHARS = frozenset('"%!\r\n\x00')
39
+
40
+
41
+ def _quote_trial_arg(arg: Any, windows: bool | None = None) -> str:
42
+ """
43
+ Quote one argument of an NNI ``trialCommand`` as a literal for the shell NNI uses.
44
+
45
+ NNI's local training service runs ``trialCommand`` with bash on Linux and macOS and with ``cmd.exe`` on
46
+ Windows. For ``cmd.exe`` the argument is wrapped in double quotes, which make ``&``, ``|``, ``<``, ``>``,
47
+ ``^`` and parentheses literal, and backslashes before the closing quote are doubled so the program receives
48
+ the argument unchanged. Characters that ``cmd.exe`` interprets even inside double quotes are rejected.
49
+
50
+ Args:
51
+ arg: the argument value.
52
+ windows: quote for ``cmd.exe`` instead of a POSIX shell. Defaults to ``sys.platform == "win32"``.
53
+
54
+ Returns:
55
+ the quoted argument.
56
+
57
+ Raises:
58
+ ValueError: on Windows, if the argument contains ``"``, ``%``, ``!`` or a line break or NUL character.
59
+ """
60
+ text = str(arg)
61
+ if sys.platform == "win32" if windows is None else windows:
62
+ unsafe = sorted(_CMD_UNSAFE_CHARS.intersection(text))
63
+ if unsafe:
64
+ raise ValueError(f"Cannot pass {text!r} to an NNI trial on Windows: it contains {unsafe}.")
65
+ trailing = len(text) - len(text.rstrip("\\"))
66
+ return '"' + text + "\\" * trailing + '"'
67
+ return shlex.quote(text)
68
+
69
+
70
+ def _nni_trial_command(obj_filename: Any, work_dir: Any, windows: bool | None = None) -> str:
71
+ """
72
+ Build the NNI ``trialCommand`` that runs one algo trial.
73
+
74
+ The fixed part of the command is plain text; the two paths are quoted with ``_quote_trial_arg`` so they
75
+ are passed to ``NNIGen run_algo`` unchanged. On a POSIX shell any path is accepted; ``cmd.exe`` cannot
76
+ carry a few characters even inside double quotes, see ``_quote_trial_arg``.
77
+
78
+ Args:
79
+ obj_filename: the serialized algo object file.
80
+ work_dir: the Auto3DSeg working directory.
81
+ windows: quote for ``cmd.exe`` instead of a POSIX shell. Defaults to ``sys.platform == "win32"``.
82
+
83
+ Returns:
84
+ the command string to store as ``trialCommand``.
85
+
86
+ Raises:
87
+ ValueError: on Windows, if ``obj_filename`` or ``work_dir`` contains ``"``, ``%``, ``!``, a line
88
+ break or a NUL character.
89
+ """
90
+ paths = " ".join(_quote_trial_arg(p, windows) for p in (obj_filename, work_dir))
91
+ return f"python -m monai.apps.auto3dseg NNIGen run_algo {paths}"
92
+
93
+
94
+ def _quote_or_raw(arg: Any, windows: bool | None = None) -> str:
95
+ """
96
+ Quote one argument of the printed trialCommand instruction, falling back to the unquoted text.
97
+
98
+ ``print_bundle_algo_instruction`` only reports how to write the command, so a path its shell cannot
99
+ quote must not stop the instructions from printing: warn and print the path as it is.
100
+
101
+ Args:
102
+ arg: the argument value.
103
+ windows: quote for ``cmd.exe`` instead of a POSIX shell. Defaults to ``sys.platform == "win32"``.
104
+
105
+ Returns:
106
+ the quoted argument, or ``str(arg)`` if the shell cannot quote it.
107
+ """
108
+ try:
109
+ return _quote_trial_arg(arg, windows)
110
+ except ValueError as error:
111
+ logger.warning(f"Leaving {str(arg)!r} unquoted in the printed trialCommand: {error}")
112
+ return str(arg)
113
+
114
+
35
115
  class HPOGen(AlgoGen):
36
116
  """
37
117
  The base class for hyperparameter optimization (HPO) interfaces to generate algos in the Auto3Dseg pipeline.
@@ -143,7 +223,7 @@ class NNIGen(HPOGen):
143
223
  logger.info("=" * 140)
144
224
  logger.info("If NNI will run in your local env: ")
145
225
  logger.info("1. Add the following line to the trialCommand in your NNI config: ")
146
- logger.info(f"{hint} {self.obj_filename} {{result_dir}}")
226
+ logger.info(f"{hint} {_quote_or_raw(self.obj_filename)} {{result_dir}}")
147
227
  logger.info("-" * 140)
148
228
  logger.info("If NNI will run in a remote env: ")
149
229
  logger.info(
@@ -12,6 +12,7 @@
12
12
  from __future__ import annotations
13
13
 
14
14
  from .nnunet_bundle import (
15
+ DEFAULT_NNUNET_NETWORK_MODULES,
15
16
  ModelnnUNetWrapper,
16
17
  convert_monai_bundle_to_nnunet,
17
18
  convert_nnunet_to_monai_bundle,
@@ -12,7 +12,9 @@ from __future__ import annotations
12
12
 
13
13
  import os
14
14
  import shutil
15
+ from collections.abc import Sequence
15
16
  from pathlib import Path
17
+ from pydoc import locate
16
18
  from typing import Any
17
19
 
18
20
  import numpy as np
@@ -32,8 +34,60 @@ __all__ = [
32
34
  "convert_nnunet_to_monai_bundle",
33
35
  "convert_monai_bundle_to_nnunet",
34
36
  "ModelnnUNetWrapper",
37
+ "DEFAULT_NNUNET_NETWORK_MODULES",
35
38
  ]
36
39
 
40
+ #: Modules that nnUNet plans may reference for the network class and its imported keyword arguments.
41
+ DEFAULT_NNUNET_NETWORK_MODULES: tuple[str, ...] = ("dynamic_network_architectures", "torch.nn")
42
+
43
+
44
+ def _in_allowed_modules(dotted_name: str, allowed_modules: Sequence[str]) -> bool:
45
+ return any(dotted_name == m or dotted_name.startswith(m + ".") for m in allowed_modules)
46
+
47
+
48
+ def _check_nnunet_network_spec(
49
+ class_name: Any, init_kwargs: Any, kwargs_requiring_import: Any, allowed_modules: Sequence[str] | None = None
50
+ ) -> None:
51
+ """
52
+ Check the network specification read from an nnUNet ``plans.json`` before nnUNet resolves and builds it.
53
+
54
+ nnUNet imports ``network_class_name`` and every keyword argument listed in ``_kw_requires_import`` by dotted
55
+ name and calls them, so each of these names must be under one of ``allowed_modules`` and, if it can be
56
+ imported, must refer to a ``torch.nn.Module`` subclass. The module prefix is checked before anything is
57
+ imported.
58
+
59
+ Args:
60
+ class_name: the ``network_class_name`` from the plans.
61
+ init_kwargs: the ``arch_kwargs`` from the plans.
62
+ kwargs_requiring_import: the ``_kw_requires_import`` names from the plans.
63
+ allowed_modules: dotted module prefixes that may be referenced. Defaults to
64
+ ``DEFAULT_NNUNET_NETWORK_MODULES``. Add the module of a custom architecture here to load it.
65
+
66
+ Raises:
67
+ ValueError: if a name is outside ``allowed_modules`` or does not resolve to a ``torch.nn.Module`` subclass.
68
+ """
69
+ allowed = tuple(DEFAULT_NNUNET_NETWORK_MODULES if allowed_modules is None else allowed_modules)
70
+ hint = "Pass the module in `allowed_network_modules` if this architecture is trusted."
71
+
72
+ def _check(name: Any, what: str) -> None:
73
+ if not isinstance(name, str) or not _in_allowed_modules(name, allowed):
74
+ raise ValueError(f"Refusing to load {what} {name!r} from nnUNet plans: not in {list(allowed)}. {hint}")
75
+ resolved = locate(name)
76
+ # an unresolved name is left to nnUNet, which only searches inside dynamic_network_architectures for it
77
+ if resolved is not None and not (isinstance(resolved, type) and issubclass(resolved, torch.nn.Module)):
78
+ raise ValueError(f"Refusing to load {what} {name!r} from nnUNet plans: not a torch.nn.Module subclass.")
79
+
80
+ _check(class_name, "network class")
81
+ init_kwargs = init_kwargs or {}
82
+ if not isinstance(init_kwargs, dict):
83
+ raise ValueError(
84
+ f"Invalid network arguments in nnUNet plans: expected a dict, got {type(init_kwargs).__name__}."
85
+ )
86
+ for key in kwargs_requiring_import or ():
87
+ value = init_kwargs.get(key)
88
+ if value is not None:
89
+ _check(value, f"network argument {key!r}")
90
+
37
91
 
38
92
  def get_nnunet_trainer(
39
93
  dataset_name_or_id: str | int,
@@ -152,6 +206,9 @@ class ModelnnUNetWrapper(torch.nn.Module):
152
206
  The folder path where the model and related files are stored.
153
207
  model_name : str, optional
154
208
  The name of the model file, by default "model.pt".
209
+ allowed_network_modules : Sequence[str], optional
210
+ Module prefixes that the plans may reference for the network class and imported network arguments,
211
+ by default ``DEFAULT_NNUNET_NETWORK_MODULES``.
155
212
 
156
213
  Attributes
157
214
  ----------
@@ -166,7 +223,13 @@ class ModelnnUNetWrapper(torch.nn.Module):
166
223
  restoring network architecture, and setting up the predictor for inference.
167
224
  """
168
225
 
169
- def __init__(self, predictor: object, model_folder: str | Path, model_name: str = "model.pt"): # type: ignore
226
+ def __init__(
227
+ self,
228
+ predictor: object,
229
+ model_folder: str | Path,
230
+ model_name: str = "model.pt",
231
+ allowed_network_modules: Sequence[str] | None = None,
232
+ ): # type: ignore
170
233
  super().__init__()
171
234
  self.predictor = predictor
172
235
 
@@ -216,6 +279,12 @@ class ModelnnUNetWrapper(torch.nn.Module):
216
279
  f"Unable to locate trainer class {trainer_name} in nnunetv2.training.nnUNetTrainer. "
217
280
  f"Please place it there (in any .py file)!"
218
281
  )
282
+ _check_nnunet_network_spec(
283
+ configuration_manager.network_arch_class_name,
284
+ configuration_manager.network_arch_init_kwargs,
285
+ configuration_manager.network_arch_init_kwargs_req_import,
286
+ allowed_network_modules,
287
+ )
219
288
  network = trainer_class.build_network_architecture(
220
289
  configuration_manager.network_arch_class_name,
221
290
  configuration_manager.network_arch_init_kwargs,
@@ -294,7 +363,9 @@ class ModelnnUNetWrapper(torch.nn.Module):
294
363
  return MetaTensor(out_tensor, meta=x.meta)
295
364
 
296
365
 
297
- def get_nnunet_monai_predictor(model_folder: str | Path, model_name: str = "model.pt") -> ModelnnUNetWrapper:
366
+ def get_nnunet_monai_predictor(
367
+ model_folder: str | Path, model_name: str = "model.pt", allowed_network_modules: Sequence[str] | None = None
368
+ ) -> ModelnnUNetWrapper:
298
369
  """
299
370
  Initializes and returns a `nnUNetMONAIModelWrapper` containing the corresponding `nnUNetPredictor`.
300
371
  The model folder should contain the following files, created during training:
@@ -325,6 +396,9 @@ def get_nnunet_monai_predictor(model_folder: str | Path, model_name: str = "mode
325
396
  The folder where the model is stored.
326
397
  model_name : str, optional
327
398
  The name of the model file, by default "model.pt".
399
+ allowed_network_modules : Sequence[str], optional
400
+ Module prefixes that ``plans.json`` may reference for the network class and imported network arguments,
401
+ by default ``DEFAULT_NNUNET_NETWORK_MODULES``. Extend it to load a trusted custom architecture.
328
402
 
329
403
  Returns
330
404
  -------
@@ -344,7 +418,7 @@ def get_nnunet_monai_predictor(model_folder: str | Path, model_name: str = "mode
344
418
  allow_tqdm=True,
345
419
  )
346
420
  # initializes the network architecture, loads the checkpoint
347
- wrapper = ModelnnUNetWrapper(predictor, model_folder, model_name)
421
+ wrapper = ModelnnUNetWrapper(predictor, model_folder, model_name, allowed_network_modules)
348
422
  return wrapper
349
423
 
350
424
 
@@ -428,6 +502,7 @@ def get_network_from_nnunet_plans(
428
502
  configuration: str,
429
503
  model_ckpt: str | None = None,
430
504
  model_key_in_ckpt: str = "model",
505
+ allowed_network_modules: Sequence[str] | None = None,
431
506
  ) -> torch.nn.Module | Any:
432
507
  """
433
508
  Load and initialize a nnUNet network based on nnUNet plans and configuration.
@@ -444,6 +519,9 @@ def get_network_from_nnunet_plans(
444
519
  Path to the model checkpoint file. If None, the network is returned without loading weights (default is None).
445
520
  model_key_in_ckpt : str, optional
446
521
  The key in the checkpoint file that contains the model state dictionary (default is "model").
522
+ allowed_network_modules : Sequence[str], optional
523
+ Module prefixes that ``plans_file`` may reference for the network class and imported network arguments,
524
+ by default ``DEFAULT_NNUNET_NETWORK_MODULES``. Extend it to load a trusted custom architecture.
447
525
 
448
526
  Returns
449
527
  -------
@@ -465,6 +543,12 @@ def get_network_from_nnunet_plans(
465
543
 
466
544
  enable_deep_supervision = True
467
545
 
546
+ _check_nnunet_network_spec(
547
+ configuration_manager.network_arch_class_name,
548
+ configuration_manager.network_arch_init_kwargs,
549
+ configuration_manager.network_arch_init_kwargs_req_import,
550
+ allowed_network_modules,
551
+ )
468
552
  network = get_network_from_plans(
469
553
  configuration_manager.network_arch_class_name,
470
554
  configuration_manager.network_arch_init_kwargs,
@@ -63,13 +63,13 @@ def _require_pickle_allowed() -> None:
63
63
  raise RuntimeError(_PICKLE_DISABLED_MSG)
64
64
 
65
65
 
66
- def _reject_non_algo_target(target: Any, filename: str) -> None:
66
+ def _reject_non_algo_target(target: Any, filename: str) -> type[Algo]:
67
67
  """
68
68
  Require that ``target`` names an ``Algo`` subclass before it is instantiated.
69
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
70
+ ``algo_from_json`` resolves ``_target_`` by importing the dotted path and then calls it.
71
+ ``algo_object.json`` has exactly one legitimate target type -- an ``Algo`` subclass -- so
72
+ resolving the name and checking it here rejects payloads such as
73
73
  ``subprocess.call`` or ``os.system`` before they are ever invoked.
74
74
 
75
75
  Importing the named module still runs that module's top-level code, so this narrows the sink
@@ -80,6 +80,9 @@ def _reject_non_algo_target(target: Any, filename: str) -> None:
80
80
  target: the ``_target_`` value read from the file.
81
81
  filename: the file the value came from, used in the error message.
82
82
 
83
+ Returns:
84
+ the resolved ``Algo`` subclass.
85
+
83
86
  Raises:
84
87
  ValueError: if ``target`` is not a string, or does not resolve to a concrete ``Algo`` subclass.
85
88
  ModuleNotFoundError: if the module cannot be imported, so callers can try the next
@@ -97,6 +100,7 @@ def _reject_non_algo_target(target: Any, filename: str) -> None:
97
100
  "may be named in a configuration "
98
101
  "(see https://github.com/Project-MONAI/MONAI/security/advisories/GHSA-2wx3-8x3w-r8qv)."
99
102
  )
103
+ return resolved
100
104
 
101
105
 
102
106
  measure_np, has_measure = optional_import("skimage.measure", "0.14.2", min_version)
@@ -525,15 +529,12 @@ def algo_from_json(filename: str, template_path: PathLike | None = None, **kwarg
525
529
  sys.path.insert(0, path)
526
530
  path_added = True
527
531
 
528
- algo_config: dict[str, Any] = {"_target_": target}
529
- state_template_path = state.get("template_path")
530
- if state_template_path:
531
- algo_config["template_path"] = state_template_path
532
+ algo_cls: Any = _reject_non_algo_target(target, filename) # subclasses may accept template_path
532
533
 
533
- _reject_non_algo_target(target, filename)
534
-
535
- parser = ConfigParser(algo_config)
536
- algo = parser.get_parsed_content()
534
+ # Values read from the file are plain data: pass them to the constructor as literals
535
+ # rather than through ConfigParser, which would evaluate "$"/"@"/"%" prefixed strings.
536
+ state_template_path = state.get("template_path")
537
+ algo = algo_cls(template_path=state_template_path) if state_template_path else algo_cls()
537
538
  if not isinstance(algo, Algo):
538
539
  raise ValueError(
539
540
  f"refusing to return the object built from '{target}' in {filename}: it is a "
@@ -331,16 +331,23 @@ class DiceHelper:
331
331
  self.per_component = per_component
332
332
  self.ignore_index = ignore_index
333
333
 
334
- def compute_cc_dice(self, y_pred: torch.Tensor, y: torch.Tensor) -> torch.Tensor:
334
+ def compute_cc_dice(self, y_pred: torch.Tensor, y: torch.Tensor, mask: torch.Tensor | None = None) -> torch.Tensor:
335
335
  """
336
336
  Compute per-component Dice for a single batch item.
337
337
 
338
338
  Args:
339
339
  y_pred (torch.Tensor): Predictions with shape (1, 2, D, H, W) or (1, 2, H, W).
340
340
  y (torch.Tensor): Ground truth with shape (1, 2, D, H, W) or (1, 2, H, W).
341
+ mask (torch.Tensor, optional): spatial mask (1, D, H, W) or (1, H, W) from
342
+ ``create_ignore_mask``, 1=valid, 0=ignore. Ignored voxels are forced to
343
+ agree as background in both `y` and `y_pred`, so they never contribute to
344
+ a component's TP/FP/FN, matching how `ignore_index` is handled elsewhere.
341
345
 
342
346
  Returns:
343
347
  torch.Tensor: Mean Dice over connected components.
348
+ Raises:
349
+ OptionalImportError: If the ground truth contains foreground voxels
350
+ after masking, is on the CPU, and SciPy is unavailable.
344
351
  """
345
352
  if y_pred.ndim == y.ndim:
346
353
  y_pred_idx = torch.argmax(y_pred, dim=1)
@@ -348,6 +355,10 @@ class DiceHelper:
348
355
  else:
349
356
  y_pred_idx = y_pred
350
357
  y_idx = y
358
+ if mask is not None:
359
+ ignore = mask == 0
360
+ y_idx = y_idx.masked_fill(ignore, 0)
361
+ y_pred_idx = y_pred_idx.masked_fill(ignore, 0)
351
362
  if y_idx[0].sum() == 0:
352
363
  if self.ignore_empty:
353
364
  data = torch.tensor(float("nan"), device=y_idx.device)
@@ -445,7 +456,10 @@ class DiceHelper:
445
456
  data = []
446
457
  for b in range(y_pred.shape[0]):
447
458
  if self.per_component:
448
- data.append(self.compute_cc_dice(y_pred=y_pred[b].unsqueeze(0), y=y[b].unsqueeze(0)).reshape(-1))
459
+ b_mask = mask[b, 0] if mask is not None else None
460
+ data.append(
461
+ self.compute_cc_dice(y_pred=y_pred[b].unsqueeze(0), y=y[b].unsqueeze(0), mask=b_mask).reshape(-1)
462
+ )
449
463
  continue
450
464
  c_list = []
451
465
  for c in range(first_ch, n_pred_ch) if n_pred_ch > 1 else [1]:
@@ -17,6 +17,7 @@ from .drop_path import DropPath
17
17
  from .factories import Act, Conv, Dropout, LayerFactory, Norm, Pad, Pool, RelPosEmbedding, split_args
18
18
  from .filtering import BilateralFilter, PHLFilter, TrainableBilateralFilter, TrainableJointBilateralFilter
19
19
  from .gmm import GaussianMixtureModel
20
+ from .layer_norm_nd import LayerNormNd
20
21
  from .simplelayers import (
21
22
  LLTM,
22
23
  ApplyFilter,
@@ -0,0 +1,58 @@
1
+ # Copyright (c) MONAI Consortium
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software
7
+ # distributed under the License is distributed on an "AS IS" BASIS,
8
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ # See the License for the specific language governing permissions and
10
+ # limitations under the License.
11
+
12
+ from __future__ import annotations
13
+
14
+ import torch
15
+ import torch.nn as nn
16
+
17
+
18
+ class LayerNormNd(nn.Module):
19
+ """
20
+ Layer normalization over the channel dimension of a channels-first tensor.
21
+
22
+ `torch.nn.LayerNorm` normalizes over the trailing dimensions, so it expects a channels-last layout
23
+ such as ``(batch, *spatial, channel)``. Convolutional feature maps in MONAI are channels-first,
24
+ ``(batch, channel, *spatial)``, and this module normalizes those over the channel dimension only,
25
+ for any number of spatial dimensions.
26
+
27
+ Args:
28
+ num_channels: number of channels of the input, i.e. the size of dimension 1.
29
+ spatial_dims: number of spatial dimensions of the input image.
30
+ eps: value added to the denominator for numerical stability.
31
+
32
+ Raises:
33
+ ValueError: if ``num_channels`` is not positive, or ``spatial_dims`` is negative.
34
+ """
35
+
36
+ def __init__(self, num_channels: int, spatial_dims: int, eps: float = 1e-6) -> None:
37
+ super().__init__()
38
+ if num_channels <= 0:
39
+ raise ValueError(f"num_channels must be positive, got {num_channels}.")
40
+ if spatial_dims < 0:
41
+ raise ValueError(f"spatial_dims must be non-negative, got {spatial_dims}.")
42
+ self.eps = eps
43
+ self.weight = nn.Parameter(torch.ones(num_channels))
44
+ self.bias = nn.Parameter(torch.zeros(num_channels))
45
+ # broadcast the affine parameters against (batch, channel, *spatial); precomputed so that the
46
+ # module is scriptable without inspecting the rank of the input at runtime.
47
+ self.param_shape = [1, num_channels] + [1] * spatial_dims
48
+
49
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
50
+ mean = x.mean(dim=1, keepdim=True)
51
+ xmean = x - mean
52
+ var = xmean.pow(2).mean(dim=1, keepdim=True)
53
+ # `var` and the sqrt result are intermediates used nowhere else, so mutating them in place is
54
+ # safe; `xmean` must stay untouched since its pre-division value is what `pow(2)`'s backward
55
+ # needs, so the final division is deliberately out-of-place.
56
+ denom = var.add_(self.eps).sqrt_()
57
+ x = xmean / denom
58
+ return self.weight.view(self.param_shape).mul(x).add_(self.bias.view(self.param_shape))
@@ -19,6 +19,25 @@ from .basic_unet import BasicUNet, BasicUnet, Basicunet, basicunet
19
19
  from .basic_unetplusplus import BasicUNetPlusPlus, BasicUnetPlusPlus, BasicunetPlusPlus, basicunetplusplus
20
20
  from .classifier import Classifier, Critic, Discriminator
21
21
  from .controlnet import ControlNet
22
+ from .convnext import (
23
+ ConvNeXt,
24
+ Convnext,
25
+ Convnext_base,
26
+ Convnext_large,
27
+ Convnext_small,
28
+ Convnext_tiny,
29
+ Convnext_xlarge,
30
+ ConvNeXtBase,
31
+ ConvNeXtLarge,
32
+ ConvNeXtSmall,
33
+ ConvNeXtTiny,
34
+ ConvNeXtXLarge,
35
+ convnext_base,
36
+ convnext_large,
37
+ convnext_small,
38
+ convnext_tiny,
39
+ convnext_xlarge,
40
+ )
22
41
  from .daf3d import DAF3D
23
42
  from .densenet import (
24
43
  DenseNet,