Feature/custom grid litpop by zeliest · Pull Request #1022 · CLIMADA-project/climada_python
Changes proposed in this PR:
-
Added a target_grid option for creating LitPop exposures. If the argument is not provided, the grid is automatically defined based on the population dataset (GPW) or nightlight dataset (NASA Black Marble), depending on the resolution.
- If res_arcsec == 15, the Black Marble Nightlight grid is used with a predefined global transform.
- Otherwise, the grid aligns with GPW, adjusting to the nearest resolution step based on its transform.
-
Removed outdated test case (test_reproject_input_data_odd_downsample), as it was no longer relevant with the new grid alignment method.
-
Added a new test (test_target_grid_alignment) to verify that the reprojection correctly aligns with the target grid.
Why this is needed:
- Allows to flexibly define grid for litpop to align with hazards
- This becomes faster when defining LitPop for many countries, as the grid is defined only once.
PR Author Checklist
- Read the Contribution Guide
- Correct target branch selected (if unsure, select
develop) - Descriptive pull request title added
- Source branch up-to-date with target branch
- Documentation updated
- Tests updated
- Tests passing
- No new linter issues
- Changelog updated
PR Reviewer Checklist
- Read the Contribution Guide
- CLIMADA Reviewer Checklist passed
- Tests passing
- No new linter issues
| reference_year=DEF_REF_YEAR, | ||
| gpw_version=GPW_VERSION, | ||
| data_dir=SYSTEM_DIR, | ||
| target_grid=None |
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you please add the docstring for this new variable?
| res_arcsec=15, | ||
| reference_year=DEF_REF_YEAR, | ||
| data_dir=SYSTEM_DIR, | ||
| target_grid=None |
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
idem, can you please add the docstring?
| reference_year=DEF_REF_YEAR, | ||
| gpw_version=GPW_VERSION, | ||
| data_dir=SYSTEM_DIR, | ||
| target_grid=None |
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
idem, can you please add the docstring?
| reference_year=DEF_REF_YEAR, | ||
| gpw_version=GPW_VERSION, | ||
| data_dir=SYSTEM_DIR, | ||
| target_grid=None |
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
idem, can you please add the docstring?
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great addition! I have noted quickly some small elements to improve the code itself. I will do a review of the desired result of the new feature soon. I am currently wondering how the resampling of the original data (black marble and gpw) is done, how this affects the output results, and whether this is clear to the user at the moment.
zeliest
changed the title
Feature/costum grid litpop
Feature/custom grid litpop
So, the data is regridded using the method util.coords.align_raster_data (make a link in the docstring with See Also section) and using the resampling rasterio.warp.Resampling.bilinear. I think this information should be added to the docstring, together with the information on how to use either the lit or the pop grid. Also, it should be clear that if the target grid is defined, then the resolution does nothing.
Comment on lines +535 to +539
| # TESTS = unittest.TestLoader().loadTestsFromTestCase(TestLitPopExposure) | ||
| # TESTS.addTests(unittest.TestLoader().loadTestsFromTestCase(TestAdmin1)) | ||
| # unittest.TextTestRunner(verbosity=2).run(TESTS) | ||
|
|
||
| TESTS = unittest.TestLoader().loadTestsFromTestCase(TestLitPopGridAlignment) |
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| # TESTS = unittest.TestLoader().loadTestsFromTestCase(TestLitPopExposure) | |
| # TESTS.addTests(unittest.TestLoader().loadTestsFromTestCase(TestAdmin1)) | |
| # unittest.TextTestRunner(verbosity=2).run(TESTS) | |
| TESTS = unittest.TestLoader().loadTestsFromTestCase(TestLitPopGridAlignment) | |
| TESTS = unittest.TestLoader().loadTestsFromTestCase(TestLitPopExposure) | |
| TESTS.addTests(unittest.TestLoader().loadTestsFromTestCase(TestAdmin1)) | |
| TESTS.addTests(unittest.TestLoader().loadTestsFromTestCase(TestLitPopGridAlignment)) |
The tests are currently failing due to a too-low test coverage. It means that many of the added lines of code are never tested for. This suggests that additional unit tests are required.
Also, there are small linter errors that are easy to correct (trailing white spaces for instance).
chahank
marked this pull request as ready for review
I think the test coverage is failing because the main methods to setup litpop are only tested in the integration test.
@emanuel-schmid if you confirm, I would merge.
I think the test coverage is failing because the main methods to setup litpop are only tested in the integration test.
That may be the reason. It fails if the reference job, which is a particular commit from develop, has a better (lines of code)/(tested lines of code) ratio. That's all.
If only this fails, we don't mind. 🤷
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