monai-weekly 1.7.dev2625__tar.gz → 1.7.dev2626__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 (448) hide show
  1. {monai_weekly-1.7.dev2625/monai_weekly.egg-info → monai_weekly-1.7.dev2626}/PKG-INFO +1 -1
  2. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/__init__.py +1 -1
  3. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/_version.py +3 -3
  4. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/__init__.py +1 -1
  5. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/box_utils.py +1 -1
  6. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/meta_obj.py +4 -0
  7. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/meta_tensor.py +94 -12
  8. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/utils.py +4 -1
  9. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/adversarial_loss.py +2 -1
  10. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/cldice.py +2 -1
  11. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/dice.py +7 -7
  12. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/focal_loss.py +2 -2
  13. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/hausdorff_loss.py +3 -3
  14. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/image_dissimilarity.py +7 -3
  15. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/mcc_loss.py +3 -3
  16. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/perceptual.py +3 -2
  17. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/spatial_mask.py +5 -3
  18. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/tversky.py +3 -3
  19. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/unified_focal_loss.py +3 -3
  20. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/active_learning_metrics.py +5 -2
  21. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/average_precision.py +4 -2
  22. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/confusion_matrix.py +1 -1
  23. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/cumulative_average.py +1 -1
  24. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/rocauc.py +6 -2
  25. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/utils.py +7 -4
  26. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/adaptors.py +1 -1
  27. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/croppad/functional.py +2 -2
  28. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/intensity/array.py +8 -6
  29. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/inverse.py +1 -1
  30. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/lazy/functional.py +6 -4
  31. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/post/array.py +7 -3
  32. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/spatial/array.py +52 -13
  33. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/spatial/functional.py +4 -3
  34. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/utility/array.py +28 -15
  35. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/utility/dictionary.py +7 -0
  36. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626/monai_weekly.egg-info}/PKG-INFO +1 -1
  37. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/LICENSE +0 -0
  38. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/MANIFEST.in +0 -0
  39. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/README.md +0 -0
  40. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/_extensions/__init__.py +0 -0
  41. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/_extensions/gmm/gmm.cpp +0 -0
  42. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/_extensions/gmm/gmm.h +0 -0
  43. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/_extensions/gmm/gmm_cpu.cpp +0 -0
  44. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/_extensions/gmm/gmm_cuda.cu +0 -0
  45. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/_extensions/gmm/gmm_cuda_linalg.cuh +0 -0
  46. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/_extensions/loader.py +0 -0
  47. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/__init__.py +0 -0
  48. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/auto3dseg/__init__.py +0 -0
  49. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/auto3dseg/__main__.py +0 -0
  50. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/auto3dseg/auto_runner.py +0 -0
  51. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/auto3dseg/bundle_gen.py +0 -0
  52. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/auto3dseg/data_analyzer.py +0 -0
  53. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/auto3dseg/ensemble_builder.py +0 -0
  54. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/auto3dseg/hpo_gen.py +0 -0
  55. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/auto3dseg/transforms.py +0 -0
  56. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/auto3dseg/utils.py +0 -0
  57. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/datasets.py +0 -0
  58. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/deepedit/__init__.py +0 -0
  59. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/deepedit/interaction.py +0 -0
  60. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/deepedit/transforms.py +0 -0
  61. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/deepgrow/__init__.py +0 -0
  62. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/deepgrow/dataset.py +0 -0
  63. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/deepgrow/interaction.py +0 -0
  64. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/deepgrow/transforms.py +0 -0
  65. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/__init__.py +0 -0
  66. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/metrics/__init__.py +0 -0
  67. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/metrics/coco.py +0 -0
  68. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/metrics/matching.py +0 -0
  69. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/networks/__init__.py +0 -0
  70. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/networks/retinanet_detector.py +0 -0
  71. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/networks/retinanet_network.py +0 -0
  72. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/transforms/__init__.py +0 -0
  73. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/transforms/array.py +0 -0
  74. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/transforms/box_ops.py +0 -0
  75. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/transforms/dictionary.py +0 -0
  76. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/utils/ATSS_matcher.py +0 -0
  77. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/utils/__init__.py +0 -0
  78. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/utils/anchor_utils.py +0 -0
  79. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/utils/box_coder.py +0 -0
  80. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/utils/box_selector.py +0 -0
  81. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/utils/detector_utils.py +0 -0
  82. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/utils/hard_negative_sampler.py +0 -0
  83. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/detection/utils/predict_utils.py +0 -0
  84. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/generation/__init__.py +0 -0
  85. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/generation/maisi/__init__.py +0 -0
  86. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/generation/maisi/networks/__init__.py +0 -0
  87. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/generation/maisi/networks/autoencoderkl_maisi.py +0 -0
  88. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/generation/maisi/networks/controlnet_maisi.py +0 -0
  89. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/generation/maisi/networks/diffusion_model_unet_maisi.py +0 -0
  90. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/mmars/__init__.py +0 -0
  91. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/mmars/mmars.py +0 -0
  92. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/mmars/model_desc.py +0 -0
  93. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/nnunet/__init__.py +0 -0
  94. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/nnunet/__main__.py +0 -0
  95. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/nnunet/nnunet_bundle.py +0 -0
  96. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/nnunet/nnunetv2_runner.py +0 -0
  97. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/nnunet/utils.py +0 -0
  98. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/nuclick/__init__.py +0 -0
  99. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/nuclick/transforms.py +0 -0
  100. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/__init__.py +0 -0
  101. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/engines/__init__.py +0 -0
  102. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/engines/utils.py +0 -0
  103. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/handlers/__init__.py +0 -0
  104. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/handlers/utils.py +0 -0
  105. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/inferers/__init__.py +0 -0
  106. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/inferers/inferer.py +0 -0
  107. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/losses/__init__.py +0 -0
  108. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/losses/hovernet_loss.py +0 -0
  109. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/metrics/__init__.py +0 -0
  110. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/metrics/lesion_froc.py +0 -0
  111. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/transforms/__init__.py +0 -0
  112. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/transforms/post/__init__.py +0 -0
  113. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/transforms/post/array.py +0 -0
  114. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/transforms/post/dictionary.py +0 -0
  115. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/transforms/stain/__init__.py +0 -0
  116. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/transforms/stain/array.py +0 -0
  117. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/transforms/stain/dictionary.py +0 -0
  118. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/pathology/utils.py +0 -0
  119. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/reconstruction/__init__.py +0 -0
  120. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/reconstruction/complex_utils.py +0 -0
  121. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/reconstruction/fastmri_reader.py +0 -0
  122. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/reconstruction/mri_utils.py +0 -0
  123. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/reconstruction/networks/__init__.py +0 -0
  124. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/reconstruction/networks/blocks/__init__.py +0 -0
  125. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/reconstruction/networks/blocks/varnetblock.py +0 -0
  126. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/reconstruction/networks/nets/__init__.py +0 -0
  127. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/reconstruction/networks/nets/coil_sensitivity_model.py +0 -0
  128. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/reconstruction/networks/nets/complex_unet.py +0 -0
  129. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/reconstruction/networks/nets/utils.py +0 -0
  130. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/reconstruction/networks/nets/varnet.py +0 -0
  131. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/reconstruction/transforms/__init__.py +0 -0
  132. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/reconstruction/transforms/array.py +0 -0
  133. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/reconstruction/transforms/dictionary.py +0 -0
  134. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/tcia/__init__.py +0 -0
  135. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/tcia/label_desc.py +0 -0
  136. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/tcia/utils.py +0 -0
  137. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/utils.py +0 -0
  138. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/vista3d/__init__.py +0 -0
  139. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/vista3d/inferer.py +0 -0
  140. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/vista3d/sampler.py +0 -0
  141. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/apps/vista3d/transforms.py +0 -0
  142. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/auto3dseg/__init__.py +0 -0
  143. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/auto3dseg/algo_gen.py +0 -0
  144. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/auto3dseg/analyzer.py +0 -0
  145. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/auto3dseg/operations.py +0 -0
  146. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/auto3dseg/seg_summarizer.py +0 -0
  147. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/auto3dseg/utils.py +0 -0
  148. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/bundle/__init__.py +0 -0
  149. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/bundle/__main__.py +0 -0
  150. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/bundle/config_item.py +0 -0
  151. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/bundle/config_parser.py +0 -0
  152. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/bundle/properties.py +0 -0
  153. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/bundle/reference_resolver.py +0 -0
  154. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/bundle/scripts.py +0 -0
  155. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/bundle/utils.py +0 -0
  156. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/bundle/workflows.py +0 -0
  157. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/config/__init__.py +0 -0
  158. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/config/deviceconfig.py +0 -0
  159. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/config/type_definitions.py +0 -0
  160. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/csv_saver.py +0 -0
  161. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/dataloader.py +0 -0
  162. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/dataset.py +0 -0
  163. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/dataset_summary.py +0 -0
  164. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/decathlon_datalist.py +0 -0
  165. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/fft_utils.py +0 -0
  166. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/folder_layout.py +0 -0
  167. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/grid_dataset.py +0 -0
  168. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/image_dataset.py +0 -0
  169. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/image_reader.py +0 -0
  170. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/image_writer.py +0 -0
  171. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/iterable_dataset.py +0 -0
  172. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/itk_torch_bridge.py +0 -0
  173. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/samplers.py +0 -0
  174. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/synthetic.py +0 -0
  175. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/test_time_augmentation.py +0 -0
  176. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/thread_buffer.py +0 -0
  177. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/torchscript_utils.py +0 -0
  178. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/ultrasound_confidence_map.py +0 -0
  179. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/video_dataset.py +0 -0
  180. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/wsi_datasets.py +0 -0
  181. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/data/wsi_reader.py +0 -0
  182. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/engines/__init__.py +0 -0
  183. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/engines/evaluator.py +0 -0
  184. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/engines/trainer.py +0 -0
  185. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/engines/utils.py +0 -0
  186. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/engines/workflow.py +0 -0
  187. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/fl/__init__.py +0 -0
  188. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/fl/client/__init__.py +0 -0
  189. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/fl/client/client_algo.py +0 -0
  190. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/fl/client/monai_algo.py +0 -0
  191. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/fl/utils/__init__.py +0 -0
  192. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/fl/utils/constants.py +0 -0
  193. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/fl/utils/exchange_object.py +0 -0
  194. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/fl/utils/filters.py +0 -0
  195. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/__init__.py +0 -0
  196. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/average_precision.py +0 -0
  197. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/calibration.py +0 -0
  198. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/checkpoint_loader.py +0 -0
  199. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/checkpoint_saver.py +0 -0
  200. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/classification_saver.py +0 -0
  201. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/clearml_handlers.py +0 -0
  202. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/confusion_matrix.py +0 -0
  203. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/decollate_batch.py +0 -0
  204. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/earlystop_handler.py +0 -0
  205. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/garbage_collector.py +0 -0
  206. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/hausdorff_distance.py +0 -0
  207. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/ignite_metric.py +0 -0
  208. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/logfile_handler.py +0 -0
  209. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/lr_schedule_handler.py +0 -0
  210. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/mean_dice.py +0 -0
  211. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/mean_iou.py +0 -0
  212. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/metric_logger.py +0 -0
  213. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/metrics_reloaded_handler.py +0 -0
  214. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/metrics_saver.py +0 -0
  215. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/mlflow_handler.py +0 -0
  216. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/nvtx_handlers.py +0 -0
  217. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/panoptic_quality.py +0 -0
  218. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/parameter_scheduler.py +0 -0
  219. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/postprocessing.py +0 -0
  220. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/probability_maps.py +0 -0
  221. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/regression_metrics.py +0 -0
  222. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/roc_auc.py +0 -0
  223. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/smartcache_handler.py +0 -0
  224. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/stats_handler.py +0 -0
  225. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/surface_distance.py +0 -0
  226. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/tensorboard_handlers.py +0 -0
  227. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/trt_handler.py +0 -0
  228. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/utils.py +0 -0
  229. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/handlers/validation_handler.py +0 -0
  230. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/inferers/__init__.py +0 -0
  231. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/inferers/inferer.py +0 -0
  232. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/inferers/merger.py +0 -0
  233. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/inferers/splitter.py +0 -0
  234. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/inferers/utils.py +0 -0
  235. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/__init__.py +0 -0
  236. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/aucm_loss.py +0 -0
  237. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/barlow_twins.py +0 -0
  238. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/contrastive.py +0 -0
  239. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/deform.py +0 -0
  240. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/ds_loss.py +0 -0
  241. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/giou_loss.py +0 -0
  242. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/multi_scale.py +0 -0
  243. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/nacl_loss.py +0 -0
  244. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/spectral_loss.py +0 -0
  245. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/ssim_loss.py +0 -0
  246. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/sure_loss.py +0 -0
  247. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/losses/utils.py +0 -0
  248. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/__init__.py +0 -0
  249. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/calibration.py +0 -0
  250. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/embedding_collapse.py +0 -0
  251. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/f_beta_score.py +0 -0
  252. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/fid.py +0 -0
  253. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/froc.py +0 -0
  254. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/generalized_dice.py +0 -0
  255. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/hausdorff_distance.py +0 -0
  256. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/loss_metric.py +0 -0
  257. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/meandice.py +0 -0
  258. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/meaniou.py +0 -0
  259. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/metric.py +0 -0
  260. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/mmd.py +0 -0
  261. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/panoptic_quality.py +0 -0
  262. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/regression.py +0 -0
  263. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/surface_dice.py +0 -0
  264. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/surface_distance.py +0 -0
  265. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/metrics/wrapper.py +0 -0
  266. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/__init__.py +0 -0
  267. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/__init__.py +0 -0
  268. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/acti_norm.py +0 -0
  269. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/activation.py +0 -0
  270. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/activation_checkpointing.py +0 -0
  271. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/aspp.py +0 -0
  272. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/attention_utils.py +0 -0
  273. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/backbone_fpn_utils.py +0 -0
  274. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/cablock.py +0 -0
  275. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/convolutions.py +0 -0
  276. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/crf.py +0 -0
  277. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/crossattention.py +0 -0
  278. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/denseblock.py +0 -0
  279. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/dints_block.py +0 -0
  280. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/downsample.py +0 -0
  281. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/dynunet_block.py +0 -0
  282. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/encoder.py +0 -0
  283. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/fcn.py +0 -0
  284. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/feature_pyramid_network.py +0 -0
  285. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/fft_utils_t.py +0 -0
  286. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/localnet_block.py +0 -0
  287. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/mednext_block.py +0 -0
  288. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/mlp.py +0 -0
  289. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/patchembedding.py +0 -0
  290. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/pos_embed_utils.py +0 -0
  291. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/regunet_block.py +0 -0
  292. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/rel_pos_embedding.py +0 -0
  293. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/segresnet_block.py +0 -0
  294. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/selfattention.py +0 -0
  295. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/spade_norm.py +0 -0
  296. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/spatialattention.py +0 -0
  297. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/squeeze_and_excitation.py +0 -0
  298. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/text_embedding.py +0 -0
  299. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/transformerblock.py +0 -0
  300. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/unetr_block.py +0 -0
  301. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/upsample.py +0 -0
  302. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/blocks/warp.py +0 -0
  303. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/layers/__init__.py +0 -0
  304. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/layers/conjugate_gradient.py +0 -0
  305. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/layers/convutils.py +0 -0
  306. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/layers/drop_path.py +0 -0
  307. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/layers/factories.py +0 -0
  308. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/layers/filtering.py +0 -0
  309. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/layers/gmm.py +0 -0
  310. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/layers/simplelayers.py +0 -0
  311. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/layers/spatial_transforms.py +0 -0
  312. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/layers/utils.py +0 -0
  313. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/layers/vector_quantizer.py +0 -0
  314. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/layers/weight_init.py +0 -0
  315. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/__init__.py +0 -0
  316. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/ahnet.py +0 -0
  317. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/attentionunet.py +0 -0
  318. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/autoencoder.py +0 -0
  319. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/autoencoderkl.py +0 -0
  320. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/basic_unet.py +0 -0
  321. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/basic_unetplusplus.py +0 -0
  322. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/cell_sam_wrapper.py +0 -0
  323. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/classifier.py +0 -0
  324. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/controlnet.py +0 -0
  325. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/daf3d.py +0 -0
  326. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/densenet.py +0 -0
  327. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/diffusion_model_unet.py +0 -0
  328. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/dints.py +0 -0
  329. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/dynunet.py +0 -0
  330. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/efficientnet.py +0 -0
  331. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/flexible_unet.py +0 -0
  332. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/fullyconnectednet.py +0 -0
  333. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/generator.py +0 -0
  334. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/highresnet.py +0 -0
  335. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/hovernet.py +0 -0
  336. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/masked_autoencoder_vit.py +0 -0
  337. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/mednext.py +0 -0
  338. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/milmodel.py +0 -0
  339. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/netadapter.py +0 -0
  340. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/patchgan_discriminator.py +0 -0
  341. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/quicknat.py +0 -0
  342. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/regressor.py +0 -0
  343. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/regunet.py +0 -0
  344. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/resnet.py +0 -0
  345. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/restormer.py +0 -0
  346. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/segresnet.py +0 -0
  347. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/segresnet_ds.py +0 -0
  348. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/senet.py +0 -0
  349. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/spade_autoencoderkl.py +0 -0
  350. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/spade_diffusion_model_unet.py +0 -0
  351. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/spade_network.py +0 -0
  352. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/swin_unetr.py +0 -0
  353. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/torchvision_fc.py +0 -0
  354. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/transchex.py +0 -0
  355. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/transformer.py +0 -0
  356. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/unet.py +0 -0
  357. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/unetr.py +0 -0
  358. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/varautoencoder.py +0 -0
  359. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/vista3d.py +0 -0
  360. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/vit.py +0 -0
  361. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/vitautoenc.py +0 -0
  362. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/vnet.py +0 -0
  363. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/voxelmorph.py +0 -0
  364. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/nets/vqvae.py +0 -0
  365. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/schedulers/__init__.py +0 -0
  366. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/schedulers/ddim.py +0 -0
  367. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/schedulers/ddpm.py +0 -0
  368. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/schedulers/pndm.py +0 -0
  369. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/schedulers/rectified_flow.py +0 -0
  370. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/schedulers/scheduler.py +0 -0
  371. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/trt_compiler.py +0 -0
  372. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/networks/utils.py +0 -0
  373. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/optimizers/__init__.py +0 -0
  374. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/optimizers/lr_finder.py +0 -0
  375. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/optimizers/lr_scheduler.py +0 -0
  376. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/optimizers/novograd.py +0 -0
  377. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/optimizers/utils.py +0 -0
  378. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/py.typed +0 -0
  379. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/__init__.py +0 -0
  380. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/compose.py +0 -0
  381. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/croppad/__init__.py +0 -0
  382. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/croppad/array.py +0 -0
  383. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/croppad/batch.py +0 -0
  384. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/croppad/dictionary.py +0 -0
  385. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/intensity/__init__.py +0 -0
  386. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/intensity/dictionary.py +0 -0
  387. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/inverse_batch_transform.py +0 -0
  388. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/io/__init__.py +0 -0
  389. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/io/array.py +0 -0
  390. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/io/dictionary.py +0 -0
  391. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/lazy/__init__.py +0 -0
  392. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/lazy/array.py +0 -0
  393. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/lazy/dictionary.py +0 -0
  394. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/lazy/utils.py +0 -0
  395. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/meta_utility/__init__.py +0 -0
  396. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/meta_utility/dictionary.py +0 -0
  397. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/nvtx.py +0 -0
  398. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/post/__init__.py +0 -0
  399. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/post/dictionary.py +0 -0
  400. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/regularization/__init__.py +0 -0
  401. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/regularization/array.py +0 -0
  402. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/regularization/dictionary.py +0 -0
  403. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/signal/__init__.py +0 -0
  404. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/signal/array.py +0 -0
  405. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/signal/dictionary.py +0 -0
  406. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/smooth_field/__init__.py +0 -0
  407. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/smooth_field/array.py +0 -0
  408. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/smooth_field/dictionary.py +0 -0
  409. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/spatial/__init__.py +0 -0
  410. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/spatial/dictionary.py +0 -0
  411. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/traits.py +0 -0
  412. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/transform.py +0 -0
  413. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/utility/__init__.py +0 -0
  414. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/utils.py +0 -0
  415. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/utils_create_transform_ims.py +0 -0
  416. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/utils_morphological_ops.py +0 -0
  417. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/transforms/utils_pytorch_numpy_unification.py +0 -0
  418. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/utils/__init__.py +0 -0
  419. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/utils/component_store.py +0 -0
  420. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/utils/decorators.py +0 -0
  421. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/utils/deprecate_utils.py +0 -0
  422. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/utils/dist.py +0 -0
  423. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/utils/enums.py +0 -0
  424. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/utils/jupyter_utils.py +0 -0
  425. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/utils/misc.py +0 -0
  426. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/utils/module.py +0 -0
  427. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/utils/nvtx.py +0 -0
  428. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/utils/ordering.py +0 -0
  429. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/utils/profiling.py +0 -0
  430. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/utils/state_cacher.py +0 -0
  431. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/utils/tf32.py +0 -0
  432. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/utils/type_conversion.py +0 -0
  433. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/visualize/__init__.py +0 -0
  434. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/visualize/class_activation_maps.py +0 -0
  435. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/visualize/gradient_based.py +0 -0
  436. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/visualize/img2tensorboard.py +0 -0
  437. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/visualize/occlusion_sensitivity.py +0 -0
  438. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/visualize/utils.py +0 -0
  439. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai/visualize/visualizer.py +0 -0
  440. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai_weekly.egg-info/SOURCES.txt +0 -0
  441. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai_weekly.egg-info/dependency_links.txt +0 -0
  442. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai_weekly.egg-info/not-zip-safe +0 -0
  443. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai_weekly.egg-info/requires.txt +0 -0
  444. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/monai_weekly.egg-info/top_level.txt +0 -0
  445. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/pyproject.toml +0 -0
  446. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/setup.cfg +0 -0
  447. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/setup.py +0 -0
  448. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2626}/versioneer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: monai-weekly
