What's Changed
- Update Weekly Preview Version by @ericspod in #8917
- Add docstring note that Transpose/Transposed do not update the affine matrix by @Akarsh-Doki in #8888
- Fix nnUNet test directory leakage into current working directory by @aymuos15 in #8887
- ci: mute dynamic warningregistry logs noise in pytest suite by @Priyanshu31102003 in #8893
- tests: remove duplicate and dead test cases by @aymuos15 in #8896
- Add explicit spatial_ndim tracking to MetaTensor by @aymuos15 in #8765
- Improve Affine transform documentation and add compute_w_affine tests by @engmohamedsalah in #8727
- fix: update Dockerfile and requirements-dev.txt for MONAI 1.6 tutorial compatibility by @garciadias in #8912
- Fix division by zero in clDice loss harmonic mean by @Mr-Neutr0n in #8739
- fix(losses): register buffers in GlobalMutualInformationLoss by @AlexanderSanin in #8872
- tests: remove more duplicate test cases by @aymuos15 in #8943
- Fix batched_nms for ndarray inputs by @aymuos15 in #8901
- fix: add missing stacklevel=2 to warnings.warn() in metrics/ (Fixes #8931) by @rtmalikian in #8932
- fix: add missing stacklevel=2 to warnings.warn() in losses/ (Fixes #8929) by @rtmalikian in #8930
- fix: adaptor map_names calls dict as function when inputs is a name-mapping dict by @aymuos15 in #8907
- Enabling MetaTensor Persistent Caching by @ericspod in #8940
- Use compact [1,-2,1] kernel for BendingEnergyLoss second derivatives by @vishnukannaujia in #8918
- Force GC in WSIReader tests to suppress ResourceWarning for unclosed files by @vishnukannaujia in #8919
- fix: guard division by zero in DICOMReader._get_affine for single-slice volumes (Fixes #8925) by @rtmalikian in #8926
- fix: replace
raise UserWarningwithwarnings.warn()in verify_report_format (Fixes #8927) by @rtmalikian in #8928 - Fix FROC num_targets miscount when labels_to_exclude is set by @aymuos15 in #8951
- Remove dead and redundant code across monai/ by @aymuos15 in #8952
- docs: add Windows BUILD_MONAI install instructions by @Shizoqua in #8906
- Perf: Use a KDTree on CPU instead of full EDT for 1.5x to 16x faster metric computation by @jberg5 in #8910
- Fix nnUNet runner store_true flag command construction (#8941) by @aymuos15 in #8944
- fix: emit nnUNet store_true flags as bare CLI args in nnUNetV2Runner by @aymuos15 in #8968
- Support configurable rotation order in create_rotate by @aymuos15 in #8963
- Bump actions/checkout from 4 to 7 by @dependabot[bot] in #8965
- Bump codecov/codecov-action from 6 to 7 by @dependabot[bot] in #8966
- Bump actions/cache from 5 to 6 by @dependabot[bot] in #8964
- docs: clarify RandWeightedCrop(d) does not crop the weight map (#7851) by @aymuos15 in #8962
- Enable macOS Install Test Only by @ericspod in #8976
- Add AbsoluteVolumeDifferenceMetric to monai.metrics by @MDSALMANSHAMS in #8945
- fix(data): avoid divide-by-zero in pydicom affine for single-slice volumes by @SID-6921 in #8956
- Perf: skip redundant full-image mask on StdShiftIntensity nonzero=False path by @aymuos15 in #8975
- HyenaUnetR (SwinUnetR + HyenaND): subquadratic alternative to windowed self-attention by @farhadrgh in #8958
- Fix division by zero in Warp for singleton spatial dimensions by @VenkateswarluNagineni in #8946
- fix: warn when PydicomReader cannot determine affine from DICOM metadata (Fixes #8468) by @rtmalikian in #8922
- Warn when PydicomReader falls back to an identity affine (#8468) by @Shizoqua in #8934
- Fix non-functional jitter in Warp.get_reference_grid by @aymuos15 in #8953
- [pre-commit.ci] pre-commit suggestions by @pre-commit-ci[bot] in #8984
- Add BoundaryLoss by @txmed82 in #8916
- Make Fuzzy Gdown Argument Version-dependent by @ericspod in #8986
- Perf: faster get_largest_connected_component_mask (bincount + LUT gather) by @aymuos15 in #8978
- fix typos in docs: lazy_resampling, modules, whatsnew_1_5 by @vikashg in #9012
- docs: add documentation to CONTRIBUTING.md by @garciadias in #8878
- Fix class_labels mutation across multi-metric write_metrics_reports by @aymuos15 in #8902
- fix(MetaTensor): astype with torch dtype now returns MetaTensor preserving metadata by @AlexanderSanin in #8911
- Validate downloaded file integrity and raise ValueError on hash mismatch by @e-mny in #8833
- Fix clipping boxes with large coordinates by @Rajioba1 in #9047
- Raise OptionalImportError for unavailable explicit image readers by @minsuking in #9006
- feat: replace mypy and pytype with pyrefly for static type analysis by @garciadias in #8868
- Add NaViT: Native Resolution Vision Transformer with Patch n' Pack by @vikashg in #9011
- Fix GHSA-873f-pvrv-4x83: warn before executing a bundle's config in load()/run() by @garciadias in #9057
- Modernising Build Process by @ericspod in #9010
- Safe eval by @ericspod in #8936
- fix(safeeval): evaluate rewritten AST instead of original string by @chhayankjain in #9063
- Lazily import onnx so a broken onnx does not block 'import monai' (#8455) by @Shizoqua in #8937
- Fix ClipIntensityPercentiles metadata accumulation by @engmohamedsalah in #9003
- Fix NaN gradient in PerceptualLoss normalize_tensor by @Shizoqua in #8982
- Fix dot-notation read on $@ref-backed ConfigParser proxies by @VenkateswarluNagineni in #8994
- fix: address Dependabot alerts for mlflow, transformers, setuptools by @garciadias in #9032
- Weekly Preview Fix by @ericspod in #9075
- Fix GHSA-x6pr-233j-x5cw: warn before executing an FL-provisioned bundle config by @garciadias in #9078
- SwinUNETR: optional flash attention (scaled_dot_product_attention) in WindowAttention by @aymuos15 in #8977
- fix(transforms): make Crop.compute_slices torch.compile-friendly by @aymuos15 in #8960
- Update CodeQL Action by @ericspod in #9079
- Precommit Autofixing by @ericspod in #9061
- Warn before instantiating target from algo_object.json by @garciadias in #9085
- Reject non-finite DICOM affine metadata in PydicomReader by @garciadias in #9087
- Harden download/deserialize integrity (weights_only, hash checks, path confinement) by @garciadias in #9088
- Harden nnUNetV2Runner against code execution by @garciadias in #9086
- Fixing Git Dependency Weekly Build Issue by @ericspod in #9081
- Check Environment Script by @ericspod in #9038
- ci: add local pre-commit DCO hook and setup command by @garciadias in #9094
- Declare ruff's vendored-file excludes once in pyproject.toml by @hjmjohnson in #9090
- Route runtests.sh ruff invocations through PY_EXE by @hjmjohnson in #9089
- Fix VarAutoEncoder reparameterize returning mu+std at inference (#8413) by @Shizoqua in #8933
- Clarify CUDA/CuPy install requirements in docs (#8106) by @Shizoqua in #8983
- Fix tracing-state leak after transform exceptions by @yinkev in #9019
- Fix QuickNAT indexed skip connections by @yinkev in #9021
- feat(losses/metrics): implement ignore_index support across dice and … by @Rusheel86 in #8757
- Actions Permission and Other CodeQL Fixes by @ericspod in #9098
- Fix AutoRunner to honor num_fold when generating folds by @mattlin1124 in #9110
- Fix three malformed error messages by @hjmjohnson in #9065
- Fix 1/N floor in effective-rank collapse score after mean-centering by @rubenG1009 in #8997
- Add affine-aware landmark heatmap generation by @mustafamm072 in #8957
- Add GPU-accelerated dcm image decoding by @MMelQin in #8954
- tests: remove the temporary directory make_nifti_image creates by @aymuos15 in #9042
- Adding MedNeXt to documentation by @id-b3 in #9074
- Report a missing nnunetv2 as an optional dependency in nnUNetV2Runner by @Kirscher in #9054
- fix: confine nnUNet postprocessing pickle loads to the results directory (GHSA-8f32) by @garciadias in #9113
- Improve/writer error messages by @skdas20 in #8753
- fix: screen logging.conf class=/args= before fileConfig (GHSA-wvpx) by @garciadias in #9114
- fix: restrict algo_from_json target to Algo subclasses (GHSA-2wx3) by @garciadias in #9115
- Add Tool-Assisted Contribution Policy by @ericspod in #9106
- Release 1.6.1 Docs Updates by @ericspod in #9120
New Contributors
- @Akarsh-Doki made their first contribution in #8888
- @Priyanshu31102003 made their first contribution in #8893
- @Mr-Neutr0n made their first contribution in #8739
- @rtmalikian made their first contribution in #8932
- @vishnukannaujia made their first contribution in #8918
- @Shizoqua made their first contribution in #8906
- @jberg5 made their first contribution in #8910
- @MDSALMANSHAMS made their first contribution in #8945
- @SID-6921 made their first contribution in #8956
- @farhadrgh made their first contribution in #8958
- @VenkateswarluNagineni made their first contribution in #8946
- @txmed82 made their first contribution in #8916
- @vikashg made their first contribution in #9012
- @Rajioba1 made their first contribution in #9047
- @minsuking made their first contribution in #9006
- @yinkev made their first contribution in #9019
- @Rusheel86 made their first contribution in #8757
- @mustafamm072 made their first contribution in #8957
- @MMelQin made their first contribution in #8954
- @id-b3 made their first contribution in #9074
- @skdas20 made their first contribution in #8753
Full Changelog: 1.6.0...1.6.1