Skip to content
Adam R. Jensen edited this page Feb 17, 2025 · 6 revisions

Introduction

pvlib python is an open source library for solar power modeling. We are participating in the 2025 Google Summer of Code (GSoC) under the NumFOCUS GSoC application. Come help us improve and extend these capabilities, and learn about solar power in the process!

The goal of GSoC is to help get people started in the open-source world. However, pvlib's goal is to recruit new long-term contributors/maintainers. Because pvlib is for a rather niche scientific/engineering topic, we are very unlikely to accept a proposal from anyone without some background in solar energy. Without some relevant background, it will be difficult to complete a meaningful project in the time span allowed by the GSoC program.

Previous GSoC contributors have described their experience working with pvlib on their blogs:

NOTE: applicants no longer need to be a currently enrolled student. You can read more about eligibility here.

Contributing guide

Please read the Students contributing guide on the NumFOCUS GSoC repo. Also check out the list of pvlib project ideas below!

Your next steps should be something like this:

  1. Pick a project idea you find interesting and relevant to your skill set. The following section has some ideas, but you're encouraged to develop your own project idea that best fits your interests!
  2. Come up with some specific goals for the project. For example, using the "pvlib example gallery" idea below, one specific goal might look like "A new example using pvlib.irradiance.xyz to do XYZ".
  3. Use these specific goals to start putting together a proposal draft. For inspiration, see this good proposal from 2021: link
  4. Get feedback on your draft by posting a new thread in the pvlib google group. It's okay if the draft is still a work in progress!

If you have questions, feel free to ask on our google group or directly (mentor contact info is at the bottom of this page).

The application period for GSoC 2025 is March 24 - April 8.

Ideas

Below is a list of project ideas that we think could make good GSoC projects, depending on the applicant. Applicants are welcome to submit proposals for other project ideas, but we strongly encourage you to discuss your project idea with us in advance of submitting your proposal. To get feedback on a project idea, or a draft proposal, please start a new thread in the pvlib google group.


Project Title: Add to the pvlib example gallery

Project Description: The pvlib example gallery is a collection of stand-alone python scripts showing examples of using pvlib to model various aspects of solar power. It is organized roughly by modeling topic/pvlib module. Most topics have only one or two examples that only cover a small part of the relevant pvlib functionality. Some parts of pvlib don't even have a topic section yet! This project's goal is to add new examples in one or more gallery topic areas. Proposals for any topic areas are welcome, but here are some gaps that would be great to address:

  • New topic: examples of customizing pvlib's ModelChain class for common use cases
  • New topic: examples of using pvlib.iotools to retrieve and parse weather data that then gets passed on to the modeling part of pvlib
  • Existing topics: flesh out with additional examples

Expected Outcomes: The primary outcome is a set of python scripts in docs/examples. A secondary outcome is to identify improvements to pvlib-python for usability and flexibility.

Skills Required / Preferred: some python required, familiarity with solar power modeling.

Mentors: Adam R. Jensen arajen@dtu.dk Kevin Anderson ksande@sandia.gov

Length: 175 hours

Difficulty: Easy


Project Title: Benchmarking and Profiling

Project Description: pvlib python has a small set of benchmarks (see here and here) to test how long various models take to execute and whether performance is improving or slowing down. However, only a small fraction of the package is currently benchmarked. Solar power simulation often requires analyzing very long (multi-year) or high-resolution (sub-hour) time-series, therefore benchmarking performance and profiling is important to analysts. The goal of this project is to implement a broader and more cohesive set of AirSpeed Velocity (asv) benchmarks to measure and record performance over time, and to identify bottlenecks for improvement.

Expected Outcomes: One or more pvlib modules is fully covered by asv benchmarks

Skills Required / Preferred: some python required, curiosity, desire to learn, knowledge of asv, profiling, or benchmarks desirable

Mentors: Adam R. Jensen arajen@dtu.dk, Kevin Anderson ksande@sandia.gov

Length: 175 hours

Difficulty: Medium


Project Title: Automating parameter estimation

Project Description: A key part of the PV modeling ecosystem is the CEC module database. pvlib uses a processed version of this database produced periodically by the SAM team. When the underlying CEC database updates, it would be nice to automate the SAM team's process so that the processed version is updated as well. This project is to adapt the manual parameter estimation process currently used by the SAM team and create a robust codebase that can perform this parameter estimation in a hands-off fashion.

Expected Outcomes: A new repository in the pvlib organization implementing the parameter estimation process, and ideally a scheduled GitHub Action to execute the process.

Skills Required / Preferred: some experience with optimization required, familiarity with PV I-V modeling preferred

Mentors: Cliff Hansen

Length: 350 hours

Difficulty: Hard


Project Title: Compatibility with the Array API

Project Description: An exciting development in the Python ecosystem is the Python array API standard, a uniform interface across the various array libraries (NumPy, Xarray, JAX, etc). Historically, pvlib has been written for compatibility with NumPy arrays and Pandas Series, but making use of the Array API to expand compatibility to other array libraries could be very beneficial. A successful proposal for this project will include some investigation about what it would take to adopt the Array API across pvlib.

Expected Outcomes: A plan/roadmap for adopting the Array API, Array API compatibility in several pvlib modules, and automated tests ensuring compatibility across the various array packages.

Skills Required / Preferred: familiarity with various array libraries and automated testing in CI

Mentors: Kevin Anderson ksande@sandia.gov, Adam R. Jensen arajen@dtu.dk

Length: 350 hours

Difficulty: Hard

Mentors

We encourage you to post questions to the pvlib google group, but if you have a question that you don't want to post publicly, you can also email us directly:

  1. Adam R. Jensen arajen@dtu.dk
  2. Kevin Anderson ksande@sandia.gov
  3. Cliff Hansen cwhanse@sandia.gov