-
Notifications
You must be signed in to change notification settings - Fork 121
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
Add kaya_variables, kaya_factors, and kaya_lmdi methods to the comput… #884
base: main
Are you sure you want to change the base?
Conversation
…e module. Also add the kaya subdirectory that contains the implementation for the kaya methods. (IAMconsortium#875)
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #884 +/- ##
=======================================
+ Coverage 95.0% 95.1% +0.1%
=======================================
Files 64 74 +10
Lines 6134 6579 +445
=======================================
+ Hits 5828 6260 +432
- Misses 306 319 +13 ☔ View full report in Codecov by Sentry. |
Thanks for the PR! Looks like the legacy-test is failing is because the unit's are ordered differently
Will take a look more closely next week, don't worry about the failing test for now, will think about how to avoid that. |
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.
Took a first look at the PR and made a few comments for improvements, Quite a lot of material here...
It would be helpful if you could remove the LMDI decomposition and add that as a separate PR later.
pyam/compute.py
Outdated
scenarios : iterable of tuples (model, scenario, region) | ||
The (model, scenario, region) combinations to be included. |
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.
Wondering about two issues with the scenarios filter:
- Why not just compute kaya-variables for all data in the IamDataFrame?
- If it's necessary to filter, why not allow filter-kwargs and add those below, like?
def kaya_variables(self, append=False, **kwargs) _data = self._df.filter(**kwargs) ...
I'm concerned about adding an argument "scenarios" that is actually a combination of model-scenario-region, that's quite confusing...
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 removed the scenarios filter and followed suggestion 1--we'll try to compute kaya-variables for all scenario/model/region combinations in the dataframe. I didn't try to implement returning partial sets of kaya-variables for scenario/model/region combinations that have only partial input data (though, if you think this is an important feature I'll give it a try). There's a new helper function in the kaya_variables module, _is_input_data_incomplete(), that relies on the require_data() method to make sure the data is complete enough so that none of the arithmetic operations in later processing will throw errors.
require_data() only considers model/scenario combinations (it does not care if all variables are present in all regions), but I want to alert the user when regions without full input data are present, so there is extra logic in _is_input_data_incomplete() to log this information.
pyam/compute.py
Outdated
@@ -249,6 +251,248 @@ def bias(self, name, method, axis): | |||
""" | |||
_compute_bias(self._df, name, method, axis) | |||
|
|||
def kaya_variables(self, scenarios, append=False): |
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.
There's a method kaya_variables
and an imported module with the same name, which then also has a method of that name... Hard to follow the code logic here.
…ya_variables now creates variables for all scenarios/model/region combination in a dataframe if possible. Also add special cases for GDP (both PPP and MER are accepted)
…e module. Also add the kaya subdirectory that contains the implementation for the kaya methods. (#875)
Please confirm that this PR has done the following:
Description of PR
This PR adds three methods to the public api of the
compute
module:kaya_variables()
,kaya_factors()
, andkaya_lmdi()
. The implementation for these methods is in the newkaya
submodule.