<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Archiving and Interchange DTD v2.3 20070202//EN" "archivearticle.dtd">
<article article-type="methods-article" dtd-version="2.3" xml:lang="EN" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Astron. Space Sci.</journal-id>
<journal-title>Frontiers in Astronomy and Space Sciences</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Astron. Space Sci.</abbrev-journal-title>
<issn pub-type="epub">2296-987X</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">1076726</article-id>
<article-id pub-id-type="doi">10.3389/fspas.2023.1076726</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Astronomy and Space Sciences</subject>
<subj-group>
<subject>Methods</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>The SunPy Project: An interoperable ecosystem for solar data analysis</article-title>
<alt-title alt-title-type="left-running-head">Barnes et&#xa0;al.</alt-title>
<alt-title alt-title-type="right-running-head">
<ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3389/fspas.2023.1076726">10.3389/fspas.2023.1076726</ext-link>
</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<collab>The SunPy Community</collab>
</contrib>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>Barnes</surname>
<given-names>Will T.</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<xref ref-type="aff" rid="aff2">
<sup>2</sup>
</xref>
<xref ref-type="corresp" rid="c001">&#x2a;</xref>
<xref ref-type="fn" rid="fn1">
<sup>&#x2020;</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/1844161/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Christe</surname>
<given-names>Steven</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<xref ref-type="fn" rid="fn1">
<sup>&#x2020;</sup>
</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Freij</surname>
<given-names>Nabil</given-names>
</name>
<xref ref-type="aff" rid="aff3">
<sup>3</sup>
</xref>
<xref ref-type="aff" rid="aff4">
<sup>4</sup>
</xref>
<xref ref-type="fn" rid="fn1">
<sup>&#x2020;</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/2077892/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Hayes</surname>
<given-names>Laura A.</given-names>
</name>
<xref ref-type="aff" rid="aff5">
<sup>5</sup>
</xref>
<xref ref-type="fn" rid="fn1">
<sup>&#x2020;</sup>
</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Stansby</surname>
<given-names>David</given-names>
</name>
<xref ref-type="aff" rid="aff6">
<sup>6</sup>
</xref>
<xref ref-type="fn" rid="fn1">
<sup>&#x2020;</sup>
</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Ireland</surname>
<given-names>Jack</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Mumford</surname>
<given-names>Stuart J.</given-names>
</name>
<xref ref-type="aff" rid="aff7">
<sup>7</sup>
</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Ryan</surname>
<given-names>Daniel F.</given-names>
</name>
<xref ref-type="aff" rid="aff8">
<sup>8</sup>
</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Shih</surname>
<given-names>Albert Y.</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
</contrib>
</contrib-group>
<aff id="aff1">
<sup>1</sup>
<institution>NASA Goddard Space Flight Center</institution>, <addr-line>Greenbelt</addr-line>, <addr-line>MD</addr-line>, <country>United States</country>
</aff>
<aff id="aff2">
<sup>2</sup>
<institution>Department of Physics</institution>, <institution>American University</institution>, <addr-line>Washington</addr-line>, <addr-line>DC</addr-line>, <country>United States</country>
</aff>
<aff id="aff3">
<sup>3</sup>
<institution>Lockheed Martin Solar and Astrophysics Laboratory</institution>, <addr-line>Palo Alto</addr-line>, <addr-line>CA</addr-line>, <country>United States</country>
</aff>
<aff id="aff4">
<sup>4</sup>
<institution>Bay Area Environmental Research Institute</institution>, <addr-line>Moffett Field</addr-line>, <addr-line>CA</addr-line>, <country>United States</country>
</aff>
<aff id="aff5">
<sup>5</sup>
<institution>ESTEC</institution>, <institution>European Space Agency</institution>, <addr-line>Noordwijk</addr-line>, <country>Netherlands</country>
</aff>
<aff id="aff6">
<sup>6</sup>
<institution>Advanced Research Computing Centre</institution>, <institution>University College London</institution>, <addr-line>London</addr-line>, <country>United Kingdom</country>
</aff>
<aff id="aff7">
<sup>7</sup>
<institution>Aperio Software Ltd.</institution>, <addr-line>Leeds</addr-line>, <country>England</country>
</aff>
<aff id="aff8">
<sup>8</sup>
<institution>University of Applied Sciences and Arts Northwest Switzerland</institution>, <addr-line>Windisch</addr-line>, <country>Switzerland</country>
</aff>
<author-notes>
<fn fn-type="edited-by">
<p>
<bold>Edited by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1665744/overview">Leslie Lamarche</ext-link>, SRI International, United States</p>
</fn>
<fn fn-type="edited-by">
<p>
<bold>Reviewed by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/533275/overview">Stefano Markidis</ext-link>, KTH Royal Institute of Technology, Sweden</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1743277/overview">Feng Wang</ext-link>, Guangzhou University, China</p>
</fn>
<corresp id="c001">&#x2a;Correspondence: Will T. Barnes, <email>will.t.barnes@nasa.gov</email>
</corresp>
<fn fn-type="equal" id="fn1">
<label>
<sup>&#x2020;</sup>
</label>
<p>These authors have contributed equally to this work and share first authorship</p>
</fn>
<fn fn-type="other">
<p>This article was submitted to Space Physics, a section of the journal Frontiers in Astronomy and Space Sciences</p>
</fn>
</author-notes>
<pub-date pub-type="epub">
<day>23</day>
<month>02</month>
<year>2023</year>
</pub-date>
<pub-date pub-type="collection">
<year>2023</year>
</pub-date>
<volume>10</volume>
<elocation-id>1076726</elocation-id>
<history>
<date date-type="received">
<day>21</day>
<month>10</month>
<year>2022</year>
</date>
<date date-type="accepted">
<day>31</day>
<month>01</month>
<year>2023</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#xa9; 2023 The SunPy Community, Barnes, Christe, Freij, Hayes, Stansby, Ireland, Mumford, Ryan and Shih.</copyright-statement>
<copyright-year>2023</copyright-year>
<copyright-holder>The SunPy Community, Barnes, Christe, Freij, Hayes, Stansby, Ireland, Mumford, Ryan and Shih</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/">
<p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</p>
</license>
</permissions>
<abstract>
<p>The SunPy Project is a community of scientists and software developers creating an ecosystem of Python packages for solar physics. The project includes the <monospace>sunpy</monospace> core package as well as a set of affiliated packages. The <monospace>sunpy</monospace> core package provides general purpose tools to access data from different providers, read image and time series data, and transform between commonly used coordinate systems. Affiliated packages perform more specialized tasks that do not fall within the more general scope of the <monospace>sunpy</monospace> core package. In this article, we give a high-level overview of the SunPy Project, how it is broader than the <monospace>sunpy</monospace> core package, and how the project curates and fosters the affiliated package system. We demonstrate how components of the SunPy ecosystem, including <monospace>sunpy</monospace> and several affiliated packages, work together to enable multi-instrument data analysis workflows. We also describe members of the SunPy Project and how the project interacts with the wider solar physics and scientific Python communities. Finally, we discuss the future direction and priorities of the SunPy Project.</p>
</abstract>
<kwd-group>
<kwd>solar physics</kwd>
<kwd>sunpy</kwd>
<kwd>heliophysics</kwd>
<kwd>Python (programming language)</kwd>
<kwd>data analysis&#x2014;methods</kwd>
</kwd-group>
</article-meta>
</front>
<body>
<sec id="s1">
<title>1 Introduction</title>
<p>The SunPy Project is an organization whose mission is to develop and facilitate a high-quality, easy-to-use, community-led, free and open-source solar data analysis ecosystem based on the scientific Python environment. The vision of the project is to build a diverse and inclusive solar physics and heliophysics community that supports scientific discovery and enables reproducibility through the development of accessible, open-source software (<xref ref-type="bibr" rid="B5">Bobra&#xa0;et&#xa0;al., 2020</xref>). To achieve this mission and to make this vision a reality, the SunPy Project maintains and guides the development of a number of Python packages including the sunpy core package, and organizes educational activities around the use of Python for solar-physics research.</p>
<p>As the scientific Python environment matured in the early 2010s (<xref ref-type="bibr" rid="B12">Hunter, 2007</xref>; <xref ref-type="bibr" rid="B10">Harris&#xa0;et&#xa0;al., 2020</xref>; <xref ref-type="bibr" rid="B26">Virtanen&#xa0;et&#xa0;al., 2020</xref>), the development of a Python package devoted to solar physics became viable. This led to the founding of the SunPy Project in 2011 by scientists at NASA Goddard Space Flight Center. The goal of the SunPy Project at that time was to develop a package that provided the core functionality needed for solar data analysis in Python. To distinguish the software package from the wider project, this original package is now known as the <monospace>sunpy</monospace> core package (<xref ref-type="bibr" rid="B3">The&#xa0;SunPy&#xa0;Community&#xa0;et&#xa0;al., 2020</xref>). As the SunPy Project and <monospace>sunpy</monospace> grew, an ecosystem of affiliated packages (<xref ref-type="sec" rid="s2-2">Section&#xa0;2.2</xref>) was developed to keep the <monospace>sunpy</monospace> core package from becoming too large and difficult to manage.</p>
<p>The SunPy Project is committed to the principles of open development. All code is hosted and openly-developed on GitHub<xref ref-type="fn" rid="fn2">
<sup>1</sup>
</xref> in order to enable anyone to contribute code or provide feedback. All packages within the SunPy Project must be under an Open Source Initiative (OSI)<xref ref-type="fn" rid="fn3">
<sup>2</sup>
</xref> approved license. Discussion is hosted on several open communication channels which include weekly community calls, mailing lists, a Discourse forum, and instant messaging <italic>via</italic> Matrix<xref ref-type="fn" rid="fn4">
<sup>3</sup>
</xref>. Additionally, the SunPy Project has a code of conduct<xref ref-type="fn" rid="fn5">
<sup>4</sup>
</xref> to ensure that communication within the project is open, considerate, and respectful.</p>
<p>The aim of this paper is to give a high level description of the SunPy Project, including its various components, and to describe the direction of the project in the coming years. <xref ref-type="sec" rid="s2">Section&#xa0;2</xref> describes the various Python packages that form the project, including both the <monospace>sunpy</monospace> core package (<xref ref-type="sec" rid="s2-1">Section&#xa0;2.1</xref>) and the various affiliated packages (<xref ref-type="sec" rid="s2-2">Section&#xa0;2.2</xref>). <xref ref-type="sec" rid="s3">Section&#xa0;3</xref> gives an overview of the roles within the project and describes how to become involved with the SunPy Project. <xref ref-type="sec" rid="s4">Section&#xa0;4</xref> describes the various activities of the project within the broader solar physics community. Finally, <xref ref-type="sec" rid="s5">Section&#xa0;5</xref> lays out a vision for the future of the SunPy Project.</p>
</sec>
<sec id="s2">
<title>2 Code</title>
<sec id="s2-1">
<title>2.1 The <monospace>sunpy</monospace> core package</title>
<p>The <monospace>sunpy</monospace> package is the central pillar of the SunPy Project (<xref ref-type="bibr" rid="B3">The&#xa0;SunPy&#xa0;Community&#xa0;et&#xa0;al., 2020</xref>) and provides the fundamental tools for accessing, loading, and interacting with solar physics data in Python. As we will discuss in <xref ref-type="sec" rid="s2-2">Section&#xa0;2.2</xref>, <monospace>sunpy</monospace> functions as one part of a larger ecosystem of packages for doing solar physics research in Python. While other packages in the ecosystem may focus on particular analysis techniques or analyzing data from specific instruments, the <monospace>sunpy</monospace> &#x201c;core&#x201d; package is focused on providing general tools for working with solar physics data. As an example, coordinate transformations between common solar coordinate systems are provided by the <monospace>sunpy</monospace> core package because they are needed for the analysis of nearly all solar imaging data and are critical for performing multi-instrument studies. However, correcting an AIA image to account for instrument degradation would not belong in <monospace>sunpy</monospace> because it is specific to data from one instrument. This allows the <monospace>sunpy</monospace> core package to be relatively small in size, thereby assuring its maintainability over time.</p>
<p>The primary components of the <monospace>sunpy</monospace> package are described briefly in the following paragraphs. For a more in-depth description of each of these components, see <xref ref-type="bibr" rid="B3">The&#xa0;SunPy&#xa0;Community&#xa0;et&#xa0;al. (2020</xref>, <xref ref-type="sec" rid="s4">Section&#xa0;4</xref>). The full documentation of the <monospace>sunpy</monospace> Application Programming Interface (API) is provided in the hosted online documentation<xref ref-type="fn" rid="fn6">
<sup>5</sup>
</xref>.</p>
<sec id="s2-1-1">
<title>2.1.1 Components of the core package</title>
<p>To search for and download data, <monospace>sunpy</monospace> provides the <monospace>Fido</monospace> interface for searching across a variety of data providers [e.g., the Virtual Solar Observatory (VSO)<xref ref-type="fn" rid="fn7">
<sup>6</sup>
</xref>, or the Joint Science Operations Center (JSOC)<xref ref-type="fn" rid="fn8">
<sup>7</sup>
</xref>] maintained within the solar community. Internally, <monospace>Fido</monospace> is both an interface that defines the search API for creating data queries as well as a collection of client classes that provide a translation between this user-facing API and the search parameters accepted by individual data providers. A complete list of all supported data sources is provided in the documentation for using <monospace>Fido</monospace>
<xref ref-type="fn" rid="fn9">
<sup>8</sup>
</xref>. <xref ref-type="sec" rid="s4-1-1">Section&#xa0;4.1.1</xref> of (<xref ref-type="bibr" rid="B3">The&#xa0;SunPy&#xa0;Community&#xa0;et&#xa0;al., 2020</xref>) also provides a comprehensive discussion of the data sources that <monospace>Fido</monospace> searches by default. Additionally, <monospace>Fido</monospace> can also be extended to search additional data sources that may not be included in <monospace>sunpy</monospace> (e.g., the Solar Orbiter Archive, see <xref ref-type="sec" rid="s2-2-2">Section&#xa0;2.2.2</xref>). Attributes such as time, wavelength, and instrument name, among others, can be used to filter these search results. By providing a single interface to many disparate data sources, <monospace>sunpy</monospace>, <italic>via</italic> <monospace>Fido</monospace>, easily enables multi-instrument research workflows.</p>
<p>Once a user has downloaded data, the <monospace>TimeSeries</monospace> and <monospace>Map</monospace> objects can be used to load and visualize time series and two-dimensional image data, respectively. These objects hold the data alongside the associated metadata in order to perform metadata-aware operations such as concatenation for time series or cropping for image data. In the case of <monospace>Map</monospace>, a World Coordinate System (WCS, e.g., <xref ref-type="bibr" rid="B9">Greisen and Calabretta, 2002</xref>) is also constructed from the associated metadata to enable easy mapping between pixel and world coordinates <italic>via</italic> <monospace>astropy</monospace>. In nearly all cases, solar image data is stored in the FITS format (<xref ref-type="bibr" rid="B27">Wells&#xa0;et&#xa0;al., 1981</xref>) which has an accompanying well-defined metadata standard (<xref ref-type="bibr" rid="B16">Pence&#xa0;et&#xa0;al., 2010</xref>). The accompanying metadata for each <monospace>Map</monospace> object adheres to this standard. Solar time series data, however, do not have a standard metadata or file format and are stored in a variety of file formats, including FITS, netCDF, JSON, or plain text. As such, the metadata associated with each <monospace>TimeSeries</monospace> object is much more sparse compared to <monospace>Map</monospace>, but at minimum will include the time of each observation as well as some information about the associated instrument that made the observation.</p>
<p>Additionally, by extending the astropy coordinates framework (See <xref ref-type="sec" rid="s3-3">Section&#xa0;3.3</xref> of <xref ref-type="bibr" rid="B19">The&#xa0;Astropy&#xa0;Collaboration&#xa0;et&#xa0;al., 2018</xref> for more details), <monospace>sunpy</monospace> provides definitions of, and transformations between, common solar coordinate systems. Coordinates expressed using these frames can be used to represent the positional information of solar features and events. <monospace>sunpy</monospace> implements both observer-dependent (e.g., helioprojective Cartesian) and observer-independent (e.g., Stonyhurst heliographic) coordinate frames (<xref ref-type="bibr" rid="B25">Thompson, 2006</xref>). Each <monospace>Map</monospace> object instance also carries with it the corresponding coordinate frame of that image and the coordinate of the observer as defined by the position of the observatory given in the associated metadata.</p>
</sec>
<sec id="s2-1-2">
<title>2.1.2 Testing infrastructure</title>
<p>
<monospace>Sunpy</monospace> includes thousands of unit, regression and integration tests that are run using the <monospace>pytest</monospace> testing framework. This test suite is run on every pull request opened on the <monospace>sunpy</monospace> GitHub repository using GitHub Actions to ensure that contributions to the codebase do not lead to unexpected regressions. A full description of our testing practices can be found in our developer documentation<xref ref-type="fn" rid="fn10">
<sup>9</sup>
</xref>.</p>
</sec>
<sec id="s2-1-3">
<title>2.1.3 Release schedule</title>
<p>There is a new release of the core package with feature enhancements approximately every 6&#xa0;months. Every other release is designated a long term support (LTS) release and receives bug fixes for a year rather than for 6&#xa0;months. Additionally, there are bug fix releases every month. For each release a digital object identifier (DOI) is automatically generated and a record is created on Zenodo.<xref ref-type="fn" rid="fn11">
<sup>10</sup>
</xref> By providing regularly scheduled, versioned releases of <monospace>sunpy</monospace>, the SunPy Project enables reproducibility. For example, if a researcher is attempting to reproduce a result from a paper that used <monospace>sunpy</monospace> v2.0.2, she can create a new virtual environment and install that exact version of <monospace>sunpy</monospace>, even if the current version is many versions ahead of v2.0.2.</p>
<p>This release process is completely automated through GitHub Actions.<xref ref-type="fn" rid="fn12">
<sup>11</sup>
</xref> When a release is tagged, an action is triggered that tests the package on all supported versions of Python and all supported operating systems. If the packages build successfully, they are automatically uploaded to Python Package Index (PyPi) and subsequently the release is updated on <monospace>conda-forge</monospace>.</p>
</sec>
</sec>
<sec id="s2-2">
<title>2.2 Affiliated packages</title>
<p>As the <monospace>sunpy</monospace> package grew and the amount of domain- and instrument-specific code being developed in Python increased, it became increasingly challenging to store and maintain the functionality needed for all solar physics research in one package. As such, the affiliated package system was introduced (<xref ref-type="bibr" rid="B15">Mumford and Christe, 2014</xref>) so that the <monospace>sunpy</monospace> core package could be generic enough for other packages to build on. The goal of this system is to support and promote software packages outside the scope of the <monospace>sunpy</monospace> core package, and to provide guidance to developers in implementing and maintaining the specific functionality provided by an affiliated package. This fosters code-ownership while ensuring the set of affiliated packages are interoperable and follow a set of common standards (<xref ref-type="sec" rid="s2-2-1">Section&#xa0;2.2.1</xref>). The SunPy Project provides development support through our community development efforts and by providing a package template as a foundation. In addition, affiliated packages are advertised at conferences and workshops where a SunPy poster, talk, or tutorial is given.</p>
<p>As a result of the creation of the affiliated package ecosystem, components of the <monospace>sunpy</monospace> core package that were tied directly to specific instruments or data analysis methods have recently been moved out into other affiliated packages. One example of this is <monospace>aiapy</monospace> (<xref ref-type="bibr" rid="B2">Barnes&#xa0;et&#xa0;al., 2020</xref>), a package for processing data from the Atmospheric Imaging Assembly (AIA, <xref ref-type="bibr" rid="B13">Lemen&#xa0;et&#xa0;al., 2012</xref>) on the <italic>Solar Dynamics Observatory</italic> (SDO, <xref ref-type="bibr" rid="B17">Pesnell&#xa0;et&#xa0;al., 2012</xref>). Prior to version 2.1, <monospace>sunpy</monospace> included functionality for calibrating level 1 AIA data. In 2019, in collaboration with the SunPy Project, the AIA instrument team began developing <monospace>aiapy</monospace> to provide a number of AIA-specific analysis routines in Python, including the aforementioned calibration software. <monospace>aiapy</monospace> became an affiliated package in 2020 and the AIA-specific functionality that previously lived in <monospace>sunpy</monospace> was deprecated and subsequently removed. This relocation of the code allows the AIA instrument team to have full autonomy over their calibration routines and release updates to their software on a more frequent timescale than that of the <monospace>sunpy</monospace> core package. At the same time, <monospace>aiapy</monospace> users and developers are able to take full advantage of the SunPy Project ecosystem.</p>
<p>Outside of the current list of affiliated packages, current and future NASA and ESA missions<xref ref-type="fn" rid="fn13">
<sup>12</sup>
</xref>, as well as ground-based telescopes, such as the Daniel K. Inouye Solar Telescope (DKIST), have begun developing user tools for data analysis and/or pipelines for data calibration built on top of the SunPy ecosystem. While these packages are not yet affiliated, the SunPy Project has assisted in coordinating development efforts between these teams in order to foster a more interoperable ecosystem.</p>
<sec id="s2-2-1">
<title>2.2.1 Application process</title>
<p>The affiliated package application process is completed in the open on GitHub and is open to all, both individuals and larger collaborations (e.g., instrument teams). To begin the process, an applicant opens an issue on the SunPy Project website GitHub repository<xref ref-type="fn" rid="fn14">
<sup>13</sup>
</xref> and provides details about the package, including the package name, the maintainers, a link to the code repository, and a link to the documentation. The Affiliated Package Liaison (<xref ref-type="sec" rid="s3-2">Section&#xa0;3.2</xref>) then selects a SunPy Project member to review the candidate affiliated package against the following criteria:<list list-type="simple">
<list-item>
<p>&#x2022; <italic>functionality</italic>&#x2014;is the package relevant to the solar physics community?</p>
</list-item>
<list-item>
<p>&#x2022; <italic>integration</italic>&#x2014;does the package make use of the existing ecosystem?</p>
</list-item>
<list-item>
<p>&#x2022; <italic>documentation</italic>&#x2014;is there hosted documentation, including examples and an API reference?</p>
</list-item>
<list-item>
<p>&#x2022; <italic>testing</italic>&#x2014;are there automatically run tests and is the coverage extensive?</p>
</list-item>
<list-item>
<p>&#x2022; <italic>duplication</italic>&#x2014;does the package duplicate existing functionality in the ecosystem?</p>
</list-item>
<list-item>
<p>&#x2022; <italic>community</italic>&#x2014;is there a code of conduct and do the developers engage the wider community?</p>
</list-item>
<list-item>
<p>&#x2022; <italic>development status</italic>&#x2014;is the project actively maintained, including versioned releases?</p>
</list-item>
</list>
</p>
<p>The assigned project member then scores the package in each category using a &#x201c;stoplight&#x201d; system (i.e., a package is scored green, orange, or red in each category). A detailed description of each criterion and the scoring for each is available on the affiliated package page of the SunPy Project website<xref ref-type="fn" rid="fn15">
<sup>14</sup>
</xref>. The submitting author of the affiliated package may also request an alternate reviewer, in which case the Affiliated Package Liaison will assign a new SunPy Project member to review the package. At the end of the review, the candidate package is either accepted, marked as provisional, or not accepted. If the package is accepted, the affiliated package is added to the list of affiliated packages on the SunPy Project website. If the package is marked as provisional or is not accepted, the reviewer and the Affiliated Package Liaison will work with the package authors to help them achieve provisional or accepted status. Accepted affiliated packages are reviewed once a year to ensure the interoperability of the ecosystem does not regress and that affiliated packages are actively maintained.</p>
<p>In all cases, the goal of the affiliated package review process is to broaden the ecosystem of tools for solar data analysis in Python. These criteria are not meant to be exclusionary, but rather to ensure interoperability and consistency across the ecosystem for the benefit of both users and developers. Interoperability in this context, means that affiliated packages should make use of the existing <monospace>sunpy</monospace> core data structures, (e.g., <monospace>Map</monospace> and <monospace>Timeseries</monospace>), <italic>in lieu</italic> of their own custom data structures. In the context of searching for and downloading data, affiliated packages should use the <monospace>Fido</monospace> interface and extend <monospace>Fido</monospace> for additional data sources as needed.</p>
</sec>
<sec id="s2-2-2">
<title>2.2.2 Current ecosystem</title>
<p>At the time of writing, the SunPy Project has a rich and growing ecosystem of affiliated packages. In addition to the <monospace>sunpy</monospace> core package, the affiliated package ecosystem includes:<list list-type="simple">
<list-item>
<p>&#x2022; <monospace>aiapy</monospace> for functionality specific to the AIA instrument (<xref ref-type="bibr" rid="B2">Barnes&#xa0;et&#xa0;al., 2020</xref>)</p>
</list-item>
<list-item>
<p>&#x2022; <monospace>ndcube</monospace> for generic handling of <italic>N</italic>-dimensional data sets with a world coordinate system (WCS) (<xref ref-type="bibr" rid="B22">Ryan&#xa0;et&#xa0;al., 2021</xref>).</p>
</list-item>
<list-item>
<p>&#x2022; <monospace>pfsspy</monospace> for magnetic-field extrapolation (<xref ref-type="bibr" rid="B24">Stansby&#xa0;et&#xa0;al., 2020</xref>)</p>
</list-item>
<list-item>
<p>&#x2022; <monospace>sunkit-instruments</monospace> for instrument-specific code that does not have a dedicated package (<xref ref-type="bibr" rid="B21">Ryan&#xa0;et&#xa0;al., 2022</xref>).</p>
</list-item>
<list-item>
<p>&#x2022; <monospace>sunkit-image</monospace> for solar-specific image analysis or reduction techniques (<xref ref-type="bibr" rid="B8">Freij&#xa0;et&#xa0;al., 2022</xref>).</p>
</list-item>
<list-item>
<p>&#x2022; <monospace>sunpy-soar</monospace>
<xref ref-type="fn" rid="fn16">
<sup>15</sup>
</xref> for querying the Solar Orbiter Archive (SOAR)<xref ref-type="fn" rid="fn17">
<sup>16</sup>
</xref>.</p>
</list-item>
</list>
</p>
<p>To demonstrate how several of the affiliated packages can be used together with <monospace>sunpy</monospace> in a scientific workflow, we show an example in <xref ref-type="fig" rid="F1">Figure&#xa0;1</xref> of how coronal loop structures can be analyzed using potential magnetic field extrapolations and multi-point extreme ultraviolet (EUV) observations. We have included a Jupyter notebook that illustrates each step of this workflow in the GitHub repository that accompanies this paper<xref ref-type="fn" rid="fn18">
<sup>17</sup>
</xref>.</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption>
<p>Illustration of multiple affiliated packages, including <monospace>sunpy</monospace>, <monospace>sunpy&#x5f;soar</monospace>, <monospace>aiapy,</monospace> and <monospace>pfsspy</monospace>, working together. <bold>(A)</bold> The left panel shows the HMI synoptic magnetogram for Carrington rotation 2255. The red box is centered on the active region. The right panel shows the Stonyhurst heliographic longitude and radius (in AU) for SDO, STEREO A, and Solar Orbiter on 2022-03-29. <bold>(B)</bold> Full disk images from SDO AIA at 171 &#x00C5; (left), SolO FSI at 174 &#x00C5; (middle), and STEREO-A EUVI at 171 &#x00C5; (right). All three images were downloaded using <monospace>sunpy</monospace> along with <monospace>sunpy&#x5f;soar</monospace> to query the SOAR for the <italic>Solar Orbiter</italic> image. The AIA image was calibrated using <monospace>aiapy</monospace>. The red box in each panel is centered on the AR shown in the top panel. <bold>(C)</bold> Cutouts of the regions denoted in each image in <bold>(B)</bold>. <monospace>pfsspy</monospace> is used to compute a potential magnetic field solution from the magnetogram in <bold>(A)</bold> and trace field lines through the resulting volume. These field lines, shown in green, are transformed to the appropriate coordinate system of each instrument using <monospace>sunpy</monospace>.</p>
</caption>
<graphic xlink:href="fspas-10-1076726-g001.tif"/>
</fig>
<p>First, we use the <monospace>Fido</monospace> interface provided by <monospace>sunpy</monospace> to search for and download a synoptic magnetogram from the Helioseismic Magnetic Imager (HMI, <xref ref-type="bibr" rid="B23">Scherrer&#xa0;et&#xa0;al., 2012</xref>) on SDO for Carrington rotation 2255 which began on 2022-03-08. This is shown in the left panel in <xref ref-type="fig" rid="F1">Figure&#xa0;1A</xref>. Next, we identify active region NOAA 12976 which appeared near disk center, as seen from SDO, at 2022-03-29 21:04. The red box overlaid on the synoptic magnetogram is centered on the active region when it appeared at disk center at a Carrington longitude of 65&#xb0;.</p>
<p>Since we are interested in the EUV observations of active region 12976, we also use <monospace>Fido</monospace> to query the VSO for data from AIA on SDO and the Extreme Ultraviolet Imager (EUVI) on the <italic>Solar Terrestrial Relations Observatory</italic> (STEREO, <xref ref-type="bibr" rid="B11">Howard&#xa0;et&#xa0;al., 2008</xref>). Additionally, we use the <monospace>sunpy-soar</monospace> package to allow <monospace>Fido</monospace> to search for and download data from the SOAR. Here, we query the SOAR for data from the Extreme Ultraviolet Imager (EUI, <xref ref-type="bibr" rid="B20">Rochus&#xa0;et&#xa0;al., 2020</xref>) on <italic>Solar Orbiter</italic> (<xref ref-type="bibr" rid="B14">M&#xfc;ller&#xa0;et&#xa0;al., 2020</xref>).</p>
<p>
<xref ref-type="fig" rid="F1">Figure&#xa0;1B</xref> shows full disk EUV images from AIA (left), the full-sun imager (FSI) on EUI (middle), and EUVI on the STEREO-A spacecraft (right). We use the <monospace>aiapy</monospace> package to correct the AIA image (middle panel) for instrument degradation and update the pointing information. The red box in each panel is centered on active region 12976, as seen from the respective spacecraft, and has a width and height of 700 arcseconds. The top right panel of <xref ref-type="fig" rid="F1">Figure&#xa0;1</xref> shows the Stonyhurst heliographic longitude and radius (in AU) of SDO, STEREO-A and <italic>Solar Orbiter</italic> as derived from the observer location metadata of each image.</p>
<p>Viewing the active region from the vantage points of these three spacecraft (separated by <inline-formula id="inf1">
<mml:math id="m1">
<mml:mo>&#x3e;</mml:mo>
<mml:mn>90</mml:mn>
<mml:mo>&#xb0;</mml:mo>
</mml:math>
</inline-formula>), we gain a better understanding of its three-dimensional structure. Additionally, we use the <monospace>pfsspy</monospace> package to compute a potential field extrapolation from the corresponding synoptic magnetogram as shown in <xref ref-type="fig" rid="F1">Figure&#xa0;1A</xref>. We trace field lines from areas of negative magnetic flux inside the red box corresponding to active region 12976. The resulting field lines are overlaid in green on top of the cutouts from each EUV image in <xref ref-type="fig" rid="F1">Figure&#xa0;1C</xref>. Each field line traced using <monospace>pfsspy</monospace> is an <monospace>astropy</monospace> coordinate object expressed in terms of a Carrington heliographic coordinate frame defined in <monospace>sunpy</monospace>. As such, it is straightforward to transform each field line to the observer-dependent coordinate frame of each image as defined by the corresponding observatory using the plotting functionality provided in <monospace>astropy</monospace>. The interoperability between <monospace>astropy</monospace>, <monospace>sunpy</monospace>, <monospace>sunpy-soar</monospace>, <monospace>aiapy</monospace>, and <monospace>pfsspy</monospace> allows us to easily examine the three-dimensional magnetic structure of the active region and see to what extent the derived potential field corresponds to the EUV emission as observed by these three spacecraft.</p>
</sec>
</sec>
</sec>
<sec id="s3">
<title>3 People</title>
<sec id="s3-1">
<title>3.1 Board and lead developers</title>
<p>The current structure of the SunPy Project is governed by the SunPy Project board (<xref ref-type="bibr" rid="B7">Christe, 2018</xref>). The board is a self-electing oversight board which delegates the majority of the day-to-day operations of the project to a lead developer, who in turn delegates it to members of the community. The lead developer has overall responsibility for the large scale organization of the <monospace>sunpy</monospace> core package, and ensures that pull requests comply with stated standards and align with the goals of the SunPy Project. The deputy lead developer supports the lead developer and fills in when the lead is absent. The board&#x2019;s role is to steer the overall direction of the SunPy Project and consists of scientists and researchers who are not necessarily involved directly with the day-to-day development of the <monospace>sunpy</monospace> core package.</p>
</sec>
<sec id="s3-2">
<title>3.2 Community roles</title>
<p>There are several specific community (or executive) roles within the SunPy Project that perform important duties related to the overall development and maintenance of the project. These roles encompass a range of responsibilities from the development of the core package and affiliated packages to project communication and liaison. The community roles are held by members of the wider solar community who are actively involved in the SunPy Project. Anyone interested in a community role is encouraged to apply.</p>
<p>At present, there are nine community roles within the SunPy Project. From the development side, these include the Lead Developer and the Deputy Lead Developer who are responsible for the development of the <monospace>sunpy</monospace> core package, support the development of affiliated packages, and lead the development community. To assist the Lead/Deputy Developers, there are several development community roles which include:<list list-type="simple">
<list-item>
<p>&#x2022; Continuous Integration Maintainer</p>
</list-item>
<list-item>
<p>&#x2022; Release Manager</p>
</list-item>
<list-item>
<p>&#x2022; Webmaster</p>
</list-item>
<list-item>
<p>&#x2022; Communication and Education Lead who is responsible for the overall engagement with the wider community</p>
</list-item>
<list-item>
<p>&#x2022; Lead Newcomer and Summer of Code mentor who assists new contributors and oversees the Google Summer of Code project</p>
</list-item>
<list-item>
<p>&#x2022; Affiliated Package Liaison who is responsible for overseeing the affiliated package review process (<xref ref-type="sec" rid="s2-2-1">Section&#xa0;2.2.1</xref>) and working with developers of current and candidate affiliated packages</p>
</list-item>
</list>
</p>
</sec>
<sec id="s3-3">
<title>3.3 Maintainers and contributors</title>
<p>The development of the <monospace>sunpy</monospace> core package depends principally on an established team of volunteers that support the Lead and Deputy Lead Developers. These volunteer <italic>maintainers</italic> are given commit access to the <monospace>sunpy</monospace> repository and are predominantly, though not exclusively, scientists from the solar community who use <monospace>sunpy</monospace> in their work. In addition to this group of core maintainers, there is a steady influx of new <italic>contributors</italic>, averaging around 20&#x2013;25 people per year. These contributors enable a wider range of features and code changes than would otherwise be normally possible due to the time constraints of the established team of volunteers. Within this subset of maintainers are members who maintain the specific sub-packages within <monospace>sunpy</monospace> like <monospace>sunpy.map</monospace> or <monospace>sunpy.coordinates</monospace>. These individuals are selected due to either their specific knowledge of the topic or their expertise with these sub-packages.</p>
<p>Contributing to the SunPy Project includes a wide range of activities, not all of them programming related. These include reporting bugs by raising issues on GitHub, requesting features, writing code and tests, providing feedback on pull requests, correcting or adding documentation, helping people who have problems or questions in communication channels and more. The SunPy Project is always looking for any new volunteers or people willing to contribute their time.</p>
</sec>
</sec>
<sec id="s4">
<title>4 Community</title>
<sec id="s4-1">
<title>4.1 Engagement with the solar physics community</title>
<p>In order for the SunPy Project to maintain and grow the <monospace>sunpy</monospace> core package and affiliated packages within the ecosystem, engagement with the wider solar physics community is critical. The mission of the SunPy Project is to be community-led, and the development is driven by the needs of the solar physics community. To facilitate this, the SunPy Project is building a community for which there is inclusive and open communication between those developing <monospace>sunpy</monospace> and those using <monospace>sunpy</monospace> in their scientific research. Active contributions from users in terms of bug reports, issues encountered with code or documentation, and feature requests are all vital to the sustainability and future of the SunPy Project. We emphasize that being part of the SunPy Project does not necessarily mean writing software. Contributions in the form of feedback and suggestions are equally important.</p>
<p>To foster communication, the SunPy Project supports several communication platforms (<xref ref-type="sec" rid="s4-1-1">Section&#xa0;4.1.1</xref>) through which users and developers can regularly interact. The SunPy Project posts on solar physics noticeboards about recent releases and regularly advertises <monospace>sunpy</monospace> and affiliated packages at scientific conferences, providing tutorials and support. We also ask that if <monospace>sunpy</monospace> is used for scientific work that it is cited in the literature<xref ref-type="fn" rid="fn19">
<sup>18</sup>
</xref>, thereby increasing its visibility to the scientific community and ultimately contributing to the continued growth and development of the package. More recently, the SunPy Project has improved communications and established relationships with data providers such as VSO and the SOAR, and teams supporting both operating and developing instruments and missions. The SunPy Project is always looking for ways to improve the accessibility of the project and to grow the community.</p>
<sec id="s4-1-1">
<title>4.1.1 Communication channels</title>
<p>Over the years, the usage of <monospace>sunpy</monospace> and affiliated packages within the solar physics community has increased, and with that methods to communicate within the SunPy community have also increased. At the time of writing, several distinct communication channels are available. These include:<list list-type="simple">
<list-item>
<p>&#x2022; Multiple GitHub repositories for bug reports and feature requests. These are listed under the SunPy Project GitHub organization<xref ref-type="fn" rid="fn20">
<sup>19</sup>
</xref>.</p>
</list-item>
<list-item>
<p>&#x2022; Real time messaging<xref ref-type="fn" rid="fn21">
<sup>20</sup>
</xref>.</p>
</list-item>
<list-item>
<p>&#x2022; Mailing lists<xref ref-type="fn" rid="fn22">
<sup>21</sup>
</xref>.</p>
</list-item>
<list-item>
<p>&#x2022; An online community forum<xref ref-type="fn" rid="fn23">
<sup>22</sup>
</xref>.</p>
</list-item>
<list-item>
<p>&#x2022; Weekly public calls that anyone can participate in<xref ref-type="fn" rid="fn24">
<sup>23</sup>
</xref>.</p>
</list-item>
</list>
</p>
<p>Each has their own distinct purpose, and was created as a need arose for their existence. For example, the GitHub repository is used for the development of <monospace>sunpy</monospace> and issues and bugs can be raised there. However some scientists may not be familiar with GitHub and would like to ask a general question on how to do something within <monospace>sunpy</monospace>. For this, the mailing list, community forum, or real time Matrix chat may be the most appropriate. We actively encourage users and those interested in contributing to use any or all of these communication channels.</p>
<p>In addition to the main communication platforms specific to the SunPy Project, we maintain a presence within other communication channels used by the wider heliophysics community, including Helionauts<xref ref-type="fn" rid="fn25">
<sup>24</sup>
</xref> and communication channels used by the Python in Heliophysics Community.</p>
</sec>
</sec>
<sec id="s4-2">
<title>4.2 Python in Heliophysics Community (PyHC)</title>
<p>The Python in Heliophysics Community (PyHC)<xref ref-type="fn" rid="fn26">
<sup>25</sup>
</xref> (<xref ref-type="bibr" rid="B4">Barnum&#xa0;et&#xa0;al., 2022</xref>) is a project with similar goals as the SunPy Project, but focuses on the wider Heliophysics community (<xref ref-type="bibr" rid="B6">Burrell&#xa0;et&#xa0;al., 2018</xref>). These include providing coding standards (<xref ref-type="bibr" rid="B1">Annex&#xa0;et&#xa0;al., 2018</xref>), curating a list of participating projects<xref ref-type="fn" rid="fn27">
<sup>26</sup>
</xref>, hosting bi-monthly community meetings, and organizing an inaugural summer school for early career researchers. The SunPy Project is actively involved in PyHC, with <monospace>sunpy</monospace> being one of the core PyHC packages. SunPy Project members regularly attend community meetings and present updates. The SunPy Project also took part in the PyHC 2022 summer school. Moving forward, PyHC and the SunPy Project will continue to collaborate and build upon efforts to use <monospace>sunpy</monospace> and affiliated packages within the larger heliophysics Python ecosystem.</p>
</sec>
<sec id="s4-3">
<title>4.3 Collaboration with the wider python ecosystem</title>
<p>The <monospace>sunpy</monospace> package forms part of the wider Python scientific ecosystem, requiring active collaboration with other scientific Python packages. Whenever possible, we aim to contribute to relevant open-source projects rather than duplicating functionality. As an example, large parts of <monospace>sunpy</monospace> depend on core functionality developed in the <monospace>astropy</monospace> package, including support for handling units, times, and coordinates.</p>
<p>The SunPy Project is sponsored by NumFOCUS, &#x201c;a non-profit supporting open code for better science&#x201d;<xref ref-type="fn" rid="fn28">
<sup>27</sup>
</xref>. NumFOCUS provides financial and organizational support for several important packages (e.g., <monospace>numpy</monospace>, <monospace>pandas</monospace> and <monospace>xarray</monospace>) and facilitates collaboration between packages throughout the scientific Python ecosystem. One example of this is the annual NumFOCUS summit that brings together the leaders of these packages to discuss interoperability, funding sources and other high-level topics that improve the Python ecosystem as a whole.</p>
<p>In addition, the SunPy Project is a member of the OpenAstronomy organization<xref ref-type="fn" rid="fn29">
<sup>28</sup>
</xref>. OpenAstronomy was created to collaborate on outreach, organize conferences such as Python in Astronomy, develop common tooling for infrastructure, and apply to internship programs such as Google Summer of Code (GSoC)<xref ref-type="fn" rid="fn30">
<sup>29</sup>
</xref> and Outreachy<xref ref-type="fn" rid="fn31">
<sup>30</sup>
</xref>. GSoC has been an invaluable source of programming effort for the SunPy Project over the past decade. The contributions from participants in this program have been crucial to <monospace>sunpy</monospace>. Examples of successful projects include the conversion to using <monospace>astropy.time</monospace> and creating a new Python API wrapper for <ext-link ext-link-type="uri" xlink:href="http://Helioviewer.org">Helioviewer.org</ext-link> <xref ref-type="fn" rid="fn32">
<sup>31</sup>
</xref>. As the focus of the OpenAstronomy organization is the broader astrophysics and astronomy community, the SunPy Project&#x2019;s participation has enabled closer ties within the rapidly growing Python-in-astronomy landscape.</p>
</sec>
</sec>
<sec id="s5">
<title>5 The future of the SunPy Project</title>
<p>Development within the SunPy Project is driven by, and for, the solar physics community, responding to the needs of researchers for data analysis tools and techniques, and software for working with data from new missions. This means both the <monospace>sunpy</monospace> core package and other affiliated packages are continually changing and expanding. In September 2022 several members of the SunPy Project met at a coordination meeting to discuss the future of the project. Two key areas that emerged were updating the governance structure, and creating a roadmap for future development. The roadmap provides:<list list-type="simple">
<list-item>
<p>1. a set of priorities for developers to work on in the medium term.</p>
</list-item>
<list-item>
<p>2. a well scoped list of work items that funding can be sought for.</p>
</list-item>
<list-item>
<p>3. a mechanism to solicit input from the wider solar physics community on the medium term priorities for the SunPy Project.</p>
</list-item>
</list>
</p>
<p>At the time of writing, items in the draft roadmap include:<list list-type="simple">
<list-item>
<p>&#x2022; Improving support and functionality for data with spectral coordinates (e.g., rastering spectrometers)</p>
</list-item>
<list-item>
<p>&#x2022; Enabling multi-dimensional data sets (i.e., beyond 2D images).</p>
</list-item>
<list-item>
<p>&#x2022; Improving support for running <monospace>sunpy</monospace> on cloud infrastructure.</p>
</list-item>
<list-item>
<p>&#x2022; Creating a consistently structured set of documentation across all the SunPy Project packages.</p>
</list-item>
<list-item>
<p>&#x2022; Adding functionality to rapidly visualize large data sets.</p>
</list-item>
<list-item>
<p>&#x2022; Restructuring the project governance to, among other things, transform the lead developer positions into a multi-person steering committee and create an ombudsperson role.</p>
</list-item>
</list>
</p>
<p>The next step is consultation with the wider solar physics community. We invite feedback on this proposed roadmap <italic>via</italic> any of the aforementioned communication channels (<xref ref-type="sec" rid="s4-1-1">Section&#xa0;4.1.1</xref>) or by opening an issue on the repository used for tracking high-level, project-wide tasks and suggestions<xref ref-type="fn" rid="fn33">
<sup>32</sup>
</xref>.</p>
</sec>
<sec sec-type="conclusion" id="s6">
<title>6 Conclusion</title>
<p>In this paper, we have summarized the SunPy Project and its various components, including the code developed and maintained by the project (<xref ref-type="sec" rid="s2">Section&#xa0;2</xref>), the people that comprise the project (<xref ref-type="sec" rid="s3">Section&#xa0;3</xref>) and the community that the project serves (<xref ref-type="sec" rid="s4">Section&#xa0;4</xref>). In particular, we have discussed how the <monospace>sunpy</monospace> package and the wider set of affiliated packages form a software ecosystem for solar physics research in Python and illustrated the types of analyses that such an ecosystem enables (<xref ref-type="fig" rid="F1">Figure&#xa0;1</xref>). Finally, we have summarized a tentative roadmap to steer the direction of the SunPy Project in the coming years. Importantly, we hope that such a high level description will provide a more clear understanding of the SunPy Project and the wider ecosystem and will encourage contributions of all forms from the global solar physics community.<xref ref-type="fn" rid="fn34">
<sup>33</sup>
</xref>
</p>
</sec>
</body>
<back>
<sec sec-type="data-availability" id="s7">
<title>Data availability statement</title>
<p>Publicly available datasets were analyzed in this study. This data can be found here: AIA and EUVI data are available through the VSO: <ext-link ext-link-type="uri" xlink:href="https://sdac.virtualsolar.org/cgi/search">https://sdac.virtualsolar.org/cgi/search</ext-link>. EUI data are available through the SOAR: <ext-link ext-link-type="uri" xlink:href="https://soar.esac.esa.int/soar/">https://soar.esac.esa.int/soar/</ext-link>. HMI synoptic magnetogram data are available through the JSOC: <ext-link ext-link-type="uri" xlink:href="http://jsoc.stanford.edu/">http://jsoc.stanford.edu/</ext-link>.</p>
</sec>
<sec id="s8">
<title>Author contributions</title>
<p>WB contributed to writing the text and created <xref ref-type="fig" rid="F1">Figure&#xa0;1</xref>. SC, NF, LH, and DS contributed to writing the text. All authors contributed to manuscript planning and revision and have read and approved the submitted version.</p>
</sec>
<sec id="s9">
<title>Funding</title>
<p>WB, AS, and SM are supported by an award from the NASA Research Opportunities in Space and Earth Sciences (ROSES) Open-Source Tools, Frameworks, and Libraries (OSTFL) program. NF is supported by NASA under contract NNG09FA40C (<italic>IRIS</italic>) and NNG04EA00C (SDO/AIA). LH is supported by an ESA Research Fellowship.</p>
</sec>
<ack>
<p>We thank everyone who has supported and contributed to the SunPy Project in any manner. <monospace>sunpy</monospace> makes use of astropy, a community-developed core Python package for Astronomy (<xref ref-type="bibr" rid="B18">Astropy&#xa0;Collaboration&#xa0;et&#xa0;al., 2022</xref>). We acknowledge financial contributions from Google as part of the Google Summer of Code program and from the European Space Agency as part of the Summer of Code in Space program. We acknowledge financial contributions from NumFOCUS for &#x201c;Improving the Usability of sunpy&#x2019;s Data Downloader&#x201d;. Additionally, we acknowledge funding from the Solar Physics Division of the American Astronomical Society for SunPy workshops and tutorials at annual meetings.</p>
</ack>
<sec sec-type="COI-statement" id="s10">
<title>Conflict of interest</title>
<p>Author SM was employed by Aperio Software Ltd.</p>
<p>The remaining authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
<sec sec-type="disclaimer" id="s11">
<title>Publisher&#x2019;s note</title>
<p>All claims expressed in this article are solely those of the authors and do not necessarily represent those of their affiliated organizations, or those of the publisher, the editors and the reviewers. Any product that may be evaluated in this article, or claim that may be made by its manufacturer, is not guaranteed or endorsed by the publisher.</p>
</sec>
<fn-group>
<fn id="fn2">
<label>1</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://github.com/sunpy/sunpy">https://github.com/sunpy/sunpy</ext-link>
</p>
</fn>
<fn id="fn3">
<label>2</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://opensource.org">https://opensource.org</ext-link>
</p>
</fn>
<fn id="fn4">
<label>3</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://matrix.org/">https://matrix.org/</ext-link>
</p>
</fn>
<fn id="fn5">
<label>4</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://sunpy.org/coc">https://sunpy.org/coc</ext-link>
</p>
</fn>
<fn id="fn6">
<label>5</label>
<p>The <monospace>sunpy</monospace> API is fully documented here: <ext-link ext-link-type="uri" xlink:href="https://docs.sunpy.org">https://docs.sunpy.org</ext-link>
</p>
</fn>
<fn id="fn7">
<label>6</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://sdac.virtualsolar.org/cgi/search">https://sdac.virtualsolar.org/cgi/search</ext-link>
</p>
</fn>
<fn id="fn8">
<label>7</label>
<p>
<ext-link ext-link-type="uri" xlink:href="http://jsoc.stanford.edu">http://jsoc.stanford.edu</ext-link>
</p>
</fn>
<fn id="fn9">
<label>8</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://docs.sunpy.org/en/stable/guide/acquiring&#x5f;data/fido.html">https://docs.sunpy.org/en/stable/guide/acquiring_data/fido.html</ext-link>
</p>
</fn>
<fn id="fn10">
<label>9</label>
<p>A complete guide to running the tests and the associated infrastructure can be found here: <ext-link ext-link-type="uri" xlink:href="https://docs.sunpy.org/en/latest/dev&#x5f;guide/contents/tests.html">https://docs.sunpy.org/en/latest/dev_guide/contents/tests.html</ext-link>
</p>
</fn>
<fn id="fn11">
<label>10</label>
<p>The most current release on Zenodo can be found here: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.5281/zenodo.7314636">https://doi.org/10.5281/zenodo.7314636</ext-link>
</p>
</fn>
<fn id="fn12">
<label>11</label>
<p>The GitHub Actions templates used are available here: <ext-link ext-link-type="uri" xlink:href="https://github.com/OpenAstronomy/github-actions-workflows">https://github.com/OpenAstronomy/github-actions-workflows</ext-link>
</p>
</fn>
<fn id="fn13">
<label>12</label>
<p>This includes, but is not limited to, the Interface Region Imaging Spectrometer (IRIS), several instruments on <italic>Solar Orbiter</italic>, as well as the X-Ray Telescope (XRT) and the Extreme ultraviolet Imaging Spectrometer (EIS) onboard <italic>Hinode</italic>
</p>
</fn>
<fn id="fn14">
<label>13</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://github.com/sunpy/sunpy.org">https://github.com/sunpy/sunpy.org</ext-link>
</p>
</fn>
<fn id="fn15">
<label>14</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://sunpy.org/project/affiliated">https://sunpy.org/project/affiliated</ext-link>
</p>
</fn>
<fn id="fn16">
<label>15</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://github.com/sunpy/sunpy-soar">https://github.com/sunpy/sunpy-soar</ext-link>
</p>
</fn>
<fn id="fn17">
<label>16</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://soar.esac.esa.int/soar/">https://soar.esac.esa.int/soar/</ext-link>
</p>
</fn>
<fn id="fn18">
<label>17</label>
<p>The GitHub repository for this paper, including the complete text and all code to generate <xref ref-type="fig" rid="F1">Figure&#xa0;1</xref>, can be found at <ext-link ext-link-type="uri" xlink:href="https://github.com/sunpy/sunpy-frontiers-paper">https://github.com/sunpy/sunpy-frontiers-paper</ext-link>
</p>
</fn>
<fn id="fn19">
<label>18</label>
<p>See this page for a guide on how to cite <monospace>sunpy</monospace> in published works: <ext-link ext-link-type="uri" xlink:href="https://sunpy.org/about#acknowledging-or-citing-sunpy">https://sunpy.org/about&#x23;acknowledging-or-citing-sunpy</ext-link>
</p>
</fn>
<fn id="fn20">
<label>19</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://github.com/sunpy">https://github.com/sunpy</ext-link>
</p>
</fn>
<fn id="fn21">
<label>20</label>
<p>Links to join the Matrix chat can be found at <ext-link ext-link-type="uri" xlink:href="https://sunpy.org/help.html">https://sunpy.org/help.html</ext-link>
</p>
</fn>
<fn id="fn22">
<label>21</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://groups.google.com/g/sunpy">https://groups.google.com/g/sunpy</ext-link>
</p>
</fn>
<fn id="fn23">
<label>22</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://community.openastronomy.org/">https://community.openastronomy.org/</ext-link>
</p>
</fn>
<fn id="fn24">
<label>23</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://sunpy.org/jitsi">https://sunpy.org/jitsi</ext-link>
</p>
</fn>
<fn id="fn25">
<label>24</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://helionauts.org/">https://helionauts.org/</ext-link>
</p>
</fn>
<fn id="fn26">
<label>25</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://heliopython.org/">https://heliopython.org/</ext-link>
</p>
</fn>
<fn id="fn27">
<label>26</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://heliopython.org/projects/">https://heliopython.org/projects/</ext-link>
</p>
</fn>
<fn id="fn28">
<label>27</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://numfocus.org/">https://numfocus.org/</ext-link>
</p>
</fn>
<fn id="fn29">
<label>28</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://openastronomy.org/">https://openastronomy.org/</ext-link>
</p>
</fn>
<fn id="fn30">
<label>29</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://summerofcode.withgoogle.com/">https://summerofcode.withgoogle.com/</ext-link>
</p>
</fn>
<fn id="fn31">
<label>30</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://www.outreachy.org/">https://www.outreachy.org/</ext-link>
</p>
</fn>
<fn id="fn32">
<label>31</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://hvpy.readthedocs.io/">https://hvpy.readthedocs.io/</ext-link>
</p>
</fn>
<fn id="fn33">
<label>32</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://github.com/sunpy/sunpy-project">https://github.com/sunpy/sunpy-project</ext-link>
</p>
</fn>
<fn id="fn34">
<label>33</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://github.com/sunpy/sunpy-frontiers-paper">https://github.com/sunpy/sunpy-frontiers-paper</ext-link>
</p>
</fn>
</fn-group>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="web">
<person-group person-group-type="author">
<name>
<surname>Annex</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Alterman</surname>
<given-names>B. L.</given-names>
</name>
<name>
<surname>Azari</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Barnes</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Bobra</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Cecconi</surname>
<given-names>B.</given-names>
</name>
<etal/>
</person-group> (<year>2018</year>). <article-title>Python in heliophysics community (PyHC) standards</article-title>. <pub-id pub-id-type="doi">10.5281/zenodo.2529131</pub-id>
</citation>
</ref>
<ref id="B18">
<citation citation-type="journal">
<collab>Astropy Collaboration, </collab>
<person-group person-group-type="author">
<name>
<surname>Price-Whelan</surname>
<given-names>A. M.</given-names>
</name>
<name>
<surname>Lim</surname>
<given-names>P. L.</given-names>
</name>
<name>
<surname>Earl</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Starkman</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Bradley</surname>
<given-names>L.</given-names>
</name>
<etal/>
</person-group> (<year>2022</year>). <article-title>The astropy project: Sustaining and growing a community-oriented open-source project and the latest major release (v5.0) of the core package</article-title>. <source>Astrophysical J.</source> <volume>935</volume>, <fpage>167</fpage>. <pub-id pub-id-type="doi">10.3847/1538-4357/ac7c74</pub-id>
</citation>
</ref>
<ref id="B2">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Barnes</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Cheung</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Bobra</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Boerner</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Chintzoglou</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Leonard</surname>
<given-names>D.</given-names>
</name>
<etal/>
</person-group> (<year>2020</year>). <article-title>Aiapy: A Python package for analyzing solar EUV image data from AIA</article-title>. <source>J. Open Source Softw.</source> <volume>5</volume>, <fpage>2801</fpage>. <pub-id pub-id-type="doi">10.21105/joss.02801</pub-id>
</citation>
</ref>
<ref id="B4">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Barnum</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Masson</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Friedel</surname>
<given-names>R. H.</given-names>
</name>
<name>
<surname>Roberts</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Thomas</surname>
<given-names>B. A.</given-names>
</name>
</person-group> (<year>2022</year>). <article-title>Python in heliophysics community (pyhc): Current status and future outlook</article-title>. <source>Adv. Space Res</source>. <pub-id pub-id-type="doi">10.1016/j.asr.2022.10.006</pub-id>
</citation>
</ref>
<ref id="B5">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Bobra</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Bin</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Christe</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Hewett</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Freij</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Mumford</surname>
<given-names>S.</given-names>
</name>
<etal/>
</person-group> (<year>2020</year>). <article-title>SunPy proposal for enhancement 10: Vision and mission statement (SEP 0010)</article-title>. <pub-id pub-id-type="doi">10.5281/zenodo.7020094</pub-id>
</citation>
</ref>
<ref id="B6">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Burrell</surname>
<given-names>A. G.</given-names>
</name>
<name>
<surname>Halford</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Klenzing</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Stoneback</surname>
<given-names>R. A.</given-names>
</name>
<name>
<surname>Morley</surname>
<given-names>S. K.</given-names>
</name>
<name>
<surname>Annex</surname>
<given-names>A. M.</given-names>
</name>
<etal/>
</person-group> (<year>2018</year>). <article-title>Snakes on a spaceship&#x2014;An overview of python in heliophysics</article-title>. <source>J. Geophys. Res. Space Phys.</source> <volume>123</volume> (<issue>12</issue>), <fpage>402</fpage>. <pub-id pub-id-type="doi">10.1029/2018JA025877</pub-id>
</citation>
</ref>
<ref id="B7">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Christe</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>SunPy proposal for enhancement 2: SunPy organization definition (SEP 0002)</article-title>. <pub-id pub-id-type="doi">10.5281/zenodo.3261663</pub-id>
</citation>
</ref>
<ref id="B8">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Freij</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Ireland</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Mumford</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Barnes</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Chaubey</surname>
<given-names>V.</given-names>
</name>
<name>
<surname>Paul</surname>
<given-names>J. A.</given-names>
</name>
<etal/>
</person-group> (<year>2022</year>). <article-title>sunpy/sunkit-image: v0.4.2</article-title>. <pub-id pub-id-type="doi">10.5281/zenodo.6578722</pub-id>
</citation>
</ref>
<ref id="B9">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Greisen</surname>
<given-names>E. W.</given-names>
</name>
<name>
<surname>Calabretta</surname>
<given-names>M. R.</given-names>
</name>
</person-group> (<year>2002</year>). <article-title>Representations of world coordinates in FITS</article-title>. <source>Astronomy Astrophysics</source> <volume>395</volume>, <fpage>1061</fpage>&#x2013;<lpage>1075</lpage>. <pub-id pub-id-type="doi">10.1051/0004-6361:20021326</pub-id>
</citation>
</ref>
<ref id="B10">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Harris</surname>
<given-names>C. R.</given-names>
</name>
<name>
<surname>Millman</surname>
<given-names>K. J.</given-names>
</name>
<name>
<surname>van der Walt</surname>
<given-names>S. J.</given-names>
</name>
<name>
<surname>Gommers</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Virtanen</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Cournapeau</surname>
<given-names>D.</given-names>
</name>
<etal/>
</person-group> (<year>2020</year>). <article-title>Array programming with NumPy</article-title>. <source>Nature</source> <volume>585</volume>, <fpage>357</fpage>&#x2013;<lpage>362</lpage>. <pub-id pub-id-type="doi">10.1038/s41586-020-2649-2</pub-id>
</citation>
</ref>
<ref id="B11">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Howard</surname>
<given-names>R. A.</given-names>
</name>
<name>
<surname>Moses</surname>
<given-names>J. D.</given-names>
</name>
<name>
<surname>Vourlidas</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Newmark</surname>
<given-names>J. S.</given-names>
</name>
<name>
<surname>Socker</surname>
<given-names>D. G.</given-names>
</name>
<name>
<surname>Plunkett</surname>
<given-names>S. P.</given-names>
</name>
<etal/>
</person-group> (<year>2008</year>). <article-title>Sun Earth connection coronal and heliospheric investigation (SECCHI)</article-title>. <source>Space Sci. Rev.</source> <volume>136</volume>, <fpage>67</fpage>&#x2013;<lpage>115</lpage>. <pub-id pub-id-type="doi">10.1007/s11214-008-9341-4</pub-id>
</citation>
</ref>
<ref id="B12">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hunter</surname>
<given-names>J. D.</given-names>
</name>
</person-group> (<year>2007</year>). <article-title>Matplotlib: A 2d graphics environment</article-title>. <source>Comput. Sci. Eng.</source> <volume>9</volume>, <fpage>90</fpage>&#x2013;<lpage>95</lpage>. <pub-id pub-id-type="doi">10.1109/MCSE.2007.55</pub-id>
</citation>
</ref>
<ref id="B13">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Lemen</surname>
<given-names>J. R.</given-names>
</name>
<name>
<surname>Title</surname>
<given-names>A. M.</given-names>
</name>
<name>
<surname>Akin</surname>
<given-names>D. J.</given-names>
</name>
<name>
<surname>Boerner</surname>
<given-names>P. F.</given-names>
</name>
<name>
<surname>Chou</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Drake</surname>
<given-names>J. F.</given-names>
</name>
<etal/>
</person-group> (<year>2012</year>). <article-title>The atmospheric imaging assembly (AIA) on the solar Dynamics observatory (SDO)</article-title>. <source>Sol. Phys.</source> <volume>275</volume>, <fpage>17</fpage>&#x2013;<lpage>40</lpage>. <pub-id pub-id-type="doi">10.1007/s11207-011-9776-8</pub-id>
</citation>
</ref>
<ref id="B14">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>M&#xfc;ller</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Cyr</surname>
<given-names>O. C. S.</given-names>
</name>
<name>
<surname>Zouganelis</surname>
<given-names>I.</given-names>
</name>
<name>
<surname>Gilbert</surname>
<given-names>H. R.</given-names>
</name>
<name>
<surname>Marsden</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Nieves-Chinchilla</surname>
<given-names>T.</given-names>
</name>
<etal/>
</person-group> (<year>2020</year>). <article-title>The solar orbiter mission - science overview</article-title>. <source>Astronomy Astrophysics</source> <volume>642</volume>, <fpage>A1</fpage>. <pub-id pub-id-type="doi">10.1051/0004-6361/202038467</pub-id>
</citation>
</ref>
<ref id="B15">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Mumford</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Christe</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2014</year>). <article-title>SunPy proposal for enhancement 4: Packages affiliated with the SunPy project (SEP 0004)</article-title>. <pub-id pub-id-type="doi">10.5281/zenodo.3261752</pub-id>
</citation>
</ref>
<ref id="B16">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Pence</surname>
<given-names>W. D.</given-names>
</name>
<name>
<surname>Chiappetti</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Page</surname>
<given-names>C. G.</given-names>
</name>
<name>
<surname>Shaw</surname>
<given-names>R. A.</given-names>
</name>
<name>
<surname>Stobie</surname>
<given-names>E.</given-names>
</name>
</person-group> (<year>2010</year>). <article-title>Definition of the flexible image transport system (fits), version 3.0</article-title>. <source>Astronomy Astrophysics</source> <volume>524</volume>, <fpage>A42</fpage>. <pub-id pub-id-type="doi">10.1051/0004-6361/201015362</pub-id>
</citation>
</ref>
<ref id="B17">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Pesnell</surname>
<given-names>W. D.</given-names>
</name>
<name>
<surname>Thompson</surname>
<given-names>B. J.</given-names>
</name>
<name>
<surname>Chamberlin</surname>
<given-names>P. C.</given-names>
</name>
</person-group> (<year>2012</year>). <article-title>The solar Dynamics observatory (SDO)</article-title>. <source>Sol. Phys.</source> <volume>275</volume>, <fpage>3</fpage>&#x2013;<lpage>15</lpage>. <pub-id pub-id-type="doi">10.1007/s11207-011-9841-3</pub-id>
</citation>
</ref>
<ref id="B20">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Rochus</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Auch&#xe8;re</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Berghmans</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Harra</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Schmutz</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Sch&#xfc;hle</surname>
<given-names>U.</given-names>
</name>
<etal/>
</person-group> (<year>2020</year>). <article-title>The solar orbiter EUI instrument: The extreme ultraviolet imager</article-title>. <source>Astronomy Astrophysics</source> <volume>642</volume>, <fpage>A8</fpage>. <pub-id pub-id-type="doi">10.1051/0004-6361/201936663</pub-id>
</citation>
</ref>
<ref id="B21">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ryan</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Mumford</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Freij</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Inglis</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Leonard</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Christe</surname>
<given-names>S.</given-names>
</name>
<etal/>
</person-group> (<year>2022</year>). <article-title>sunpy/sunkit-instruments: v0.3.1</article-title>. <pub-id pub-id-type="doi">10.5281/zenodo.7190661</pub-id>
</citation>
</ref>
<ref id="B22">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ryan</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Mumford</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Sharma</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>ankitBhope</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Freij</surname>
<given-names>N.</given-names>
</name>
<etal/>
</person-group> (<year>2021</year>). <article-title>sunpy/ndcube: v2.0.1</article-title>. <pub-id pub-id-type="doi">10.5281/zenodo.5715161</pub-id>
</citation>
</ref>
<ref id="B23">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Scherrer</surname>
<given-names>P. H.</given-names>
</name>
<name>
<surname>Schou</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Bush</surname>
<given-names>R. I.</given-names>
</name>
<name>
<surname>Kosovichev</surname>
<given-names>A. G.</given-names>
</name>
<name>
<surname>Bogart</surname>
<given-names>R. S.</given-names>
</name>
<name>
<surname>Hoeksema</surname>
<given-names>J. T.</given-names>
</name>
<etal/>
</person-group> (<year>2012</year>). <article-title>The helioseismic and magnetic imager (HMI) investigation for the solar Dynamics observatory (SDO)</article-title>. <source>Sol. Phys.</source> <volume>275</volume>, <fpage>207</fpage>&#x2013;<lpage>227</lpage>. <pub-id pub-id-type="doi">10.1007/s11207-011-9834-2</pub-id>
</citation>
</ref>
<ref id="B24">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Stansby</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Yeates</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Badman</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>pfsspy: A Python package for potential field source surface modelling</article-title>. <source>J. Open Source Softw.</source> <volume>5</volume>, <fpage>2732</fpage>. <pub-id pub-id-type="doi">10.21105/joss.02732</pub-id>
</citation>
</ref>
<ref id="B19">
<citation citation-type="journal">
<collab>The Astropy Collaboration, </collab>
<person-group person-group-type="author">
<name>
<surname>Price-Whelan</surname>
<given-names>A. M.</given-names>
</name>
<name>
<surname>Sip&#x151;cz</surname>
<given-names>B. M.</given-names>
</name>
<name>
<surname>G&#xfc;nther</surname>
<given-names>H. M.</given-names>
</name>
<name>
<surname>Lim</surname>
<given-names>P. L.</given-names>
</name>
<name>
<surname>Crawford</surname>
<given-names>S. M.</given-names>
</name>
<etal/>
</person-group> (<year>2018</year>). <article-title>The astropy project: Building an open-science project and status of the v2.0 core package</article-title>. <source>Astronomical J.</source> <volume>156</volume>, <fpage>123</fpage>. <pub-id pub-id-type="doi">10.3847/1538-3881/aabc4f</pub-id>
</citation>
</ref>
<ref id="B3">
<citation citation-type="journal">
<collab>The SunPy Community, </collab>
<person-group person-group-type="author">
<name>
<surname>Barnes</surname>
<given-names>W. T.</given-names>
</name>
<name>
<surname>Bobra</surname>
<given-names>M. G.</given-names>
</name>
<name>
<surname>Christe</surname>
<given-names>S. D.</given-names>
</name>
<name>
<surname>Freij</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Hayes</surname>
<given-names>L. A.</given-names>
</name>
<etal/>
</person-group> (<year>2020</year>). <article-title>The sunpy project: Open source development and status of the version 1.0 core package</article-title>. <source>Astrophysical J.</source> <volume>890</volume>, <fpage>68</fpage>. <pub-id pub-id-type="doi">10.3847/1538-4357/ab4f7a</pub-id>
</citation>
</ref>
<ref id="B25">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Thompson</surname>
<given-names>W. T.</given-names>
</name>
</person-group> (<year>2006</year>). <article-title>Coordinate systems for solar image data</article-title>. <source>Astronomy Astrophysics</source> <volume>449</volume>, <fpage>791</fpage>&#x2013;<lpage>803</lpage>. <pub-id pub-id-type="doi">10.1051/0004-6361:20054262</pub-id>
</citation>
</ref>
<ref id="B26">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Virtanen</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Gommers</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Oliphant</surname>
<given-names>T. E.</given-names>
</name>
<name>
<surname>Haberland</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Reddy</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Cournapeau</surname>
<given-names>D.</given-names>
</name>
<etal/>
</person-group> (<year>2020</year>). <article-title>SciPy 1.0: Fundamental algorithms for scientific computing in Python</article-title>. <source>Nat. Methods</source> <volume>17</volume>, <fpage>261</fpage>&#x2013;<lpage>272</lpage>. <pub-id pub-id-type="doi">10.1038/s41592-019-0686-2</pub-id>
</citation>
</ref>
<ref id="B27">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Wells</surname>
<given-names>D. C.</given-names>
</name>
<name>
<surname>Greisen</surname>
<given-names>E. W.</given-names>
</name>
<name>
<surname>Harten</surname>
<given-names>R. H.</given-names>
</name>
</person-group> (<year>1981</year>). <article-title>Fits - a flexible image transport system</article-title>. <source>Astronomy Astrophysics Suppl. Ser.</source> <volume>44</volume>, <fpage>363</fpage>.</citation>
</ref>
</ref-list>
<app-group>
<app id="app1">
<title>Appendix</title>
<p>Here we provide a glossary of terms used throughout this paper:<list list-type="simple">
<list-item>
<p>&#x2022; SunPy Project: The board and lead/deputy developers, the community roles, maintainers, and every package under its supervision.</p>
</list-item>
<list-item>
<p>&#x2022; <monospace>sunpy</monospace>: The core package for using Python for scientific research in solar physics.</p>
</list-item>
<list-item>
<p>&#x2022; SunPy ecosystem: The collection of packages that use or interface with <monospace>sunpy</monospace> and support scientific research in solar physics, including <monospace>sunpy</monospace>.</p>
</list-item>
<list-item>
<p>&#x2022; Affiliated package(s): Solar physics related functionality outside the scope of the <monospace>sunpy</monospace> core package and that satisfies the standards enumerated in <xref ref-type="sec" rid="s2-2-1">Section&#xa0;2.2.1</xref>.</p>
</list-item>
</list>
</p>
</app>
</app-group>
</back>
</article>