refactor: np.where(cond) -> np.asarray(cond).nonzero()#2238
Merged
Conversation
The docs for `np.where()` (https://numpy.org/doc/stable/reference/generated/numpy.where.html) suggest to prefer `nonzero()` over `where()` without `x` and `y` arguments. In the spirit of defensive programming I included `np.asarray(cond)` even where `cond` is already an array. This PR also fixes a bug I introduced in the model splitter in modflowpy#2124: while E711 (https://www.flake8rules.com/rules/E711.html) dictates comparisons to `None` should use identity rather than equality, this rule should not be applied to NumPy array selection conditions as it will change the semantics: ```shell >>> a = np.array([None, None]) >>> a[a != None] array([], dtype=object) >>> a[a is not None] array([[None, None]], dtype=object) ``` Unrelatedly, mark `test_mt3d.py::test_mfnwt_keat_uzf()` slow, it should not be included in smoke tests.
mwtoews
approved these changes
Jun 17, 2024
Contributor
mwtoews
left a comment
There was a problem hiding this comment.
While np.asarray() isn't always necessary for objects that are already arrays, it shouldn't have any performance impacts (arrays are copied only if necessary, otherwise it just passes the object pointer, thus fast). All other changes look fine to me.
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
The docs for
np.where()(https://numpy.org/doc/stable/reference/generated/numpy.where.html) suggest to prefernonzero()overwhere()withoutxandyarguments. In the spirit of defensive programming I includednp.asarray(cond)even wherecondis already an array.This PR also fixes a bug I introduced in the model splitter in #2124: while E711 (https://www.flake8rules.com/rules/E711.html) dictates comparisons to
Noneshould use identity rather than equality, this rule should not be applied to NumPy array selection conditions as it will change the semantics:>>> a = np.array([None, None]) >>> a[a != None] array([], dtype=object) >>> a[a is not None] array([[None, None]], dtype=object)Unrelatedly, mark
test_mt3d.py::test_mfnwt_keat_uzf()slow, it should not be included in smoke tests (this was causing the optional dependency CI tests to fail due to timeout). And clean up some unused imports inconftest.py.