-
Notifications
You must be signed in to change notification settings - Fork 1.6k
fix(metrics): stop passing deprecated always_return_as_numpy internally (Fixes #9059) #9060
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
venki-drn
wants to merge
3
commits into
Project-MONAI:dev
Choose a base branch
from
venki-drn:fix/issue-9059-internal-deprecated-arg
base: dev
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+90
−3
Open
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
cd7135b
fix(metrics): stop passing deprecated always_return_as_numpy internally
venki-drn b5e43d5
docs(tests): add Google-style docstrings to the deprecation regressio…
venki-drn b44850b
test(metrics): skip deprecation regression test when scipy is unavail…
venki-drn File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,89 @@ | ||
| # Copyright (c) MONAI Consortium | ||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||
| # you may not use this file except in compliance with the License. | ||
| # You may obtain a copy of the License at | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
|
|
||
| from __future__ import annotations | ||
|
|
||
| import pathlib | ||
| import unittest | ||
| import warnings | ||
|
|
||
| import torch | ||
|
|
||
| import monai | ||
| from monai.metrics import HausdorffDistanceMetric, SurfaceDistanceMetric | ||
| from monai.utils import optional_import | ||
|
|
||
| binary_erosion, has_scipy = optional_import("scipy.ndimage", name="binary_erosion") | ||
|
|
||
| _MONAI_ROOT = str(pathlib.Path(monai.__file__).parent.resolve()) | ||
|
|
||
|
|
||
| def _internal_deprecation_warnings(fn): | ||
| """Collect deprecation-style warnings raised from inside the MONAI package itself. | ||
|
|
||
| Warnings originating in third-party packages are ignored, so this is not affected by | ||
| unrelated deprecations in torch or numpy. | ||
|
|
||
| Args: | ||
| fn: zero-argument callable to invoke while warnings are being recorded. | ||
|
|
||
| Returns: | ||
| list of `warnings.WarningMessage`: the recorded `DeprecationWarning` and | ||
| `FutureWarning` entries whose originating file lies inside the MONAI package. | ||
| Empty when the call raised no MONAI-internal deprecation warnings. | ||
| """ | ||
| with warnings.catch_warnings(record=True) as caught: | ||
| warnings.simplefilter("always") | ||
| fn() | ||
| return [ | ||
| w | ||
| for w in caught | ||
| if issubclass(w.category, (DeprecationWarning, FutureWarning)) | ||
| and _MONAI_ROOT in str(pathlib.Path(w.filename).resolve()) | ||
| ] | ||
|
|
||
|
|
||
| @unittest.skipUnless(has_scipy, "Requires scipy.") | ||
| class TestMetricsNoInternalDeprecationWarnings(unittest.TestCase): | ||
| """Metrics must not trigger MONAI's own deprecation warnings via internal call sites. | ||
|
|
||
| `SurfaceDistanceMetric` and `HausdorffDistanceMetric` both route through | ||
| `monai.metrics.utils.get_edge_surface_distance`. If that helper passes a deprecated | ||
| argument to `get_mask_edges`, every metric computation emits a warning that the caller | ||
| never triggered and cannot suppress. | ||
|
|
||
| Both metrics compute mask edges via `scipy.ndimage`, so this test is skipped when | ||
| scipy is unavailable. | ||
| """ | ||
|
|
||
| def test_surface_and_hausdorff_emit_no_internal_deprecation_warnings(self): | ||
| """Assert neither metric raises a MONAI-internal deprecation warning. | ||
|
|
||
| Computes each metric on a fixed pair of 2D binary masks and fails if any | ||
| `DeprecationWarning` or `FutureWarning` originating inside MONAI is recorded. | ||
| """ | ||
| pred = torch.zeros(1, 1, 32, 32) | ||
| pred[..., :16, :] = 1 | ||
| gt = torch.zeros(1, 1, 32, 32) | ||
| gt[..., :20, :] = 1 | ||
|
|
||
| for metric in (SurfaceDistanceMetric(), HausdorffDistanceMetric()): | ||
| with self.subTest(metric=type(metric).__name__): | ||
| found = _internal_deprecation_warnings(lambda m=metric: m(pred, gt)) | ||
| self.assertEqual( | ||
| [str(w.message) for w in found], | ||
| [], | ||
| f"{type(metric).__name__} raised MONAI-internal deprecation warning(s)", | ||
| ) | ||
|
|
||
|
|
||
| if __name__ == "__main__": | ||
| unittest.main() | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.