3
- Version: 1.7.dev2625
3
+ Version: 1.7.dev2626
4
4
  Summary: AI Toolkit for Healthcare Imaging
5
5
  Home-page: https://project-monai.github.io/
6
6
  Author: MONAI Consortium
@@ -136,4 +136,4 @@ except Exception:
136
136
 
137
137
  if MONAIEnvVars.debug():
138
138
  raise
139
- __commit_id__ = "15f50736067093ec3716dfebdf37fe454ef79189"
139
+ __commit_id__ = "4ba89bd818a44395842f11f3316b5aaad48353a6"
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2026-06-21T03:12:46+0000",
11
+ "date": "2026-06-28T03:10:43+0000",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "128f497c42f5eb7a57de6cd679ff5fe293f2b2de",
15
- "version": "1.7.dev2625"
14
+ "full-revisionid": "859efd3e7cdbbdf09355d0e91258b5d9c15e2547",
15
+ "version": "1.7.dev2626"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -71,7 +71,7 @@ from .itk_torch_bridge import (
71
71
  monai_to_itk_ddf,
72
72
  )
73
73
  from .meta_obj import MetaObj, get_track_meta, set_track_meta
74
- from .meta_tensor import MetaTensor
74
+ from .meta_tensor import MetaTensor, get_spatial_ndim
75
75
  from .samplers import DistributedSampler, DistributedWeightedRandomSampler
