Skip to content

Release 0.7.0#306

Merged
martin-springer merged 427 commits into
mainfrom
development
Dec 4, 2025
Merged

Release 0.7.0#306
martin-springer merged 427 commits into
mainfrom
development

Conversation

@martin-springer

@martin-springer martin-springer commented Dec 3, 2025

Copy link
Copy Markdown
Collaborator

Notebook Restructuring and Documentation Improvements

Overview

This PR implements a major restructuring of tutorial notebooks, comprehensive documentation improvements, enhanced contributor workflows, and introduces PySAM integration for agrivoltaics modeling in PVDeg v0.7.0.

Major Achievements

🚀 PySAM Integration for Agrivoltaics (#252)

New capability unlocked! This release introduces a complete PySAM wrapper enabling system-level performance modeling and agrivoltaics simulations within PVDeg's geospatial framework.

New pvdeg.pysam Module

A comprehensive public module wrapping NREL-PySAM for seamless integration:

  • pysam() - Execute SAM simulations directly from PVDeg workflows
  • optimal_gcr_pitch() - Calculate optimal ground coverage ratio and pitch for fixed-tilt bifacial systems based on latitude and GCR optimization parameters
  • inspire_practical_pitch() - Determine tilt, pitch, and GCR for practically constrained agrivoltaic systems
  • inspire_ground_irradiance() - Calculate inter-row ground irradiance for the InSPIRE agrivoltaics irradiance dataset
  • solar_resource_dict() - Convert PVDeg weather and metadata into SAM-compatible solar resource collections

Enhanced Geospatial Analysis

Expert options added to pvdeg.geospatial.analysis for advanced workflows:

  • preserve_gid_dim - Maintains model outputs in gid dimension instead of converting to latitude, longitude domain for optimized processing
  • compute - Returns dask.Delayed objects to build complex task graphs: analysis(..., compute=False) enables lazy evaluation for HPC workflows

Impact: This integration bridges degradation modeling with system performance analysis, enabling comprehensive agrivoltaics studies that combine yield predictions with degradation effects across large geospatial domains.

Note: Current implementation is optimized for InSPIRE Agrivoltaics workflows. Future releases will generalize this module for broader out-of-the-box geospatial PySAM calculations.

Breaking Changes

  • PSM v4 Migration: Updated NSRDB weather data retrieval from PSM v3 to PSM v4. All instances of pvlib.iotools.get_psm3() replaced with pvlib.iotools.get_nsrdb_psm4_tmy() (Upgrade to GOES PSM v4 #286, Transition from NSRDB PSM3 to PSM4 #287)
  • Multi-material Scenario Support: Enhanced Scenario class to accept nested dictionaries of multiple materials from different material files in scenario.addModule(). Updated utilities._add_material() and scenario.add_material() accordingly.

Enhancements

📚 Tutorial Restructuring (#232, #271, #302)

  • New Organization: Migrated from tutorials_and_tools/ to tutorials/ with logical themed folders:

    • 01_basics/ (4 notebooks) - Introduction to PVDeg fundamentals
    • 02_degradation/ (6 notebooks) - Degradation mechanism modeling
    • 03_monte_carlo/ (2 notebooks) - Monte Carlo uncertainty analysis
    • 04_scenario/ (3 notebooks) - Scenario class workflows
    • 05_geospatial/ (5 notebooks) - Geospatial and HPC scenarios
    • 06_advanced/ (4 notebooks) - Advanced topics and API access
    • 10_workshop_demos/ (2 notebooks) - Workshop demonstrations
    • tools/ (3 notebooks) - Standalone analysis tools
  • Local Weather Data: Updated notebooks to load pre-saved weather data by default to avoid API rate limits:

    • 03_monte_carlo/01_arrhenius.ipynb (Miami)
    • 01_basics/04_weather_database_access.ipynb (Golden, CO)
    • 03_monte_carlo/02_standoff.ipynb (NYC)
  • Version Control Integration: Added jupytext configuration and Python script versions for all notebooks with pre-commit hook synchronization

  • Updated References: Replaced Eagle HPC references with Kestrel (NREL's current HPC system)

  • CI/CD Updates: Updated all configuration files (_toc.yml, _config.yml, myst.yml) and GitHub Actions workflows (nbval.yaml, testbook.yaml, deploy-books.yml)

📖 Documentation Improvements

🐍 Python & Dependencies

🐛 Bug Fixes

Contributors

Testing

  • All tutorial notebooks validated with local weather data
  • Pre-commit hooks configured and passing
  • ReadTheDocs preview builds successfully

Closes #232, #271, #258, #145, #293, #296, #283

Issue ticket number and link

Fixes #298

Type of change

Please delete options that are not relevant.

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

Checklist before requesting a review

  • I have performed a self-review of my code
  • Code changes are covered by tests.
  • Code changes have been evaluated for compatibility/integration with Scenario analysis (for future PRs)
  • Code changes have been evaluated for compatibility/integration with geospatial autotemplating (for future PRs)
  • New functions added to init.py
  • API.rst is up to date, along with other sphinx docs pages
  • Example notebooks are rerun and differences in results scrutinized
  • What's new changelog has been updated in the docs

RDaxini and others added 30 commits October 15, 2025 15:49
Environment, Command to Execute Notebooks
Anaconda prompt: set PVD_SKIP_HPC_CHECK=True & jupyter nbconvert --to notebook --execute --inplace "tutorials_and_tools/tutorials_and_tools/*HPC*.ipynb"
Windows Local/CI, "(pvdeg) $env:PVD_SKIP_HPC_CHECK=""True""; jupyter nbconvert --to notebook --execute --inplace ""tutorials_and_tools/tutorials_and_tools/*HPC*.ipynb"""
Linux/macOS Local/CI, "(pvdeg) PVD_SKIP_HPC_CHECK=True jupyter nbconvert --to notebook --execute --inplace ""tutorials_and_tools/tutorials_and_tools/*HPC*.ipynb"""
NREL Kestrel HPC, "(pvdeg) jupyter nbconvert --to notebook --execute --inplace ""tutorials_and_tools/tutorials_and_tools/*HPC*.ipynb"""
@RDaxini RDaxini added the release label Dec 3, 2025
@RDaxini RDaxini added this to the v0.7.0 milestone Dec 4, 2025
@martin-springer martin-springer merged commit 25fa88a into main Dec 4, 2025
19 checks passed
@RDaxini RDaxini mentioned this pull request Dec 27, 2025
12 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0.7.0 release planning Update jupyter books

6 participants