monai-weekly 1.7.dev2627__tar.gz → 1.7.dev2628__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.dev2627/monai_weekly.egg-info → monai_weekly-1.7.dev2628}/PKG-INFO +3 -1
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/__init__.py +1 -1
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/_version.py +3 -3
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/image_reader.py +13 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/__init__.py +7 -0
- monai_weekly-1.7.dev2628/monai/networks/blocks/hyena.py +555 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/warp.py +4 -1
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/__init__.py +1 -0
- monai_weekly-1.7.dev2628/monai/networks/nets/hyena_nd_unetr.py +151 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/swin_unetr.py +223 -55
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/intensity/array.py +2 -5
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628/monai_weekly.egg-info}/PKG-INFO +3 -1
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai_weekly.egg-info/SOURCES.txt +2 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai_weekly.egg-info/requires.txt +3 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/setup.cfg +2 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/LICENSE +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/MANIFEST.in +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/README.md +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/_extensions/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/_extensions/gmm/gmm.cpp +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/_extensions/gmm/gmm.h +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/_extensions/gmm/gmm_cpu.cpp +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/_extensions/gmm/gmm_cuda.cu +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/_extensions/gmm/gmm_cuda_linalg.cuh +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/_extensions/loader.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/auto3dseg/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/auto3dseg/__main__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/auto3dseg/auto_runner.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/auto3dseg/bundle_gen.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/auto3dseg/data_analyzer.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/auto3dseg/ensemble_builder.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/auto3dseg/hpo_gen.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/auto3dseg/transforms.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/auto3dseg/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/datasets.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/deepedit/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/deepedit/interaction.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/deepedit/transforms.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/deepgrow/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/deepgrow/dataset.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/deepgrow/interaction.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/deepgrow/transforms.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/metrics/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/metrics/coco.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/metrics/matching.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/networks/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/networks/retinanet_detector.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/networks/retinanet_network.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/transforms/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/transforms/array.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/transforms/box_ops.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/transforms/dictionary.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/utils/ATSS_matcher.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/utils/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/utils/anchor_utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/utils/box_coder.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/utils/box_selector.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/utils/detector_utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/utils/hard_negative_sampler.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/detection/utils/predict_utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/generation/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/generation/maisi/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/generation/maisi/networks/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/generation/maisi/networks/autoencoderkl_maisi.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/generation/maisi/networks/controlnet_maisi.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/generation/maisi/networks/diffusion_model_unet_maisi.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/mmars/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/mmars/mmars.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/mmars/model_desc.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/nnunet/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/nnunet/__main__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/nnunet/nnunet_bundle.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/nnunet/nnunetv2_runner.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/nnunet/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/nuclick/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/nuclick/transforms.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/engines/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/engines/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/handlers/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/handlers/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/inferers/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/inferers/inferer.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/losses/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/losses/hovernet_loss.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/metrics/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/metrics/lesion_froc.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/transforms/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/transforms/post/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/transforms/post/array.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/transforms/post/dictionary.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/transforms/stain/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/transforms/stain/array.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/transforms/stain/dictionary.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/pathology/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/reconstruction/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/reconstruction/complex_utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/reconstruction/fastmri_reader.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/reconstruction/mri_utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/reconstruction/networks/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/reconstruction/networks/blocks/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/reconstruction/networks/blocks/varnetblock.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/reconstruction/networks/nets/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/reconstruction/networks/nets/coil_sensitivity_model.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/reconstruction/networks/nets/complex_unet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/reconstruction/networks/nets/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/reconstruction/networks/nets/varnet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/reconstruction/transforms/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/reconstruction/transforms/array.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/reconstruction/transforms/dictionary.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/tcia/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/tcia/label_desc.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/tcia/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/vista3d/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/vista3d/inferer.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/vista3d/sampler.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/apps/vista3d/transforms.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/auto3dseg/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/auto3dseg/algo_gen.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/auto3dseg/analyzer.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/auto3dseg/operations.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/auto3dseg/seg_summarizer.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/auto3dseg/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/bundle/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/bundle/__main__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/bundle/config_item.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/bundle/config_parser.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/bundle/properties.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/bundle/reference_resolver.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/bundle/scripts.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/bundle/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/bundle/workflows.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/config/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/config/deviceconfig.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/config/type_definitions.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/box_utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/csv_saver.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/dataloader.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/dataset.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/dataset_summary.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/decathlon_datalist.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/fft_utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/folder_layout.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/grid_dataset.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/image_dataset.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/image_writer.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/iterable_dataset.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/itk_torch_bridge.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/meta_obj.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/meta_tensor.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/samplers.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/synthetic.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/test_time_augmentation.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/thread_buffer.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/torchscript_utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/ultrasound_confidence_map.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/video_dataset.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/wsi_datasets.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/data/wsi_reader.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/engines/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/engines/evaluator.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/engines/trainer.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/engines/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/engines/workflow.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/fl/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/fl/client/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/fl/client/client_algo.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/fl/client/monai_algo.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/fl/utils/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/fl/utils/constants.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/fl/utils/exchange_object.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/fl/utils/filters.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/average_precision.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/calibration.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/checkpoint_loader.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/checkpoint_saver.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/classification_saver.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/clearml_handlers.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/confusion_matrix.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/decollate_batch.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/earlystop_handler.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/garbage_collector.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/hausdorff_distance.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/ignite_metric.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/logfile_handler.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/lr_schedule_handler.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/mean_dice.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/mean_iou.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/metric_logger.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/metrics_reloaded_handler.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/metrics_saver.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/mlflow_handler.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/nvtx_handlers.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/panoptic_quality.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/parameter_scheduler.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/postprocessing.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/probability_maps.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/regression_metrics.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/roc_auc.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/smartcache_handler.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/stats_handler.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/surface_distance.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/tensorboard_handlers.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/trt_handler.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/handlers/validation_handler.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/inferers/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/inferers/inferer.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/inferers/merger.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/inferers/splitter.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/inferers/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/adversarial_loss.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/aucm_loss.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/barlow_twins.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/cldice.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/contrastive.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/deform.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/dice.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/ds_loss.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/focal_loss.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/giou_loss.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/hausdorff_loss.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/image_dissimilarity.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/mcc_loss.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/multi_scale.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/nacl_loss.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/perceptual.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/spatial_mask.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/spectral_loss.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/ssim_loss.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/sure_loss.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/tversky.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/unified_focal_loss.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/losses/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/absolute_volume_difference.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/active_learning_metrics.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/average_precision.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/calibration.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/confusion_matrix.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/cumulative_average.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/embedding_collapse.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/f_beta_score.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/fid.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/froc.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/generalized_dice.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/hausdorff_distance.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/loss_metric.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/meandice.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/meaniou.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/metric.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/mmd.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/panoptic_quality.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/regression.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/rocauc.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/surface_dice.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/surface_distance.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/metrics/wrapper.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/acti_norm.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/activation.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/activation_checkpointing.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/aspp.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/attention_utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/backbone_fpn_utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/cablock.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/convolutions.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/crf.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/crossattention.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/denseblock.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/dints_block.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/downsample.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/dynunet_block.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/encoder.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/fcn.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/feature_pyramid_network.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/fft_utils_t.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/localnet_block.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/mednext_block.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/mlp.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/patchembedding.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/pos_embed_utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/regunet_block.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/rel_pos_embedding.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/segresnet_block.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/selfattention.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/spade_norm.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/spatialattention.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/squeeze_and_excitation.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/text_embedding.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/transformerblock.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/unetr_block.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/blocks/upsample.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/layers/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/layers/conjugate_gradient.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/layers/convutils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/layers/drop_path.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/layers/factories.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/layers/filtering.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/layers/gmm.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/layers/simplelayers.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/layers/spatial_transforms.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/layers/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/layers/vector_quantizer.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/layers/weight_init.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/ahnet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/attentionunet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/autoencoder.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/autoencoderkl.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/basic_unet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/basic_unetplusplus.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/cell_sam_wrapper.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/classifier.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/controlnet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/daf3d.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/densenet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/diffusion_model_unet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/dints.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/dynunet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/efficientnet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/flexible_unet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/fullyconnectednet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/generator.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/highresnet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/hovernet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/masked_autoencoder_vit.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/mednext.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/milmodel.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/netadapter.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/patchgan_discriminator.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/quicknat.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/regressor.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/regunet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/resnet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/restormer.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/segresnet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/segresnet_ds.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/senet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/spade_autoencoderkl.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/spade_diffusion_model_unet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/spade_network.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/torchvision_fc.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/transchex.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/transformer.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/unet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/unetr.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/varautoencoder.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/vista3d.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/vit.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/vitautoenc.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/vnet.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/voxelmorph.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/nets/vqvae.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/schedulers/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/schedulers/ddim.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/schedulers/ddpm.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/schedulers/pndm.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/schedulers/rectified_flow.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/schedulers/scheduler.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/trt_compiler.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/networks/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/optimizers/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/optimizers/lr_finder.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/optimizers/lr_scheduler.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/optimizers/novograd.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/optimizers/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/py.typed +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/adaptors.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/compose.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/croppad/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/croppad/array.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/croppad/batch.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/croppad/dictionary.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/croppad/functional.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/intensity/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/intensity/dictionary.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/inverse.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/inverse_batch_transform.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/io/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/io/array.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/io/dictionary.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/lazy/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/lazy/array.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/lazy/dictionary.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/lazy/functional.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/lazy/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/meta_utility/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/meta_utility/dictionary.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/nvtx.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/post/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/post/array.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/post/dictionary.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/regularization/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/regularization/array.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/regularization/dictionary.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/signal/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/signal/array.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/signal/dictionary.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/smooth_field/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/smooth_field/array.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/smooth_field/dictionary.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/spatial/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/spatial/array.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/spatial/dictionary.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/spatial/functional.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/traits.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/transform.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/utility/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/utility/array.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/utility/dictionary.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/utils_create_transform_ims.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/utils_morphological_ops.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/transforms/utils_pytorch_numpy_unification.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/utils/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/utils/component_store.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/utils/decorators.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/utils/deprecate_utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/utils/dist.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/utils/enums.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/utils/jupyter_utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/utils/misc.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/utils/module.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/utils/nvtx.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/utils/ordering.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/utils/profiling.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/utils/state_cacher.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/utils/tf32.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/utils/type_conversion.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/visualize/__init__.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/visualize/class_activation_maps.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/visualize/gradient_based.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/visualize/img2tensorboard.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/visualize/occlusion_sensitivity.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/visualize/utils.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai/visualize/visualizer.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai_weekly.egg-info/dependency_links.txt +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai_weekly.egg-info/not-zip-safe +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/monai_weekly.egg-info/top_level.txt +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/pyproject.toml +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/setup.py +0 -0
- {monai_weekly-1.7.dev2627 → monai_weekly-1.7.dev2628}/versioneer.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: monai-weekly
|
|
3
|
-
Version: 1.7.
|
|
3
|
+
Version: 1.7.dev2628
|
|
4
4
|
Summary: AI Toolkit for Healthcare Imaging
|
|
5
5
|
Home-page: https://project-monai.github.io/
|
|
6
6
|
Author: MONAI Consortium
|
|
@@ -117,6 +117,8 @@ Provides-Extra: pandas
|
|
|
117
117
|
Requires-Dist: pandas; extra == "pandas"
|
|
118
118
|
Provides-Extra: einops
|
|
119
119
|
Requires-Dist: einops; extra == "einops"
|
|
120
|
+
Provides-Extra: hyena
|
|
121
|
+
Requires-Dist: nvsubquadratic>=0.1.1; extra == "hyena"
|
|
120
122
|
Provides-Extra: transformers
|
|
121
123
|
Requires-Dist: transformers<4.41.0,>=4.36.0; python_version <= "3.10" and extra == "transformers"
|
|
122
124
|
Provides-Extra: mlflow
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2026-07-
|
|
11
|
+
"date": "2026-07-12T03:05:12+0000",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "1.7.
|
|
14
|
+
"full-revisionid": "fefd2105dfb46d8321fafd96a482d83e430e372b",
|
|
15
|
+
"version": "1.7.dev2628"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -735,9 +735,22 @@ class PydicomReader(ImageReader):
|
|
|
735
735
|
metadata: metadata with dict type.
|
|
736
736
|
lps_to_ras: whether to convert the affine matrix from "LPS" to "RAS". Defaults to True.
|
|
737
737
|
|
|
738
|
+
Warns:
|
|
739
|
+
UserWarning: when ImageOrientationPatient (00200037) or ImagePositionPatient
|
|
740
|
+
(00200032) is missing from metadata. The affine matrix is set to identity,
|
|
741
|
+
which may be incorrect. Common with multiframe DICOM files.
|
|
742
|
+
|
|
738
743
|
"""
|
|
739
744
|
affine: np.ndarray = np.eye(4)
|
|
740
745
|
if not ("00200037" in metadata and "00200032" in metadata):
|
|
746
|
+
warnings.warn(
|
|
747
|
+
"PydicomReader: ImageOrientationPatient (0020,0037) and/or "
|
|
748
|
+
"ImagePositionPatient (0020,0032) tags are missing, so the affine "
|
|
749
|
+
"matrix cannot be derived and defaults to the identity. The image "
|
|
750
|
+
"orientation and spacing may be incorrect (e.g. for multi-frame "
|
|
751
|
+
"Enhanced DICOM); consider using ITKReader for such files.",
|
|
752
|
+
stacklevel=2,
|
|
753
|
+
)
|
|
741
754
|
return affine
|
|
742
755
|
# "00200037" is the tag of `ImageOrientationPatient`
|
|
743
756
|
rx, ry, rz, cx, cy, cz = metadata["00200037"]["Value"]
|
|
@@ -26,6 +26,13 @@ from .dynunet_block import UnetBasicBlock, UnetOutBlock, UnetResBlock, UnetUpBlo
|
|
|
26
26
|
from .encoder import BaseEncoder
|
|
27
27
|
from .fcn import FCN, GCN, MCFCN, Refine
|
|
28
28
|
from .feature_pyramid_network import ExtraFPNBlock, FeaturePyramidNetwork, LastLevelMaxPool, LastLevelP6P7
|
|
29
|
+
from .hyena import (
|
|
30
|
+
DepthwiseFFTConv2d,
|
|
31
|
+
DepthwiseFFTConv3d,
|
|
32
|
+
HyenaMixer,
|
|
33
|
+
HyenaTransformerBlock,
|
|
34
|
+
is_nvsubquadratic_available,
|
|
35
|
+
)
|
|
29
36
|
from .localnet_block import LocalNetDownSampleBlock, LocalNetFeatureExtractorBlock, LocalNetUpSampleBlock
|
|
30
37
|
from .mednext_block import MedNeXtBlock, MedNeXtDownBlock, MedNeXtOutBlock, MedNeXtUpBlock
|
|
31
38
|
from .mlp import MLPBlock
|
|
@@ -0,0 +1,555 @@
|
|
|
1
|
+
# Copyright (c) MONAI Consortium
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
7
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
8
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
+
# See the License for the specific language governing permissions and
|
|
10
|
+
# limitations under the License.
|
|
11
|
+
"""
|
|
12
|
+
HyenaND-based building blocks for MONAI networks.
|
|
13
|
+
|
|
14
|
+
These blocks provide a subquadratic O(N log N) alternative to windowed self-attention
|
|
15
|
+
in transformer-style segmentation networks. The operator is HyenaND from the
|
|
16
|
+
``nvsubquadratic`` package, gated through a thin :class:`HyenaMixer` and wrapped in
|
|
17
|
+
the conventional pre-norm / MLP residual pattern by :class:`HyenaTransformerBlock`.
|
|
18
|
+
|
|
19
|
+
The supporting :class:`DepthwiseFFTConv2d` / :class:`DepthwiseFFTConv3d` classes are
|
|
20
|
+
drop-in depthwise convolutions implemented via FFT. They preserve the
|
|
21
|
+
``nn.Conv{2,3}d`` weight layout and ``isinstance`` relationship but route the forward
|
|
22
|
+
pass through ``torch.fft.rfftn`` to avoid PyTorch's INT32 unfold limit, which caps
|
|
23
|
+
``F.conv3d`` at ROI ~128 for typical medical-imaging channel counts.
|
|
24
|
+
|
|
25
|
+
``nvsubquadratic`` is an optional dependency. The Hyena classes raise ``ImportError``
|
|
26
|
+
with an install hint at construction time if the library is unavailable; the
|
|
27
|
+
FFT-conv classes have no such dependency and always work.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
from __future__ import annotations
|
|
31
|
+
|
|
32
|
+
from typing import cast
|
|
33
|
+
|
|
34
|
+
import torch
|
|
35
|
+
import torch.nn as nn
|
|
36
|
+
from torch.nn import LayerNorm
|
|
37
|
+
|
|
38
|
+
from monai.networks.blocks.mlp import MLPBlock
|
|
39
|
+
from monai.networks.layers.drop_path import DropPath
|
|
40
|
+
from monai.utils import optional_import
|
|
41
|
+
|
|
42
|
+
__all__ = [
|
|
43
|
+
"DepthwiseFFTConv2d",
|
|
44
|
+
"DepthwiseFFTConv3d",
|
|
45
|
+
"HyenaMixer",
|
|
46
|
+
"HyenaTransformerBlock",
|
|
47
|
+
"is_nvsubquadratic_available",
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
# Optional ``nvsubquadratic`` symbols. Resolved at module-import time; the missing-dep
|
|
51
|
+
# error is raised lazily inside the consuming class ``__init__``. Every symbol the Hyena
|
|
52
|
+
# classes use carries its own availability flag so a partial / broken install (e.g.
|
|
53
|
+
# ``lazy_config`` present but ``modules.hyena_nd`` missing) reports unavailable rather than
|
|
54
|
+
# failing later with an opaque ``AttributeError``.
|
|
55
|
+
_LazyConfig, _has_lazyconfig = optional_import("nvsubquadratic.lazy_config", name="LazyConfig")
|
|
56
|
+
_instantiate, _has_instantiate = optional_import("nvsubquadratic.lazy_config", name="instantiate")
|
|
57
|
+
_Hyena, _has_hyena = optional_import("nvsubquadratic.modules.hyena_nd", name="Hyena")
|
|
58
|
+
_CKConvND, _has_ckconv = optional_import("nvsubquadratic.modules.ckconv_nd", name="CKConvND")
|
|
59
|
+
_SIRENKernelND, _has_siren = optional_import("nvsubquadratic.modules.kernels_nd", name="SIRENKernelND")
|
|
60
|
+
_GaussianModulationND, _has_gaussian = optional_import("nvsubquadratic.modules.masks_nd", name="GaussianModulationND")
|
|
61
|
+
_has_nvsubq = all((_has_lazyconfig, _has_instantiate, _has_hyena, _has_ckconv, _has_siren, _has_gaussian))
|
|
62
|
+
|
|
63
|
+
_NVSUBQ_INSTALL_HINT = (
|
|
64
|
+
"HyenaND operators require the optional 'nvsubquadratic' package (Python >= 3.10). "
|
|
65
|
+
"Install it with: pip install 'monai[hyena]' "
|
|
66
|
+
"(equivalently: pip install 'nvsubquadratic>=0.1.1'). "
|
|
67
|
+
"See https://docs.monai.io/en/latest/installation.html#installing-the-recommended-dependencies"
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def is_nvsubquadratic_available() -> bool:
|
|
72
|
+
"""Return ``True`` if the optional ``nvsubquadratic`` package is importable."""
|
|
73
|
+
return bool(_has_nvsubq)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
# ---------------------------------------------------------------------------
|
|
77
|
+
# Depthwise FFT convolutions — no nvsubquadratic dependency
|
|
78
|
+
# ---------------------------------------------------------------------------
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class _DepthwiseFFTForward:
|
|
82
|
+
"""Mixin providing FFT-based forward for depthwise ``nn.Conv{2,3}d`` subclasses.
|
|
83
|
+
|
|
84
|
+
No ``nn.Module`` parent: module machinery comes from ``nn.Conv2d`` / ``nn.Conv3d``
|
|
85
|
+
in the concrete subclasses. Placed first in the MRO so ``forward`` resolves here
|
|
86
|
+
(FFT) rather than to ``nn.Conv{2,3}d.forward`` (im2col / unfold).
|
|
87
|
+
|
|
88
|
+
Avoids PyTorch's im2col INT32 overflow, which caps ``F.conv3d`` at ROI ~128 for
|
|
89
|
+
typical medical-imaging channel counts. There is no spatial-size restriction.
|
|
90
|
+
|
|
91
|
+
``fft_chunk_size > 0`` enables channel-chunked FFT to cap peak memory:
|
|
92
|
+
|
|
93
|
+
peak ≈ (B × chunk × spatial × 4 + B × chunk × rfft_spatial × 8) bytes
|
|
94
|
+
|
|
95
|
+
instead of the full ``(B × C × ...)`` allocation.
|
|
96
|
+
"""
|
|
97
|
+
|
|
98
|
+
_spatial_dims: int # set by subclasses
|
|
99
|
+
fft_chunk_size: int = 0 # 0 = no chunking; set in subclass __init__
|
|
100
|
+
|
|
101
|
+
def forward(self, x: torch.Tensor) -> torch.Tensor:
|
|
102
|
+
spatial = x.shape[2:]
|
|
103
|
+
kernel_shape = self.weight.shape[2:] # type: ignore[attr-defined]
|
|
104
|
+
fft_dims = tuple(range(-self._spatial_dims, 0))
|
|
105
|
+
fft_size = [s + k - 1 for s, k in zip(spatial, kernel_shape)]
|
|
106
|
+
in_dtype = x.dtype
|
|
107
|
+
|
|
108
|
+
slices = (slice(None), slice(None)) + tuple(slice(k // 2, k // 2 + s) for s, k in zip(spatial, kernel_shape))
|
|
109
|
+
|
|
110
|
+
chunk = getattr(self, "fft_chunk_size", 0)
|
|
111
|
+
if chunk > 0 and x.shape[1] > chunk:
|
|
112
|
+
parts = []
|
|
113
|
+
for c0 in range(0, x.shape[1], chunk):
|
|
114
|
+
c1 = min(c0 + chunk, x.shape[1])
|
|
115
|
+
xc = x[:, c0:c1].float()
|
|
116
|
+
kc = self.weight[c0:c1].squeeze(1).float() # type: ignore[attr-defined]
|
|
117
|
+
kc = kc.flip(list(range(1, self._spatial_dims + 1)))
|
|
118
|
+
xc_fft = torch.fft.rfftn(xc, s=fft_size, dim=fft_dims)
|
|
119
|
+
kc_fft = torch.fft.rfftn(kc, s=fft_size, dim=fft_dims)
|
|
120
|
+
out_fft = xc_fft * kc_fft.unsqueeze(0)
|
|
121
|
+
del xc_fft, kc_fft
|
|
122
|
+
out_c = torch.fft.irfftn(out_fft, s=fft_size, dim=fft_dims)
|
|
123
|
+
del out_fft
|
|
124
|
+
parts.append(out_c[slices].to(in_dtype))
|
|
125
|
+
del out_c
|
|
126
|
+
return torch.cat(parts, dim=1)
|
|
127
|
+
|
|
128
|
+
x_f32 = x.float()
|
|
129
|
+
k_f32 = self.weight.squeeze(1).float() # type: ignore[attr-defined]
|
|
130
|
+
# PyTorch ``F.conv*`` computes cross-correlation; FFT computes convolution.
|
|
131
|
+
# Flip the kernel so the FFT output matches ``Conv{2,3}d`` exactly.
|
|
132
|
+
k_f32 = k_f32.flip(list(range(1, self._spatial_dims + 1)))
|
|
133
|
+
|
|
134
|
+
x_fft = torch.fft.rfftn(x_f32, s=fft_size, dim=fft_dims)
|
|
135
|
+
k_fft = torch.fft.rfftn(k_f32, s=fft_size, dim=fft_dims)
|
|
136
|
+
|
|
137
|
+
out_fft = x_fft * k_fft.unsqueeze(0)
|
|
138
|
+
out = torch.fft.irfftn(out_fft, s=fft_size, dim=fft_dims)
|
|
139
|
+
return cast(torch.Tensor, out[slices].to(in_dtype))
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def _validate_depthwise_fft_args(
|
|
143
|
+
in_channels: int, out_channels: int, kernel_size: int, groups: int, padding: int, bias: bool
|
|
144
|
+
) -> None:
|
|
145
|
+
"""Validate the constructor arguments shared by ``DepthwiseFFTConv{2,3}d``.
|
|
146
|
+
|
|
147
|
+
The FFT forward only implements depthwise, bias-free, ``"same"``-style convolution: it
|
|
148
|
+
crops the full convolution back to the input spatial size assuming ``padding ==
|
|
149
|
+
kernel_size // 2`` with an odd kernel. Reject anything else up front rather than return a
|
|
150
|
+
silently wrong shape.
|
|
151
|
+
"""
|
|
152
|
+
if not (in_channels == out_channels == groups):
|
|
153
|
+
raise ValueError(
|
|
154
|
+
"DepthwiseFFTConv only supports depthwise (groups == in_channels == out_channels); "
|
|
155
|
+
f"got in_channels={in_channels}, out_channels={out_channels}, groups={groups}"
|
|
156
|
+
)
|
|
157
|
+
if bias:
|
|
158
|
+
raise ValueError("bias is not supported in DepthwiseFFTConv")
|
|
159
|
+
if kernel_size % 2 == 0 or padding != kernel_size // 2:
|
|
160
|
+
raise ValueError(
|
|
161
|
+
"DepthwiseFFTConv only supports 'same'-style padding: kernel_size must be odd and "
|
|
162
|
+
f"padding must equal kernel_size // 2; got kernel_size={kernel_size}, padding={padding}. "
|
|
163
|
+
"The FFT forward crops to the input spatial size and does not implement general padding."
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
class DepthwiseFFTConv2d(_DepthwiseFFTForward, nn.Conv2d):
|
|
168
|
+
"""2-D depthwise FFT convolution. ``isinstance(x, nn.Conv2d)`` remains ``True``.
|
|
169
|
+
|
|
170
|
+
Drop-in replacement for an ``nn.Conv2d`` with ``groups == in_channels == out_channels``
|
|
171
|
+
and ``bias=False``. Useful as the short-conv inside :class:`HyenaMixer` at large 2-D
|
|
172
|
+
inputs, where ``F.conv2d`` would not yet hit the INT32 limit but the unified
|
|
173
|
+
Conv2d/Conv3d API is convenient.
|
|
174
|
+
|
|
175
|
+
Only ``"same"``-style padding is supported: ``padding`` must equal ``kernel_size // 2``
|
|
176
|
+
(and ``kernel_size`` must be odd). The FFT forward crops its output back to the input
|
|
177
|
+
spatial size and does not implement general (e.g. ``"valid"``) padding.
|
|
178
|
+
"""
|
|
179
|
+
|
|
180
|
+
_spatial_dims = 2
|
|
181
|
+
|
|
182
|
+
def __init__(
|
|
183
|
+
self,
|
|
184
|
+
in_channels: int,
|
|
185
|
+
out_channels: int,
|
|
186
|
+
kernel_size: int,
|
|
187
|
+
groups: int,
|
|
188
|
+
padding: int,
|
|
189
|
+
bias: bool = False,
|
|
190
|
+
fft_chunk_size: int = 0,
|
|
191
|
+
) -> None:
|
|
192
|
+
_validate_depthwise_fft_args(in_channels, out_channels, kernel_size, groups, padding, bias)
|
|
193
|
+
nn.Conv2d.__init__(
|
|
194
|
+
self, in_channels, out_channels, kernel_size, stride=1, padding=padding, groups=groups, bias=False
|
|
195
|
+
)
|
|
196
|
+
self.fft_chunk_size = fft_chunk_size
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
class DepthwiseFFTConv3d(_DepthwiseFFTForward, nn.Conv3d):
|
|
200
|
+
"""3-D depthwise FFT convolution. ``isinstance(x, nn.Conv3d)`` remains ``True``.
|
|
201
|
+
|
|
202
|
+
Drop-in replacement for an ``nn.Conv3d`` with ``groups == in_channels == out_channels``
|
|
203
|
+
and ``bias=False``. Avoids the INT32 unfold limit that prevents ``F.conv3d`` from
|
|
204
|
+
running at ROI > ~128 for typical medical-imaging channel counts.
|
|
205
|
+
|
|
206
|
+
Only ``"same"``-style padding is supported: ``padding`` must equal ``kernel_size // 2``
|
|
207
|
+
(and ``kernel_size`` must be odd). The FFT forward crops its output back to the input
|
|
208
|
+
spatial size and does not implement general (e.g. ``"valid"``) padding.
|
|
209
|
+
"""
|
|
210
|
+
|
|
211
|
+
_spatial_dims = 3
|
|
212
|
+
|
|
213
|
+
def __init__(
|
|
214
|
+
self,
|
|
215
|
+
in_channels: int,
|
|
216
|
+
out_channels: int,
|
|
217
|
+
kernel_size: int,
|
|
218
|
+
groups: int,
|
|
219
|
+
padding: int,
|
|
220
|
+
bias: bool = False,
|
|
221
|
+
fft_chunk_size: int = 0,
|
|
222
|
+
) -> None:
|
|
223
|
+
_validate_depthwise_fft_args(in_channels, out_channels, kernel_size, groups, padding, bias)
|
|
224
|
+
nn.Conv3d.__init__(
|
|
225
|
+
self, in_channels, out_channels, kernel_size, stride=1, padding=padding, groups=groups, bias=False
|
|
226
|
+
)
|
|
227
|
+
self.fft_chunk_size = fft_chunk_size
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
# ---------------------------------------------------------------------------
|
|
231
|
+
# HyenaMixer — QKV-projected gated long-conv mixer
|
|
232
|
+
# ---------------------------------------------------------------------------
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
class HyenaMixer(nn.Module):
|
|
236
|
+
"""QKV-projected gated long-convolution mixer using HyenaND.
|
|
237
|
+
|
|
238
|
+
Replaces self-attention with the HyenaND operator from ``nvsubquadratic``, providing
|
|
239
|
+
a global receptive field at O(N log N) cost via FFT. ``HyenaMixer`` matches the
|
|
240
|
+
channels-last layout ``[B, *spatial, C]`` expected by Swin-style transformer
|
|
241
|
+
blocks; the underlying HyenaND operator handles the 2-D / 3-D distinction.
|
|
242
|
+
|
|
243
|
+
The HyenaND FFT path requires float32 precision, so the inner mixer call is
|
|
244
|
+
wrapped in ``torch.amp.autocast("cuda", enabled=False)``. Inputs are cast to
|
|
245
|
+
float32 before the mixer call and back to the original dtype after, so the block
|
|
246
|
+
is transparent under ``torch.autocast``.
|
|
247
|
+
|
|
248
|
+
Args:
|
|
249
|
+
dim: hidden dimension.
|
|
250
|
+
spatial_dims: 2 or 3.
|
|
251
|
+
use_rope: kept for forward-compatibility with older configurations.
|
|
252
|
+
``nvsubquadratic`` removed RoPE from HyenaND on 2026-04-27 and this kwarg
|
|
253
|
+
is now a silent no-op.
|
|
254
|
+
apply_qk_norm: whether to apply per-channel LayerNorm to Q (and to K when the
|
|
255
|
+
first gate is the identity, as is the default here).
|
|
256
|
+
short_conv_kernel_size: depthwise short-convolution kernel size on the
|
|
257
|
+
concatenated ``[Q; K; V]`` tensor.
|
|
258
|
+
kernel_mlp_hidden_dim: hidden dim of the SIREN implicit kernel MLP.
|
|
259
|
+
kernel_num_layers: depth of the SIREN implicit kernel.
|
|
260
|
+
kernel_omega_0: SIREN frequency. Default 10.0 (stable). Higher values allow
|
|
261
|
+
higher-frequency kernels but reduce training stability.
|
|
262
|
+
kernel_l_cache: SIREN coordinate-grid cache size per spatial dim. Memory
|
|
263
|
+
scales as ``(2L-1) ** D × D × 4`` bytes; set to ``>= max(spatial_dims)``
|
|
264
|
+
to pre-allocate.
|
|
265
|
+
mask_max_attenuation: Gaussian-modulation attenuation at the grid boundary
|
|
266
|
+
for the widest channel (0–1). Default 0.95.
|
|
267
|
+
fft_padding: ``"circular"`` or ``"zero"``.
|
|
268
|
+
grid_type: ``"single"`` (kernel size = input size; required for circular
|
|
269
|
+
padding) or ``"double"`` (kernel size = 2× input size; only valid with
|
|
270
|
+
``"zero"`` padding).
|
|
271
|
+
use_chunked_fftconv: chunk the FFT convolution by channel to reduce peak
|
|
272
|
+
memory ~26% with ~11% compute overhead. Requires ``fft_padding="zero"``.
|
|
273
|
+
use_fft_short_conv: replace the depthwise short conv with
|
|
274
|
+
:class:`DepthwiseFFTConv{2,3}d`, eliminating the INT32 unfold limit and
|
|
275
|
+
enabling unlimited ROI sizes. Adds ~11% compute overhead.
|
|
276
|
+
short_conv_fft_chunk_size: channel chunk size for the FFT short conv
|
|
277
|
+
(0 = no chunking).
|
|
278
|
+
|
|
279
|
+
Raises:
|
|
280
|
+
ImportError: if ``nvsubquadratic`` is not installed.
|
|
281
|
+
ValueError: on invalid ``spatial_dims`` / ``fft_padding`` / ``grid_type``
|
|
282
|
+
combinations.
|
|
283
|
+
"""
|
|
284
|
+
|
|
285
|
+
def __init__(
|
|
286
|
+
self,
|
|
287
|
+
dim: int,
|
|
288
|
+
spatial_dims: int = 3,
|
|
289
|
+
use_rope: bool = True,
|
|
290
|
+
apply_qk_norm: bool = True,
|
|
291
|
+
short_conv_kernel_size: int = 3,
|
|
292
|
+
kernel_mlp_hidden_dim: int = 32,
|
|
293
|
+
kernel_num_layers: int = 3,
|
|
294
|
+
kernel_omega_0: float = 10.0,
|
|
295
|
+
kernel_l_cache: int = 32,
|
|
296
|
+
mask_max_attenuation: float = 0.95,
|
|
297
|
+
fft_padding: str = "circular",
|
|
298
|
+
grid_type: str = "single",
|
|
299
|
+
use_chunked_fftconv: bool = False,
|
|
300
|
+
use_fft_short_conv: bool = False,
|
|
301
|
+
short_conv_fft_chunk_size: int = 0,
|
|
302
|
+
) -> None:
|
|
303
|
+
super().__init__()
|
|
304
|
+
|
|
305
|
+
if not _has_nvsubq:
|
|
306
|
+
raise ImportError(_NVSUBQ_INSTALL_HINT)
|
|
307
|
+
|
|
308
|
+
if fft_padding not in ("circular", "zero"):
|
|
309
|
+
raise ValueError(f"fft_padding must be 'circular' or 'zero', got '{fft_padding}'")
|
|
310
|
+
if grid_type not in ("single", "double"):
|
|
311
|
+
raise ValueError(f"grid_type must be 'single' or 'double', got '{grid_type}'")
|
|
312
|
+
if fft_padding == "circular" and grid_type != "single":
|
|
313
|
+
raise ValueError(
|
|
314
|
+
"fft_padding='circular' requires grid_type='single' "
|
|
315
|
+
f"(kernel size must match input size for periodic convolution); got grid_type='{grid_type}'"
|
|
316
|
+
)
|
|
317
|
+
if use_chunked_fftconv and fft_padding != "zero":
|
|
318
|
+
raise ValueError(
|
|
319
|
+
"use_chunked_fftconv=True requires fft_padding='zero'; " f"got fft_padding='{fft_padding}'"
|
|
320
|
+
)
|
|
321
|
+
|
|
322
|
+
self.dim = dim
|
|
323
|
+
self.spatial_dims = spatial_dims
|
|
324
|
+
|
|
325
|
+
conv_class: type[nn.Module]
|
|
326
|
+
if use_fft_short_conv:
|
|
327
|
+
if spatial_dims == 2:
|
|
328
|
+
conv_class = DepthwiseFFTConv2d
|
|
329
|
+
elif spatial_dims == 3:
|
|
330
|
+
conv_class = DepthwiseFFTConv3d
|
|
331
|
+
else:
|
|
332
|
+
raise ValueError(f"spatial_dims must be 2 or 3, got {spatial_dims}")
|
|
333
|
+
else:
|
|
334
|
+
if spatial_dims == 2:
|
|
335
|
+
conv_class = nn.Conv2d
|
|
336
|
+
elif spatial_dims == 3:
|
|
337
|
+
conv_class = nn.Conv3d
|
|
338
|
+
else:
|
|
339
|
+
raise ValueError(f"spatial_dims must be 2 or 3, got {spatial_dims}")
|
|
340
|
+
|
|
341
|
+
global_conv_cfg = _LazyConfig(_CKConvND)(
|
|
342
|
+
data_dim=spatial_dims,
|
|
343
|
+
hidden_dim=dim,
|
|
344
|
+
kernel_cfg=_LazyConfig(_SIRENKernelND)(
|
|
345
|
+
data_dim=spatial_dims,
|
|
346
|
+
out_dim=dim,
|
|
347
|
+
mlp_hidden_dim=kernel_mlp_hidden_dim,
|
|
348
|
+
num_layers=kernel_num_layers,
|
|
349
|
+
embedding_dim=kernel_mlp_hidden_dim,
|
|
350
|
+
omega_0=kernel_omega_0,
|
|
351
|
+
L_cache=kernel_l_cache,
|
|
352
|
+
use_bias=True,
|
|
353
|
+
hidden_omega_0=1.0,
|
|
354
|
+
),
|
|
355
|
+
mask_cfg=_LazyConfig(_GaussianModulationND)(
|
|
356
|
+
data_dim=spatial_dims,
|
|
357
|
+
num_channels=dim,
|
|
358
|
+
min_attenuation_at_step=0.1,
|
|
359
|
+
max_attenuation_at_limit=mask_max_attenuation,
|
|
360
|
+
init_extent=1.0,
|
|
361
|
+
parametrization="direct",
|
|
362
|
+
),
|
|
363
|
+
grid_type=grid_type,
|
|
364
|
+
fft_padding=fft_padding,
|
|
365
|
+
use_chunked_fftconv=use_chunked_fftconv,
|
|
366
|
+
)
|
|
367
|
+
|
|
368
|
+
short_conv_kwargs: dict = dict(
|
|
369
|
+
in_channels=3 * dim,
|
|
370
|
+
out_channels=3 * dim,
|
|
371
|
+
kernel_size=short_conv_kernel_size,
|
|
372
|
+
groups=3 * dim,
|
|
373
|
+
padding=short_conv_kernel_size // 2,
|
|
374
|
+
bias=False,
|
|
375
|
+
)
|
|
376
|
+
if use_fft_short_conv and short_conv_fft_chunk_size > 0:
|
|
377
|
+
short_conv_kwargs["fft_chunk_size"] = short_conv_fft_chunk_size
|
|
378
|
+
short_conv_cfg = _LazyConfig(conv_class)(**short_conv_kwargs)
|
|
379
|
+
|
|
380
|
+
# ``use_rope`` retained on the API only; ``nvsubquadratic`` removed RoPE
|
|
381
|
+
# from ``Hyena.__init__`` on 2026-04-27. Saving the flag here keeps caller
|
|
382
|
+
# introspection intact ("did the user ask for RoPE?") while not affecting
|
|
383
|
+
# the constructed operator.
|
|
384
|
+
self._use_rope_requested = use_rope
|
|
385
|
+
|
|
386
|
+
self.mixer = _instantiate(
|
|
387
|
+
_LazyConfig(_Hyena)(
|
|
388
|
+
global_conv_cfg=global_conv_cfg,
|
|
389
|
+
short_conv_cfg=short_conv_cfg,
|
|
390
|
+
gate_nonlinear_cfg=_LazyConfig(nn.Identity)(),
|
|
391
|
+
pixelhyena_norm_cfg=_LazyConfig(nn.GroupNorm)(num_groups=1, num_channels=dim),
|
|
392
|
+
qk_norm_cfg=_LazyConfig(nn.LayerNorm)(normalized_shape=dim) if apply_qk_norm else None,
|
|
393
|
+
)
|
|
394
|
+
)
|
|
395
|
+
|
|
396
|
+
self.qkv_proj = nn.Linear(dim, 3 * dim, bias=False)
|
|
397
|
+
self.out_proj = nn.Linear(dim, dim, bias=False)
|
|
398
|
+
self._init_weights()
|
|
399
|
+
|
|
400
|
+
def _init_weights(self) -> None:
|
|
401
|
+
nn.init.normal_(self.qkv_proj.weight, std=0.02)
|
|
402
|
+
nn.init.normal_(self.out_proj.weight, std=0.02)
|
|
403
|
+
|
|
404
|
+
def forward(self, x: torch.Tensor) -> torch.Tensor:
|
|
405
|
+
"""Forward pass.
|
|
406
|
+
|
|
407
|
+
Args:
|
|
408
|
+
x: tensor of shape ``[batch, *spatial, dim]``.
|
|
409
|
+
|
|
410
|
+
Returns:
|
|
411
|
+
Tensor of the same shape and dtype as the input.
|
|
412
|
+
"""
|
|
413
|
+
qkv = self.qkv_proj(x)
|
|
414
|
+
q, k, v = torch.chunk(qkv, 3, dim=-1)
|
|
415
|
+
|
|
416
|
+
# HyenaND requires float32 internally; disable autocast for the mixer only,
|
|
417
|
+
# then restore the original (autocast) dtype afterwards.
|
|
418
|
+
with torch.amp.autocast("cuda", enabled=False):
|
|
419
|
+
q = q.float()
|
|
420
|
+
k = k.float()
|
|
421
|
+
v = v.float()
|
|
422
|
+
x = self.mixer(q, k, v)
|
|
423
|
+
x = x.to(qkv.dtype)
|
|
424
|
+
return cast(torch.Tensor, self.out_proj(x))
|
|
425
|
+
|
|
426
|
+
|
|
427
|
+
# ---------------------------------------------------------------------------
|
|
428
|
+
# HyenaTransformerBlock — pre-norm Hyena + MLP residual
|
|
429
|
+
# ---------------------------------------------------------------------------
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
class HyenaTransformerBlock(nn.Module):
|
|
433
|
+
"""Pre-norm transformer block with HyenaND in place of self-attention.
|
|
434
|
+
|
|
435
|
+
Sandwiches a :class:`HyenaMixer` and an MLP between :class:`~torch.nn.LayerNorm`
|
|
436
|
+
layers in the standard transformer residual pattern, with optional gradient
|
|
437
|
+
checkpointing on each half.
|
|
438
|
+
|
|
439
|
+
Args:
|
|
440
|
+
dim: number of feature channels.
|
|
441
|
+
spatial_dims: 2 or 3.
|
|
442
|
+
mlp_ratio: hidden / input ratio for the MLP.
|
|
443
|
+
drop: dropout rate inside the MLP.
|
|
444
|
+
drop_path: stochastic-depth rate for the MLP residual.
|
|
445
|
+
act_layer: activation name passed to :class:`monai.networks.blocks.MLPBlock`.
|
|
446
|
+
norm_layer: normalization class (default :class:`~torch.nn.LayerNorm`).
|
|
447
|
+
use_checkpoint: enable gradient checkpointing on the mixer and MLP halves.
|
|
448
|
+
use_rope: forward-compatibility flag for older configs; no-op after the
|
|
449
|
+
``nvsubquadratic`` 2026-04-27 RoPE removal.
|
|
450
|
+
apply_qk_norm: per-channel LayerNorm on Q (and K when the first gate is
|
|
451
|
+
identity, as is the default).
|
|
452
|
+
hyena_kernel_size: short-convolution kernel size on the QKV tensor.
|
|
453
|
+
hyena_kernel_mlp_dim: SIREN kernel MLP hidden dimension.
|
|
454
|
+
hyena_kernel_layers: SIREN kernel depth.
|
|
455
|
+
hyena_mask_max_attenuation: Gaussian-modulation boundary attenuation (0–1).
|
|
456
|
+
hyena_fft_padding: ``"circular"`` or ``"zero"``.
|
|
457
|
+
hyena_grid_type: ``"single"`` or ``"double"``.
|
|
458
|
+
hyena_use_chunked_fft: enable chunked FFT (requires zero padding).
|
|
459
|
+
hyena_use_fft_short_conv: use FFT for the short conv (no INT32 limit).
|
|
460
|
+
hyena_omega_0: SIREN ``omega_0``. Default 10.0.
|
|
461
|
+
hyena_l_cache: SIREN coordinate-grid cache size per dim.
|
|
462
|
+
hyena_short_conv_fft_chunks: channel chunk size for the FFT short conv.
|
|
463
|
+
|
|
464
|
+
Raises:
|
|
465
|
+
ImportError: if ``nvsubquadratic`` is not installed.
|
|
466
|
+
"""
|
|
467
|
+
|
|
468
|
+
def __init__(
|
|
469
|
+
self,
|
|
470
|
+
dim: int,
|
|
471
|
+
spatial_dims: int = 3,
|
|
472
|
+
mlp_ratio: float = 4.0,
|
|
473
|
+
drop: float = 0.0,
|
|
474
|
+
drop_path: float = 0.0,
|
|
475
|
+
act_layer: str = "GELU",
|
|
476
|
+
norm_layer: type[LayerNorm] = nn.LayerNorm, # type: ignore[assignment]
|
|
477
|
+
use_checkpoint: bool = False,
|
|
478
|
+
use_rope: bool = True,
|
|
479
|
+
apply_qk_norm: bool = True,
|
|
480
|
+
hyena_kernel_size: int = 3,
|
|
481
|
+
hyena_kernel_mlp_dim: int = 32,
|
|
482
|
+
hyena_kernel_layers: int = 3,
|
|
483
|
+
hyena_mask_max_attenuation: float = 0.95,
|
|
484
|
+
hyena_fft_padding: str = "circular",
|
|
485
|
+
hyena_grid_type: str = "single",
|
|
486
|
+
hyena_use_chunked_fft: bool = False,
|
|
487
|
+
hyena_use_fft_short_conv: bool = False,
|
|
488
|
+
hyena_omega_0: float = 10.0,
|
|
489
|
+
hyena_l_cache: int = 32,
|
|
490
|
+
hyena_short_conv_fft_chunks: int = 0,
|
|
491
|
+
) -> None:
|
|
492
|
+
super().__init__()
|
|
493
|
+
self.dim = dim
|
|
494
|
+
self.spatial_dims = spatial_dims
|
|
495
|
+
self.mlp_ratio = mlp_ratio
|
|
496
|
+
self.use_checkpoint = use_checkpoint
|
|
497
|
+
|
|
498
|
+
self.norm1 = norm_layer(dim)
|
|
499
|
+
self.mixer = HyenaMixer(
|
|
500
|
+
dim=dim,
|
|
501
|
+
spatial_dims=spatial_dims,
|
|
502
|
+
use_rope=use_rope,
|
|
503
|
+
apply_qk_norm=apply_qk_norm,
|
|
504
|
+
short_conv_kernel_size=hyena_kernel_size,
|
|
505
|
+
kernel_mlp_hidden_dim=hyena_kernel_mlp_dim,
|
|
506
|
+
kernel_num_layers=hyena_kernel_layers,
|
|
507
|
+
kernel_omega_0=hyena_omega_0,
|
|
508
|
+
kernel_l_cache=hyena_l_cache,
|
|
509
|
+
mask_max_attenuation=hyena_mask_max_attenuation,
|
|
510
|
+
fft_padding=hyena_fft_padding,
|
|
511
|
+
grid_type=hyena_grid_type,
|
|
512
|
+
use_chunked_fftconv=hyena_use_chunked_fft,
|
|
513
|
+
use_fft_short_conv=hyena_use_fft_short_conv,
|
|
514
|
+
short_conv_fft_chunk_size=hyena_short_conv_fft_chunks,
|
|
515
|
+
)
|
|
516
|
+
self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()
|
|
517
|
+
|
|
518
|
+
self.norm2 = norm_layer(dim)
|
|
519
|
+
mlp_hidden_dim = int(dim * mlp_ratio)
|
|
520
|
+
self.mlp = MLPBlock(
|
|
521
|
+
hidden_size=dim, mlp_dim=mlp_hidden_dim, act=act_layer, dropout_rate=drop, dropout_mode="swin"
|
|
522
|
+
)
|
|
523
|
+
|
|
524
|
+
def forward_part1(self, x: torch.Tensor) -> torch.Tensor:
|
|
525
|
+
x = self.norm1(x)
|
|
526
|
+
return cast(torch.Tensor, self.mixer(x))
|
|
527
|
+
|
|
528
|
+
def forward_part2(self, x: torch.Tensor) -> torch.Tensor:
|
|
529
|
+
return cast(torch.Tensor, self.drop_path(self.mlp(self.norm2(x))))
|
|
530
|
+
|
|
531
|
+
def forward(self, x: torch.Tensor, mask_matrix: torch.Tensor | None = None) -> torch.Tensor:
|
|
532
|
+
"""Forward pass.
|
|
533
|
+
|
|
534
|
+
Args:
|
|
535
|
+
x: input tensor of shape ``[batch, *spatial, dim]``.
|
|
536
|
+
mask_matrix: unused; accepted for signature parity with Swin's
|
|
537
|
+
``WindowAttention``-based block so the two can be swapped at the
|
|
538
|
+
``BasicLayer`` level without per-call branching.
|
|
539
|
+
|
|
540
|
+
Returns:
|
|
541
|
+
Tensor of the same shape as the input.
|
|
542
|
+
"""
|
|
543
|
+
del mask_matrix
|
|
544
|
+
shortcut = x
|
|
545
|
+
if self.use_checkpoint:
|
|
546
|
+
x = torch.utils.checkpoint.checkpoint(self.forward_part1, x, use_reentrant=False)
|
|
547
|
+
else:
|
|
548
|
+
x = self.forward_part1(x)
|
|
549
|
+
x = shortcut + self.drop_path(x)
|
|
550
|
+
|
|
551
|
+
if self.use_checkpoint:
|
|
552
|
+
x = x + torch.utils.checkpoint.checkpoint(self.forward_part2, x, use_reentrant=False)
|
|
553
|
+
else:
|
|
554
|
+
x = x + self.forward_part2(x)
|
|
555
|
+
return x
|
|
@@ -155,7 +155,10 @@ class Warp(nn.Module):
|
|
|
155
155
|
|
|
156
156
|
if not _use_compiled: # pytorch native grid_sample
|
|
157
157
|
for i, dim in enumerate(grid.shape[1:-1]):
|
|
158
|
-
|
|
158
|
+
# guard against a singleton spatial dim (e.g. a single-slice volume), where
|
|
159
|
+
# ``dim - 1 == 0`` would divide by zero; clamp the denominator to 1 so the lone
|
|
160
|
+
# voxel maps to -1, matching ``monai.networks.utils.normalize_transform``.
|
|
161
|
+
grid[..., i] = grid[..., i] * 2 / max(dim - 1, 1) - 1
|
|
159
162
|
index_ordering: list[int] = list(range(spatial_dims - 1, -1, -1))
|
|
160
163
|
grid = grid[..., index_ordering] # z, y, x -> x, y, z
|
|
161
164
|
return F.grid_sample(
|
|
@@ -53,6 +53,7 @@ from .fullyconnectednet import FullyConnectedNet, VarFullyConnectedNet
|
|
|
53
53
|
from .generator import Generator
|
|
54
54
|
from .highresnet import HighResBlock, HighResNet
|
|
55
55
|
from .hovernet import Hovernet, HoVernet, HoVerNet, HoverNet
|
|
56
|
+
from .hyena_nd_unetr import HyenaNDUNETR
|
|
56
57
|
from .masked_autoencoder_vit import MaskedAutoEncoderViT
|
|
57
58
|
from .mednext import (
|
|
58
59
|
MedNeXt,
|