76
76
  from .synthetic import create_test_image_2d, create_test_image_3d
77
77
  from .test_time_augmentation import TestTimeAugmentation
@@ -1200,7 +1200,7 @@ def batched_nms(
1200
1200
  # from different classes do not overlap
1201
1201
  max_coordinate = boxes_t.max()
1202
1202
  offsets = labels_t.to(boxes_t) * (max_coordinate + 1)
1203
- boxes_for_nms = boxes + offsets[:, None]
1203
+ boxes_for_nms = boxes_t + offsets[:, None]
1204
1204
  keep = non_max_suppression(boxes_for_nms, scores_t, nms_thresh, max_proposals, box_overlap_metric)
1205
1205
 
1206
1206
  # convert tensor back to numpy if needed
@@ -24,6 +24,9 @@ from monai.utils import TraceKeys, first, is_immutable
24
24
 
25
25
  _TRACK_META = True
26
26
 
27
+ # Default number of spatial dimensions for medical imaging (3D volumetric data)
28
+ _DEFAULT_SPATIAL_NDIM = 3
29
+
27
30
  __all__ = ["get_track_meta", "set_track_meta", "MetaObj"]
28
31
 
29
32
 
@@ -84,6 +87,7 @@ class MetaObj:
84
87
  self._applied_operations: list = MetaObj.get_default_applied_operations()
85
88
  self._pending_operations: list = MetaObj.get_default_applied_operations() # the same default as applied_ops
86
89
  self._is_batch: bool = False
90
+ self._spatial_ndim: int = 3 # default: 3 spatial dimensions
87
91
 
88
92
  @staticmethod
89
93
  def flatten_meta_objs(*args: Iterable):
@@ -13,22 +13,60 @@ from __future__ import annotations
13
13
 
14
14
  import functools
15
15
  import warnings
16
- from collections.abc import Sequence
16
+ from collections.abc import Mapping, Sequence
17
17
  from copy import deepcopy
18
+ from numbers import Integral
18
19
  from typing import Any
19
20
 
20
21
  import numpy as np
21
22
  import torch
22
23
 
23
24
  import monai
24
- from monai.config.type_definitions import NdarrayTensor
25
- from monai.data.meta_obj import MetaObj, get_track_meta
26
- from monai.data.utils import affine_to_spacing, decollate_batch, list_data_collate, remove_extra_metadata
25
+ from monai.config.type_definitions import NdarrayOrTensor, NdarrayTensor
26
+ from monai.data.meta_obj import _DEFAULT_SPATIAL_NDIM, MetaObj, get_track_meta
27
+ from monai.data.utils import affine_to_spacing, decollate_batch, is_no_channel, list_data_collate, remove_extra_metadata
27
28
  from monai.utils import look_up_option
28
29
  from monai.utils.enums import LazyAttr, MetaKeys, PostFix, SpaceKeys
29
30
  from monai.utils.type_conversion import convert_data_type, convert_to_dst_type, convert_to_numpy, convert_to_tensor
30
31
 
31
- __all__ = ["MetaTensor"]
32
+ __all__ = ["MetaTensor", "get_spatial_ndim"]
33
+
34
+
35
+ def _normalize_spatial_ndim(spatial_ndim: int, tensor_ndim: int, no_channel: bool = False) -> int:
36
+ """Clamp spatial dims to a valid range for the current tensor shape."""
37
+ limit = max(int(tensor_ndim), 1) if no_channel else max(int(tensor_ndim) - 1, 1)
38
+ return max(1, min(int(spatial_ndim), limit))
39
+
40
+
41
+ def _has_explicit_no_channel(meta: Mapping | None) -> bool:
42
+ return (
43
+ isinstance(meta, Mapping)
44
+ and MetaKeys.ORIGINAL_CHANNEL_DIM in meta
45
+ and is_no_channel(meta[MetaKeys.ORIGINAL_CHANNEL_DIM])
46
+ )
47
+
48
+
49
+ def get_spatial_ndim(img: NdarrayOrTensor) -> int:
50
+ """Return the number of spatial dimensions assuming channel-first layout.
51
+
52
+ Uses ``MetaTensor.spatial_ndim`` when available, otherwise falls back to
53
+ ``img.ndim - 1``. Always assumes channel-first (``no_channel=False``)
54
+ because callers run after ``EnsureChannelFirst`` has already added one.
55
+ """
56
+ if isinstance(img, MetaTensor):
57
+ return _normalize_spatial_ndim(img.spatial_ndim, img.ndim)
58
+ return img.ndim - 1
59
+
60
+
61
+ def _is_batch_only_index(index: Any) -> bool:
62
+ """True when indexing pattern selects only the batch axis (e.g., ``x[0]`` or ``x[0, ...]``)."""
63
+ if isinstance(index, (int, np.integer)):
64
+ return True
65
+ if not isinstance(index, Sequence) or not index:
66
+ return False
67
+ if not isinstance(index[0], (int, np.integer)):
68
+ return False
69
+ return all(i in (slice(None, None, None), Ellipsis, None) for i in index[1:])
32
70
 
33
71
 
34
72
  @functools.lru_cache(None)
@@ -111,6 +149,7 @@ class MetaTensor(MetaObj, torch.Tensor):
111
149
  meta: dict | None = None,
112
150
  applied_operations: list | None = None,
113
151
  *args,
152
+ spatial_ndim: int | None = None,
114
153
  **kwargs,
115
154
  ) -> MetaTensor:
