My GSoC 2026 Journey (Final Report): 12 Weeks of Learning and Contributing

12 Weeks of Learning and Contributing to SunPy

I’m really grateful that I got the opportunity to work on radiospectra during GSoC. Over these 12 weeks, I got to work across several areas of the project - from the ndcube migration and metadata to plotting, testing, documentation, support for different data sources and eventually the SpectrogramFactory redesign.

What made the experience especially valuable was getting to learn from my mentors and the wider SunPy community along the way. Each review, discussion and challenge helped me understand the project better and become more thoughtful about how I approach a change.

Read more…

12 Weeks of GSoC: A Lot Learned, A Lot More to Do

A Lot Learned, A Lot More to Do 🚀

And just like that, 12 weeks of GSoC are over!

The last two weeks have been quite different from the earlier ones. There was a lot of finishing up, reviewing, fixing things that broke along the way and making sure the bigger pieces of the project were coming together properly.

Here's what I've been up to.

Learning to Write Less Code 😅

One of the biggest lessons from these weeks actually came from a code review.

I had previously added some custom methods for getting time and frequency profiles from a spectrogram. The code worked, but there were some change of plans, during review we realized that ndcube already provided the functionality needed to achieve the same thing.

So instead of keeping the extra code, I removed it and focused on showing users how to use the existing ndcube methods.

It was a really good reminder that adding more code isn't always the right solution.

Sometimes the better approach is to make better use of what already exists.


Making the Examples More Useful 📚

After removing the custom wrappers, I wanted to make sure users could still easily understand how to perform these operations.

I worked on a Sphinx-Gallery example showing how to crop spectrograms and extract profiles using the ndcube API.

The example covers cropping by time, cropping by frequency, combining both and extracting 1D profiles.







I also changed the example based on mentor feedback so that the explanation, code and plots appear step by step instead of having all the plots at the end.

I think it makes the whole example much easier to follow.


Finally Finishing the Factory Migration 🔧

The biggest piece of work during these two weeks was completing the SpectrogramFactory migration.

I had previously migrated WAVES and e-CALLISTO and during these weeks I worked through the remaining instruments.

The idea behind the new design is to keep the factory simple:

Before:

Read everything → Find instrument → Create spectrogram

Now:

Read basic information → Find instrument → Let the instrument parse the data

The instrument-specific parsing now lives inside the individual instrument classes through from_raw() instead of having all of it inside the factory.

Getting all the instruments moved over was definitely one of the bigger milestones of my GSoC project.


The Final Few Fixes 🛠️

Of course, finishing a large refactor also meant dealing with a few unexpected things.

I worked through some documentation build issues, resolved merge conflicts while keeping ndcube-refactor up to date with main and fixed a few smaller issues that came up along the way.

These weren't necessarily the most exciting changes, but they were a good reminder that a project doesn't end when the main code is written. There's always testing, documentation, reviews and cleanup.


12 Weeks Done… But Not Finished Yet 🚀

And that's officially 12 weeks of GSoC done!

Looking back, it's honestly hard to believe how much I've learned in these three months. I started with a lot of questions about the codebase and now I'm working on things like the architecture of the SpectrogramFactory, ndcube integration, documentation, testing and all the little things that come with maintaining an open-source project.

Read more…

Learning to Speak C & Cython: My GSoC Summer with Astropy

The summer is officially over. I am staring at a remarkably clean Git branch, my laptop didn't literally take off into orbit (though the CPU fans certainly tried a few times during local CI builds), and I somehow know what git rebase -i does without having to Google it in a cold sweat.

If you'd asked me back in May what I was going to be doing, I would have confidently told you I was going to "write tests for Astropy's C extensions." It sounded so neat. So contained. But open source doesn't really work like that. I came in thinking I was just going to write tests, and somewhere along the way, I ended up learning how the actual machinery underneath the Python abstraction works, how maintainers think about architecture, and how to safely catch C-level memory panics without taking down the entire interpreter.

Read more…

Weeks 9 & 10: Slicing, Profiles and a New Factory

 Slicing, Profiles and a New Factory 🚀

The last two weeks have been a pretty interesting mix of working on spectrogram slicing and starting to look at one of the bigger architectural changes in radiospectra.

A lot of the work this time was about understanding how the different pieces fit together and figuring out how to make things easier for users and contributors.

Read more…

Weeks 7 & 8: Making Spectrograms a Little Easier to Work With

Making Spectrograms a Little Easier to Work With

Another couple of weeks have gone by and it's been a mix of writing code, responding to reviews and learning more about the radiospectra codebase.

Compared to the first few weeks, I spent less time figuring out where things lived and more time thinking about how people actually use the library. That shift has been really fun because even small improvements can make a noticeable difference for users.

Read more…