Skip to content
Mark Mikofski edited this page Feb 18, 2021 · 2 revisions

Introduction

pvlib python is an open source library for solar power modeling. We are participating in the 2021 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!

Students

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

Ideas

Below is a list of ideas of projects that GSoC participants can choose to work on in pvlib python.

Project Title: Create usage examples

Project Description: Create python scripts, jupyter notebooks, or stack overflow Q/A showing how to use pvlib-python for several common use cases for solar power modeling. Priority use cases include:

  • Calculating annual energy for a PV system at a given location and orientation, showing use of different models for plane-of-array irradiance, DC power, and cell temperature.
  • Comparing power output between fixed-tilt and tracking PV systems.
  • Calculating and comparing irradiance from various clear-sky models.
  • Comparing power output from a PV system using different PV panels and/or inverters in the system. Mentors will provide detailed descriptions of the use cases, guidance on the modeling process and usage of pvlib-python.

Expected Outcomes: The primary outcome is a set of python scripts in docs/examples, notebooks in docs/tutorials, or questions and answers on stackoverflow. A secondary outcome is to identify improvements to pvlib-python for usability and flexibility.

Skills Required / Preferred: python (required), familiarity with solar power modeling preferred, but not required.

Mentors: Kevin Anderson, Mark Mikofski

Difficulty: Medium

Project Title: Overhaul documentation

Project Description: pvlib python documentation pages are not well-organized. Start with a blank page and create effective, beautiful documentation for pvlib python. Examples of documentation to emulate include SunPy.

Expected Outcomes: The primary outcome is source code for a set of documentation pages. Most source code will be in ReStructuredText format.

Skills Required / Preferred: Required: Technical writing. Preferred: Familiarity with python, sphinx, doctests, solar power modeling

Mentors: Kevin Anderson, Mark Mikofski

Difficulty: Medium

Project Title: Benchmarking and Profiling

Project Description: pvlib python has a small set of benchmarks 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: The core modeling paths are fully benchmarked.

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

Mentors: Kevin Anderson, Mark Mikofski

Difficulty: Medium

Project Title: Accelerate package using Numba/Cython

Project Description: pvlib python makes heavy use of vectorized numpy operations to speed up numerical calculations. However, not all models are easy to implement using vectorized numpy operations, meaning their pvlib python implementation has to use "slow" native python loops. Tools like Numba and Cython are alternatives that make it possible to write non-vectorized code that still runs fast. The goal of this project is to identify and reimplement pvlib-python functions that could benefit from being implemented in Numba/Cython.

Expected Outcomes: A documented strategy for identifying functions that would benefit from Numba/Cython acceleration, and Numba/Cython reimplementations of existing functions that would benefit from it.

Skills Required / Preferred: Python, familiarity with Numba/Cython and/or low-level languages like C/C++ desirable

Mentors: Kevin Anderson, Mark Mikofski

Difficulty: Hard

Project Title: Add type annotations and static code analysis

Project Description: pvlib python tries to be an example of following best practice when it comes to software development practices like automated code analysis. Running a comprehensive set of tests automatically using continuous integration services like GitHub Actions goes a long way towards that goal. One way pvlib python could improve in this area is to add type annotations to its functions so that we can add another layer of testing with static analysis tools like MyPy.

Expected Outcomes: Type annotations are added to existing pvlib python functions where appropriate and a static analysis tool is added to our continuous integration checks.

Skills Required / Preferred: Python, familiarity with the PyData ecosystem and continuous integration desirable

Mentors: Kevin Anderson, Mark Mikofski

Difficulty: Medium

Mentors

  1. Kevin Anderson [email protected]
  2. Mark Mikofski [email protected]