116
155
  _kwargs = {"device": kwargs.pop("device", None), "dtype": kwargs.pop("dtype", None)} if kwargs else {}
@@ -123,6 +162,7 @@ class MetaTensor(MetaObj, torch.Tensor):
123
162
  meta: dict | None = None,
124
163
  applied_operations: list | None = None,
125
164
  *_args,
165
+ spatial_ndim: int | None = None,
126
166
  **_kwargs,
127
167
  ) -> None:
128
168
  """
@@ -134,6 +174,8 @@ class MetaTensor(MetaObj, torch.Tensor):
134
174
  the list is typically maintained by `monai.transforms.TraceableTransform`.
135
175
  See also: :py:class:`monai.transforms.TraceableTransform`
136
176
  _args: additional args (currently not in use in this constructor).
177
+ spatial_ndim: optional number of spatial dimensions. If ``None``, derived
178
+ from the affine matrix clamped by the tensor shape.
137
179
  _kwargs: additional kwargs (currently not in use in this constructor).
138
180
 
139
181
  Note:
@@ -158,6 +200,14 @@ class MetaTensor(MetaObj, torch.Tensor):
158
200
  self.affine = self.meta[MetaKeys.AFFINE]
159
201
  else:
160
202
  self.affine = self.get_default_affine()
203
+ # Initialize spatial_ndim from affine matrix (source of truth), clamped by tensor shape.
204
+ # This cached value is kept in sync via the affine setter for hot-path performance.
205
+ no_channel = _has_explicit_no_channel(self.meta)
206
+ if spatial_ndim is not None:
207
+ self.spatial_ndim = _normalize_spatial_ndim(spatial_ndim, self.ndim, no_channel=no_channel)
208
+ elif self.affine.ndim == 2:
209
+ self.spatial_ndim = _normalize_spatial_ndim(self.affine.shape[-1] - 1, self.ndim, no_channel=no_channel)
210
+
161
211
  # applied_operations
162
212
  if applied_operations is not None:
163
213
  self.applied_operations = applied_operations
@@ -237,6 +287,7 @@ class MetaTensor(MetaObj, torch.Tensor):
237
287
  if func == torch.Tensor.__getitem__:
238
288
  if idx > 0 or len(args) < 2 or len(args[0]) < 1:
239
289
  return ret
290
+ full_idx = args[1]
240
291
  batch_idx = args[1][0] if isinstance(args[1], Sequence) else args[1]
241
292
  # if using e.g., `batch[:, -1]` or `batch[..., -1]`, then the
242
293
  # first element will be `slice(None, None, None)` and `Ellipsis`,
@@ -258,6 +309,8 @@ class MetaTensor(MetaObj, torch.Tensor):
258
309
  ret_meta.is_batch = False
259
310
  if hasattr(ret_meta, "__dict__"):
260
311
  ret.__dict__ = ret_meta.__dict__.copy()
312
+ if _is_batch_only_index(full_idx):
313
+ ret.spatial_ndim = _normalize_spatial_ndim(ret.spatial_ndim, ret.ndim)
261
314
  # `unbind` is used for `next(iter(batch))`. Also for `decollate_batch`.
262
315
  # But we only want to split the batch if the `unbind` is along the 0th dimension.
263
316
  elif func == torch.Tensor.unbind:
@@ -467,15 +520,42 @@ class MetaTensor(MetaObj, torch.Tensor):
467
520
 
468
521
  @affine.setter
469
522
  def affine(self, d: NdarrayTensor) -> None:
470
- """Set the affine."""
471
- self.meta[MetaKeys.AFFINE] = torch.as_tensor(d, device=torch.device("cpu"), dtype=torch.float64)
523
+ """Set the affine.
524
+
525
+ When setting a non-batched affine matrix, automatically synchronizes the cached
526
+ spatial_ndim attribute to maintain consistency between the affine matrix (source of truth)
527
+ and the cached spatial dimension count.
528
+ """
529
+ a = torch.as_tensor(d, device=torch.device("cpu"), dtype=torch.float64)
530
+ self.meta[MetaKeys.AFFINE] = a
531
+ if a.ndim == 2: # non-batched: sync spatial_ndim from affine (source of truth)
532
+ no_channel = _has_explicit_no_channel(self.meta)
533
+ self.spatial_ndim = _normalize_spatial_ndim(a.shape[-1] - 1, self.ndim, no_channel=no_channel)
534
+
535
+ @property
536
+ def spatial_ndim(self) -> int:
537
+ """Get the number of spatial dimensions.
538
+
539
+ This value is cached for hot-path performance and is kept in sync with the affine matrix
540
+ via the affine setter. The affine matrix is the source of truth for spatial dimensions.
541
+ """
542
+ return getattr(self, "_spatial_ndim", _DEFAULT_SPATIAL_NDIM)
543
+
544
+ @spatial_ndim.setter
545
+ def spatial_ndim(self, val: int) -> None:
546
+ """Set the number of spatial dimensions."""
547
+ if not isinstance(val, Integral):
548
+ raise TypeError(f"'val' must be an numbers.Integral type; got {type(val)}.")
549
+ if val < 1:
550
+ raise ValueError(f"spatial_ndim must be >= 1, got {val}")
551
+ self._spatial_ndim = int(val)
472
552
 
473
553
  @property
474
554
  def pixdim(self):
475
555
  """Get the spacing"""
476
556
  if self.is_batch:
477
- return [affine_to_spacing(a) for a in self.affine]
478
- return affine_to_spacing(self.affine)
557
+ return [affine_to_spacing(a, r=self.spatial_ndim) for a in self.affine]
558
+ return affine_to_spacing(self.affine, r=self.spatial_ndim)
479
559
 
480
560
  def peek_pending_shape(self):
481
561
  """
