Skip to content

Bump pyam-iamc to >= 1.9.0#36

Merged
phackstock merged 6 commits into
mainfrom
update/pyam-iamc
Aug 4, 2023
Merged

Bump pyam-iamc to >= 1.9.0#36
phackstock merged 6 commits into
mainfrom
update/pyam-iamc

Conversation

@phackstock

@phackstock phackstock commented May 23, 2023

Copy link
Copy Markdown
Contributor

closes #27.

  • Tests added
  • Documentation added
  • Example added (in the documentation, to an existing notebook, or in a new notebook)
  • Description in CHANGELOG.rst added (single line such as: (`#XX <https://github.com/iiasa/climate-assessment/pull/XX>`_) Added feature which does something)

@phackstock
phackstock requested review from jkikstra and znicholls May 23, 2023 11:50
@jkikstra jkikstra mentioned this pull request May 23, 2023
@phackstock

Copy link
Copy Markdown
Contributor Author

Looks like there's four tests that are breaking. If any of you @znicholls, @lewisjared or @jkikstra could have a quick look that would be great.

@znicholls

Copy link
Copy Markdown
Collaborator

I think I worked it out. Put the code below after line 360 of checks.py and you'll see. I think the original regression is in pandas, but you can work around it by tweaking pyam

        if model == "model7":
            import pdb
            pdb.set_trace()
            df_scen.timeseries()  # No CO2|Energy and Industrial as expected
            df_scen._data.index.get_level_values("variable").unique()  # No CO2|Energy and Industrial as expected

            # Using pyam accessors gives wrong result so `has_co2_energy`
            # evaluates incorrectly above
            df_scen.variable  # Contains CO2|Energy and Industrial ?!

            # What pyam uses internally. I think pyam is correct, but pandas
            # has a crazy regression where this returns incorrect information?!
            list(df_scen._data.index.levels[df_scen._data.index._get_level_number("variable")])  # Contains CO2|Energy and Industrial ?!
            # I assume that accessing levels directly on a MultiIndex is somehow not the intended pattern

            # I'd suggest updating pyam's internal's to use this, which seems to work
            list(df_scen._data.index.get_level_values("variable").unique())  # No CO2|Energy and Industrial as expected

@phackstock

Copy link
Copy Markdown
Contributor Author

Thanks @znicholls, that's super weird. I've implemented your suggestion.
Is this a pyam bug? Could it be related to a variable being dropped and df.variable not being updated accordingly?

znicholls
znicholls previously approved these changes May 24, 2023

@znicholls znicholls left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think once the change is applied globally this should pass through. Option b is you do a bugfix release in pyam (fixing the pandas bug), do a new pyam release then change this MR and you don't have to do any fix at all here.

df_scen = _check_difference(df_scen, co2_total, co2_afolu, scen, model)

if co2_energy not in df_scen.variable:
if co2_energy not in df_scen._data.index.get_level_values("variable").unique():

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you'll need to make this replacement everywhere that df_scen.variable appears to get things to work properly.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah right, of course

@phackstock

Copy link
Copy Markdown
Contributor Author

Option b is you do a bugfix release in pyam (fixing the pandas bug), do a new pyam release then change this MR and you don't have to do any fix at all here.

So you think it's a pandas bug?
Not sure what's the best option here, if you can reproduce it, maybe open a pyam issue and we discuss over there? It's not super critical to update pyam for climate-assessment.
We could do #34 now then and just increase the pyam version later.

@danielhuppmann

Copy link
Copy Markdown
Member

So I"m trying to get to the bottom of this, but I can't replicate the observation by @znicholls about df.variable returning something else than the correct values (with pyam 1.9 and pandas 1.5.3)... It seems all correct to me.

@danielhuppmann

Copy link
Copy Markdown
Member

So I ran the tests along the entire history of pyam and it seems that IAMconsortium/pyam#731 breaks the test.

@znicholls

Copy link
Copy Markdown
Collaborator

pandas 1.5.3

I think I had pandas 2 maybe (memory fading now)

I ran the tests along the entire history of pyam

Nice detective work, did you use git bisect?

@znicholls znicholls mentioned this pull request Aug 3, 2023
@znicholls

Copy link
Copy Markdown
Collaborator

(I've made a bit of a mess of this, sorry)

@danielhuppmann

Copy link
Copy Markdown
Member

Implement a fix based on @znicholls' observation in IAMconsortium/pyam#762

@phackstock

Copy link
Copy Markdown
Contributor Author

After the pyam update, I wanted to update this PR to verify that that fixes the issue. However, as I just saw the tests were already passing yesterday? I'm a bit confused now but I guess it's all good?

@danielhuppmann

Copy link
Copy Markdown
Member

See ccf0e7b - the problem was caused by the very inefficient groupby, so I refactored that piece of the code.

@phackstock phackstock self-assigned this Aug 4, 2023
@phackstock
phackstock requested a review from znicholls August 4, 2023 09:01
@phackstock

Copy link
Copy Markdown
Contributor Author

Since the tests are passing and I'd love to get this out before the weekend, I'll move on with the merge. Hope that's ok @znicholls.

@phackstock
phackstock merged commit 9b701da into main Aug 4, 2023
@phackstock
phackstock deleted the update/pyam-iamc branch August 4, 2023 11:19
@znicholls

Copy link
Copy Markdown
Collaborator

Hope that's ok @znicholls.

If all passing, all good (particularly given how much we've talked about this already)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bump pyam-iamc to 1.8.0

3 participants