monai-weekly 1.7.dev2641__tar.gz → 1.7.dev2642__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.
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/PKG-INFO +1 -1
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/__init__.py +1 -1
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/_version.py +3 -3
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/utils.py +41 -6
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/grid_dataset.py +10 -7
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/synthetic.py +40 -9
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/inferers/merger.py +7 -1
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/embedding_collapse.py +14 -4
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/fid.py +1 -1
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/meaniou.py +4 -10
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/dints.py +9 -5
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/regunet.py +12 -1
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/__init__.py +4 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/post/array.py +89 -1
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/post/dictionary.py +58 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/spatial/dictionary.py +8 -2
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/utils.py +84 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/utils/deprecate_utils.py +2 -2
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai_weekly.egg-info/PKG-INFO +1 -1
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/LICENSE +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/MANIFEST.in +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/README.md +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/_extensions/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/_extensions/gmm/gmm.cpp +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/_extensions/gmm/gmm.h +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/_extensions/gmm/gmm_cpu.cpp +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/_extensions/gmm/gmm_cuda.cu +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/_extensions/gmm/gmm_cuda_linalg.cuh +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/_extensions/loader.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/auto3dseg/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/auto3dseg/__main__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/auto3dseg/auto_runner.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/auto3dseg/bundle_gen.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/auto3dseg/data_analyzer.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/auto3dseg/ensemble_builder.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/auto3dseg/hpo_gen.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/auto3dseg/transforms.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/auto3dseg/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/datasets.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/deepedit/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/deepedit/interaction.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/deepedit/transforms.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/deepgrow/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/deepgrow/dataset.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/deepgrow/interaction.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/deepgrow/transforms.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/metrics/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/metrics/coco.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/metrics/matching.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/networks/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/networks/retinanet_detector.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/networks/retinanet_network.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/transforms/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/transforms/array.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/transforms/box_ops.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/transforms/dictionary.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/utils/ATSS_matcher.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/utils/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/utils/anchor_utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/utils/box_coder.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/utils/box_selector.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/utils/detector_utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/utils/hard_negative_sampler.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/detection/utils/predict_utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/generation/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/generation/maisi/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/generation/maisi/networks/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/generation/maisi/networks/autoencoderkl_maisi.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/generation/maisi/networks/controlnet_maisi.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/generation/maisi/networks/diffusion_model_unet_maisi.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/mmars/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/mmars/mmars.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/mmars/model_desc.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/nnunet/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/nnunet/__main__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/nnunet/nnunet_bundle.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/nnunet/nnunetv2_runner.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/nnunet/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/nuclick/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/nuclick/transforms.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/engines/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/engines/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/handlers/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/handlers/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/inferers/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/inferers/inferer.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/losses/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/losses/hovernet_loss.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/metrics/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/metrics/lesion_froc.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/transforms/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/transforms/post/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/transforms/post/array.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/transforms/post/dictionary.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/transforms/stain/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/transforms/stain/array.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/transforms/stain/dictionary.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/pathology/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/reconstruction/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/reconstruction/complex_utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/reconstruction/fastmri_reader.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/reconstruction/mri_utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/reconstruction/networks/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/reconstruction/networks/blocks/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/reconstruction/networks/blocks/varnetblock.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/reconstruction/networks/nets/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/reconstruction/networks/nets/coil_sensitivity_model.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/reconstruction/networks/nets/complex_unet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/reconstruction/networks/nets/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/reconstruction/networks/nets/varnet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/reconstruction/transforms/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/reconstruction/transforms/array.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/reconstruction/transforms/dictionary.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/tcia/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/tcia/label_desc.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/tcia/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/vista3d/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/vista3d/inferer.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/vista3d/sampler.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/apps/vista3d/transforms.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/auto3dseg/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/auto3dseg/algo_gen.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/auto3dseg/analyzer.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/auto3dseg/operations.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/auto3dseg/seg_summarizer.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/auto3dseg/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/bundle/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/bundle/__main__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/bundle/config_item.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/bundle/config_parser.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/bundle/properties.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/bundle/reference_resolver.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/bundle/scripts.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/bundle/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/bundle/workflows.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/config/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/config/__main__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/config/check_env.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/config/deviceconfig.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/config/print_dependencies.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/config/type_definitions.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/box_utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/csv_saver.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/dataloader.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/dataset.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/dataset_summary.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/decathlon_datalist.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/fft_utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/folder_layout.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/image_dataset.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/image_reader.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/image_writer.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/iterable_dataset.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/itk_torch_bridge.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/meta_obj.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/meta_tensor.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/nvimgcodec_pydicom_plugin.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/samplers.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/test_time_augmentation.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/thread_buffer.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/torchscript_utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/ultrasound_confidence_map.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/video_dataset.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/wsi_datasets.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/data/wsi_reader.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/engines/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/engines/evaluator.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/engines/trainer.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/engines/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/engines/workflow.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/fl/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/fl/client/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/fl/client/client_algo.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/fl/client/monai_algo.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/fl/utils/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/fl/utils/constants.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/fl/utils/exchange_object.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/fl/utils/filters.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/average_precision.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/calibration.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/checkpoint_loader.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/checkpoint_saver.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/classification_saver.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/clearml_handlers.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/confusion_matrix.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/decollate_batch.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/earlystop_handler.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/garbage_collector.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/hausdorff_distance.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/ignite_metric.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/logfile_handler.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/lr_schedule_handler.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/mean_dice.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/mean_iou.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/metric_logger.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/metrics_reloaded_handler.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/metrics_saver.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/mlflow_handler.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/nvtx_handlers.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/panoptic_quality.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/parameter_scheduler.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/postprocessing.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/probability_maps.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/regression_metrics.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/roc_auc.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/smartcache_handler.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/stats_handler.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/surface_distance.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/tensorboard_handlers.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/trt_handler.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/handlers/validation_handler.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/inferers/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/inferers/inferer.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/inferers/splitter.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/inferers/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/adversarial_loss.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/aucm_loss.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/barlow_twins.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/boundary_loss.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/calibration.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/cldice.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/contrastive.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/deform.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/dice.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/ds_loss.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/focal_loss.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/giou_loss.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/hausdorff_loss.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/image_dissimilarity.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/mcc_loss.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/multi_scale.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/nacl_loss.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/perceptual.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/spatial_mask.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/spectral_loss.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/ssim_loss.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/sure_loss.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/tversky.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/unified_focal_loss.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/losses/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/absolute_volume_difference.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/active_learning_metrics.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/average_precision.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/calibration.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/confusion_matrix.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/cumulative_average.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/f_beta_score.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/froc.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/generalized_dice.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/hausdorff_distance.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/loss_metric.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/meandice.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/metric.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/mmd.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/panoptic_quality.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/regression.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/rocauc.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/surface_dice.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/surface_distance.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/metrics/wrapper.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/acti_norm.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/activation.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/activation_checkpointing.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/aspp.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/attention_utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/backbone_fpn_utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/cablock.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/convolutions.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/crf.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/crossattention.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/denseblock.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/dints_block.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/downsample.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/dynunet_block.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/encoder.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/fcn.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/feature_pyramid_network.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/fft_utils_t.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/hyena.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/localnet_block.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/mednext_block.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/mlp.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/patchembedding.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/pos_embed_utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/regunet_block.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/rel_pos_embedding.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/segresnet_block.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/selfattention.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/spade_norm.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/spatialattention.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/squeeze_and_excitation.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/text_embedding.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/transformerblock.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/unetr_block.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/upsample.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/blocks/warp.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/layers/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/layers/conjugate_gradient.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/layers/convutils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/layers/drop_path.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/layers/factories.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/layers/filtering.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/layers/gmm.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/layers/simplelayers.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/layers/spatial_transforms.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/layers/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/layers/vector_quantizer.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/layers/weight_init.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/ahnet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/attentionunet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/autoencoder.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/autoencoderkl.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/basic_unet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/basic_unetplusplus.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/cell_sam_wrapper.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/classifier.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/controlnet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/daf3d.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/densenet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/diffusion_model_unet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/dynunet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/efficientnet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/flexible_unet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/fullyconnectednet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/generator.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/highresnet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/hovernet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/hyena_nd_unetr.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/masked_autoencoder_vit.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/mednext.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/milmodel.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/navit.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/netadapter.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/patchgan_discriminator.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/quicknat.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/regressor.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/resnet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/restormer.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/segresnet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/segresnet_ds.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/senet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/spade_autoencoderkl.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/spade_diffusion_model_unet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/spade_network.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/swin_unetr.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/torchvision_fc.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/transchex.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/transformer.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/unet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/unetr.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/varautoencoder.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/vista3d.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/vit.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/vitautoenc.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/vnet.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/voxelmorph.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/nets/vqvae.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/schedulers/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/schedulers/ddim.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/schedulers/ddpm.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/schedulers/pndm.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/schedulers/rectified_flow.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/schedulers/scheduler.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/trt_compiler.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/networks/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/optimizers/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/optimizers/lr_finder.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/optimizers/lr_scheduler.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/optimizers/novograd.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/optimizers/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/py.typed +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/adaptors.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/compose.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/croppad/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/croppad/array.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/croppad/batch.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/croppad/dictionary.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/croppad/functional.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/intensity/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/intensity/array.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/intensity/dictionary.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/inverse.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/inverse_batch_transform.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/io/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/io/array.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/io/dictionary.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/lazy/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/lazy/array.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/lazy/dictionary.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/lazy/functional.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/lazy/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/meta_utility/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/meta_utility/dictionary.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/nvtx.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/post/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/regularization/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/regularization/array.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/regularization/dictionary.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/signal/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/signal/array.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/signal/dictionary.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/smooth_field/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/smooth_field/array.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/smooth_field/dictionary.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/spatial/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/spatial/array.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/spatial/functional.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/traits.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/transform.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/utility/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/utility/array.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/utility/dictionary.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/utils_create_transform_ims.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/utils_morphological_ops.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/transforms/utils_pytorch_numpy_unification.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/utils/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/utils/compare_sources.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/utils/component_store.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/utils/decorators.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/utils/dist.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/utils/enums.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/utils/jupyter_utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/utils/misc.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/utils/module.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/utils/nvtx.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/utils/ordering.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/utils/profiling.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/utils/safeeval.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/utils/state_cacher.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/utils/tf32.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/utils/type_conversion.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/visualize/__init__.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/visualize/class_activation_maps.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/visualize/gradient_based.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/visualize/img2tensorboard.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/visualize/occlusion_sensitivity.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/visualize/utils.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai/visualize/visualizer.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai_weekly.egg-info/SOURCES.txt +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai_weekly.egg-info/dependency_links.txt +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai_weekly.egg-info/not-zip-safe +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai_weekly.egg-info/requires.txt +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/monai_weekly.egg-info/top_level.txt +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/pyproject.toml +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/setup.cfg +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/setup.py +0 -0
- {monai_weekly-1.7.dev2641 → monai_weekly-1.7.dev2642}/versioneer.py +0 -0
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2026-10-
|
|
11
|
+
"date": "2026-10-18T02:14:29+0000",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "1.7.
|
|
14
|
+
"full-revisionid": "4835c649a66849125f1e656543264f5fa7d261c0",
|
|
15
|
+
"version": "1.7.dev2642"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -30,6 +30,7 @@ from urllib.request import urlopen, urlretrieve
|
|
|
30
30
|
|
|
31
31
|
from monai.config.type_definitions import PathLike
|
|
32
32
|
from monai.utils import look_up_option, min_version, optional_import
|
|
33
|
+
from monai.utils.deprecate_utils import warn_deprecated
|
|
33
34
|
|
|
34
35
|
requests, has_requests = optional_import("requests")
|
|
35
36
|
gdown, has_gdown = optional_import("gdown", "4.7.3")
|
|
@@ -177,6 +178,9 @@ def check_hash(filepath: PathLike, val: str | None = None, hash_type: str = "sha
|
|
|
177
178
|
The supported hash types are `"md5"`, `"sha1"`, `"sha256"`, `"sha512"`.
|
|
178
179
|
See also: :py:data:`monai.apps.utils.SUPPORTED_HASH_TYPES`.
|
|
179
180
|
|
|
181
|
+
.. versionchanged:: 1.7
|
|
182
|
+
The default `hash_type` changed from "md5" to "sha256" for stronger integrity verification.
|
|
183
|
+
Pass `hash_type="md5"` explicitly to verify against MD5 hashes.
|
|
180
184
|
"""
|
|
181
185
|
if val is None:
|
|
182
186
|
warnings.warn(f"No hash value provided for {filepath}; file integrity is NOT verified.", stacklevel=2)
|
|
@@ -204,7 +208,7 @@ def download_url(
|
|
|
204
208
|
url: str,
|
|
205
209
|
filepath: PathLike = "",
|
|
206
210
|
hash_val: str | None = None,
|
|
207
|
-
hash_type: str =
|
|
211
|
+
hash_type: str | None = None,
|
|
208
212
|
progress: bool = True,
|
|
209
213
|
**gdown_kwargs: Any,
|
|
210
214
|
) -> None:
|
|
@@ -217,7 +221,7 @@ def download_url(
|
|
|
217
221
|
If undefined, `os.path.basename(url)` will be used.
|
|
218
222
|
hash_val: expected hash value to validate the downloaded file.
|
|
219
223
|
if None, skip hash validation.
|
|
220
|
-
hash_type: type of hash algorithm to use, default is `"sha256"`.
|
|
224
|
+
hash_type: type of hash algorithm to use, default is None which will select `"sha256"`.
|
|
221
225
|
The supported hash types are `"md5"`, `"sha1"`, `"sha256"`, `"sha512"`.
|
|
222
226
|
progress: whether to display a progress bar.
|
|
223
227
|
gdown_kwargs: other args for `gdown` except for the `url`, `output` and `quiet`.
|
|
@@ -234,7 +238,23 @@ def download_url(
|
|
|
234
238
|
ContentTooShortError: See urllib.request.urlretrieve.
|
|
235
239
|
IOError: See urllib.request.urlretrieve.
|
|
236
240
|
HashCheckError: When the hash validation of the ``url`` downloaded file fails.
|
|
241
|
+
|
|
242
|
+
.. versionchanged:: 1.7
|
|
243
|
+
The default `hash_type` changed from "md5" to None for stronger integrity verification. If this is left None
|
|
244
|
+
when a `hash_val` value is provided, this will warn to explicitly set `hash_type` then choose sha256 hashing.
|
|
245
|
+
Pass `hash_type="md5"` explicitly to verify against MD5 hashes and suppress the warning. In MONAI 1.8 the
|
|
246
|
+
default will be set to "sha256".
|
|
237
247
|
"""
|
|
248
|
+
if hash_val is not None and hash_type is None:
|
|
249
|
+
warn_deprecated(
|
|
250
|
+
"monai.apps.utils.download_url",
|
|
251
|
+
'Default `hash_type` value changed to `None` from "md5" in MONAI 1.7, '
|
|
252
|
+
"set to explicit value to suppress this warning. Defaulting to sha256 checking. In MONAI 1.8 the "
|
|
253
|
+
'default will be set to "sha256".',
|
|
254
|
+
stacklevel=3,
|
|
255
|
+
)
|
|
256
|
+
hash_type = "sha256"
|
|
257
|
+
|
|
238
258
|
if not filepath:
|
|
239
259
|
filepath = Path(".", _basename(url)).resolve()
|
|
240
260
|
logger.info(f"Default downloading to '{filepath}'")
|
|
@@ -316,7 +336,7 @@ def extractall(
|
|
|
316
336
|
filepath: PathLike,
|
|
317
337
|
output_dir: PathLike = ".",
|
|
318
338
|
hash_val: str | None = None,
|
|
319
|
-
hash_type: str =
|
|
339
|
+
hash_type: str | None = None,
|
|
320
340
|
file_type: str = "",
|
|
321
341
|
has_base: bool = True,
|
|
322
342
|
) -> None:
|
|
@@ -329,7 +349,7 @@ def extractall(
|
|
|
329
349
|
output_dir: target directory to save extracted files.
|
|
330
350
|
hash_val: expected hash value to validate the compressed file.
|
|
331
351
|
if None, skip hash validation.
|
|
332
|
-
hash_type: type of hash algorithm to use, default is `"sha256"`.
|
|
352
|
+
hash_type: type of hash algorithm to use, default is None which will select `"sha256"`.
|
|
333
353
|
file_type: string of file type for decompressing. Leave it empty to infer the type from the filepath basename.
|
|
334
354
|
has_base: whether the extracted files have a base folder. This flag is used when checking if the existing
|
|
335
355
|
folder is a result of `extractall`, if it is, the extraction is skipped. For example, if A.zip is unzipped
|
|
@@ -340,7 +360,22 @@ def extractall(
|
|
|
340
360
|
HashCheckError: When the hash validation of the ``filepath`` compressed file fails.
|
|
341
361
|
NotImplementedError: When the ``filepath`` file extension is not one of [zip", "tar.gz", "tar"].
|
|
342
362
|
|
|
363
|
+
.. versionchanged:: 1.6.1
|
|
364
|
+
The default `hash_type` changed from "md5" to None for stronger integrity verification. If this is left None
|
|
365
|
+
when a `hash_val` value is provided, this will warn to explicitly set `hash_type` then choose sha256 hashing.
|
|
366
|
+
Pass `hash_type="md5"` explicitly to verify against MD5 hashes and suppress the warning. In MONAI 1.8 the
|
|
367
|
+
default will be set to "sha256".
|
|
343
368
|
"""
|
|
369
|
+
if hash_val is not None and hash_type is None:
|
|
370
|
+
warn_deprecated(
|
|
371
|
+
"monai.apps.utils.extractall",
|
|
372
|
+
'Default `hash_type` value changed to `None` from "md5" in MONAI 1.7, '
|
|
373
|
+
"set to an explicit value to suppress this warning. Defaulting to sha256 checking. In MONAI 1.8 the "
|
|
374
|
+
'default will be set to "sha256".',
|
|
375
|
+
stacklevel=3,
|
|
376
|
+
)
|
|
377
|
+
hash_type = "sha256"
|
|
378
|
+
|
|
344
379
|
filepath = Path(filepath)
|
|
345
380
|
if hash_val and not check_hash(filepath, hash_val, hash_type):
|
|
346
381
|
raise HashCheckError(
|
|
@@ -395,7 +430,7 @@ def download_and_extract(
|
|
|
395
430
|
filepath: PathLike = "",
|
|
396
431
|
output_dir: PathLike = ".",
|
|
397
432
|
hash_val: str | None = None,
|
|
398
|
-
hash_type: str =
|
|
433
|
+
hash_type: str | None = None,
|
|
399
434
|
file_type: str = "",
|
|
400
435
|
has_base: bool = True,
|
|
401
436
|
progress: bool = True,
|
|
@@ -411,7 +446,7 @@ def download_and_extract(
|
|
|
411
446
|
default is the current directory.
|
|
412
447
|
hash_val: expected hash value to validate the downloaded file.
|
|
413
448
|
if None, skip hash validation.
|
|
414
|
-
hash_type: type of hash algorithm to use, default is `"sha256"`.
|
|
449
|
+
hash_type: type of hash algorithm to use, default is None which will select `"sha256"`.
|
|
415
450
|
file_type: string of file type for decompressing. Leave it empty to infer the type from url's base file name.
|
|
416
451
|
has_base: whether the extracted files have a base folder. This flag is used when checking if the existing
|
|
417
452
|
folder is a result of `extractall`, if it is, the extraction is skipped. For example, if A.zip is unzipped
|
|
@@ -257,6 +257,8 @@ class GridPatchDataset(IterableDataset):
|
|
|
257
257
|
self.first_random = self.patch_transform.get_index_of_first(
|
|
258
258
|
lambda t: isinstance(t, RandomizableTrait) or not isinstance(t, Transform)
|
|
259
259
|
)
|
|
260
|
+
if self.first_random is None:
|
|
261
|
+
self.first_random = len(self.patch_transform.transforms)
|
|
260
262
|
|
|
261
263
|
if self.cache:
|
|
262
264
|
if isinstance(data, Iterator):
|
|
@@ -279,7 +281,11 @@ class GridPatchDataset(IterableDataset):
|
|
|
279
281
|
self.cache_num = min(int(self.set_num), int(len(mapping) * self.set_rate), len(mapping))
|
|
280
282
|
self._hash_keys = list(mapping)[: self.cache_num]
|
|
281
283
|
indices = list(mapping.values())[: self.cache_num]
|
|
282
|
-
|
|
284
|
+
cache_items = self._fill_cache(indices)
|
|
285
|
+
if cache_items:
|
|
286
|
+
self._cache, self._cache_other = zip(*cache_items) # type: ignore
|
|
287
|
+
else:
|
|
288
|
+
self._cache, self._cache_other = [], []
|
|
283
289
|
|
|
284
290
|
def _fill_cache(self, indices=None) -> list:
|
|
285
291
|
"""
|
|
@@ -339,12 +345,9 @@ class GridPatchDataset(IterableDataset):
|
|
|
339
345
|
|
|
340
346
|
def __iter__(self):
|
|
341
347
|
if self.cache:
|
|
342
|
-
cache_index = None
|
|
343
348
|
for image in super().__iter__():
|
|
344
349
|
key = self.hash_func(image)
|
|
345
|
-
if key in self._hash_keys
|
|
346
|
-
# if existing in cache, try to get the index in cache
|
|
347
|
-
cache_index = self._hash_keys.index(key)
|
|
350
|
+
cache_index = self._hash_keys.index(key) if key in self._hash_keys else None
|
|
348
351
|
if cache_index is None:
|
|
349
352
|
# no cache for this index, execute all the transforms directly
|
|
350
353
|
yield from self._generate_patches(self.patch_iter(image))
|
|
@@ -354,11 +357,11 @@ class GridPatchDataset(IterableDataset):
|
|
|
354
357
|
"Cache buffer is not initialized, please call `set_data()` before epoch begins."
|
|
355
358
|
)
|
|
356
359
|
data = self._cache[cache_index]
|
|
357
|
-
other = self._cache_other[cache_index]
|
|
358
360
|
|
|
359
361
|
# load data from cache and execute from the first random transform
|
|
360
362
|
data = deepcopy(data) if self.copy_cache else data
|
|
361
|
-
|
|
363
|
+
cached_patches = zip(data, self._cache_other[cache_index]) if self.with_coordinates else zip(data)
|
|
364
|
+
yield from self._generate_patches(cached_patches, start=self.first_random)
|
|
362
365
|
else:
|
|
363
366
|
for image in super().__iter__():
|
|
364
367
|
yield from self._generate_patches(self.patch_iter(image))
|
|
@@ -28,7 +28,8 @@ def create_test_image_2d(
|
|
|
28
28
|
num_seg_classes: int = 5,
|
|
29
29
|
channel_dim: int | None = None,
|
|
30
30
|
random_state: np.random.RandomState | None = None,
|
|
31
|
-
|
|
31
|
+
return_instance_id: bool = False,
|
|
32
|
+
) -> tuple[np.ndarray, np.ndarray] | tuple[np.ndarray, np.ndarray, np.ndarray]:
|
|
32
33
|
"""
|
|
33
34
|
Return a noisy 2D image with `num_objs` circles and a 2D mask image. The maximum and minimum radii of the circles
|
|
34
35
|
are given as `rad_max` and `rad_min`. The mask will have `num_seg_classes` number of classes for segmentations labeled
|
|
@@ -48,9 +49,13 @@ def create_test_image_2d(
|
|
|
48
49
|
channel_dim: if None, create an image without channel dimension, otherwise create
|
|
49
50
|
an image with channel dimension as first dim or last dim. Defaults to `None`.
|
|
50
51
|
random_state: the random generator to use. Defaults to `np.random`.
|
|
52
|
+
return_instance_id: if True, also return an instance ID mask where every generated
|
|
53
|
+
object is assigned a unique positive integer. Later objects overwrite earlier IDs
|
|
54
|
+
where they overlap, so fully covered objects may not appear in the mask. Defaults to `False`.
|
|
51
55
|
|
|
52
56
|
Returns:
|
|
53
|
-
|
|
57
|
+
A tuple of image and segmentation label arrays. If `return_instance_id=True`, also returns
|
|
58
|
+
an instance ID array as the third element.
|
|
54
59
|
"""
|
|
55
60
|
|
|
56
61
|
if rad_max <= rad_min:
|
|
@@ -62,9 +67,10 @@ def create_test_image_2d(
|
|
|
62
67
|
raise ValueError(f"the minimal size {min_size} of the image should be larger than `2 * rad_max` 2x{rad_max}.")
|
|
63
68
|
|
|
64
69
|
image = np.zeros((height, width))
|
|
70
|
+
instance_ids = np.zeros((height, width), dtype=np.int32) if return_instance_id else None
|
|
65
71
|
rs: np.random.RandomState = np.random.random.__self__ if random_state is None else random_state # type: ignore
|
|
66
72
|
|
|
67
|
-
for
|
|
73
|
+
for obj_id in range(1, num_objs + 1):
|
|
68
74
|
x = rs.randint(rad_max, height - rad_max)
|
|
69
75
|
y = rs.randint(rad_max, width - rad_max)
|
|
70
76
|
rad = rs.randint(rad_min, rad_max)
|
|
@@ -75,6 +81,8 @@ def create_test_image_2d(
|
|
|
75
81
|
image[circle] = np.ceil(rs.random() * num_seg_classes)
|
|
76
82
|
else:
|
|
77
83
|
image[circle] = rs.random() * 0.5 + 0.5
|
|
84
|
+
if instance_ids is not None:
|
|
85
|
+
instance_ids[circle] = obj_id
|
|
78
86
|
|
|
79
87
|
labels = np.ceil(image).astype(np.int32, copy=False)
|
|
80
88
|
|
|
@@ -87,10 +95,16 @@ def create_test_image_2d(
|
|
|
87
95
|
if channel_dim == 0:
|
|
88
96
|
noisyimage = noisyimage[None]
|
|
89
97
|
labels = labels[None]
|
|
98
|
+
if instance_ids is not None:
|
|
99
|
+
instance_ids = instance_ids[None]
|
|
90
100
|
else:
|
|
91
101
|
noisyimage = noisyimage[..., None]
|
|
92
102
|
labels = labels[..., None]
|
|
103
|
+
if instance_ids is not None:
|
|
104
|
+
instance_ids = instance_ids[..., None]
|
|
93
105
|
|
|
106
|
+
if instance_ids is not None:
|
|
107
|
+
return noisyimage, labels, instance_ids
|
|
94
108
|
return noisyimage, labels
|
|
95
109
|
|
|
96
110
|
|
|
@@ -105,7 +119,8 @@ def create_test_image_3d(
|
|
|
105
119
|
num_seg_classes: int = 5,
|
|
106
120
|
channel_dim: int | None = None,
|
|
107
121
|
random_state: np.random.RandomState | None = None,
|
|
108
|
-
|
|
122
|
+
return_instance_id: bool = False,
|
|
123
|
+
) -> tuple[np.ndarray, np.ndarray] | tuple[np.ndarray, np.ndarray, np.ndarray]:
|
|
109
124
|
"""
|
|
110
125
|
Return a noisy 3D image and segmentation.
|
|
111
126
|
|
|
@@ -122,9 +137,13 @@ def create_test_image_3d(
|
|
|
122
137
|
channel_dim: if None, create an image without channel dimension, otherwise create
|
|
123
138
|
an image with channel dimension as first dim or last dim. Defaults to `None`.
|
|
124
139
|
random_state: the random generator to use. Defaults to `np.random`.
|
|
140
|
+
return_instance_id: if True, also return an instance ID mask where every generated
|
|
141
|
+
object is assigned a unique positive integer. Later objects overwrite earlier IDs
|
|
142
|
+
where they overlap, so fully covered objects may not appear in the mask. Defaults to `False`.
|
|
125
143
|
|
|
126
144
|
Returns:
|
|
127
|
-
|
|
145
|
+
A tuple of image and segmentation label arrays. If `return_instance_id=True`, also returns
|
|
146
|
+
an instance ID array as the third element.
|
|
128
147
|
|
|
129
148
|
See also:
|
|
130
149
|
:py:meth:`~create_test_image_2d`
|
|
@@ -139,9 +158,10 @@ def create_test_image_3d(
|
|
|
139
158
|
raise ValueError(f"the minimal size {min_size} of the image should be larger than `2 * rad_max` 2x{rad_max}.")
|
|
140
159
|
|
|
141
160
|
image = np.zeros((height, width, depth))
|
|
161
|
+
instance_ids = np.zeros((height, width, depth), dtype=np.int32) if return_instance_id else None
|
|
142
162
|
rs: np.random.RandomState = np.random.random.__self__ if random_state is None else random_state # type: ignore
|
|
143
163
|
|
|
144
|
-
for
|
|
164
|
+
for obj_id in range(1, num_objs + 1):
|
|
145
165
|
x = rs.randint(rad_max, height - rad_max)
|
|
146
166
|
y = rs.randint(rad_max, width - rad_max)
|
|
147
167
|
z = rs.randint(rad_max, depth - rad_max)
|
|
@@ -153,6 +173,8 @@ def create_test_image_3d(
|
|
|
153
173
|
image[circle] = np.ceil(rs.random() * num_seg_classes)
|
|
154
174
|
else:
|
|
155
175
|
image[circle] = rs.random() * 0.5 + 0.5
|
|
176
|
+
if instance_ids is not None:
|
|
177
|
+
instance_ids[circle] = obj_id
|
|
156
178
|
|
|
157
179
|
labels = np.ceil(image).astype(np.int32, copy=False)
|
|
158
180
|
|
|
@@ -162,8 +184,17 @@ def create_test_image_3d(
|
|
|
162
184
|
if channel_dim is not None:
|
|
163
185
|
if not (isinstance(channel_dim, int) and channel_dim in (-1, 0, 3)):
|
|
164
186
|
raise AssertionError("invalid channel dim.")
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
187
|
+
if channel_dim == 0:
|
|
188
|
+
noisyimage = noisyimage[None]
|
|
189
|
+
labels = labels[None]
|
|
190
|
+
if instance_ids is not None:
|
|
191
|
+
instance_ids = instance_ids[None]
|
|
192
|
+
else:
|
|
193
|
+
noisyimage = noisyimage[..., None]
|
|
194
|
+
labels = labels[..., None]
|
|
195
|
+
if instance_ids is not None:
|
|
196
|
+
instance_ids = instance_ids[..., None]
|
|
168
197
|
|
|
198
|
+
if instance_ids is not None:
|
|
199
|
+
return noisyimage, labels, instance_ids
|
|
169
200
|
return noisyimage, labels
|
|
@@ -307,7 +307,13 @@ class ZarrAvgMerger(Merger):
|
|
|
307
307
|
self.value_store = zarr.storage.TempStore() if value_store is None else value_store # type: ignore
|
|
308
308
|
self.count_store = zarr.storage.TempStore() if count_store is None else count_store # type: ignore
|
|
309
309
|
|
|
310
|
-
|
|
310
|
+
# zarr 3.3 rejects boolean chunk arguments; `None` there means auto-chunking,
|
|
311
|
+
# which is what `chunks=True` meant before. On zarr < 3.3 `None` instead means
|
|
312
|
+
# a single whole-shape chunk, so the substitution must not be applied there.
|
|
313
|
+
if chunks is True and version_geq(get_package_version("zarr"), "3.3.0"):
|
|
314
|
+
self.chunks: Sequence[int] | bool | None = None
|
|
315
|
+
else:
|
|
316
|
+
self.chunks = chunks
|
|
311
317
|
|
|
312
318
|
# Initialize codecs/compressor attributes with proper types
|
|
313
319
|
self.codecs: list | None = None
|
|
@@ -51,8 +51,10 @@ class EmbeddingCollapseMetric(Metric):
|
|
|
51
51
|
Args:
|
|
52
52
|
reduction: how to aggregate individual scores into ``aggregate``.
|
|
53
53
|
``"max"`` returns the worst-case score (recommended for
|
|
54
|
-
safety-critical use)
|
|
55
|
-
|
|
54
|
+
safety-critical use), including the most collapsed class.
|
|
55
|
+
``"mean"`` returns the average of available scores, where all
|
|
56
|
+
per-class scores contribute a single term. ``"none"`` omits the
|
|
57
|
+
``aggregate`` key.
|
|
56
58
|
include_indicators: optional list of indicator names to compute.
|
|
57
59
|
If ``None``, all applicable indicators are computed.
|
|
58
60
|
Valid names: ``"centroid_similarity"``, ``"effective_rank"``,
|
|
@@ -162,7 +164,8 @@ def compute_embedding_collapse(
|
|
|
162
164
|
``None`` if ``target_embeddings`` not provided.
|
|
163
165
|
- ``separation``: silhouette-based inter-class separation score.
|
|
164
166
|
``None`` if sklearn unavailable or fewer than 2 classes.
|
|
165
|
-
- ``aggregate``: reduced
|
|
167
|
+
- ``aggregate``: reduced over the global indicators plus the worst
|
|
168
|
+
``per_class_rank_<cls>``. Omitted when ``reduction="none"``.
|
|
166
169
|
|
|
167
170
|
Raises:
|
|
168
171
|
ValueError: if inputs are invalid (shape, reduction, indicators).
|
|
@@ -180,6 +183,7 @@ def compute_embedding_collapse(
|
|
|
180
183
|
|
|
181
184
|
inc = set(include_indicators) if include_indicators is not None else None
|
|
182
185
|
scores: dict[str, torch.Tensor | None] = {}
|
|
186
|
+
per_class_scores: dict[str, torch.Tensor | None] = {}
|
|
183
187
|
|
|
184
188
|
# -- Label-dependent indicators
|
|
185
189
|
if labels is not None:
|
|
@@ -191,7 +195,8 @@ def compute_embedding_collapse(
|
|
|
191
195
|
scores["centroid_similarity"] = _centroid_similarity(emb, lbl)
|
|
192
196
|
|
|
193
197
|
if inc is None or "per_class_rank" in inc:
|
|
194
|
-
|
|
198
|
+
per_class_scores = _per_class_rank(emb, lbl)
|
|
199
|
+
scores.update(per_class_scores)
|
|
195
200
|
|
|
196
201
|
if inc is None or "separation" in inc:
|
|
197
202
|
scores["separation"] = _separation(emb, lbl)
|
|
@@ -218,6 +223,11 @@ def compute_embedding_collapse(
|
|
|
218
223
|
if reduction != "none":
|
|
219
224
|
primary = {"centroid_similarity", "effective_rank_score", "domain_shift", "separation"}
|
|
220
225
|
available = [v.to(device=emb.device) for k, v in scores.items() if k in primary and v is not None]
|
|
226
|
+
# Per-class collapse is reduced to its worst class before joining the pool, so that
|
|
227
|
+
# `mean` keeps one vote per indicator regardless of how many classes are present.
|
|
228
|
+
by_class = [v.to(device=emb.device) for v in per_class_scores.values() if v is not None]
|
|
229
|
+
if by_class:
|
|
230
|
+
available.append(torch.stack(by_class).max())
|
|
221
231
|
if not available:
|
|
222
232
|
scores["aggregate"] = None
|
|
223
233
|
elif reduction == "max":
|
|
@@ -82,7 +82,7 @@ def _cov(input_data: torch.Tensor, rowvar: bool = True) -> torch.Tensor:
|
|
|
82
82
|
|
|
83
83
|
def _sqrtm(input_data: torch.Tensor) -> torch.Tensor:
|
|
84
84
|
"""Compute the square root of a matrix."""
|
|
85
|
-
scipy_res
|
|
85
|
+
scipy_res = scipy.linalg.sqrtm(input_data.detach().cpu().numpy().astype(np.float64))
|
|
86
86
|
return torch.from_numpy(scipy_res)
|
|
87
87
|
|
|
88
88
|
|
|
@@ -152,16 +152,10 @@ def compute_iou(
|
|
|
152
152
|
if y.shape != y_pred.shape:
|
|
153
153
|
raise ValueError(f"y_pred and y should have same shapes, got {y_pred.shape} and {y.shape}.")
|
|
154
154
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
y = y.clone()
|
|
160
|
-
y_pred[:, ignore_channel] = 0
|
|
161
|
-
y[:, ignore_channel] = 0
|
|
162
|
-
mask = None
|
|
163
|
-
else:
|
|
164
|
-
mask = create_ignore_mask(original_y if ignore_index is not None else y, ignore_index)
|
|
155
|
+
# Use the same spatial masking as DiceHelper so both metrics exclude the
|
|
156
|
+
# same voxels: zeroing the ignored channel alone would leave voxels of the
|
|
157
|
+
# ignored class counting as false positives for the other classes
|
|
158
|
+
mask = create_ignore_mask(original_y, ignore_index)
|
|
165
159
|
if mask is not None:
|
|
166
160
|
if mask.shape != y_pred.shape:
|
|
167
161
|
mask = mask.expand_as(y_pred)
|
|
@@ -350,7 +350,7 @@ class DiNTS(nn.Module):
|
|
|
350
350
|
use_downsample: use downsample in the stem.
|
|
351
351
|
If ``False``, the search space will be in resolution [1, 1/2, 1/4, 1/8],
|
|
352
352
|
if ``True``, the search space will be in resolution [1/2, 1/4, 1/8, 1/16].
|
|
353
|
-
node_a: node activation numpy
|
|
353
|
+
node_a: node activation matrix (numpy array or tensor). Its shape is `(num_blocks + 1, num_depths)`.
|
|
354
354
|
+1 for multi-resolution inputs.
|
|
355
355
|
In model searching stage, ``node_a`` can be None. In deployment stage, ``node_a`` cannot be None.
|
|
356
356
|
"""
|
|
@@ -544,8 +544,8 @@ class TopologyConstruction(nn.Module):
|
|
|
544
544
|
The base class for `TopologyInstance` and `TopologySearch`.
|
|
545
545
|
|
|
546
546
|
Args:
|
|
547
|
-
arch_code: `[arch_code_a, arch_code_c]`, numpy arrays
|
|
548
|
-
the model.
|
|
547
|
+
arch_code: `[arch_code_a, arch_code_c]`, numpy arrays, torch tensors or nested lists (anything
|
|
548
|
+
accepted by ``torch.as_tensor``). The architecture codes defining the model.
|
|
549
549
|
For example, for a ``num_depths=4, num_blocks=12`` search space:
|
|
550
550
|
|
|
551
551
|
- `arch_code_a` is a 12x10 (10 paths) binary matrix representing if a path is activated.
|
|
@@ -631,8 +631,12 @@ class TopologyConstruction(nn.Module):
|
|
|
631
631
|
arch_code_a = torch.ones((self.num_blocks, len(self.arch_code2out))).to(self.device)
|
|
632
632
|
arch_code_c = torch.ones((self.num_blocks, len(self.arch_code2out), self.num_cell_ops)).to(self.device)
|
|
633
633
|
else:
|
|
634
|
-
|
|
635
|
-
|
|
634
|
+
# accept numpy arrays (legacy search checkpoints), torch tensors (checkpoints that are
|
|
635
|
+
# loadable with ``torch.load(weights_only=True)``) or nested lists (JSON/YAML configs)
|
|
636
|
+
arch_code_a = torch.as_tensor(arch_code[0], device=self.device)
|
|
637
|
+
arch_code_c = F.one_hot(
|
|
638
|
+
torch.as_tensor(arch_code[1], device=self.device).to(torch.int64), self.num_cell_ops
|
|
639
|
+
)
|
|
636
640
|
|
|
637
641
|
self.arch_code_a = arch_code_a
|
|
638
642
|
self.arch_code_c = arch_code_c
|
|
@@ -294,8 +294,19 @@ class AffineHead(nn.Module):
|
|
|
294
294
|
return grid_warped
|
|
295
295
|
|
|
296
296
|
def forward(self, x: list[torch.Tensor], image_size: list[int]) -> torch.Tensor:
|
|
297
|
+
"""
|
|
298
|
+
Predict an affine transform from the first feature map and return it as a displacement field.
|
|
299
|
+
|
|
300
|
+
Args:
|
|
301
|
+
x: feature maps from the network; only the first, ``x[0]``, is used. The reference grid is moved to its
|
|
302
|
+
device and dtype, so a network cast to half precision stays in half precision.
|
|
303
|
+
image_size: spatial size of the input image; not used by this head.
|
|
304
|
+
|
|
305
|
+
Returns:
|
|
306
|
+
The displacement field, the warped reference grid minus the reference grid.
|
|
307
|
+
"""
|
|
297
308
|
f = x[0]
|
|
298
|
-
self.grid = self.grid.to(device=f.device)
|
|
309
|
+
self.grid = self.grid.to(device=f.device, dtype=f.dtype)
|
|
299
310
|
theta = self.fc(f.reshape(f.shape[0], -1))
|
|
300
311
|
if self.save_theta:
|
|
301
312
|
self.theta = theta.detach()
|
|
@@ -298,6 +298,7 @@ from .post.array import (
|
|
|
298
298
|
KeepLargestConnectedComponent,
|
|
299
299
|
LabelFilter,
|
|
300
300
|
LabelToContour,
|
|
301
|
+
MarchingCubes,
|
|
301
302
|
MeanEnsemble,
|
|
302
303
|
ProbNMS,
|
|
303
304
|
RemoveSmallObjects,
|
|
@@ -335,6 +336,9 @@ from .post.dictionary import (
|
|
|
335
336
|
LabelToContourD,
|
|
336
337
|
LabelToContourd,
|
|
337
338
|
LabelToContourDict,
|
|
339
|
+
MarchingCubesD,
|
|
340
|
+
MarchingCubesd,
|
|
341
|
+
MarchingCubesDict,
|
|
338
342
|
MeanEnsembleD,
|
|
339
343
|
MeanEnsembled,
|
|
340
344
|
MeanEnsembleDict,
|
|
@@ -34,6 +34,7 @@ from monai.transforms.utils import (
|
|
|
34
34
|
distance_transform_edt,
|
|
35
35
|
fill_holes,
|
|
36
36
|
get_largest_connected_component_mask,
|
|
37
|
+
get_marching_cubes_surface,
|
|
37
38
|
get_unique_labels,
|
|
38
39
|
remove_small_objects,
|
|
39
40
|
)
|
|
@@ -63,6 +64,7 @@ __all__ = [
|
|
|
63
64
|
"Invert",
|
|
64
65
|
"GenerateHeatmap",
|
|
65
66
|
"DistanceTransformEDT",
|
|
67
|
+
"MarchingCubes",
|
|
66
68
|
]
|
|
67
69
|
|
|
68
70
|
|
|
@@ -644,7 +646,6 @@ class LabelToContour(Transform):
|
|
|
644
646
|
|
|
645
647
|
|
|
646
648
|
class Ensemble:
|
|
647
|
-
|
|
648
649
|
@staticmethod
|
|
649
650
|
def get_stacked_torch(img: Sequence[NdarrayOrTensor] | NdarrayOrTensor) -> torch.Tensor:
|
|
650
651
|
"""Get either a sequence or single instance of np.ndarray/torch.Tensor. Return single torch.Tensor."""
|
|
@@ -1187,3 +1188,90 @@ class DistanceTransformEDT(Transform):
|
|
|
1187
1188
|
An array with the same shape and data type as img
|
|
1188
1189
|
"""
|
|
1189
1190
|
return distance_transform_edt(img=img, sampling=self.sampling) # type: ignore
|
|
1191
|
+
|
|
1192
|
+
|
|
1193
|
+
class MarchingCubes(Transform):
|
|
1194
|
+
"""
|
|
1195
|
+
Extract a surface mesh from a 3D segmentation using marching cubes.
|
|
1196
|
+
|
|
1197
|
+
Thin wrapper around :func:`monai.transforms.utils.get_marching_cubes_surface`
|
|
1198
|
+
(`skimage.measure.marching_cubes`). The input is a channel-first volume with
|
|
1199
|
+
shape ``(C, M, N, P)``; marching cubes runs per channel on the CPU (scikit-image
|
|
1200
|
+
has no GPU kernel, CUDA inputs are moved to CPU first).
|
|
1201
|
+
|
|
1202
|
+
Note:
|
|
1203
|
+
The output is a mesh, not an image, so it cannot be composed with further
|
|
1204
|
+
image transforms or inverted. Place it at the end of the pipeline.
|
|
1205
|
+
For STL export, smoothing, or physical-space
|
|
1206
|
+
mapping see ``monai.deploy`` ``STLConversionOperator``.
|
|
1207
|
+
|
|
1208
|
+
Args:
|
|
1209
|
+
level: isosurface value, defaults to 0.5 for binary masks.
|
|
1210
|
+
spacing: voxel spacing along each spatial dim. A single number is used for
|
|
1211
|
+
all axes. If ``None`` and the input is a MetaTensor, its pixdim is used,
|
|
1212
|
+
otherwise unity spacing is assumed.
|
|
1213
|
+
step_size: step size in voxels for marching cubes. Larger steps are faster
|
|
1214
|
+
but yield coarser meshes.
|
|
1215
|
+
allow_degenerate: allow degenerate triangles in the mesh.
|
|
1216
|
+
method: one of ("lewiner", "lorensen"), see scikit-image docs.
|
|
1217
|
+
return_normals_values: if ``True``, also return vertex normals and values,
|
|
1218
|
+
i.e. ``(verts, faces, normals, values)`` matching scikit-image output.
|
|
1219
|
+
Defaults to ``False`` (``(verts, faces)`` only).
|
|
1220
|
+
|
|
1221
|
+
Example:
|
|
1222
|
+
>>> import numpy as np
|
|
1223
|
+
>>> from monai.transforms import MarchingCubes
|
|
1224
|
+
>>> vol = np.zeros((1, 10, 10, 10), np.float32); vol[0, 3:7, 3:7, 3:7] = 1.0
|
|
1225
|
+
>>> verts, faces = MarchingCubes(level=0.5)(vol)
|
|
1226
|
+
>>> verts.shape[1], faces.shape[1]
|
|
1227
|
+
(3, 3)
|
|
1228
|
+
"""
|
|
1229
|
+
|
|
1230
|
+
backend = [TransformBackends.NUMPY, TransformBackends.TORCH]
|
|
1231
|
+
|
|
1232
|
+
def __init__(
|
|
1233
|
+
self,
|
|
1234
|
+
level: float | None = 0.5,
|
|
1235
|
+
spacing: Sequence[float] | float | None = None,
|
|
1236
|
+
step_size: int = 1,
|
|
1237
|
+
allow_degenerate: bool = True,
|
|
1238
|
+
method: str = "lewiner",
|
|
1239
|
+
return_normals_values: bool = False,
|
|
1240
|
+
) -> None:
|
|
1241
|
+
super().__init__()
|
|
1242
|
+
self.level = level
|
|
1243
|
+
self.spacing = spacing
|
|
1244
|
+
self.step_size = step_size
|
|
1245
|
+
self.allow_degenerate = allow_degenerate
|
|
1246
|
+
self.method = method
|
|
1247
|
+
self.return_normals_values = return_normals_values
|
|
1248
|
+
|
|
1249
|
+
def __call__(self, img: NdarrayOrTensor):
|
|
1250
|
+
"""
|
|
1251
|
+
Args:
|
|
1252
|
+
img: channel-first volume with shape (C, M, N, P).
|
|
1253
|
+
|
|
1254
|
+
Returns:
|
|
1255
|
+
``(vertices, faces)`` tuple for single-channel input, or a list of one
|
|
1256
|
+
such tuple per channel for multi-channel input. Items have shapes ``(V, 3)``
|
|
1257
|
+
and ``(F, 3)`` and match the input type: numpy arrays for array input, plain
|
|
1258
|
+
``torch.Tensor`` on the input device for tensor input. With ``return_normals_values=True`` each item
|
|
1259
|
+
is ``(verts, faces, normals, values)`` instead.
|
|
1260
|
+
|
|
1261
|
+
Raises:
|
|
1262
|
+
ValueError: when ``img`` is not a channel-first 3D volume or has no channels.
|
|
1263
|
+
"""
|
|
1264
|
+
if img.ndim != 4 or img.shape[0] == 0:
|
|
1265
|
+
raise ValueError(f"MarchingCubes requires a channel-first 3D volume (C, M, N, P), got shape {img.shape}.")
|
|
1266
|
+
results = []
|
|
1267
|
+
for c in range(img.shape[0]):
|
|
1268
|
+
verts, faces, normals, values = get_marching_cubes_surface(
|
|
1269
|
+
img[c],
|
|
1270
|
+
level=self.level,
|
|
1271
|
+
spacing=self.spacing,
|
|
1272
|
+
step_size=self.step_size,
|
|
1273
|
+
allow_degenerate=self.allow_degenerate,
|
|
1274
|
+
method=self.method,
|
|
1275
|
+
)
|
|
1276
|
+
results.append((verts, faces, normals, values) if self.return_normals_values else (verts, faces))
|
|
1277
|
+
return results[0] if len(results) == 1 else results
|