@@ -490,7 +570,7 @@ class MetaTensor(MetaObj, torch.Tensor):
490
570
 
491
571
  def peek_pending_affine(self):
492
572
  res = self.affine
493
- r = len(res) - 1
573
+ r = res.shape[-1] - 1 if res.ndim >= 2 else self.spatial_ndim
494
574
  if r not in (2, 3):
495
575
  warnings.warn(f"Only 2d and 3d affine are supported, got {r}d input.")
496
576
  for p in self.pending_operations:
@@ -503,8 +583,10 @@ class MetaTensor(MetaObj, torch.Tensor):
503
583
  return res
504
584
 
505
585
  def peek_pending_rank(self):
506
- a = self.pending_operations[-1].get(LazyAttr.AFFINE, None) if self.pending_operations else self.affine
507
- return 1 if a is None else int(max(1, len(a) - 1))
586
+ if self.pending_operations:
587
+ a = self.pending_operations[-1].get(LazyAttr.AFFINE, None)
588
+ return 1 if a is None else int(max(1, len(a) - 1))
589
+ return self.spatial_ndim
508
590
 
509
591
  def new_empty(self, size, dtype=None, device=None, requires_grad=False): # type: ignore[override]
510
592
  """
@@ -31,7 +31,7 @@ import torch
31
31
  from torch.utils.data._utils.collate import default_collate
32
32
 
33
33
  from monai.config.type_definitions import NdarrayOrTensor, NdarrayTensor, PathLike
34
- from monai.data.meta_obj import MetaObj
34
+ from monai.data.meta_obj import _DEFAULT_SPATIAL_NDIM, MetaObj
35
35
  from monai.utils import (
36
36
  MAX_SEED,
37
37
  BlendMode,
@@ -432,6 +432,9 @@ def collate_meta_tensor_fn(batch, *, collate_fn_map=None):
432
432
  collated.meta = default_collate(meta_dicts)
433
433
  collated.applied_operations = [i.applied_operations or TraceKeys.NONE for i in batch]
434
434
  collated.is_batch = True
435
+ collated.spatial_ndim = min(
436
+ min(getattr(t, "spatial_ndim", _DEFAULT_SPATIAL_NDIM) for t in batch), max(collated.ndim - 1, 1)
437
+ )
435
438
  return collated
436
439
 
437
440
 
@@ -129,7 +129,8 @@ class PatchAdversarialLoss(_Loss):
129
129
  target_is_real = True # With generator, we always want this to be true!
130
130
  warnings.warn(
131
131
  "Variable target_is_real has been set to False, but for_discriminator is set"
132
- "to False. To optimise a generator, target_is_real must be set to True."
132
+ "to False. To optimise a generator, target_is_real must be set to True.",
133
+ stacklevel=2,
133
134
  )
134
135
 
135
136
  if not isinstance(input, list):
@@ -134,7 +134,8 @@ class SoftclDiceLoss(_Loss):
134
134
  Args:
135
135
  iter_: Number of iterations for skeletonization. Must be a non-negative integer. Defaults to 3.
136
136
  smooth_nr: a small constant added to the numerator to avoid zero. Defaults to 1.0.
137
- smooth_dr: a small constant added to the denominator to avoid nan. Defaults to 1.0.
137
+ smooth_dr: a small constant added to the denominator of the individual precision /
138
+ sensitivity ratios and the internal Dice denominator to avoid nan. Defaults to 1.0.
138
139
  smooth: a small constant added to the denominator of the harmonic mean to avoid nan. Defaults to 1e-4.
139
140
  include_background: if False, channel index 0 (background category) is excluded from the calculation.
140
141
  if the non-background segmentations are small compared to the total image size they can get overwhelmed
@@ -156,7 +156,7 @@ class DiceLoss(_Loss):
156
156
  n_pred_ch = input.shape[1]
157
157
  if self.softmax:
158
158
  if n_pred_ch == 1:
159
- warnings.warn("single channel prediction, `softmax=True` ignored.")
159
+ warnings.warn("single channel prediction, `softmax=True` ignored.", stacklevel=2)
160
160
  else:
161
161
  input = torch.softmax(input, 1)
162
162
 
@@ -165,13 +165,13 @@ class DiceLoss(_Loss):
165
165
 
166
166
  if self.to_onehot_y:
167
167
  if n_pred_ch == 1:
168
- warnings.warn("single channel prediction, `to_onehot_y=True` ignored.")
168
+ warnings.warn("single channel prediction, `to_onehot_y=True` ignored.", stacklevel=2)
169
169
  else:
170
170
  target = one_hot(target, num_classes=n_pred_ch)
171
171
 
172
172
  if not self.include_background:
173
173
  if n_pred_ch == 1:
174
- warnings.warn("single channel prediction, `include_background=False` ignored.")
174
+ warnings.warn("single channel prediction, `include_background=False` ignored.", stacklevel=2)
175
175
  else:
176
176
  # if skipping background, removing first channel
177
177
  target = target[:, 1:]
@@ -405,7 +405,7 @@ class GeneralizedDiceLoss(_Loss):
405
405
  n_pred_ch = input.shape[1]
406
406
  if self.softmax:
407
407
  if n_pred_ch == 1:
408
- warnings.warn("single channel prediction, `softmax=True` ignored.")
408
+ warnings.warn("single channel prediction, `softmax=True` ignored.", stacklevel=2)
409
409
  else:
410
410
  input = torch.softmax(input, 1)
411
411
 
@@ -414,13 +414,13 @@ class GeneralizedDiceLoss(_Loss):
414
414
 
415
415
  if self.to_onehot_y:
416
416
  if n_pred_ch == 1:
417
- warnings.warn("single channel prediction, `to_onehot_y=True` ignored.")
417
+ warnings.warn("single channel prediction, `to_onehot_y=True` ignored.", stacklevel=2)
418
418
  else:
419
419
  target = one_hot(target, num_classes=n_pred_ch)
420
420
 
421
421
  if not self.include_background:
422
422
  if n_pred_ch == 1:
423
- warnings.warn("single channel prediction, `include_background=False` ignored.")
423
+ warnings.warn("single channel prediction, `include_background=False` ignored.", stacklevel=2)
424
424
  else:
425
425
  # if skipping background, removing first channel
426
426
  target = target[:, 1:]
@@ -987,7 +987,7 @@ class DiceFocalLoss(_Loss):
987
987
  if self.to_onehot_y:
988
988
  n_pred_ch = input.shape[1]
989
989
  if n_pred_ch == 1:
990
- warnings.warn("single channel prediction, `to_onehot_y=True` ignored.")
990
+ warnings.warn("single channel prediction, `to_onehot_y=True` ignored.", stacklevel=2)
991
991
  else:
992
992
  target = one_hot(target, num_classes=n_pred_ch)
993
993
  dice_loss = self.dice(input, target)
@@ -146,13 +146,13 @@ class FocalLoss(_Loss):
146
146
 
147
147
  if self.to_onehot_y:
148
148
  if n_pred_ch == 1:
149
- warnings.warn("single channel prediction, `to_onehot_y=True` ignored.")
149
+ warnings.warn("single channel prediction, `to_onehot_y=True` ignored.", stacklevel=2)
150
150
  else:
151
151
  target = one_hot(target, num_classes=n_pred_ch)
152
152
 
153
153
  if not self.include_background:
154
154
  if n_pred_ch == 1:
155
- warnings.warn("single channel prediction, `include_background=False` ignored.")
155
+ warnings.warn("single channel prediction, `include_background=False` ignored.", stacklevel=2)
156
156
  else:
157
157
  # if skipping background, removing first channel
158
158
  target = target[:, 1:]
@@ -154,7 +154,7 @@ class HausdorffDTLoss(_Loss):
154
154
  n_pred_ch = input.shape[1]
155
155
  if self.softmax:
156
156
  if n_pred_ch == 1:
157
- warnings.warn("single channel prediction, `softmax=True` ignored.")
157
+ warnings.warn("single channel prediction, `softmax=True` ignored.", stacklevel=2)
158
158
  else:
159
159
  input = torch.softmax(input, 1)
160
160
 
@@ -163,13 +163,13 @@ class HausdorffDTLoss(_Loss):
163
163
 
164
164
  if self.to_onehot_y:
165
165
  if n_pred_ch == 1:
166
- warnings.warn("single channel prediction, `to_onehot_y=True` ignored.")
166
+ warnings.warn("single channel prediction, `to_onehot_y=True` ignored.", stacklevel=2)
167
167
  else:
168
168
  target = one_hot(target, num_classes=n_pred_ch)
169
169
 
170
170
  if not self.include_background:
171
171
  if n_pred_ch == 1:
172
- warnings.warn("single channel prediction, `include_background=False` ignored.")
172
+ warnings.warn("single channel prediction, `include_background=False` ignored.", stacklevel=2)
173
173
  else:
174
174
  # If skipping background, removing first channel
175
175
  target = target[:, 1:]
@@ -233,10 +233,14 @@ class GlobalMutualInformationLoss(_Loss):
233
233
  self.kernel_type = look_up_option(kernel_type, ["gaussian", "b-spline"])
234
234
  self.num_bins = num_bins
235
235
  self.kernel_type = kernel_type
236
+ # declared as buffers so they move with the module (e.g. ``.to(device)``); only populated for the
237
+ # gaussian kernel, hence the ``Tensor`` annotation reflects the type at the use sites in that path.
238
+ self.preterm: torch.Tensor | None
236
239
  self.bin_centers: torch.Tensor | None
240
+ self.register_buffer("preterm", None, persistent=False)
237
241
  self.register_buffer("bin_centers", None, persistent=False)
238
242
  if self.kernel_type == "gaussian":
239
- self.preterm = 1 / (2 * sigma**2)
243
+ self.register_buffer("preterm", 1 / (2 * sigma**2), persistent=False)
240
244
  self.register_buffer("bin_centers", bin_centers[None, None, ...], persistent=False)
241
245
  self.smooth_nr = float(smooth_nr)
242
246
  self.smooth_dr = float(smooth_dr)
@@ -316,8 +320,8 @@ class GlobalMutualInformationLoss(_Loss):
316
320
  """
