monai-weekly 1.7.dev2625__tar.gz → 1.7.dev2627__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 (449) hide show
  1. {monai_weekly-1.7.dev2625/monai_weekly.egg-info → monai_weekly-1.7.dev2627}/PKG-INFO +1 -1
  2. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/__init__.py +1 -1
  3. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/_version.py +3 -3
  4. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/nnunet/nnunetv2_runner.py +6 -2
  5. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/nnunet/utils.py +1 -9
  6. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/vista3d/transforms.py +0 -2
  7. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/auto3dseg/utils.py +1 -1
  8. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/__init__.py +1 -1
  9. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/box_utils.py +1 -1
  10. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/dataset.py +19 -25
  11. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/image_reader.py +4 -4
  12. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/meta_obj.py +4 -0
  13. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/meta_tensor.py +94 -12
  14. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/utils.py +8 -16
  15. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/inferers/merger.py +0 -3
  16. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/adversarial_loss.py +2 -1
  17. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/cldice.py +2 -1
  18. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/deform.py +66 -17
  19. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/dice.py +7 -7
  20. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/focal_loss.py +2 -2
  21. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/hausdorff_loss.py +3 -3
  22. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/image_dissimilarity.py +7 -4
  23. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/mcc_loss.py +3 -3
  24. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/nacl_loss.py +1 -1
  25. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/perceptual.py +3 -2
  26. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/spatial_mask.py +5 -3
  27. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/tversky.py +3 -3
  28. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/unified_focal_loss.py +3 -3
  29. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/__init__.py +1 -0
  30. monai_weekly-1.7.dev2627/monai/metrics/absolute_volume_difference.py +180 -0
  31. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/active_learning_metrics.py +5 -2
  32. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/average_precision.py +4 -2
  33. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/confusion_matrix.py +1 -1
  34. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/cumulative_average.py +1 -1
  35. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/froc.py +7 -5
  36. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/generalized_dice.py +0 -1
  37. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/rocauc.py +6 -2
  38. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/utils.py +31 -5
  39. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/text_embedding.py +0 -1
  40. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/layers/filtering.py +0 -3
  41. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/layers/simplelayers.py +0 -1
  42. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/basic_unet.py +0 -1
  43. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/basic_unetplusplus.py +0 -1
  44. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/adaptors.py +1 -1
  45. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/croppad/array.py +1 -0
  46. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/croppad/dictionary.py +5 -1
  47. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/croppad/functional.py +2 -2
  48. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/intensity/array.py +8 -6
  49. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/inverse.py +1 -1
  50. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/lazy/functional.py +6 -4
  51. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/post/array.py +7 -3
  52. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/spatial/array.py +71 -14
  53. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/spatial/dictionary.py +11 -1
  54. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/spatial/functional.py +11 -5
  55. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/utility/array.py +28 -15
  56. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/utility/dictionary.py +7 -0
  57. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/utils.py +65 -26
  58. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/utils/profiling.py +0 -2
  59. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627/monai_weekly.egg-info}/PKG-INFO +1 -1
  60. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai_weekly.egg-info/SOURCES.txt +1 -0
  61. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/LICENSE +0 -0
  62. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/MANIFEST.in +0 -0
  63. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/README.md +0 -0
  64. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/_extensions/__init__.py +0 -0
  65. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/_extensions/gmm/gmm.cpp +0 -0
  66. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/_extensions/gmm/gmm.h +0 -0
  67. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/_extensions/gmm/gmm_cpu.cpp +0 -0
  68. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/_extensions/gmm/gmm_cuda.cu +0 -0
  69. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/_extensions/gmm/gmm_cuda_linalg.cuh +0 -0
  70. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/_extensions/loader.py +0 -0
  71. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/__init__.py +0 -0
  72. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/auto3dseg/__init__.py +0 -0
  73. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/auto3dseg/__main__.py +0 -0
  74. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/auto3dseg/auto_runner.py +0 -0
  75. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/auto3dseg/bundle_gen.py +0 -0
  76. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/auto3dseg/data_analyzer.py +0 -0
  77. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/auto3dseg/ensemble_builder.py +0 -0
  78. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/auto3dseg/hpo_gen.py +0 -0
  79. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/auto3dseg/transforms.py +0 -0
  80. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/auto3dseg/utils.py +0 -0
  81. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/datasets.py +0 -0
  82. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/deepedit/__init__.py +0 -0
  83. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/deepedit/interaction.py +0 -0
  84. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/deepedit/transforms.py +0 -0
  85. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/deepgrow/__init__.py +0 -0
  86. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/deepgrow/dataset.py +0 -0
  87. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/deepgrow/interaction.py +0 -0
  88. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/deepgrow/transforms.py +0 -0
  89. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/__init__.py +0 -0
  90. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/metrics/__init__.py +0 -0
  91. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/metrics/coco.py +0 -0
  92. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/metrics/matching.py +0 -0
  93. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/networks/__init__.py +0 -0
  94. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/networks/retinanet_detector.py +0 -0
  95. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/networks/retinanet_network.py +0 -0
  96. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/transforms/__init__.py +0 -0
  97. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/transforms/array.py +0 -0
  98. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/transforms/box_ops.py +0 -0
  99. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/transforms/dictionary.py +0 -0
  100. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/utils/ATSS_matcher.py +0 -0
  101. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/utils/__init__.py +0 -0
  102. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/utils/anchor_utils.py +0 -0
  103. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/utils/box_coder.py +0 -0
  104. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/utils/box_selector.py +0 -0
  105. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/utils/detector_utils.py +0 -0
  106. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/utils/hard_negative_sampler.py +0 -0
  107. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/detection/utils/predict_utils.py +0 -0
  108. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/generation/__init__.py +0 -0
  109. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/generation/maisi/__init__.py +0 -0
  110. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/generation/maisi/networks/__init__.py +0 -0
  111. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/generation/maisi/networks/autoencoderkl_maisi.py +0 -0
  112. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/generation/maisi/networks/controlnet_maisi.py +0 -0
  113. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/generation/maisi/networks/diffusion_model_unet_maisi.py +0 -0
  114. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/mmars/__init__.py +0 -0
  115. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/mmars/mmars.py +0 -0
  116. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/mmars/model_desc.py +0 -0
  117. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/nnunet/__init__.py +0 -0
  118. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/nnunet/__main__.py +0 -0
  119. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/nnunet/nnunet_bundle.py +0 -0
  120. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/nuclick/__init__.py +0 -0
  121. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/nuclick/transforms.py +0 -0
  122. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/__init__.py +0 -0
  123. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/engines/__init__.py +0 -0
  124. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/engines/utils.py +0 -0
  125. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/handlers/__init__.py +0 -0
  126. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/handlers/utils.py +0 -0
  127. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/inferers/__init__.py +0 -0
  128. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/inferers/inferer.py +0 -0
  129. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/losses/__init__.py +0 -0
  130. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/losses/hovernet_loss.py +0 -0
  131. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/metrics/__init__.py +0 -0
  132. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/metrics/lesion_froc.py +0 -0
  133. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/transforms/__init__.py +0 -0
  134. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/transforms/post/__init__.py +0 -0
  135. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/transforms/post/array.py +0 -0
  136. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/transforms/post/dictionary.py +0 -0
  137. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/transforms/stain/__init__.py +0 -0
  138. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/transforms/stain/array.py +0 -0
  139. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/transforms/stain/dictionary.py +0 -0
  140. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/pathology/utils.py +0 -0
  141. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/__init__.py +0 -0
  142. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/complex_utils.py +0 -0
  143. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/fastmri_reader.py +0 -0
  144. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/mri_utils.py +0 -0
  145. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/networks/__init__.py +0 -0
  146. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/networks/blocks/__init__.py +0 -0
  147. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/networks/blocks/varnetblock.py +0 -0
  148. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/networks/nets/__init__.py +0 -0
  149. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/networks/nets/coil_sensitivity_model.py +0 -0
  150. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/networks/nets/complex_unet.py +0 -0
  151. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/networks/nets/utils.py +0 -0
  152. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/networks/nets/varnet.py +0 -0
  153. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/transforms/__init__.py +0 -0
  154. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/transforms/array.py +0 -0
  155. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/transforms/dictionary.py +0 -0
  156. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/tcia/__init__.py +0 -0
  157. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/tcia/label_desc.py +0 -0
  158. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/tcia/utils.py +0 -0
  159. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/utils.py +0 -0
  160. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/vista3d/__init__.py +0 -0
  161. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/vista3d/inferer.py +0 -0
  162. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/apps/vista3d/sampler.py +0 -0
  163. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/auto3dseg/__init__.py +0 -0
  164. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/auto3dseg/algo_gen.py +0 -0
  165. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/auto3dseg/analyzer.py +0 -0
  166. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/auto3dseg/operations.py +0 -0
  167. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/auto3dseg/seg_summarizer.py +0 -0
  168. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/bundle/__init__.py +0 -0
  169. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/bundle/__main__.py +0 -0
  170. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/bundle/config_item.py +0 -0
  171. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/bundle/config_parser.py +0 -0
  172. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/bundle/properties.py +0 -0
  173. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/bundle/reference_resolver.py +0 -0
  174. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/bundle/scripts.py +0 -0
  175. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/bundle/utils.py +0 -0
  176. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/bundle/workflows.py +0 -0
  177. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/config/__init__.py +0 -0
  178. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/config/deviceconfig.py +0 -0
  179. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/config/type_definitions.py +0 -0
  180. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/csv_saver.py +0 -0
  181. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/dataloader.py +0 -0
  182. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/dataset_summary.py +0 -0
  183. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/decathlon_datalist.py +0 -0
  184. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/fft_utils.py +0 -0
  185. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/folder_layout.py +0 -0
  186. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/grid_dataset.py +0 -0
  187. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/image_dataset.py +0 -0
  188. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/image_writer.py +0 -0
  189. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/iterable_dataset.py +0 -0
  190. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/itk_torch_bridge.py +0 -0
  191. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/samplers.py +0 -0
  192. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/synthetic.py +0 -0
  193. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/test_time_augmentation.py +0 -0
  194. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/thread_buffer.py +0 -0
  195. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/torchscript_utils.py +0 -0
  196. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/ultrasound_confidence_map.py +0 -0
  197. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/video_dataset.py +0 -0
  198. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/wsi_datasets.py +0 -0
  199. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/data/wsi_reader.py +0 -0
  200. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/engines/__init__.py +0 -0
  201. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/engines/evaluator.py +0 -0
  202. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/engines/trainer.py +0 -0
  203. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/engines/utils.py +0 -0
  204. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/engines/workflow.py +0 -0
  205. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/fl/__init__.py +0 -0
  206. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/fl/client/__init__.py +0 -0
  207. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/fl/client/client_algo.py +0 -0
  208. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/fl/client/monai_algo.py +0 -0
  209. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/fl/utils/__init__.py +0 -0
  210. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/fl/utils/constants.py +0 -0
  211. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/fl/utils/exchange_object.py +0 -0
  212. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/fl/utils/filters.py +0 -0
  213. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/__init__.py +0 -0
  214. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/average_precision.py +0 -0
  215. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/calibration.py +0 -0
  216. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/checkpoint_loader.py +0 -0
  217. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/checkpoint_saver.py +0 -0
  218. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/classification_saver.py +0 -0
  219. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/clearml_handlers.py +0 -0
  220. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/confusion_matrix.py +0 -0
  221. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/decollate_batch.py +0 -0
  222. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/earlystop_handler.py +0 -0
  223. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/garbage_collector.py +0 -0
  224. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/hausdorff_distance.py +0 -0
  225. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/ignite_metric.py +0 -0
  226. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/logfile_handler.py +0 -0
  227. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/lr_schedule_handler.py +0 -0
  228. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/mean_dice.py +0 -0
  229. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/mean_iou.py +0 -0
  230. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/metric_logger.py +0 -0
  231. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/metrics_reloaded_handler.py +0 -0
  232. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/metrics_saver.py +0 -0
  233. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/mlflow_handler.py +0 -0
  234. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/nvtx_handlers.py +0 -0
  235. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/panoptic_quality.py +0 -0
  236. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/parameter_scheduler.py +0 -0
  237. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/postprocessing.py +0 -0
  238. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/probability_maps.py +0 -0
  239. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/regression_metrics.py +0 -0
  240. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/roc_auc.py +0 -0
  241. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/smartcache_handler.py +0 -0
  242. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/stats_handler.py +0 -0
  243. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/surface_distance.py +0 -0
  244. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/tensorboard_handlers.py +0 -0
  245. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/trt_handler.py +0 -0
  246. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/utils.py +0 -0
  247. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/handlers/validation_handler.py +0 -0
  248. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/inferers/__init__.py +0 -0
  249. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/inferers/inferer.py +0 -0
  250. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/inferers/splitter.py +0 -0
  251. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/inferers/utils.py +0 -0
  252. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/__init__.py +0 -0
  253. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/aucm_loss.py +0 -0
  254. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/barlow_twins.py +0 -0
  255. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/contrastive.py +0 -0
  256. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/ds_loss.py +0 -0
  257. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/giou_loss.py +0 -0
  258. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/multi_scale.py +0 -0
  259. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/spectral_loss.py +0 -0
  260. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/ssim_loss.py +0 -0
  261. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/sure_loss.py +0 -0
  262. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/losses/utils.py +0 -0
  263. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/calibration.py +0 -0
  264. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/embedding_collapse.py +0 -0
  265. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/f_beta_score.py +0 -0
  266. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/fid.py +0 -0
  267. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/hausdorff_distance.py +0 -0
  268. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/loss_metric.py +0 -0
  269. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/meandice.py +0 -0
  270. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/meaniou.py +0 -0
  271. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/metric.py +0 -0
  272. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/mmd.py +0 -0
  273. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/panoptic_quality.py +0 -0
  274. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/regression.py +0 -0
  275. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/surface_dice.py +0 -0
  276. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/surface_distance.py +0 -0
  277. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/metrics/wrapper.py +0 -0
  278. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/__init__.py +0 -0
  279. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/__init__.py +0 -0
  280. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/acti_norm.py +0 -0
  281. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/activation.py +0 -0
  282. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/activation_checkpointing.py +0 -0
  283. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/aspp.py +0 -0
  284. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/attention_utils.py +0 -0
  285. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/backbone_fpn_utils.py +0 -0
  286. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/cablock.py +0 -0
  287. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/convolutions.py +0 -0
  288. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/crf.py +0 -0
  289. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/crossattention.py +0 -0
  290. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/denseblock.py +0 -0
  291. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/dints_block.py +0 -0
  292. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/downsample.py +0 -0
  293. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/dynunet_block.py +0 -0
  294. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/encoder.py +0 -0
  295. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/fcn.py +0 -0
  296. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/feature_pyramid_network.py +0 -0
  297. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/fft_utils_t.py +0 -0
  298. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/localnet_block.py +0 -0
  299. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/mednext_block.py +0 -0
  300. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/mlp.py +0 -0
  301. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/patchembedding.py +0 -0
  302. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/pos_embed_utils.py +0 -0
  303. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/regunet_block.py +0 -0
  304. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/rel_pos_embedding.py +0 -0
  305. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/segresnet_block.py +0 -0
  306. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/selfattention.py +0 -0
  307. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/spade_norm.py +0 -0
  308. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/spatialattention.py +0 -0
  309. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/squeeze_and_excitation.py +0 -0
  310. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/transformerblock.py +0 -0
  311. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/unetr_block.py +0 -0
  312. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/upsample.py +0 -0
  313. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/blocks/warp.py +0 -0
  314. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/layers/__init__.py +0 -0
  315. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/layers/conjugate_gradient.py +0 -0
  316. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/layers/convutils.py +0 -0
  317. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/layers/drop_path.py +0 -0
  318. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/layers/factories.py +0 -0
  319. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/layers/gmm.py +0 -0
  320. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/layers/spatial_transforms.py +0 -0
  321. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/layers/utils.py +0 -0
  322. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/layers/vector_quantizer.py +0 -0
  323. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/layers/weight_init.py +0 -0
  324. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/__init__.py +0 -0
  325. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/ahnet.py +0 -0
  326. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/attentionunet.py +0 -0
  327. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/autoencoder.py +0 -0
  328. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/autoencoderkl.py +0 -0
  329. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/cell_sam_wrapper.py +0 -0
  330. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/classifier.py +0 -0
  331. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/controlnet.py +0 -0
  332. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/daf3d.py +0 -0
  333. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/densenet.py +0 -0
  334. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/diffusion_model_unet.py +0 -0
  335. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/dints.py +0 -0
  336. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/dynunet.py +0 -0
  337. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/efficientnet.py +0 -0
  338. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/flexible_unet.py +0 -0
  339. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/fullyconnectednet.py +0 -0
  340. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/generator.py +0 -0
  341. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/highresnet.py +0 -0
  342. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/hovernet.py +0 -0
  343. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/masked_autoencoder_vit.py +0 -0
  344. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/mednext.py +0 -0
  345. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/milmodel.py +0 -0
  346. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/netadapter.py +0 -0
  347. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/patchgan_discriminator.py +0 -0
  348. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/quicknat.py +0 -0
  349. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/regressor.py +0 -0
  350. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/regunet.py +0 -0
  351. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/resnet.py +0 -0
  352. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/restormer.py +0 -0
  353. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/segresnet.py +0 -0
  354. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/segresnet_ds.py +0 -0
  355. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/senet.py +0 -0
  356. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/spade_autoencoderkl.py +0 -0
  357. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/spade_diffusion_model_unet.py +0 -0
  358. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/spade_network.py +0 -0
  359. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/swin_unetr.py +0 -0
  360. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/torchvision_fc.py +0 -0
  361. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/transchex.py +0 -0
  362. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/transformer.py +0 -0
  363. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/unet.py +0 -0
  364. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/unetr.py +0 -0
  365. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/varautoencoder.py +0 -0
  366. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/vista3d.py +0 -0
  367. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/vit.py +0 -0
  368. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/vitautoenc.py +0 -0
  369. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/vnet.py +0 -0
  370. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/voxelmorph.py +0 -0
  371. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/nets/vqvae.py +0 -0
  372. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/schedulers/__init__.py +0 -0
  373. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/schedulers/ddim.py +0 -0
  374. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/schedulers/ddpm.py +0 -0
  375. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/schedulers/pndm.py +0 -0
  376. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/schedulers/rectified_flow.py +0 -0
  377. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/schedulers/scheduler.py +0 -0
  378. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/trt_compiler.py +0 -0
  379. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/networks/utils.py +0 -0
  380. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/optimizers/__init__.py +0 -0
  381. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/optimizers/lr_finder.py +0 -0
  382. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/optimizers/lr_scheduler.py +0 -0
  383. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/optimizers/novograd.py +0 -0
  384. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/optimizers/utils.py +0 -0
  385. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/py.typed +0 -0
  386. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/__init__.py +0 -0
  387. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/compose.py +0 -0
  388. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/croppad/__init__.py +0 -0
  389. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/croppad/batch.py +0 -0
  390. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/intensity/__init__.py +0 -0
  391. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/intensity/dictionary.py +0 -0
  392. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/inverse_batch_transform.py +0 -0
  393. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/io/__init__.py +0 -0
  394. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/io/array.py +0 -0
  395. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/io/dictionary.py +0 -0
  396. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/lazy/__init__.py +0 -0
  397. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/lazy/array.py +0 -0
  398. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/lazy/dictionary.py +0 -0
  399. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/lazy/utils.py +0 -0
  400. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/meta_utility/__init__.py +0 -0
  401. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/meta_utility/dictionary.py +0 -0
  402. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/nvtx.py +0 -0
  403. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/post/__init__.py +0 -0
  404. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/post/dictionary.py +0 -0
  405. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/regularization/__init__.py +0 -0
  406. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/regularization/array.py +0 -0
  407. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/regularization/dictionary.py +0 -0
  408. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/signal/__init__.py +0 -0
  409. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/signal/array.py +0 -0
  410. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/signal/dictionary.py +0 -0
  411. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/smooth_field/__init__.py +0 -0
  412. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/smooth_field/array.py +0 -0
  413. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/smooth_field/dictionary.py +0 -0
  414. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/spatial/__init__.py +0 -0
  415. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/traits.py +0 -0
  416. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/transform.py +0 -0
  417. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/utility/__init__.py +0 -0
  418. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/utils_create_transform_ims.py +0 -0
  419. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/utils_morphological_ops.py +0 -0
  420. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/transforms/utils_pytorch_numpy_unification.py +0 -0
  421. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/utils/__init__.py +0 -0
  422. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/utils/component_store.py +0 -0
  423. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/utils/decorators.py +0 -0
  424. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/utils/deprecate_utils.py +0 -0
  425. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/utils/dist.py +0 -0
  426. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/utils/enums.py +0 -0
  427. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/utils/jupyter_utils.py +0 -0
  428. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/utils/misc.py +0 -0
  429. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/utils/module.py +0 -0
  430. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/utils/nvtx.py +0 -0
  431. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/utils/ordering.py +0 -0
  432. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/utils/state_cacher.py +0 -0
  433. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/utils/tf32.py +0 -0
  434. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/utils/type_conversion.py +0 -0
  435. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/visualize/__init__.py +0 -0
  436. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/visualize/class_activation_maps.py +0 -0
  437. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/visualize/gradient_based.py +0 -0
  438. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/visualize/img2tensorboard.py +0 -0
  439. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/visualize/occlusion_sensitivity.py +0 -0
  440. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/visualize/utils.py +0 -0
  441. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai/visualize/visualizer.py +0 -0
  442. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai_weekly.egg-info/dependency_links.txt +0 -0
  443. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai_weekly.egg-info/not-zip-safe +0 -0
  444. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai_weekly.egg-info/requires.txt +0 -0
  445. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/monai_weekly.egg-info/top_level.txt +0 -0
  446. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/pyproject.toml +0 -0
  447. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/setup.cfg +0 -0
  448. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/setup.py +0 -0
  449. {monai_weekly-1.7.dev2625 → monai_weekly-1.7.dev2627}/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.dev2627
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__ = "eb74488c5be06e97d8ee5d6bdec2488ac3903a1c"
@@ -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-07-05T03:07:50+0000",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "128f497c42f5eb7a57de6cd679ff5fe293f2b2de",
15
- "version": "1.7.dev2625"
14
+ "full-revisionid": "9c37af81ef49b616038685d338f97726a0266440",
15
+ "version": "1.7.dev2627"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -598,7 +598,11 @@ class nnUNetV2Runner: # noqa: N801
598
598
 
