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.
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
Ensure csr matrices are in "canonical format" before impact calculation #893
Ensure csr matrices are in "canonical format" before impact calculation #893
Changes from 10 commits
4f6952e
91c52e9
3e27ac8
f539dec
4ced09c
de06f2e
ebb2cc8
c58b48d
e0ebdef
71ce00e
fa0821e
6ad7ab4
79ab66f
9e0a58c
cd21903
File filter
Filter by extension
Conversations
Jump to
There are no files selected for viewing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am a bit confused why the pruning is tested here...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I can also check via a mock if
check_matrices
is called, but I recall strong sentiments against such tests 😄There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think my confusion comes from the fact that I am uneasy with having the impact class changing the hazard objects. See comment below.
Check warning on line 47 in climada/hazard/base.py
Jenkins - WCR / Pylint
too-many-public-methods
Raw output
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we want to recommend checking that if the class does check it anyway? I am a bit sceptical with these
check_object
methods that we have in climada. Imho these should be handled in theinit
and that is it.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If people modify the matrix after the initialization or assignment, we have no way of ensuring consistency within Hazard alone. (We later call
check_matrices
fromImpactCalc
for that exact reason)There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
hmmm... not yet fully convinced. If the user messes up an object, which the user always can in Python, then it is their problem. I would rather have fewer checks at random places in the code that hide bad habits and save people from doing things they should not do, and instead force good habits by having checks in the inits.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I generally agree that we should only check if necessary. However, the MDR calculation operates on the
data
attribute. It is therefore essential that canonical format is ensured before starting the impact calculation.If you really want to boil it down to a minimum, I would suggest to remove the pruning from the Hazard setters and instead only call
check_matrices
fromImpactCalc
. But this might increase confusion again, because consistency is never ensured before startingImpactCalc
.Another thing to keep in mind is that
sum_duplicates
is O(N^2) for a non-canonical matrix, and a no-op O(1) for a canonical matrix, andeliminate_zeros
is O(N), where N is the number of stored non-zeros entries.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good points, and thanks for looking up the time cost of the methods.
Ok, let's try it like this. Maybe we can keep an eye on this change in the separate efforts to optimize computation times for ImpactCalc.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In this case, I'll revert the properties and make
intensity
andfraction
proper attributes again.