317
321
  img = torch.clamp(img, 0, 1)
318
322
  img = img.reshape(img.shape[0], -1, 1) # (batch, num_sample, 1)
319
- if self.bin_centers is None:
320
- raise ValueError("bin_centers must be defined for gaussian parzen windowing.")
323
+ if self.bin_centers is None or self.preterm is None:
324
+ raise ValueError("bin_centers and preterm must be defined for gaussian parzen windowing.")
321
325
  weight = torch.exp(
322
326
  -self.preterm.to(img) * (img - self.bin_centers.to(img)) ** 2
323
327
  ) # (batch, num_sample, num_bin)
@@ -133,7 +133,7 @@ class MCCLoss(_Loss):
133
133
  n_pred_ch = input.shape[1]
134
134
  if self.softmax:
135
135
  if n_pred_ch == 1:
136
- warnings.warn("single channel prediction, `softmax=True` ignored.")
136
+ warnings.warn("single channel prediction, `softmax=True` ignored.", stacklevel=2)
137
137
  else:
138
138
  input = torch.softmax(input, 1)
139
139
 
@@ -142,13 +142,13 @@ class MCCLoss(_Loss):
142
142
 
143
143
  if self.to_onehot_y:
144
144
  if n_pred_ch == 1:
145
- warnings.warn("single channel prediction, `to_onehot_y=True` ignored.")
145
+ warnings.warn("single channel prediction, `to_onehot_y=True` ignored.", stacklevel=2)
146
146
  else:
