Skip to content

Conversation

@fneum
Copy link
Member

@fneum fneum commented Mar 27, 2025

Changes proposed in this Pull Request

It makes cutout.runoff(normalize_using_yearly=...) more lenient by supporting proportional scaling of partially represented years in the cutout, assuming even distribution of runoff throughout the year. In this case, a warning is printed due to the strong assumption.

Relevant for PyPSA/pypsa-eur#1613 (e.g. July-June meteorological years, in case the original cutout does not span Jan-Dec for each year included)

This also means we can include hydro in the CI test of PyPSA-Eur, which uses only a week of weather data.

Checklist

  • Code changes are sufficiently documented; i.e. new functions contain docstrings and further explanations may be given in doc.
  • [] Unit tests for new features were added (if applicable).
  • [] Newly introduced dependencies are added to environment.yaml, environment_docs.yaml and setup.py (if applicable).
  • A note for the release notes doc/release_notes.rst of the upcoming release is included.
  • I consent to the release of this PR's code under the MIT license.

@fneum fneum requested review from Copilot and lkstrp March 27, 2025 07:13
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR enhances the runoff normalization function to support partial years by applying proportional scaling based on available data, while issuing a warning about the strong assumption of even runoff distribution.

  • Improved handling of date ranges for runoff and normalization data
  • Added partial year normalization logic with proportional scaling and a warning message
  • Updated reindexing to use a dynamic coordinate based on the altered dimension
Files not reviewed (1)
  • RELEASE_NOTES.rst: Language not supported
Comments suppressed due to low confidence (3)

atlite/convert.py:1026

  • [nitpick] Ensure that reindexing using the dynamic dimension (dim) aligns with the intended coordinate, especially if the original 'countries' coordinate was explicitly required in other parts of the code.
).reindex({dim: result.coords[dim]})

atlite/convert.py:1010

  • [nitpick] Verify that the proportional scaling logic correctly handles all edge cases, such as when the overlap period almost covers a full year, to ensure the computed fraction accurately reflects the intended partial data scaling.
fraction = (end - start).total_seconds() / ((year_end - year_start).total_seconds())

atlite/convert.py:965

  • [nitpick] Consider renaming 'result_time' to a more descriptive name like 'time_index' to more clearly indicate that this variable represents a DatetimeIndex.
result_time = pd.DatetimeIndex(result.coords["time"].values)

@fneum fneum requested review from euronion and removed request for lkstrp May 25, 2025 11:12
@fneum fneum requested a review from coroa August 23, 2025 06:29
@euronion euronion moved this to Usability in atlite vision and roadmap Oct 8, 2025
@euronion euronion moved this from Usability to Quick wins in atlite vision and roadmap Oct 8, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Quick wins

Development

Successfully merging this pull request may close these issues.

2 participants