599
599
  for _key, _value in kwargs.items():
600
600
  prefix = "-" if _key in {"p", "pretrained_weights"} else "--"
601
- cmd += [f"{prefix}{_key}", str(_value)]
601
+ if isinstance(_value, bool):
602
+ if _value:
603
+ cmd.append(f"{prefix}{_key}")
604
+ else:
605
+ cmd += [f"{prefix}{_key}", str(_value)]
602
606
 
603
607
  cmd_str: list[str] = [str(c) for c in cmd]
604
608
 
@@ -758,7 +762,7 @@ class nnUNetV2Runner: # noqa: N801
758
762
  kwargs: this optional parameter allows you to specify additional arguments defined in the
759
763
  ``train_single_model`` method.
760
764
  """
761
- self.train_single_model(config=config, fold=fold, only_run_validation=True, **kwargs)
765
+ self.train_single_model(config=config, fold=fold, val=True, **kwargs)
762
766
 
763
767
  def validate(
764
768
  self, configs: tuple = (M.N_3D_FULLRES, M.N_2D, M.N_3D_LOWRES, M.N_3D_CASCADE_FULLRES), **kwargs: Any
@@ -149,7 +149,6 @@ def create_new_dataset_json(
149
149
  """
150
150
  new_json_data: dict = {}