147
147
  target = one_hot(target, num_classes=n_pred_ch)
148
148
 
149
149
  if not self.include_background:
150
150
  if n_pred_ch == 1:
151
- warnings.warn("single channel prediction, `include_background=False` ignored.")
151
+ warnings.warn("single channel prediction, `include_background=False` ignored.", stacklevel=2)
152
152
  else:
153
153
  target = target[:, 1:]
154
154
  input = input[:, 1:]
@@ -112,7 +112,7 @@ class PerceptualLoss(nn.Module):
112
112
  )
113
113
  if not channel_wise:
114
114
  warnings.warn(
115
- "MedicalNet networks supp, ort channel-wise loss. Consider setting channel_wise=True.", stacklevel=2
115
+ "MedicalNet networks support channel-wise loss. Consider setting channel_wise=True.", stacklevel=2
116
116
  )
117
117
 
118
118
  # Channel-wise only for MedicalNet
@@ -127,7 +127,8 @@ class PerceptualLoss(nn.Module):
127
127
  torch.hub.set_dir(cache_dir)
128
128
  # raise a warning that this may change the default cache dir for all torch.hub calls
129
129
  warnings.warn(
130
- f"Setting cache_dir to {cache_dir}, this may change the default cache dir for all torch.hub calls."
130
+ f"Setting cache_dir to {cache_dir}, this may change the default cache dir for all torch.hub calls.",
131
+ stacklevel=2,
131
132
  )
132
133
 
133
134
  self.spatial_dims = spatial_dims
@@ -55,16 +55,18 @@ class MaskedLoss(_Loss):
55
55
  mask: the shape should be B1H[WD] or 11H[WD].
