GSOC 2020: End of the First Half

Comet C/2020 F3 (NEOWISE) will be visible in India for the next 20 days!

So now I’m halfway through the Summer of Code Journey. The last two weeks have been full of code reviews, code refactoring, and documenting stuff. I also helped new contributors to the SunPy to get them started. Thus I interacted more with the community this time.

Making HEC Fido Compatible

HEC stands for Heliophysics Event Catalogue. For your information, Heliophysics events are a large variety of phenomena that:

  • originate or occur on the Sun.
  • Propagate through the interplanetary medium.
  • Interact with the geospace and planetary analogs.
An illustration of an Heliophysics Event| Earth’s magnetic field shielding our planet from solar particles. Credit: NASA/GSFC/SVS

HEC allows complex searches for events stored in indexed catalogs. SunPy has a HECClient which allows you to interface with Helio web services.

In PR #4358 to enable Helio metadata searches with Fido (Federated Internet Data Obtainer), I made it inherit ~sunpy.net.BaseClient and overwrote a few methods for the client. New hec-specific attrs like MaxRecords, TableName, and Catalogue were defined to make _can_handle_query() work.

A new class HECResponse was added to contain the responses retrieved after the search is executed. This made helio queries possible through Fido, although there are yet a lot of things that can be improved.

Updated tests for client redesign!

PR #4321 (nice number!) is a major refactoring pull request for sunpy’s dataretriever module. So far it has negative 1500 lines of code.

Finally SUVIClient was generalized which was the toughest of its counterparts. It supports the highest number of attributes. These are `Time`, Source, Instrument, Phsyobs, Provider, Level, Wavelength, and SatelliteNumber.

The row data for the response table can either be contained as a dictionary or as data members of a class. A small hack made me achieve both. QueryResponseBlock was re-welcomed to the client.py. It now inherits OrderedDict and has dict values as class data members too. Passed Ordered Dictionary was used to update its self.__dict__.

Other Stuff

My mentor made a list of 38 issues in Sunpy that were related to the project. I went through all of them and labeled them based on the submodules they are concerned with, how much I understand them, and their relevance with the GSoC project. Some of them were overlapping with things in my mind, so existing discussions on them shall be really helpful for me.

I also spent time on writing the guidelines to extend Fido and how to add new sources to it, based on the redesign.

Looking forward to capturing the comet in the coming days and having an awesome second half!

CARPE NOCTEM!