151
151
 
152
- # modality = self.input_info.pop("modality")
153
152
  modality = ensure_tuple(modality) # type: ignore
154
153
 
155
154
  new_json_data["channel_names"] = {}
@@ -161,18 +160,11 @@ def create_new_dataset_json(
161
160
  for _j in range(num_foreground_classes):
162
161
  new_json_data["labels"][f"class{_j + 1}"] = _j + 1
163
162
 
164
- # new_json_data["numTraining"] = len(datalist_json["training"])
165
163
  new_json_data["numTraining"] = num_training_data
166
164
  new_json_data["file_ending"] = ".nii.gz"
167
165
 
168
166
  ConfigParser.export_config_file(
169
- config=new_json_data,
170
- # filepath=os.path.join(raw_data_foldername, "dataset.json"),
171
- filepath=output_filepath,
172
- fmt="json",
173
- sort_keys=True,
174
- indent=4,
175
- ensure_ascii=False,
167
+ config=new_json_data, filepath=output_filepath, fmt="json", sort_keys=True, indent=4, ensure_ascii=False
176
168
  )
177
169
 
178
170
  return
@@ -160,8 +160,6 @@ class VistaPostTransformd(MapTransform):
160
160
  pred = pred.argmax(0).unsqueeze(0).float() + 1.0
161
161
  pred[is_bk] = 0.0
162
162
  else:
163
- # AsDiscrete will remove NaN
164
- # pred = monai.transforms.AsDiscrete(threshold=0.5)(pred)
165
163
  pred[pred > 0] = 1.0
166
164
  if "label_prompt" in data and data["label_prompt"] is not None:
167
165
  pred += 0.5 # inplace mapping to avoid cloning pred
@@ -284,7 +284,7 @@ def verify_report_format(report: dict, report_format: dict) -> bool:
284
284
 
285
285
  if isinstance(v_fmt, list) and isinstance(v, list):
286
286
  if len(v_fmt) != 1:
287
- raise UserWarning("list length in report_format is not 1")
287
+ warnings.warn("list length in report_format is not 1", stacklevel=2)
288
288
  if len(v_fmt) > 0 and len(v) > 0:
289
289
  return verify_report_format(v[0], v_fmt[0])
290
290
  else:
@@ -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
@@ -210,8 +210,12 @@ class PersistentDataset(Dataset):
210
210
 
211
211
  Cached data is expected to be tensors, primitives, or dictionaries keying to these values. Numpy arrays will
212
212
  be converted to tensors, however any other object type returned by transforms will not be loadable since
213
- `torch.load` will be used with `weights_only=True` to prevent loading of potentially malicious objects.
214
- Legacy cache files may not be loadable and may need to be recomputed.
213
+ `torch.load` will be used with `weights_only=True` by default to prevent loading of potentially malicious
214
+ objects. Legacy cache files may not be loadable and may need to be recomputed. MetaTensor objects can be saved
215
+ and loaded with their metadata preserved if `track_meta` is True, however the objects stored in the metadata
216
+ must be acceptable as serialisable by `torch.load` by default or if they have been white-listed with
217
+ `torch.serialization.add_safe_globals`. Any other object type may be stored but will fail to load and force
218
+ a cache recompute.
215
219
 
216
220
  Lazy Resampling:
217
221
  If you make use of the lazy resampling feature of `monai.transforms.Compose`, please refer to
@@ -245,8 +249,8 @@ class PersistentDataset(Dataset):
245
249
  may share a common cache dir provided that the transforms pre-processing is consistent.
246
250
  If `cache_dir` doesn't exist, will automatically create it.
247
251
  If `cache_dir` is `None`, there is effectively no caching.
248
- hash_func: a callable to compute hash from data items to be cached.
249
- defaults to `monai.data.utils.pickle_hashing`.
252
+ hash_func: a callable to compute hash from data items to be cached, defaults to
253
+ `monai.data.utils.pickle_hashing` which uses sha256 (previously md5 so old caches will not work).
250
254
  pickle_module: string representing the module used for pickling metadata and objects,
251
255
  default to `"pickle"`. due to the pickle limitation in multi-processing of Dataloader,
252
256
  we can't use `pickle` as arg directly, so here we use a string name instead.
@@ -266,17 +270,12 @@ class PersistentDataset(Dataset):
266
270
  When this is enabled, the traced transform instance IDs will be removed from the cached MetaTensors.
267
271
  This is useful for skipping the transform instance checks when inverting applied operations
268
272
  using the cached content and with re-created transform instances.
269
- track_meta: whether to track the meta information, if `True`, will convert to `MetaTensor`.
270
- default to `False`. Cannot be used with `weights_only=True`.
273
+ track_meta: whether to track the meta information, defaults to False. If `True`, converts to `MetaTensor`.
271
274
  weights_only: keyword argument passed to `torch.load` when reading cached files.
272
- default to `True`. When set to `True`, `torch.load` restricts loading to tensors and
273
- other safe objects. Setting this to `False` is required for loading `MetaTensor`
274
- objects saved with `track_meta=True`, however this creates the possibility of remote
275
- code execution through `torch.load` so be aware of the security implications of doing so.
276
-
277
- Raises:
278
- ValueError: When both `track_meta=True` and `weights_only=True`, since this combination
279
- prevents cached MetaTensors from being reloaded and causes perpetual cache regeneration.
275
+ default to `True`. When `True`, `torch.load` restricts loading to tensors and other safe objects.
276
+ Setting to `False` should only be done if it's absolutely necessary to load unsafe pickled data,
277
+ eg. MetaTensor objects with unsafe objects in their metadata. Users must verify the safety of the data
278
+ they intend to load before doing so.
280
279
  """
281
280
  super().__init__(data=data, transform=transform)
282
281
  self.cache_dir = Path(cache_dir) if cache_dir is not None else None
@@ -292,11 +291,6 @@ class PersistentDataset(Dataset):
292
291
  if hash_transform is not None:
293
292
  self.set_transform_hash(hash_transform)
294
293
  self.reset_ops_id = reset_ops_id
295
- if track_meta and weights_only:
296
- raise ValueError(
297
- "Invalid argument combination: `track_meta=True` cannot be used with `weights_only=True`. "
298
- "To cache and reload MetaTensors, set `track_meta=True` and `weights_only=False`."
299
- )
300
294
  self.track_meta = track_meta
301
295
  self.weights_only = weights_only
302
296
 
@@ -390,9 +384,9 @@ class PersistentDataset(Dataset):
390
384
  """
391
385
  hashfile = None
392
386
  if self.cache_dir is not None:
393
- data_item_md5 = self.hash_func(item_transformed).decode("utf-8")
394
- data_item_md5 += self.transform_hash
395
- hashfile = self.cache_dir / f"{data_item_md5}.pt"
387
+ data_item_hash = self.hash_func(item_transformed).decode("utf-8")
388
+ data_item_hash += self.transform_hash
389
+ hashfile = self.cache_dir / f"{data_item_hash}.pt"
396
390
 
397
391
  if hashfile is not None and hashfile.is_file(): # cache hit
398
392
  try:
@@ -1624,9 +1618,9 @@ class GDSDataset(PersistentDataset):
1624
1618
  hashfile = None
1625
1619
  # compute a cache id
1626
1620
  if self.cache_dir is not None:
1627
- data_item_md5 = self.hash_func(item_transformed).decode("utf-8")
1628
- data_item_md5 += self.transform_hash
1629
- hashfile = self.cache_dir / f"{data_item_md5}.pt"
1621
+ data_item_hash = self.hash_func(item_transformed).decode("utf-8")
1622
+ data_item_hash += self.transform_hash
1623
+ hashfile = self.cache_dir / f"{data_item_hash}.pt"
1630
1624
 
1631
1625
  if hashfile is not None and hashfile.is_file(): # cache hit
1632
1626
  with cp.cuda.Device(self.device):
@@ -761,10 +761,10 @@ class PydicomReader(ImageReader):
761
761
  if "lastImagePositionPatient" in metadata:
762
762
  t1n, t2n, t3n = metadata["lastImagePositionPatient"]
763
763
  n = metadata[MetaKeys.SPATIAL_SHAPE][-1]
764
- k1, k2, k3 = (t1n - sx) / (n - 1), (t2n - sy) / (n - 1), (t3n - sz) / (n - 1)
765
- affine[0, 2] = k1
766
- affine[1, 2] = k2
767
- affine[2, 2] = k3
764
+ if n > 1:
765
+ affine[0, 2] = (t1n - sx) / (n - 1)
766
+ affine[1, 2] = (t2n - sy) / (n - 1)
767
+ affine[2, 2] = (t3n - sz) / (n - 1)
768
768
 
769
769
  if lps_to_ras:
770
770
  affine = orientation_ras_lps(affine)
@@ -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
  """
@@ -17,7 +17,6 @@ import logging
17
17
  import math
18
18
  import os
19
19
  import pickle
20
- import sys
21
20
  from collections import abc, defaultdict
22
21
  from collections.abc import Generator, Iterable, Mapping, Sequence, Sized
23
22
  from copy import deepcopy
@@ -31,7 +30,7 @@ import torch
31
30
  from torch.utils.data._utils.collate import default_collate
32
31
 
33
32
  from monai.config.type_definitions import NdarrayOrTensor, NdarrayTensor, PathLike
34
- from monai.data.meta_obj import MetaObj
33
+ from monai.data.meta_obj import _DEFAULT_SPATIAL_NDIM, MetaObj
35
34
  from monai.utils import (
36
35
  MAX_SEED,
37
36
  BlendMode,
@@ -432,6 +431,9 @@ def collate_meta_tensor_fn(batch, *, collate_fn_map=None):
432
431
  collated.meta = default_collate(meta_dicts)
433
432
  collated.applied_operations = [i.applied_operations or TraceKeys.NONE for i in batch]
434
433
  collated.is_batch = True
434
+ collated.spatial_ndim = min(
435
+ min(getattr(t, "spatial_ndim", _DEFAULT_SPATIAL_NDIM) for t in batch), max(collated.ndim - 1, 1)
436
+ )
435
437
  return collated
436
438
 
437
439
 
@@ -1367,13 +1369,8 @@ def json_hashing(item) -> bytes:
1367
1369
 
1368
1370
  """
1369
1371
  # TODO: Find way to hash transforms content as part of the cache
1370
- cache_key = ""
1371
- if sys.version_info.minor < 9:
1372
- cache_key = hashlib.md5(json.dumps(item, sort_keys=True).encode("utf-8")).hexdigest()
1373
- else:
1374
- cache_key = hashlib.md5(
1375
- json.dumps(item, sort_keys=True).encode("utf-8"), usedforsecurity=False # type: ignore
1376
- ).hexdigest()
1372
+ dump = json.dumps(item, sort_keys=True).encode("utf-8")
1373
+ cache_key = hashlib.sha256(dump, usedforsecurity=False).hexdigest() # type: ignore
1377
1374
  return f"{cache_key}".encode()
1378
1375
 
1379
1376
 
@@ -1388,13 +1385,8 @@ def pickle_hashing(item, protocol=pickle.HIGHEST_PROTOCOL) -> bytes:
1388
1385
  Returns: the corresponding hash key
1389
1386
 
1390
1387
  """
1391
- cache_key = ""
1392
- if sys.version_info.minor < 9:
1393
- cache_key = hashlib.md5(pickle.dumps(sorted_dict(item), protocol=protocol)).hexdigest()
1394
- else:
1395
- cache_key = hashlib.md5(
1396
- pickle.dumps(sorted_dict(item), protocol=protocol), usedforsecurity=False # type: ignore
1397
- ).hexdigest()
1388
+ dump = pickle.dumps(sorted_dict(item), protocol=protocol)
1389
+ cache_key = hashlib.sha256(dump, usedforsecurity=False).hexdigest() # type: ignore
1398
1390
  return f"{cache_key}".encode()
1399
1391
 
1400
1392
 
@@ -309,9 +309,6 @@ class ZarrAvgMerger(Merger):
309
309
 
310
310
  self.chunks = chunks
311
311
 
312
- # Handle compressor/codecs based on zarr version
313
- is_zarr_v3 = version_geq(get_package_version("zarr"), "3.0.0")
314
-
315
312
  # Initialize codecs/compressor attributes with proper types
316
313
  self.codecs: list | None = None
317
314
  self.value_codecs: list | None = None
@@ -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
@@ -44,9 +44,58 @@ def spatial_gradient(x: torch.Tensor, dim: int) -> torch.Tensor:
44
44
  return (x[slicing_s] - x[slicing_e]) / 2.0
45
45
 
46
46
 
47
+ def spatial_gradient_squared(x: torch.Tensor, dim_1: int, dim_2: int) -> torch.Tensor:
48
+ """
49
+ Calculate the second-order partial derivative of ``x`` with respect to spatial dims
50
+ ``dim_1`` and ``dim_2`` using compact central finite differences.
51
+
52
+ For ``dim_1 == dim_2`` the pure second derivative uses the ``[1, -2, 1]`` stencil:
53
+ ``d2x[i] = x[i+1] - 2 * x[i] + x[i-1]``.
54
+
55
+ For ``dim_1 != dim_2`` the mixed partial uses the compact 4-point stencil:
56
+ ``d2x[i, j] = (x[i+1, j+1] - x[i+1, j-1] - x[i-1, j+1] + x[i-1, j-1]) / 4``.
57
+
58
+ Every spatial dimension is sliced to ``[1:-1]`` so the output shape is independent of
59
+ ``(dim_1, dim_2)``; this lets terms be summed together. Requires ``x.shape[d] > 2``
60
+ for every spatial dim ``d``.
61
+
62
+ Args:
63
+ x: the shape should be BCH(WD).
64
+ dim_1: first spatial dimension index.
65
+ dim_2: second spatial dimension index.
66
+
67
+ Returns:
68
+ Tensor with batch and channel axes preserved and every spatial axis sliced to
69
+ ``[1:-1]``.
70
+ """
71
+ slice_inner = slice(1, -1)
72
+ slice_plus = slice(2, None)
73
+ slice_minus = slice(None, -2)
74
+ slice_all = slice(None)
75
+
76
+ def _idx(overrides: dict) -> list:
77
+ out: list = [slice_all, slice_all]
78
+ for d in range(2, x.ndim):
79
+ out.append(overrides.get(d, slice_inner))
80
+ return out
81
+
82
+ if dim_1 == dim_2:
83
+ return x[_idx({dim_1: slice_plus})] - 2 * x[_idx({})] + x[_idx({dim_1: slice_minus})]
84
+ return (
85
+ x[_idx({dim_1: slice_plus, dim_2: slice_plus})]
86
+ - x[_idx({dim_1: slice_plus, dim_2: slice_minus})]
87
+ - x[_idx({dim_1: slice_minus, dim_2: slice_plus})]
88
+ + x[_idx({dim_1: slice_minus, dim_2: slice_minus})]
89
+ ) / 4.0
90
+
91
+
47
92
  class BendingEnergyLoss(_Loss):
48
93
  """
49
- Calculate the bending energy based on second-order differentiation of ``pred`` using central finite difference.
94
+ Calculate the bending energy based on second-order differentiation of ``pred``.
95
+
96
+ Pure second derivatives use the compact ``[1, -2, 1]`` stencil; mixed partials use a
97
+ compact 4-point central scheme. Both span three voxels per axis, so each spatial
98
+ dimension of ``pred`` only needs to be greater than 2.
50
99
 
51
100
  For more information,
52
101
  see https://github.com/Project-MONAI/tutorials/blob/main/modules/bending_energy_diffusion_loss_notes.ipynb.
@@ -79,41 +128,41 @@ class BendingEnergyLoss(_Loss):
79
128
  Raises:
80
129
  ValueError: When ``self.reduction`` is not one of ["mean", "sum", "none"].
81
130
  ValueError: When ``pred`` is not 3-d, 4-d or 5-d.
82
- ValueError: When any spatial dimension of ``pred`` has size less than or equal to 4.
131
+ ValueError: When any spatial dimension of ``pred`` has size less than or equal to 2.
83
132
  ValueError: When the number of channels of ``pred`` does not match the number of spatial dimensions.
84
133
 
85
134
  """
86
135
  if pred.ndim not in [3, 4, 5]:
87
136
  raise ValueError(f"Expecting 3-d, 4-d or 5-d pred, instead got pred of shape {pred.shape}")
88
137
  for i in range(pred.ndim - 2):
89
- if pred.shape[-i - 1] <= 4:
90
- raise ValueError(f"All spatial dimensions must be > 4, got spatial dimensions {pred.shape[2:]}")
138
+ if pred.shape[-i - 1] <= 2:
139
+ raise ValueError(f"All spatial dimensions must be > 2, got spatial dimensions {pred.shape[2:]}")
91
140
  if pred.shape[1] != pred.ndim - 2:
92
141
  raise ValueError(
93
142
  f"Number of vector components, i.e. number of channels of the input DDF, {pred.shape[1]}, "
94
143
  f"does not match number of spatial dimensions, {pred.ndim - 2}"
95
144
  )
96
145
 
97
- # first order gradient
98
- first_order_gradient = [spatial_gradient(pred, dim) for dim in range(2, pred.ndim)]
99
-
100
146
  # spatial dimensions in a shape suited for broadcasting below
101
147
  if self.normalize:
102
148
  spatial_dims = torch.tensor(pred.shape, device=pred.device)[2:].reshape((1, -1) + (pred.ndim - 2) * (1,))
103
149
 
104
- energy = torch.tensor(0)
105
- for dim_1, g in enumerate(first_order_gradient):
106
- dim_1 += 2
150
+ # Initialize on pred.device so a GPU `pred` does not get added to a CPU
151
+ # accumulator, and as a float so an integer-dtype `pred` still produces a
152
+ # floating-point energy (the compact pure-derivative stencil has no
153
+ # division, so a Long input would otherwise propagate as Long and fail
154
+ # `torch.mean` at the reduction step).
155
+ energy = torch.tensor(0.0, device=pred.device)
156
+ for dim_1 in range(2, pred.ndim):
157
+ d2 = spatial_gradient_squared(pred, dim_1, dim_1)
107
158
  if self.normalize:
108
- g *= pred.shape[dim_1] / spatial_dims
109
- energy = energy + (spatial_gradient(g, dim_1) * pred.shape[dim_1]) ** 2
110
- else:
111
- energy = energy + spatial_gradient(g, dim_1) ** 2
159
+ d2 = d2 * (pred.shape[dim_1] ** 2 / spatial_dims)
160
+ energy = energy + d2**2
112
161
  for dim_2 in range(dim_1 + 1, pred.ndim):
162
+ d2_mixed = spatial_gradient_squared(pred, dim_1, dim_2)
113
163
  if self.normalize:
114
- energy = energy + 2 * (spatial_gradient(g, dim_2) * pred.shape[dim_2]) ** 2
115
- else:
116
- energy = energy + 2 * spatial_gradient(g, dim_2) ** 2
164
+ d2_mixed = d2_mixed * (pred.shape[dim_1] * pred.shape[dim_2] / spatial_dims)
165
+ energy = energy + 2 * d2_mixed**2
117
166
 
118
167
  if self.reduction == LossReduction.MEAN.value:
119
168
  energy = torch.mean(energy) # the batch and channel average