56
56
  """
57
57
  if mask is None:
58
- warnings.warn("No mask value specified for the MaskedLoss.")
58
+ warnings.warn("No mask value specified for the MaskedLoss.", stacklevel=2)
59
59
  return self.loss(input, target)
60
60
 
61
61
  if input.dim() != mask.dim():
62
- warnings.warn(f"Dim of input ({input.shape}) is different from mask ({mask.shape}).")
62
+ warnings.warn(f"Dim of input ({input.shape}) is different from mask ({mask.shape}).", stacklevel=2)
63
63
  if input.shape[0] != mask.shape[0] and mask.shape[0] != 1:
64
64
  raise ValueError(f"Batch size of mask ({mask.shape}) must be one or equal to input ({input.shape}).")
65
65
  if target.dim() > 1:
66
66
  if mask.shape[1] != 1:
67
67
  raise ValueError(f"Mask ({mask.shape}) must have only one channel.")
68
68
  if input.shape[2:] != mask.shape[2:]:
69
- warnings.warn(f"Spatial size of input ({input.shape}) is different from mask ({mask.shape}).")
69
+ warnings.warn(
70
+ f"Spatial size of input ({input.shape}) is different from mask ({mask.shape}).", stacklevel=2
71
+ )
70
72
  return self.loss(input * mask, target * mask)
@@ -118,7 +118,7 @@ class TverskyLoss(_Loss):
118
118
  n_pred_ch = input.shape[1]
119
119
  if self.softmax:
120
120
  if n_pred_ch == 1:
121
- warnings.warn("single channel prediction, `softmax=True` ignored.")
121
+ warnings.warn("single channel prediction, `softmax=True` ignored.", stacklevel=2)
122
122
  else:
123
123
  input = torch.softmax(input, 1)
124
124
 
@@ -127,13 +127,13 @@ class TverskyLoss(_Loss):
127
127
 
128
128
  if self.to_onehot_y:
129
129
  if n_pred_ch == 1:
130
- warnings.warn("single channel prediction, `to_onehot_y=True` ignored.")
130
+ warnings.warn("single channel prediction, `to_onehot_y=True` ignored.", stacklevel=2)
131
131
  else:
132
132
  target = one_hot(target, num_classes=n_pred_ch)
133
133
 
134
134
  if not self.include_background:
135
135
  if n_pred_ch == 1:
136
- warnings.warn("single channel prediction, `include_background=False` ignored.")
136
+ warnings.warn("single channel prediction, `include_background=False` ignored.", stacklevel=2)
137
137
  else:
138
138
  # if skipping background, removing first channel
139
139
  target = target[:, 1:]
@@ -58,7 +58,7 @@ class AsymmetricFocalTverskyLoss(_Loss):
58
58
 
59
59
  if self.to_onehot_y:
60
60
  if n_pred_ch == 1:
61
- warnings.warn("single channel prediction, `to_onehot_y=True` ignored.")
61
+ warnings.warn("single channel prediction, `to_onehot_y=True` ignored.", stacklevel=2)
62
62
  else:
63
63
  y_true = one_hot(y_true, num_classes=n_pred_ch)
64
64
 
@@ -122,7 +122,7 @@ class AsymmetricFocalLoss(_Loss):
122
122
 
123
123
  if self.to_onehot_y:
124
124
  if n_pred_ch == 1:
125
- warnings.warn("single channel prediction, `to_onehot_y=True` ignored.")
125
+ warnings.warn("single channel prediction, `to_onehot_y=True` ignored.", stacklevel=2)
126
126
  else:
127
127
  y_true = one_hot(y_true, num_classes=n_pred_ch)
128
128
 
@@ -223,7 +223,7 @@ class AsymmetricUnifiedFocalLoss(_Loss):
223
223
  n_pred_ch = y_pred.shape[1]
224
224
  if self.to_onehot_y:
225
225
  if n_pred_ch == 1:
226
- warnings.warn("single channel prediction, `to_onehot_y=True` ignored.")
226
+ warnings.warn("single channel prediction, `to_onehot_y=True` ignored.", stacklevel=2)
227
227
  else:
228
228
  y_true = one_hot(y_true, num_classes=n_pred_ch)
229
229
 
@@ -137,7 +137,7 @@ def compute_variance(
137
137
  n_len = len(y_pred.shape)
138
138
 
139
139
  if n_len < 4 and spatial_map:
140
- warnings.warn("Spatial map requires a 2D/3D image with N-repeats and C-channels")
140
+ warnings.warn("Spatial map requires a 2D/3D image with N-repeats and C-channels", stacklevel=2)
141
141
  return None
142
142
 
143
143
  # Create new shape list
@@ -190,7 +190,10 @@ def label_quality_score(
190
190
 
191
191
  n_len = len(y_pred.shape)
192
192
  if n_len < 4 and scalar_reduction == "none":
193
- warnings.warn("Reduction set to None, Spatial map return requires a 2D/3D image of B-Batchsize and C-channels")
193
+ warnings.warn(
194
+ "Reduction set to None, Spatial map return requires a 2D/3D image of B-Batchsize and C-channels",
195
+ stacklevel=2,
196
+ )
194
197
  return None
195
198
 
196
199
  abs_diff_map = torch.abs(y_pred - y)
@@ -88,10 +88,12 @@ def _calculate(y_pred: torch.Tensor, y: torch.Tensor) -> float:
88
88
  raise AssertionError("y and y_pred must be 1 dimension data with same length.")
89
89
  y_unique = y.unique()
90
90
  if len(y_unique) == 1:
91
- warnings.warn(f"y values can not be all {y_unique.item()}, skip AP computation and return `Nan`.")
91
+ warnings.warn(f"y values can not be all {y_unique.item()}, skip AP computation and return `Nan`.", stacklevel=2)
92
92
  return float("nan")
93
93
  if not y_unique.equal(torch.tensor([0, 1], dtype=y.dtype, device=y.device)):
94
- warnings.warn(f"y values must be 0 or 1, but in {y_unique.tolist()}, skip AP computation and return `Nan`.")
94
+ warnings.warn(
95
+ f"y values must be 0 or 1, but in {y_unique.tolist()}, skip AP computation and return `Nan`.", stacklevel=2
96
+ )
95
97
  return float("nan")
96
98
 
97
99
  n = len(y)
@@ -93,7 +93,7 @@ class ConfusionMatrixMetric(CumulativeIterationMetric):
93
93
  raise ValueError("y_pred should have at least two dimensions.")
94
94
  if dims == 2 or (dims == 3 and y_pred.shape[-1] == 1):
95
95
  if self.compute_sample:
96
- warnings.warn("As for classification task, compute_sample should be False.")
96
+ warnings.warn("As for classification task, compute_sample should be False.", stacklevel=2)
97
97
  self.compute_sample = False
98
98
 
99
99
  return get_confusion_matrix(y_pred=y_pred, y=y, include_background=self.include_background)
@@ -154,7 +154,7 @@ class CumulativeAverage:
154
154
  # account for possible non-finite numbers in val and replace them with 0s
155
155
  nfin = torch.isfinite(val)
156
156
  if not torch.all(nfin):
157
- warnings.warn(f"non-finite inputs received: val: {val}, count: {count}")
157
+ warnings.warn(f"non-finite inputs received: val: {val}, count: {count}", stacklevel=2)
158
158
  count = torch.where(nfin, count, torch.zeros_like(count))
159
159
  val = torch.where(nfin, val, torch.zeros_like(val))
160
160
 
@@ -77,10 +77,14 @@ def _calculate(y_pred: torch.Tensor, y: torch.Tensor) -> float:
77
77
  raise AssertionError("y and y_pred must be 1 dimension data with same length.")
78
78
  y_unique = y.unique()
79
79
  if len(y_unique) == 1:
80
- warnings.warn(f"y values can not be all {y_unique.item()}, skip AUC computation and return `Nan`.")
80
+ warnings.warn(
81
+ f"y values can not be all {y_unique.item()}, skip AUC computation and return `Nan`.", stacklevel=2
82
+ )
81
83
  return float("nan")
82
84
  if not y_unique.equal(torch.tensor([0, 1], dtype=y.dtype, device=y.device)):
83
- warnings.warn(f"y values must be 0 or 1, but in {y_unique.tolist()}, skip AUC computation and return `Nan`.")
85
+ warnings.warn(
86
+ f"y values must be 0 or 1, but in {y_unique.tolist()}, skip AUC computation and return `Nan`.", stacklevel=2
87
+ )
84
88
  return float("nan")
85
89
 
86
90
  n = len(y)