-
-
Notifications
You must be signed in to change notification settings - Fork 54
NDCube.fill_masked() method #829
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
Conversation
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.
Hi @PCJY. Here are some suggested improvements.
Once you've handled these, you should also consider how to handle the case where the cube (including the uncertainty) has a unit.
Then this PR will also need tests.
Co-authored-by: DanRyanIrish <ryand5@tcd.ie>
rename the method Co-authored-by: DanRyanIrish <ryand5@tcd.ie>
Co-authored-by: DanRyanIrish <ryand5@tcd.ie>
Co-authored-by: DanRyanIrish <ryand5@tcd.ie>
remove code about kwargs when fill_in_place is True. Co-authored-by: DanRyanIrish <ryand5@tcd.ie>
Already know that self.mask is not None, now, check whether uncertainty_fill_value and self.uncertainty is None, raise an error if self.uncertainty is None. Co-authored-by: DanRyanIrish <ryand5@tcd.ie>
Filling in the uncertainty_fill_value Co-authored-by: DanRyanIrish <ryand5@tcd.ie>
Co-authored-by: DanRyanIrish <ryand5@tcd.ie>
Co-authored-by: DanRyanIrish <ryand5@tcd.ie>
@PCJY Let me know when this is ready for another review. Also, be sure to pull the latest changes from the main branch into this branch. |
Hi @DanRyanIrish I have just implemented the method more, finished adding tests for the method. Apologies for the delay. I also handled units by keeping the unit the same (which might not be what you were trying to suggest, because you might mean: the fill_value itself has a unit? ). |
ndcube/tests/test_ndcube.py
Outdated
(1.0 * u.cm, 0.02, False, False), # what if the fill_value has a unit?? | ||
] | ||
) | ||
def test_fill_masked(ndcube_2d_ln_lt_mask_uncert_unit, fill_value, uncertainty_fill_value, unmask, fill_in_place): |
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 suggest two separate tests for fill_in_place
equal True
and False
. I also suggest that you provide the expected cube in the parameterisation. This would be much easier if your test cube only had a few data elements, e.g. a 2x3 array.
Where it's feasible, it's better to explicitly define the expected value, rather than calculate it based on the inputs provided. This leaves more possibility for the same error to exist in the code you're testing and your calculation of the expected value.
make kwargs ndcube and return it Co-authored-by: DanRyanIrish <ryand5@tcd.ie>
Co-authored-by: DanRyanIrish <ryand5@tcd.ie>
Co-authored-by: DanRyanIrish <ryand5@tcd.ie>
Co-authored-by: DanRyanIrish <ryand5@tcd.ie>
Hi @DanRyanIrish , just so you know, the last three commits are the latest ones I made. Thank you. |
Co-authored-by: DanRyanIrish <ryand5@tcd.ie>
Hi @DanRyanIrish , I have finished debugging the tests (with the latest four commits): 2, I forgot to specify the argument "check_uncertainty_values" specifying whether it is necessary to check the uncertainty, as True, in the assert_cubes_equal method. So I fixed it. 3, The coverage file reminded me that I did not test the case when uncertainty_fill_value is not None but the NDCube object's uncertainty is None. So I added an individual test method to test this case, expecting it to raise a TypeError. 4, Then the coverage file complains about not entering the two scenarios when one and only one of test_input and expected_cube has an uncertainty attribute. But I think the correct behaviour is that it does not enter these two blocks. So I used 'pragma no cover' to let the coverage file know it does not need to be covered by the tests. Please let me know if there's anything you'd like me to adjust, thank you! |
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.
return self._new_instance(**kwargs) | ||
if unmask: | ||
self.mask = False | ||
return None |
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.
@Cadair Do you have advice when it comes to methods to make changes in-place? Should this return None
, or not return anything at all?
assert_cubes_equal(), check masks equal or not, in two scenarios Co-authored-by: DanRyanIrish <ryand5@tcd.ie>
Hi @DanRyanIrish , thanks for your review and bringing up the single-Boolean case issue. In my latest commit, there a few new changes addressing the single-Boolean-True mask value test case, I think the test is more robust now. |
Check the masks' type and then assert whether they are the same. Co-authored-by: DanRyanIrish <ryand5@tcd.ie>
I've encountered various astropy masked things recently, they use |
Both |
PR Description
This pull request aims to resolve the issue proposed by @DanRyanIrish , #828 .