Upload 878 files
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +5 -0
- Dockerfile +18 -0
- app.py +45 -0
- port.json +5 -0
- requirements.txt +11 -0
- run_docker.ps1 +26 -0
- run_docker.sh +75 -0
- sunpy/.DS_Store +0 -0
- sunpy/mcp_output/README_MCP.md +136 -0
- sunpy/mcp_output/analysis.json +1938 -0
- sunpy/mcp_output/diff_report.md +136 -0
- sunpy/mcp_output/mcp_plugin/__init__.py +0 -0
- sunpy/mcp_output/mcp_plugin/adapter.py +349 -0
- sunpy/mcp_output/mcp_plugin/main.py +13 -0
- sunpy/mcp_output/mcp_plugin/mcp_service.py +274 -0
- sunpy/mcp_output/requirements.txt +11 -0
- sunpy/mcp_output/start_mcp.py +30 -0
- sunpy/mcp_output/workflow_summary.json +237 -0
- sunpy/source/.DS_Store +0 -0
- sunpy/source/.circleci/codecov_upload.sh +9 -0
- sunpy/source/.circleci/config.yml +117 -0
- sunpy/source/.circleci/early_exit.sh +7 -0
- sunpy/source/.codecov.yaml +11 -0
- sunpy/source/.coveragerc +32 -0
- sunpy/source/.cruft.json +39 -0
- sunpy/source/.editorconfig +17 -0
- sunpy/source/.flake8 +29 -0
- sunpy/source/.isort.cfg +17 -0
- sunpy/source/.mailmap +244 -0
- sunpy/source/.pre-commit-config.yaml +46 -0
- sunpy/source/.readthedocs.yaml +31 -0
- sunpy/source/.rtd-environment.yml +9 -0
- sunpy/source/.ruff.toml +76 -0
- sunpy/source/.test_package_pins.txt +2 -0
- sunpy/source/.zenodo.json +1046 -0
- sunpy/source/CHANGELOG.rst +0 -0
- sunpy/source/CITATION.cff +79 -0
- sunpy/source/CITATION.rst +55 -0
- sunpy/source/LICENSE.rst +25 -0
- sunpy/source/MANIFEST.in +26 -0
- sunpy/source/README.rst +116 -0
- sunpy/source/__init__.py +4 -0
- sunpy/source/_typos.toml +34 -0
- sunpy/source/asv.conf.json +22 -0
- sunpy/source/benchmarks/__init__.py +0 -0
- sunpy/source/benchmarks/coordinates.py +85 -0
- sunpy/source/benchmarks/map.py +107 -0
- sunpy/source/benchmarks/time.py +18 -0
- sunpy/source/changelog/8493.bugfix.rst +1 -0
- sunpy/source/changelog/8505.doc.rst +1 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,8 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
sunpy/source/docs/whatsnew/7.0-punch.png filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
sunpy/source/docs/whatsnew/7.0-suit.png filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
sunpy/source/sunpy/data/test/sci_xrsf-l2-flx1s_g17_d20201016_truncated.nc filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
sunpy/source/sunpy/data/test/solo_L2_epd-ept-north-hcad_20200713_V02.cdf filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
sunpy/source/sunpy/data/test/test_ana.fz filter=lfs diff=lfs merge=lfs -text
|
Dockerfile
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM python:3.10
|
| 2 |
+
|
| 3 |
+
RUN useradd -m -u 1000 user && python -m pip install --upgrade pip
|
| 4 |
+
USER user
|
| 5 |
+
ENV PATH="/home/user/.local/bin:$PATH"
|
| 6 |
+
|
| 7 |
+
WORKDIR /app
|
| 8 |
+
|
| 9 |
+
COPY --chown=user ./requirements.txt requirements.txt
|
| 10 |
+
RUN pip install --no-cache-dir --upgrade -r requirements.txt
|
| 11 |
+
|
| 12 |
+
COPY --chown=user . /app
|
| 13 |
+
ENV MCP_TRANSPORT=http
|
| 14 |
+
ENV MCP_PORT=7860
|
| 15 |
+
|
| 16 |
+
EXPOSE 7860
|
| 17 |
+
|
| 18 |
+
CMD ["python", "sunpy/mcp_output/start_mcp.py"]
|
app.py
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastapi import FastAPI
|
| 2 |
+
import os
|
| 3 |
+
import sys
|
| 4 |
+
|
| 5 |
+
mcp_plugin_path = os.path.join(os.path.dirname(__file__), "sunpy", "mcp_output", "mcp_plugin")
|
| 6 |
+
sys.path.insert(0, mcp_plugin_path)
|
| 7 |
+
|
| 8 |
+
app = FastAPI(
|
| 9 |
+
title="Sunpy MCP Service",
|
| 10 |
+
description="Auto-generated MCP service for sunpy",
|
| 11 |
+
version="1.0.0"
|
| 12 |
+
)
|
| 13 |
+
|
| 14 |
+
@app.get("/")
|
| 15 |
+
def root():
|
| 16 |
+
return {
|
| 17 |
+
"service": "Sunpy MCP Service",
|
| 18 |
+
"version": "1.0.0",
|
| 19 |
+
"status": "running",
|
| 20 |
+
"transport": os.environ.get("MCP_TRANSPORT", "http")
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
@app.get("/health")
|
| 24 |
+
def health_check():
|
| 25 |
+
return {"status": "healthy", "service": "sunpy MCP"}
|
| 26 |
+
|
| 27 |
+
@app.get("/tools")
|
| 28 |
+
def list_tools():
|
| 29 |
+
try:
|
| 30 |
+
from mcp_service import create_app
|
| 31 |
+
mcp_app = create_app()
|
| 32 |
+
tools = []
|
| 33 |
+
for tool_name, tool_func in mcp_app.tools.items():
|
| 34 |
+
tools.append({
|
| 35 |
+
"name": tool_name,
|
| 36 |
+
"description": tool_func.__doc__ or "No description available"
|
| 37 |
+
})
|
| 38 |
+
return {"tools": tools}
|
| 39 |
+
except Exception as e:
|
| 40 |
+
return {"error": f"Failed to load tools: {str(e)}"}
|
| 41 |
+
|
| 42 |
+
if __name__ == "__main__":
|
| 43 |
+
import uvicorn
|
| 44 |
+
port = int(os.environ.get("PORT", 7860))
|
| 45 |
+
uvicorn.run(app, host="0.0.0.0", port=port)
|
port.json
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"repo": "sunpy",
|
| 3 |
+
"port": 7989,
|
| 4 |
+
"timestamp": 1773267827
|
| 5 |
+
}
|
requirements.txt
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
fastmcp
|
| 2 |
+
fastapi
|
| 3 |
+
uvicorn[standard]
|
| 4 |
+
pydantic>=2.0.0
|
| 5 |
+
astropy>=6.1.0
|
| 6 |
+
fsspec>=2023.6.0
|
| 7 |
+
numpy>=1.26.0
|
| 8 |
+
packaging>=23.2
|
| 9 |
+
parfive[ftp]>=2.1.0
|
| 10 |
+
pyerfa>=2.0.1.1
|
| 11 |
+
requests>=2.32.1
|
run_docker.ps1
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
cd $PSScriptRoot
|
| 2 |
+
$ErrorActionPreference = "Stop"
|
| 3 |
+
$entryName = if ($env:MCP_ENTRY_NAME) { $env:MCP_ENTRY_NAME } else { "sunpy" }
|
| 4 |
+
$entryUrl = if ($env:MCP_ENTRY_URL) { $env:MCP_ENTRY_URL } else { "http://localhost:7989/mcp" }
|
| 5 |
+
$imageName = if ($env:MCP_IMAGE_NAME) { $env:MCP_IMAGE_NAME } else { "sunpy-mcp" }
|
| 6 |
+
$mcpDir = Join-Path $env:USERPROFILE ".cursor"
|
| 7 |
+
$mcpPath = Join-Path $mcpDir "mcp.json"
|
| 8 |
+
if (!(Test-Path $mcpDir)) { New-Item -ItemType Directory -Path $mcpDir | Out-Null }
|
| 9 |
+
$config = @{}
|
| 10 |
+
if (Test-Path $mcpPath) {
|
| 11 |
+
try { $config = Get-Content $mcpPath -Raw | ConvertFrom-Json } catch { $config = @{} }
|
| 12 |
+
}
|
| 13 |
+
$serversOrdered = [ordered]@{}
|
| 14 |
+
if ($config -and ($config.PSObject.Properties.Name -contains "mcpServers") -and $config.mcpServers) {
|
| 15 |
+
$existing = $config.mcpServers
|
| 16 |
+
if ($existing -is [pscustomobject]) {
|
| 17 |
+
foreach ($p in $existing.PSObject.Properties) { if ($p.Name -ne $entryName) { $serversOrdered[$p.Name] = $p.Value } }
|
| 18 |
+
} elseif ($existing -is [System.Collections.IDictionary]) {
|
| 19 |
+
foreach ($k in $existing.Keys) { if ($k -ne $entryName) { $serversOrdered[$k] = $existing[$k] } }
|
| 20 |
+
}
|
| 21 |
+
}
|
| 22 |
+
$serversOrdered[$entryName] = @{ url = $entryUrl }
|
| 23 |
+
$config = @{ mcpServers = $serversOrdered }
|
| 24 |
+
$config | ConvertTo-Json -Depth 10 | Set-Content -Path $mcpPath -Encoding UTF8
|
| 25 |
+
docker build -t $imageName .
|
| 26 |
+
docker run --rm -p 7989:7860 $imageName
|
run_docker.sh
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env bash
|
| 2 |
+
set -euo pipefail
|
| 3 |
+
cd "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
| 4 |
+
mcp_entry_name="${MCP_ENTRY_NAME:-sunpy}"
|
| 5 |
+
mcp_entry_url="${MCP_ENTRY_URL:-http://localhost:7989/mcp}"
|
| 6 |
+
mcp_dir="${HOME}/.cursor"
|
| 7 |
+
mcp_path="${mcp_dir}/mcp.json"
|
| 8 |
+
mkdir -p "${mcp_dir}"
|
| 9 |
+
if command -v python3 >/dev/null 2>&1; then
|
| 10 |
+
python3 - "${mcp_path}" "${mcp_entry_name}" "${mcp_entry_url}" <<'PY'
|
| 11 |
+
import json, os, sys
|
| 12 |
+
path, name, url = sys.argv[1:4]
|
| 13 |
+
cfg = {"mcpServers": {}}
|
| 14 |
+
if os.path.exists(path):
|
| 15 |
+
try:
|
| 16 |
+
with open(path, "r", encoding="utf-8") as f:
|
| 17 |
+
cfg = json.load(f)
|
| 18 |
+
except Exception:
|
| 19 |
+
cfg = {"mcpServers": {}}
|
| 20 |
+
if not isinstance(cfg, dict):
|
| 21 |
+
cfg = {"mcpServers": {}}
|
| 22 |
+
servers = cfg.get("mcpServers")
|
| 23 |
+
if not isinstance(servers, dict):
|
| 24 |
+
servers = {}
|
| 25 |
+
ordered = {}
|
| 26 |
+
for k, v in servers.items():
|
| 27 |
+
if k != name:
|
| 28 |
+
ordered[k] = v
|
| 29 |
+
ordered[name] = {"url": url}
|
| 30 |
+
cfg = {"mcpServers": ordered}
|
| 31 |
+
with open(path, "w", encoding="utf-8") as f:
|
| 32 |
+
json.dump(cfg, f, indent=2, ensure_ascii=False)
|
| 33 |
+
PY
|
| 34 |
+
elif command -v python >/dev/null 2>&1; then
|
| 35 |
+
python - "${mcp_path}" "${mcp_entry_name}" "${mcp_entry_url}" <<'PY'
|
| 36 |
+
import json, os, sys
|
| 37 |
+
path, name, url = sys.argv[1:4]
|
| 38 |
+
cfg = {"mcpServers": {}}
|
| 39 |
+
if os.path.exists(path):
|
| 40 |
+
try:
|
| 41 |
+
with open(path, "r", encoding="utf-8") as f:
|
| 42 |
+
cfg = json.load(f)
|
| 43 |
+
except Exception:
|
| 44 |
+
cfg = {"mcpServers": {}}
|
| 45 |
+
if not isinstance(cfg, dict):
|
| 46 |
+
cfg = {"mcpServers": {}}
|
| 47 |
+
servers = cfg.get("mcpServers")
|
| 48 |
+
if not isinstance(servers, dict):
|
| 49 |
+
servers = {}
|
| 50 |
+
ordered = {}
|
| 51 |
+
for k, v in servers.items():
|
| 52 |
+
if k != name:
|
| 53 |
+
ordered[k] = v
|
| 54 |
+
ordered[name] = {"url": url}
|
| 55 |
+
cfg = {"mcpServers": ordered}
|
| 56 |
+
with open(path, "w", encoding="utf-8") as f:
|
| 57 |
+
json.dump(cfg, f, indent=2, ensure_ascii=False)
|
| 58 |
+
PY
|
| 59 |
+
elif command -v jq >/dev/null 2>&1; then
|
| 60 |
+
name="${mcp_entry_name}"; url="${mcp_entry_url}"
|
| 61 |
+
if [ -f "${mcp_path}" ]; then
|
| 62 |
+
tmp="$(mktemp)"
|
| 63 |
+
jq --arg name "$name" --arg url "$url" '
|
| 64 |
+
.mcpServers = (.mcpServers // {})
|
| 65 |
+
| .mcpServers as $s
|
| 66 |
+
| ($s | with_entries(select(.key != $name))) as $base
|
| 67 |
+
| .mcpServers = ($base + {($name): {"url": $url}})
|
| 68 |
+
' "${mcp_path}" > "${tmp}" && mv "${tmp}" "${mcp_path}"
|
| 69 |
+
else
|
| 70 |
+
printf '{ "mcpServers": { "%s": { "url": "%s" } } }
|
| 71 |
+
' "$name" "$url" > "${mcp_path}"
|
| 72 |
+
fi
|
| 73 |
+
fi
|
| 74 |
+
docker build -t sunpy-mcp .
|
| 75 |
+
docker run --rm -p 7989:7860 sunpy-mcp
|
sunpy/.DS_Store
ADDED
|
Binary file (6.15 kB). View file
|
|
|
sunpy/mcp_output/README_MCP.md
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# SunPy MCP (Model Context Protocol) Service README
|
| 2 |
+
|
| 3 |
+
## 1) Project Introduction
|
| 4 |
+
|
| 5 |
+
This MCP (Model Context Protocol) service provides a practical interface to core SunPy capabilities for solar/space-science workflows, including:
|
| 6 |
+
|
| 7 |
+
- Data search and download (Fido-based)
|
| 8 |
+
- Solar map loading and processing
|
| 9 |
+
- Time series loading and analysis
|
| 10 |
+
- Time parsing and time-range normalization
|
| 11 |
+
- Solar ephemeris calculations
|
| 12 |
+
- Coordinate frame conversion helpers
|
| 13 |
+
|
| 14 |
+
It is designed for agent/tooling scenarios where users need reliable, scriptable access to SunPy’s high-value APIs without navigating the full library surface.
|
| 15 |
+
|
| 16 |
+
---
|
| 17 |
+
|
| 18 |
+
## 2) Installation Method
|
| 19 |
+
|
| 20 |
+
### Requirements
|
| 21 |
+
|
| 22 |
+
Core dependencies (minimum):
|
| 23 |
+
- numpy
|
| 24 |
+
- astropy
|
| 25 |
+
- packaging
|
| 26 |
+
|
| 27 |
+
Common optional dependencies (recommended for full features):
|
| 28 |
+
- matplotlib, reproject, parfive
|
| 29 |
+
- drms, zeep
|
| 30 |
+
- asdf, scipy, pandas
|
| 31 |
+
- aiohttp, h5py
|
| 32 |
+
|
| 33 |
+
### Install commands
|
| 34 |
+
|
| 35 |
+
- Install SunPy:
|
| 36 |
+
pip install sunpy
|
| 37 |
+
|
| 38 |
+
- Install commonly used optional extras manually (example):
|
| 39 |
+
pip install matplotlib reproject parfive drms zeep asdf scipy pandas aiohttp h5py
|
| 40 |
+
|
| 41 |
+
If you package this as a standalone MCP (Model Context Protocol) service, include SunPy and optional dependencies in your service environment image or lockfile.
|
| 42 |
+
|
| 43 |
+
---
|
| 44 |
+
|
| 45 |
+
## 3) Quick Start
|
| 46 |
+
|
| 47 |
+
### A. Parse time and build time ranges
|
| 48 |
+
Use `sunpy.time.parse_time` and `sunpy.time.TimeRange` to normalize user input before any data query.
|
| 49 |
+
|
| 50 |
+
### B. Search and fetch data
|
| 51 |
+
Use `sunpy.net.Fido` with `sunpy.net.attrs` filters (time/instrument/provider, etc.) to perform discovery and downloads.
|
| 52 |
+
|
| 53 |
+
### C. Load maps
|
| 54 |
+
Use `sunpy.map.Map` (factory path via `MapFactory`) to ingest FITS/JP2 and other supported map formats into `GenericMap` objects.
|
| 55 |
+
|
| 56 |
+
### D. Load time series
|
| 57 |
+
Use `sunpy.timeseries.TimeSeries` (factory path via `TimeSeriesFactory`) to build `GenericTimeSeries` objects from supported sources/files.
|
| 58 |
+
|
| 59 |
+
### E. Solar geometry utilities
|
| 60 |
+
Use `sunpy.coordinates.sun` helpers such as:
|
| 61 |
+
- `angular_radius`
|
| 62 |
+
- `B0`, `L0`, `P`
|
| 63 |
+
- `carrington_rotation_number`
|
| 64 |
+
|
| 65 |
+
These are good stateless MCP (Model Context Protocol) tools for fast derived metadata.
|
| 66 |
+
|
| 67 |
+
---
|
| 68 |
+
|
| 69 |
+
## 4) Available Tools and Endpoints List
|
| 70 |
+
|
| 71 |
+
Recommended MCP (Model Context Protocol) service endpoints:
|
| 72 |
+
|
| 73 |
+
- `time.parse`
|
| 74 |
+
- Parse/validate user time input into canonical format.
|
| 75 |
+
|
| 76 |
+
- `time.range.create`
|
| 77 |
+
- Build a `TimeRange` from start/end or start/duration.
|
| 78 |
+
|
| 79 |
+
- `solar.ephemeris.compute`
|
| 80 |
+
- Return solar geometry values (`B0`, `L0`, `P`, angular radius, Carrington rotation number).
|
| 81 |
+
|
| 82 |
+
- `data.search`
|
| 83 |
+
- Query remote archives via Fido using attrs-based filters.
|
| 84 |
+
|
| 85 |
+
- `data.fetch`
|
| 86 |
+
- Download query results to local cache/work directory.
|
| 87 |
+
|
| 88 |
+
- `map.load`
|
| 89 |
+
- Load map file(s) into SunPy map objects.
|
| 90 |
+
|
| 91 |
+
- `map.inspect`
|
| 92 |
+
- Return map metadata/WCS summary (instrument, wavelength, date, observer, scale, dimensions).
|
| 93 |
+
|
| 94 |
+
- `map.operations`
|
| 95 |
+
- Common actions: submap, resample, rotate, reprojection hooks (if dependencies installed).
|
| 96 |
+
|
| 97 |
+
- `timeseries.load`
|
| 98 |
+
- Load time-series source/file into `GenericTimeSeries`.
|
| 99 |
+
|
| 100 |
+
- `timeseries.inspect`
|
| 101 |
+
- Return columns, units, time coverage, and basic stats.
|
| 102 |
+
|
| 103 |
+
---
|
| 104 |
+
|
| 105 |
+
## 5) Common Issues and Notes
|
| 106 |
+
|
| 107 |
+
- Optional dependency gaps:
|
| 108 |
+
Some features silently require extra packages (e.g., `reproject`, `drms`, `zeep`, `asdf`). Validate availability at startup and expose capability flags.
|
| 109 |
+
|
| 110 |
+
- Remote service variability:
|
| 111 |
+
Network/data-provider endpoints can be slow or unavailable. Implement retries, timeouts, and clear error mapping in service responses.
|
| 112 |
+
|
| 113 |
+
- Data volume/performance:
|
| 114 |
+
Map and time-series workflows can be memory-heavy. Prefer bounded queries (shorter time ranges, targeted instruments) and streaming download patterns.
|
| 115 |
+
|
| 116 |
+
- Environment consistency:
|
| 117 |
+
Pin SunPy + Astropy versions in production to avoid behavior drift across coordinate/time handling.
|
| 118 |
+
|
| 119 |
+
- Cache behavior:
|
| 120 |
+
SunPy download/caching behavior should be documented for operators (cache location, cleanup strategy, retention policy).
|
| 121 |
+
|
| 122 |
+
- No built-in CLI entrypoints:
|
| 123 |
+
This repository is library-first; your MCP (Model Context Protocol) service should define its own transport/server entrypoint.
|
| 124 |
+
|
| 125 |
+
---
|
| 126 |
+
|
| 127 |
+
## 6) Reference Links or Documentation
|
| 128 |
+
|
| 129 |
+
- Repository: https://github.com/sunpy/sunpy
|
| 130 |
+
- SunPy documentation: https://docs.sunpy.org
|
| 131 |
+
- SunPy Net/Fido docs: https://docs.sunpy.org/en/stable/guide/acquiring_data/index.html
|
| 132 |
+
- SunPy Map docs: https://docs.sunpy.org/en/stable/guide/map/index.html
|
| 133 |
+
- SunPy TimeSeries docs: https://docs.sunpy.org/en/stable/guide/timeseries/index.html
|
| 134 |
+
- SunPy Coordinates docs: https://docs.sunpy.org/en/stable/guide/coordinates/index.html
|
| 135 |
+
|
| 136 |
+
If needed, I can also generate a production-ready version with explicit JSON tool schemas (request/response fields) for each MCP (Model Context Protocol) endpoint.
|
sunpy/mcp_output/analysis.json
ADDED
|
@@ -0,0 +1,1938 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"summary": {
|
| 3 |
+
"repository_url": "https://github.com/sunpy/sunpy",
|
| 4 |
+
"summary": "Imported via zip fallback, file count: 582",
|
| 5 |
+
"file_tree": {
|
| 6 |
+
".circleci/config.yml": {
|
| 7 |
+
"size": 3761
|
| 8 |
+
},
|
| 9 |
+
".codecov.yaml": {
|
| 10 |
+
"size": 155
|
| 11 |
+
},
|
| 12 |
+
".cruft.json": {
|
| 13 |
+
"size": 1469
|
| 14 |
+
},
|
| 15 |
+
".github/dependabot.yml": {
|
| 16 |
+
"size": 119
|
| 17 |
+
},
|
| 18 |
+
".github/workflows/asv-regular.yml": {
|
| 19 |
+
"size": 2012
|
| 20 |
+
},
|
| 21 |
+
".github/workflows/ci.yml": {
|
| 22 |
+
"size": 5163
|
| 23 |
+
},
|
| 24 |
+
".github/workflows/ci_benchmarks.yml": {
|
| 25 |
+
"size": 1776
|
| 26 |
+
},
|
| 27 |
+
".github/workflows/cron.yml": {
|
| 28 |
+
"size": 4549
|
| 29 |
+
},
|
| 30 |
+
".github/workflows/label_sync.yml": {
|
| 31 |
+
"size": 704
|
| 32 |
+
},
|
| 33 |
+
".github/workflows/scheduled_builds.yml": {
|
| 34 |
+
"size": 1566
|
| 35 |
+
},
|
| 36 |
+
".github/workflows/stale_bot.yml": {
|
| 37 |
+
"size": 1756
|
| 38 |
+
},
|
| 39 |
+
".github/workflows/sub_package_update.yml": {
|
| 40 |
+
"size": 5945
|
| 41 |
+
},
|
| 42 |
+
".isort.cfg": {
|
| 43 |
+
"size": 424
|
| 44 |
+
},
|
| 45 |
+
".pre-commit-config.yaml": {
|
| 46 |
+
"size": 1408
|
| 47 |
+
},
|
| 48 |
+
".readthedocs.yaml": {
|
| 49 |
+
"size": 520
|
| 50 |
+
},
|
| 51 |
+
".rtd-environment.yml": {
|
| 52 |
+
"size": 135
|
| 53 |
+
},
|
| 54 |
+
".ruff.toml": {
|
| 55 |
+
"size": 2147
|
| 56 |
+
},
|
| 57 |
+
".test_package_pins.txt": {
|
| 58 |
+
"size": 112
|
| 59 |
+
},
|
| 60 |
+
".zenodo.json": {
|
| 61 |
+
"size": 30873
|
| 62 |
+
},
|
| 63 |
+
"_typos.toml": {
|
| 64 |
+
"size": 428
|
| 65 |
+
},
|
| 66 |
+
"asv.conf.json": {
|
| 67 |
+
"size": 658
|
| 68 |
+
},
|
| 69 |
+
"benchmarks/__init__.py": {
|
| 70 |
+
"size": 0
|
| 71 |
+
},
|
| 72 |
+
"benchmarks/coordinates.py": {
|
| 73 |
+
"size": 2957
|
| 74 |
+
},
|
| 75 |
+
"benchmarks/map.py": {
|
| 76 |
+
"size": 3218
|
| 77 |
+
},
|
| 78 |
+
"benchmarks/time.py": {
|
| 79 |
+
"size": 308
|
| 80 |
+
},
|
| 81 |
+
"docs/conf.py": {
|
| 82 |
+
"size": 17629
|
| 83 |
+
},
|
| 84 |
+
"docs/reference/sunpy_stability.yaml": {
|
| 85 |
+
"size": 1234
|
| 86 |
+
},
|
| 87 |
+
"docs/robots.txt": {
|
| 88 |
+
"size": 208
|
| 89 |
+
},
|
| 90 |
+
"examples/README.txt": {
|
| 91 |
+
"size": 444
|
| 92 |
+
},
|
| 93 |
+
"examples/acquiring_data/README.txt": {
|
| 94 |
+
"size": 92
|
| 95 |
+
},
|
| 96 |
+
"examples/acquiring_data/downloading_cutouts.py": {
|
| 97 |
+
"size": 2741
|
| 98 |
+
},
|
| 99 |
+
"examples/acquiring_data/fido_metadata_queries.py": {
|
| 100 |
+
"size": 2730
|
| 101 |
+
},
|
| 102 |
+
"examples/acquiring_data/querying_and_loading_SHARP_data.py": {
|
| 103 |
+
"size": 1758
|
| 104 |
+
},
|
| 105 |
+
"examples/acquiring_data/querying_the_GOES_event_list.py": {
|
| 106 |
+
"size": 2884
|
| 107 |
+
},
|
| 108 |
+
"examples/acquiring_data/search_cdaweb.py": {
|
| 109 |
+
"size": 1670
|
| 110 |
+
},
|
| 111 |
+
"examples/computer_vision_techniques/README.txt": {
|
| 112 |
+
"size": 122
|
| 113 |
+
},
|
| 114 |
+
"examples/computer_vision_techniques/finding_masking_bright_pixels.py": {
|
| 115 |
+
"size": 2050
|
| 116 |
+
},
|
| 117 |
+
"examples/computer_vision_techniques/loop_edge_enhance.py": {
|
| 118 |
+
"size": 1540
|
| 119 |
+
},
|
| 120 |
+
"examples/computer_vision_techniques/mask_disk.py": {
|
| 121 |
+
"size": 1714
|
| 122 |
+
},
|
| 123 |
+
"examples/computer_vision_techniques/off_limb_enhance.py": {
|
| 124 |
+
"size": 3277
|
| 125 |
+
},
|
| 126 |
+
"examples/differential_rotation/README.txt": {
|
| 127 |
+
"size": 201
|
| 128 |
+
},
|
| 129 |
+
"examples/differential_rotation/comparing_rotation_models.py": {
|
| 130 |
+
"size": 3532
|
| 131 |
+
},
|
| 132 |
+
"examples/differential_rotation/differentially_rotated_coordinate.py": {
|
| 133 |
+
"size": 2494
|
| 134 |
+
},
|
| 135 |
+
"examples/differential_rotation/differentially_rotated_gridlines.py": {
|
| 136 |
+
"size": 2153
|
| 137 |
+
},
|
| 138 |
+
"examples/differential_rotation/reprojected_map.py": {
|
| 139 |
+
"size": 3682
|
| 140 |
+
},
|
| 141 |
+
"examples/map/README.txt": {
|
| 142 |
+
"size": 57
|
| 143 |
+
},
|
| 144 |
+
"examples/map/brightness_pixel_location.py": {
|
| 145 |
+
"size": 1048
|
| 146 |
+
},
|
| 147 |
+
"examples/map/compare_rotation_results.py": {
|
| 148 |
+
"size": 3002
|
| 149 |
+
},
|
| 150 |
+
"examples/map/composite_map_AIA_HMI.py": {
|
| 151 |
+
"size": 2108
|
| 152 |
+
},
|
| 153 |
+
"examples/map/difference_images.py": {
|
| 154 |
+
"size": 3818
|
| 155 |
+
},
|
| 156 |
+
"examples/map/hmi_contours_wcsaxes.py": {
|
| 157 |
+
"size": 3934
|
| 158 |
+
},
|
| 159 |
+
"examples/map/image_bright_regions_gallery_example.py": {
|
| 160 |
+
"size": 2984
|
| 161 |
+
},
|
| 162 |
+
"examples/map/lasco_mask.py": {
|
| 163 |
+
"size": 2668
|
| 164 |
+
},
|
| 165 |
+
"examples/map/map_contouring.py": {
|
| 166 |
+
"size": 1312
|
| 167 |
+
},
|
| 168 |
+
"examples/map/map_data_histogram.py": {
|
| 169 |
+
"size": 2648
|
| 170 |
+
},
|
| 171 |
+
"examples/map/map_from_numpy_array.py": {
|
| 172 |
+
"size": 2057
|
| 173 |
+
},
|
| 174 |
+
"examples/map/map_metadata_modification.py": {
|
| 175 |
+
"size": 1647
|
| 176 |
+
},
|
| 177 |
+
"examples/map/map_resampling_and_superpixels.py": {
|
| 178 |
+
"size": 1930
|
| 179 |
+
},
|
| 180 |
+
"examples/map/map_rotation.py": {
|
| 181 |
+
"size": 1057
|
| 182 |
+
},
|
| 183 |
+
"examples/map/map_segment.py": {
|
| 184 |
+
"size": 4745
|
| 185 |
+
},
|
| 186 |
+
"examples/map/masking_hmi.py": {
|
| 187 |
+
"size": 4521
|
| 188 |
+
},
|
| 189 |
+
"examples/map/plot_frameless_image.py": {
|
| 190 |
+
"size": 1322
|
| 191 |
+
},
|
| 192 |
+
"examples/map/submaps_and_cropping.py": {
|
| 193 |
+
"size": 1248
|
| 194 |
+
},
|
| 195 |
+
"examples/map/track_active_region.py": {
|
| 196 |
+
"size": 3470
|
| 197 |
+
},
|
| 198 |
+
"examples/map_transformations/README.txt": {
|
| 199 |
+
"size": 158
|
| 200 |
+
},
|
| 201 |
+
"examples/map_transformations/autoalign_aia_hmi.py": {
|
| 202 |
+
"size": 2899
|
| 203 |
+
},
|
| 204 |
+
"examples/map_transformations/projection_custom_origin.py": {
|
| 205 |
+
"size": 3595
|
| 206 |
+
},
|
| 207 |
+
"examples/map_transformations/reprojection_aia_euvi_mosaic.py": {
|
| 208 |
+
"size": 7454
|
| 209 |
+
},
|
| 210 |
+
"examples/map_transformations/reprojection_align_aia_hmi.py": {
|
| 211 |
+
"size": 3321
|
| 212 |
+
},
|
| 213 |
+
"examples/map_transformations/reprojection_auto_extent.py": {
|
| 214 |
+
"size": 3474
|
| 215 |
+
},
|
| 216 |
+
"examples/map_transformations/reprojection_carrington.py": {
|
| 217 |
+
"size": 1882
|
| 218 |
+
},
|
| 219 |
+
"examples/map_transformations/reprojection_different_observers.py": {
|
| 220 |
+
"size": 5567
|
| 221 |
+
},
|
| 222 |
+
"examples/map_transformations/reprojection_helioprojective_radial.py": {
|
| 223 |
+
"size": 3888
|
| 224 |
+
},
|
| 225 |
+
"examples/map_transformations/reprojection_spherical_screen.py": {
|
| 226 |
+
"size": 3685
|
| 227 |
+
},
|
| 228 |
+
"examples/map_transformations/upside_down_hmi.py": {
|
| 229 |
+
"size": 1619
|
| 230 |
+
},
|
| 231 |
+
"examples/plotting/AIA_HMI_composite.py": {
|
| 232 |
+
"size": 2322
|
| 233 |
+
},
|
| 234 |
+
"examples/plotting/README.txt": {
|
| 235 |
+
"size": 64
|
| 236 |
+
},
|
| 237 |
+
"examples/plotting/adding_earth.py": {
|
| 238 |
+
"size": 3300
|
| 239 |
+
},
|
| 240 |
+
"examples/plotting/aia_example.py": {
|
| 241 |
+
"size": 1306
|
| 242 |
+
},
|
| 243 |
+
"examples/plotting/draw_wcs_extent.py": {
|
| 244 |
+
"size": 1772
|
| 245 |
+
},
|
| 246 |
+
"examples/plotting/fading_between_maps.py": {
|
| 247 |
+
"size": 1877
|
| 248 |
+
},
|
| 249 |
+
"examples/plotting/finding_local_peaks_in_solar_data.py": {
|
| 250 |
+
"size": 3128
|
| 251 |
+
},
|
| 252 |
+
"examples/plotting/finegrained_plot.py": {
|
| 253 |
+
"size": 2741
|
| 254 |
+
},
|
| 255 |
+
"examples/plotting/great_arc_example.py": {
|
| 256 |
+
"size": 2127
|
| 257 |
+
},
|
| 258 |
+
"examples/plotting/grid_plotting.py": {
|
| 259 |
+
"size": 1458
|
| 260 |
+
},
|
| 261 |
+
"examples/plotting/hmi_synoptic_maps.py": {
|
| 262 |
+
"size": 1464
|
| 263 |
+
},
|
| 264 |
+
"examples/plotting/lasco_overlay.py": {
|
| 265 |
+
"size": 3042
|
| 266 |
+
},
|
| 267 |
+
"examples/plotting/lat_lon_lines.py": {
|
| 268 |
+
"size": 2567
|
| 269 |
+
},
|
| 270 |
+
"examples/plotting/limb_plotting.py": {
|
| 271 |
+
"size": 1632
|
| 272 |
+
},
|
| 273 |
+
"examples/plotting/magnetogram_active_regions.py": {
|
| 274 |
+
"size": 2349
|
| 275 |
+
},
|
| 276 |
+
"examples/plotting/map_editcolormap.py": {
|
| 277 |
+
"size": 1530
|
| 278 |
+
},
|
| 279 |
+
"examples/plotting/masked_composite_plot.py": {
|
| 280 |
+
"size": 2530
|
| 281 |
+
},
|
| 282 |
+
"examples/plotting/offdisk_contours.py": {
|
| 283 |
+
"size": 3220
|
| 284 |
+
},
|
| 285 |
+
"examples/plotting/overplot_hek_polygon.py": {
|
| 286 |
+
"size": 2385
|
| 287 |
+
},
|
| 288 |
+
"examples/plotting/plot_equator_prime_meridian.py": {
|
| 289 |
+
"size": 1870
|
| 290 |
+
},
|
| 291 |
+
"examples/plotting/plot_rotated_rectangle.py": {
|
| 292 |
+
"size": 2016
|
| 293 |
+
},
|
| 294 |
+
"examples/plotting/plotting_blank_map.py": {
|
| 295 |
+
"size": 2852
|
| 296 |
+
},
|
| 297 |
+
"examples/plotting/quadrangle.py": {
|
| 298 |
+
"size": 1937
|
| 299 |
+
},
|
| 300 |
+
"examples/plotting/screen_blend_mode.py": {
|
| 301 |
+
"size": 3322
|
| 302 |
+
},
|
| 303 |
+
"examples/plotting/simple_differential_rotation.py": {
|
| 304 |
+
"size": 3038
|
| 305 |
+
},
|
| 306 |
+
"examples/plotting/solar_cycle_example.py": {
|
| 307 |
+
"size": 2448
|
| 308 |
+
},
|
| 309 |
+
"examples/plotting/sunpy_matplotlib_colormap.py": {
|
| 310 |
+
"size": 1343
|
| 311 |
+
},
|
| 312 |
+
"examples/plotting/three_map_composite.py": {
|
| 313 |
+
"size": 2726
|
| 314 |
+
},
|
| 315 |
+
"examples/plotting/wcsaxes_map_example.py": {
|
| 316 |
+
"size": 2368
|
| 317 |
+
},
|
| 318 |
+
"examples/plotting/wcsaxes_plotting_example.py": {
|
| 319 |
+
"size": 3795
|
| 320 |
+
},
|
| 321 |
+
"examples/plotting/xy_lims.py": {
|
| 322 |
+
"size": 2433
|
| 323 |
+
},
|
| 324 |
+
"examples/saving_and_loading_data/README.txt": {
|
| 325 |
+
"size": 85
|
| 326 |
+
},
|
| 327 |
+
"examples/saving_and_loading_data/coordinates_in_asdf.py": {
|
| 328 |
+
"size": 3671
|
| 329 |
+
},
|
| 330 |
+
"examples/saving_and_loading_data/genericmap_in_asdf.py": {
|
| 331 |
+
"size": 2048
|
| 332 |
+
},
|
| 333 |
+
"examples/saving_and_loading_data/genericmap_in_fits.py": {
|
| 334 |
+
"size": 2037
|
| 335 |
+
},
|
| 336 |
+
"examples/saving_and_loading_data/load_adapt_fits_into_map.py": {
|
| 337 |
+
"size": 3001
|
| 338 |
+
},
|
| 339 |
+
"examples/showcase/README.txt": {
|
| 340 |
+
"size": 86
|
| 341 |
+
},
|
| 342 |
+
"examples/showcase/eclipse_amount.py": {
|
| 343 |
+
"size": 3578
|
| 344 |
+
},
|
| 345 |
+
"examples/showcase/hmi_cutout.py": {
|
| 346 |
+
"size": 5003
|
| 347 |
+
},
|
| 348 |
+
"examples/showcase/los_simulation_box_intersection.py": {
|
| 349 |
+
"size": 11141
|
| 350 |
+
},
|
| 351 |
+
"examples/showcase/stereoscopic_3d.py": {
|
| 352 |
+
"size": 4805
|
| 353 |
+
},
|
| 354 |
+
"examples/showcase/time_distance.py": {
|
| 355 |
+
"size": 8025
|
| 356 |
+
},
|
| 357 |
+
"examples/showcase/where_is_stereo.py": {
|
| 358 |
+
"size": 6615
|
| 359 |
+
},
|
| 360 |
+
"examples/time_series/README.txt": {
|
| 361 |
+
"size": 71
|
| 362 |
+
},
|
| 363 |
+
"examples/time_series/goes_hek_m25.py": {
|
| 364 |
+
"size": 1836
|
| 365 |
+
},
|
| 366 |
+
"examples/time_series/goes_xrs_example.py": {
|
| 367 |
+
"size": 6581
|
| 368 |
+
},
|
| 369 |
+
"examples/time_series/goes_xrs_nrt_data.py": {
|
| 370 |
+
"size": 4199
|
| 371 |
+
},
|
| 372 |
+
"examples/time_series/power_spectra_example.py": {
|
| 373 |
+
"size": 1470
|
| 374 |
+
},
|
| 375 |
+
"examples/time_series/timeseries_convolution_filter.py": {
|
| 376 |
+
"size": 1631
|
| 377 |
+
},
|
| 378 |
+
"examples/time_series/timeseries_example.py": {
|
| 379 |
+
"size": 7506
|
| 380 |
+
},
|
| 381 |
+
"examples/time_series/timeseries_peak_finding.py": {
|
| 382 |
+
"size": 3818
|
| 383 |
+
},
|
| 384 |
+
"examples/time_series/timeseriesmetadata_example.py": {
|
| 385 |
+
"size": 4471
|
| 386 |
+
},
|
| 387 |
+
"examples/units_and_coordinates/AIA_limb_STEREO.py": {
|
| 388 |
+
"size": 3198
|
| 389 |
+
},
|
| 390 |
+
"examples/units_and_coordinates/AltAz_Coordinate_transform.py": {
|
| 391 |
+
"size": 2019
|
| 392 |
+
},
|
| 393 |
+
"examples/units_and_coordinates/ParkerSolarProbe_trajectory.py": {
|
| 394 |
+
"size": 3400
|
| 395 |
+
},
|
| 396 |
+
"examples/units_and_coordinates/README.txt": {
|
| 397 |
+
"size": 138
|
| 398 |
+
},
|
| 399 |
+
"examples/units_and_coordinates/SDO_to_STEREO_Coordinate_Conversion.py": {
|
| 400 |
+
"size": 4948
|
| 401 |
+
},
|
| 402 |
+
"examples/units_and_coordinates/STEREO_SECCHI_starfield.py": {
|
| 403 |
+
"size": 5532
|
| 404 |
+
},
|
| 405 |
+
"examples/units_and_coordinates/getting_lasco_observer_location.py": {
|
| 406 |
+
"size": 4373
|
| 407 |
+
},
|
| 408 |
+
"examples/units_and_coordinates/getting_observer_location.py": {
|
| 409 |
+
"size": 2164
|
| 410 |
+
},
|
| 411 |
+
"examples/units_and_coordinates/map_slit_extraction.py": {
|
| 412 |
+
"size": 2488
|
| 413 |
+
},
|
| 414 |
+
"examples/units_and_coordinates/north_offset_frame.py": {
|
| 415 |
+
"size": 1639
|
| 416 |
+
},
|
| 417 |
+
"examples/units_and_coordinates/planet_locations.py": {
|
| 418 |
+
"size": 1281
|
| 419 |
+
},
|
| 420 |
+
"examples/units_and_coordinates/radec_to_hpc_map.py": {
|
| 421 |
+
"size": 8406
|
| 422 |
+
},
|
| 423 |
+
"examples/units_and_coordinates/spice.py": {
|
| 424 |
+
"size": 7659
|
| 425 |
+
},
|
| 426 |
+
"examples/units_and_coordinates/venus_transit.py": {
|
| 427 |
+
"size": 2115
|
| 428 |
+
},
|
| 429 |
+
"pyproject.toml": {
|
| 430 |
+
"size": 7305
|
| 431 |
+
},
|
| 432 |
+
"pytest.ini": {
|
| 433 |
+
"size": 3288
|
| 434 |
+
},
|
| 435 |
+
"sunpy-dev-env.yml": {
|
| 436 |
+
"size": 1285
|
| 437 |
+
},
|
| 438 |
+
"sunpy/__init__.py": {
|
| 439 |
+
"size": 1298
|
| 440 |
+
},
|
| 441 |
+
"sunpy/_dev/__init__.py": {
|
| 442 |
+
"size": 189
|
| 443 |
+
},
|
| 444 |
+
"sunpy/_dev/scm_version.py": {
|
| 445 |
+
"size": 426
|
| 446 |
+
},
|
| 447 |
+
"sunpy/conftest.py": {
|
| 448 |
+
"size": 6325
|
| 449 |
+
},
|
| 450 |
+
"sunpy/coordinates/__init__.py": {
|
| 451 |
+
"size": 1090
|
| 452 |
+
},
|
| 453 |
+
"sunpy/coordinates/_transformations.py": {
|
| 454 |
+
"size": 62254
|
| 455 |
+
},
|
| 456 |
+
"sunpy/coordinates/data/igrf13coeffs.txt": {
|
| 457 |
+
"size": 40639
|
| 458 |
+
},
|
| 459 |
+
"sunpy/coordinates/ephemeris.py": {
|
| 460 |
+
"size": 17679
|
| 461 |
+
},
|
| 462 |
+
"sunpy/coordinates/frameattributes.py": {
|
| 463 |
+
"size": 5690
|
| 464 |
+
},
|
| 465 |
+
"sunpy/coordinates/frames.py": {
|
| 466 |
+
"size": 47746
|
| 467 |
+
},
|
| 468 |
+
"sunpy/coordinates/metaframes.py": {
|
| 469 |
+
"size": 10713
|
| 470 |
+
},
|
| 471 |
+
"sunpy/coordinates/offset_frame.py": {
|
| 472 |
+
"size": 2365
|
| 473 |
+
},
|
| 474 |
+
"sunpy/coordinates/screens.py": {
|
| 475 |
+
"size": 14451
|
| 476 |
+
},
|
| 477 |
+
"sunpy/coordinates/spice.py": {
|
| 478 |
+
"size": 22488
|
| 479 |
+
},
|
| 480 |
+
"sunpy/coordinates/sun.py": {
|
| 481 |
+
"size": 31541
|
| 482 |
+
},
|
| 483 |
+
"sunpy/coordinates/tests/__init__.py": {
|
| 484 |
+
"size": 0
|
| 485 |
+
},
|
| 486 |
+
"sunpy/coordinates/tests/conftest.py": {
|
| 487 |
+
"size": 335
|
| 488 |
+
},
|
| 489 |
+
"sunpy/coordinates/tests/helpers.py": {
|
| 490 |
+
"size": 498
|
| 491 |
+
},
|
| 492 |
+
"sunpy/coordinates/tests/strategies.py": {
|
| 493 |
+
"size": 1391
|
| 494 |
+
},
|
| 495 |
+
"sunpy/coordinates/tests/test_ephemeris.py": {
|
| 496 |
+
"size": 7807
|
| 497 |
+
},
|
| 498 |
+
"sunpy/coordinates/tests/test_frameattributes.py": {
|
| 499 |
+
"size": 6649
|
| 500 |
+
},
|
| 501 |
+
"sunpy/coordinates/tests/test_frames.py": {
|
| 502 |
+
"size": 27190
|
| 503 |
+
},
|
| 504 |
+
"sunpy/coordinates/tests/test_metaframes.py": {
|
| 505 |
+
"size": 12672
|
| 506 |
+
},
|
| 507 |
+
"sunpy/coordinates/tests/test_offset_frame.py": {
|
| 508 |
+
"size": 2005
|
| 509 |
+
},
|
| 510 |
+
"sunpy/coordinates/tests/test_spice.py": {
|
| 511 |
+
"size": 10391
|
| 512 |
+
},
|
| 513 |
+
"sunpy/coordinates/tests/test_sun.py": {
|
| 514 |
+
"size": 25935
|
| 515 |
+
},
|
| 516 |
+
"sunpy/coordinates/tests/test_transformations.py": {
|
| 517 |
+
"size": 55280
|
| 518 |
+
},
|
| 519 |
+
"sunpy/coordinates/tests/test_utils.py": {
|
| 520 |
+
"size": 18750
|
| 521 |
+
},
|
| 522 |
+
"sunpy/coordinates/tests/test_wcs_utils.py": {
|
| 523 |
+
"size": 12972
|
| 524 |
+
},
|
| 525 |
+
"sunpy/coordinates/utils.py": {
|
| 526 |
+
"size": 22630
|
| 527 |
+
},
|
| 528 |
+
"sunpy/coordinates/wcs_utils.py": {
|
| 529 |
+
"size": 7562
|
| 530 |
+
},
|
| 531 |
+
"sunpy/data/__init__.py": {
|
| 532 |
+
"size": 937
|
| 533 |
+
},
|
| 534 |
+
"sunpy/data/_sample.py": {
|
| 535 |
+
"size": 7190
|
| 536 |
+
},
|
| 537 |
+
"sunpy/data/data_manager/__init__.py": {
|
| 538 |
+
"size": 301
|
| 539 |
+
},
|
| 540 |
+
"sunpy/data/data_manager/cache.py": {
|
| 541 |
+
"size": 5879
|
| 542 |
+
},
|
| 543 |
+
"sunpy/data/data_manager/downloader.py": {
|
| 544 |
+
"size": 1438
|
| 545 |
+
},
|
| 546 |
+
"sunpy/data/data_manager/manager.py": {
|
| 547 |
+
"size": 7297
|
| 548 |
+
},
|
| 549 |
+
"sunpy/data/data_manager/storage.py": {
|
| 550 |
+
"size": 4753
|
| 551 |
+
},
|
| 552 |
+
"sunpy/data/data_manager/tests/__init__.py": {
|
| 553 |
+
"size": 0
|
| 554 |
+
},
|
| 555 |
+
"sunpy/data/data_manager/tests/conftest.py": {
|
| 556 |
+
"size": 2743
|
| 557 |
+
},
|
| 558 |
+
"sunpy/data/data_manager/tests/mocks.py": {
|
| 559 |
+
"size": 636
|
| 560 |
+
},
|
| 561 |
+
"sunpy/data/data_manager/tests/test_cache.py": {
|
| 562 |
+
"size": 3444
|
| 563 |
+
},
|
| 564 |
+
"sunpy/data/data_manager/tests/test_downloader.py": {
|
| 565 |
+
"size": 696
|
| 566 |
+
},
|
| 567 |
+
"sunpy/data/data_manager/tests/test_manager.py": {
|
| 568 |
+
"size": 8935
|
| 569 |
+
},
|
| 570 |
+
"sunpy/data/data_manager/tests/test_storage.py": {
|
| 571 |
+
"size": 1220
|
| 572 |
+
},
|
| 573 |
+
"sunpy/data/sample.py": {
|
| 574 |
+
"size": 2144
|
| 575 |
+
},
|
| 576 |
+
"sunpy/data/test/EVE_L0CS_DIODES_1m_truncated.txt": {
|
| 577 |
+
"size": 4159
|
| 578 |
+
},
|
| 579 |
+
"sunpy/data/test/SRS/19960106SRS.txt": {
|
| 580 |
+
"size": 719
|
| 581 |
+
},
|
| 582 |
+
"sunpy/data/test/SRS/19960430SRS.txt": {
|
| 583 |
+
"size": 604
|
| 584 |
+
},
|
| 585 |
+
"sunpy/data/test/SRS/19960513SRS.txt": {
|
| 586 |
+
"size": 695
|
| 587 |
+
},
|
| 588 |
+
"sunpy/data/test/SRS/20000922SRS.txt": {
|
| 589 |
+
"size": 1223
|
| 590 |
+
},
|
| 591 |
+
"sunpy/data/test/SRS/20000927SRS.txt": {
|
| 592 |
+
"size": 1289
|
| 593 |
+
},
|
| 594 |
+
"sunpy/data/test/SRS/20001001SRS.txt": {
|
| 595 |
+
"size": 1315
|
| 596 |
+
},
|
| 597 |
+
"sunpy/data/test/SRS/20020624SRS.txt": {
|
| 598 |
+
"size": 1776
|
| 599 |
+
},
|
| 600 |
+
"sunpy/data/test/SRS/20020628SRS.txt": {
|
| 601 |
+
"size": 1704
|
| 602 |
+
},
|
| 603 |
+
"sunpy/data/test/SRS/20100621SRS.txt": {
|
| 604 |
+
"size": 662
|
| 605 |
+
},
|
| 606 |
+
"sunpy/data/test/SRS/20150101SRS.txt": {
|
| 607 |
+
"size": 862
|
| 608 |
+
},
|
| 609 |
+
"sunpy/data/test/SRS/20150306SRS.txt": {
|
| 610 |
+
"size": 668
|
| 611 |
+
},
|
| 612 |
+
"sunpy/data/test/SRS/20150906SRS.txt": {
|
| 613 |
+
"size": 697
|
| 614 |
+
},
|
| 615 |
+
"sunpy/data/test/__init__.py": {
|
| 616 |
+
"size": 5101
|
| 617 |
+
},
|
| 618 |
+
"sunpy/data/test/_generate_asdf_test.py": {
|
| 619 |
+
"size": 657
|
| 620 |
+
},
|
| 621 |
+
"sunpy/data/test/eve/eve_01.txt": {
|
| 622 |
+
"size": 4159
|
| 623 |
+
},
|
| 624 |
+
"sunpy/data/test/eve/eve_02.txt": {
|
| 625 |
+
"size": 4159
|
| 626 |
+
},
|
| 627 |
+
"sunpy/data/test/eve/eve_03.txt": {
|
| 628 |
+
"size": 4159
|
| 629 |
+
},
|
| 630 |
+
"sunpy/data/test/eve/eve_04.txt": {
|
| 631 |
+
"size": 4159
|
| 632 |
+
},
|
| 633 |
+
"sunpy/data/test/eve/eve_05.txt": {
|
| 634 |
+
"size": 4159
|
| 635 |
+
},
|
| 636 |
+
"sunpy/data/test/observed-solar-cycle-indices-truncated.json": {
|
| 637 |
+
"size": 1561
|
| 638 |
+
},
|
| 639 |
+
"sunpy/data/test/predicted-solar-cycle-truncated.json": {
|
| 640 |
+
"size": 1287
|
| 641 |
+
},
|
| 642 |
+
"sunpy/data/test/waveunit/__init__.py": {
|
| 643 |
+
"size": 333
|
| 644 |
+
},
|
| 645 |
+
"sunpy/data/tests/__init__.py": {
|
| 646 |
+
"size": 0
|
| 647 |
+
},
|
| 648 |
+
"sunpy/data/tests/test_sample.py": {
|
| 649 |
+
"size": 875
|
| 650 |
+
},
|
| 651 |
+
"sunpy/extern/__init__.py": {
|
| 652 |
+
"size": 281
|
| 653 |
+
},
|
| 654 |
+
"sunpy/extern/appdirs.py": {
|
| 655 |
+
"size": 24719
|
| 656 |
+
},
|
| 657 |
+
"sunpy/extern/appdirs_license.txt": {
|
| 658 |
+
"size": 1097
|
| 659 |
+
},
|
| 660 |
+
"sunpy/extern/distro.py": {
|
| 661 |
+
"size": 49430
|
| 662 |
+
},
|
| 663 |
+
"sunpy/extern/inflect.py": {
|
| 664 |
+
"size": 102537
|
| 665 |
+
},
|
| 666 |
+
"sunpy/extern/inflect_license.txt": {
|
| 667 |
+
"size": 1050
|
| 668 |
+
},
|
| 669 |
+
"sunpy/extern/parse.py": {
|
| 670 |
+
"size": 35530
|
| 671 |
+
},
|
| 672 |
+
"sunpy/extern/parse_license.txt": {
|
| 673 |
+
"size": 1085
|
| 674 |
+
},
|
| 675 |
+
"sunpy/image/__init__.py": {
|
| 676 |
+
"size": 126
|
| 677 |
+
},
|
| 678 |
+
"sunpy/image/resample.py": {
|
| 679 |
+
"size": 8079
|
| 680 |
+
},
|
| 681 |
+
"sunpy/image/tests/__init__.py": {
|
| 682 |
+
"size": 0
|
| 683 |
+
},
|
| 684 |
+
"sunpy/image/tests/test_resample.py": {
|
| 685 |
+
"size": 3718
|
| 686 |
+
},
|
| 687 |
+
"sunpy/image/tests/test_transform.py": {
|
| 688 |
+
"size": 14494
|
| 689 |
+
},
|
| 690 |
+
"sunpy/image/transform.py": {
|
| 691 |
+
"size": 19079
|
| 692 |
+
},
|
| 693 |
+
"sunpy/io/__init__.py": {
|
| 694 |
+
"size": 231
|
| 695 |
+
},
|
| 696 |
+
"sunpy/io/_cdf.py": {
|
| 697 |
+
"size": 9708
|
| 698 |
+
},
|
| 699 |
+
"sunpy/io/_file_tools.py": {
|
| 700 |
+
"size": 8184
|
| 701 |
+
},
|
| 702 |
+
"sunpy/io/_fits.py": {
|
| 703 |
+
"size": 12277
|
| 704 |
+
},
|
| 705 |
+
"sunpy/io/_header.py": {
|
| 706 |
+
"size": 478
|
| 707 |
+
},
|
| 708 |
+
"sunpy/io/_jp2.py": {
|
| 709 |
+
"size": 5088
|
| 710 |
+
},
|
| 711 |
+
"sunpy/io/ana.py": {
|
| 712 |
+
"size": 3678
|
| 713 |
+
},
|
| 714 |
+
"sunpy/io/setup_package.py": {
|
| 715 |
+
"size": 873
|
| 716 |
+
},
|
| 717 |
+
"sunpy/io/special/__init__.py": {
|
| 718 |
+
"size": 39
|
| 719 |
+
},
|
| 720 |
+
"sunpy/io/special/asdf/__init__.py": {
|
| 721 |
+
"size": 0
|
| 722 |
+
},
|
| 723 |
+
"sunpy/io/special/asdf/converters/__init__.py": {
|
| 724 |
+
"size": 0
|
| 725 |
+
},
|
| 726 |
+
"sunpy/io/special/asdf/converters/frames.py": {
|
| 727 |
+
"size": 2759
|
| 728 |
+
},
|
| 729 |
+
"sunpy/io/special/asdf/converters/generic_map.py": {
|
| 730 |
+
"size": 1805
|
| 731 |
+
},
|
| 732 |
+
"sunpy/io/special/asdf/entry_points.py": {
|
| 733 |
+
"size": 2057
|
| 734 |
+
},
|
| 735 |
+
"sunpy/io/special/asdf/resources/__init__.py": {
|
| 736 |
+
"size": 0
|
| 737 |
+
},
|
| 738 |
+
"sunpy/io/special/asdf/resources/manifests/sunpy-1.0.0.yaml": {
|
| 739 |
+
"size": 2223
|
| 740 |
+
},
|
| 741 |
+
"sunpy/io/special/asdf/resources/manifests/sunpy-1.1.0.yaml": {
|
| 742 |
+
"size": 2683
|
| 743 |
+
},
|
| 744 |
+
"sunpy/io/special/asdf/resources/manifests/sunpy-1.1.1.yaml": {
|
| 745 |
+
"size": 2808
|
| 746 |
+
},
|
| 747 |
+
"sunpy/io/special/asdf/resources/manifests/sunpy-1.1.2.yaml": {
|
| 748 |
+
"size": 2968
|
| 749 |
+
},
|
| 750 |
+
"sunpy/io/special/asdf/resources/manifests/sunpy-1.2.0.yaml": {
|
| 751 |
+
"size": 2106
|
| 752 |
+
},
|
| 753 |
+
"sunpy/io/special/asdf/resources/manifests/sunpy-1.2.1.yaml": {
|
| 754 |
+
"size": 2266
|
| 755 |
+
},
|
| 756 |
+
"sunpy/io/special/asdf/resources/schemas/generic_map-1.0.0.yaml": {
|
| 757 |
+
"size": 685
|
| 758 |
+
},
|
| 759 |
+
"sunpy/io/special/asdf/resources/schemas/generic_map-1.1.0.yaml": {
|
| 760 |
+
"size": 626
|
| 761 |
+
},
|
| 762 |
+
"sunpy/io/special/asdf/resources/schemas/generic_map-1.1.1.yaml": {
|
| 763 |
+
"size": 691
|
| 764 |
+
},
|
| 765 |
+
"sunpy/io/special/asdf/resources/schemas/generic_map-1.2.0.yaml": {
|
| 766 |
+
"size": 687
|
| 767 |
+
},
|
| 768 |
+
"sunpy/io/special/asdf/resources/schemas/geocentricearthequatorial-1.0.0.yaml": {
|
| 769 |
+
"size": 1279
|
| 770 |
+
},
|
| 771 |
+
"sunpy/io/special/asdf/resources/schemas/geocentricearthequatorial-1.1.0.yaml": {
|
| 772 |
+
"size": 1275
|
| 773 |
+
},
|
| 774 |
+
"sunpy/io/special/asdf/resources/schemas/geocentricsolarecliptic-1.0.0.yaml": {
|
| 775 |
+
"size": 973
|
| 776 |
+
},
|
| 777 |
+
"sunpy/io/special/asdf/resources/schemas/geocentricsolarecliptic-1.1.0.yaml": {
|
| 778 |
+
"size": 971
|
| 779 |
+
},
|
| 780 |
+
"sunpy/io/special/asdf/resources/schemas/geocentricsolarmagnetospheric-1.0.0.yaml": {
|
| 781 |
+
"size": 1176
|
| 782 |
+
},
|
| 783 |
+
"sunpy/io/special/asdf/resources/schemas/geocentricsolarmagnetospheric-1.1.0.yaml": {
|
| 784 |
+
"size": 1174
|
| 785 |
+
},
|
| 786 |
+
"sunpy/io/special/asdf/resources/schemas/geomagnetic-1.0.0.yaml": {
|
| 787 |
+
"size": 1062
|
| 788 |
+
},
|
| 789 |
+
"sunpy/io/special/asdf/resources/schemas/geomagnetic-1.1.0.yaml": {
|
| 790 |
+
"size": 1060
|
| 791 |
+
},
|
| 792 |
+
"sunpy/io/special/asdf/resources/schemas/heliocentric-1.0.0.yaml": {
|
| 793 |
+
"size": 2193
|
| 794 |
+
},
|
| 795 |
+
"sunpy/io/special/asdf/resources/schemas/heliocentric-1.1.0.yaml": {
|
| 796 |
+
"size": 2097
|
| 797 |
+
},
|
| 798 |
+
"sunpy/io/special/asdf/resources/schemas/heliocentricearthecliptic-1.0.0.yaml": {
|
| 799 |
+
"size": 985
|
| 800 |
+
},
|
| 801 |
+
"sunpy/io/special/asdf/resources/schemas/heliocentricearthecliptic-1.1.0.yaml": {
|
| 802 |
+
"size": 983
|
| 803 |
+
},
|
| 804 |
+
"sunpy/io/special/asdf/resources/schemas/heliocentricinertial-1.0.0.yaml": {
|
| 805 |
+
"size": 954
|
| 806 |
+
},
|
| 807 |
+
"sunpy/io/special/asdf/resources/schemas/heliocentricinertial-1.1.0.yaml": {
|
| 808 |
+
"size": 952
|
| 809 |
+
},
|
| 810 |
+
"sunpy/io/special/asdf/resources/schemas/heliographic_carrington-1.0.0.yaml": {
|
| 811 |
+
"size": 964
|
| 812 |
+
},
|
| 813 |
+
"sunpy/io/special/asdf/resources/schemas/heliographic_carrington-1.1.0.yaml": {
|
| 814 |
+
"size": 2043
|
| 815 |
+
},
|
| 816 |
+
"sunpy/io/special/asdf/resources/schemas/heliographic_carrington-1.2.0.yaml": {
|
| 817 |
+
"size": 2386
|
| 818 |
+
},
|
| 819 |
+
"sunpy/io/special/asdf/resources/schemas/heliographic_carrington-1.3.0.yaml": {
|
| 820 |
+
"size": 2380
|
| 821 |
+
},
|
| 822 |
+
"sunpy/io/special/asdf/resources/schemas/heliographic_stonyhurst-1.0.0.yaml": {
|
| 823 |
+
"size": 964
|
| 824 |
+
},
|
| 825 |
+
"sunpy/io/special/asdf/resources/schemas/heliographic_stonyhurst-1.1.0.yaml": {
|
| 826 |
+
"size": 1213
|
| 827 |
+
},
|
| 828 |
+
"sunpy/io/special/asdf/resources/schemas/heliographic_stonyhurst-1.2.0.yaml": {
|
| 829 |
+
"size": 1209
|
| 830 |
+
},
|
| 831 |
+
"sunpy/io/special/asdf/resources/schemas/helioprojective-1.0.0.yaml": {
|
| 832 |
+
"size": 2476
|
| 833 |
+
},
|
| 834 |
+
"sunpy/io/special/asdf/resources/schemas/helioprojective-1.1.0.yaml": {
|
| 835 |
+
"size": 2378
|
| 836 |
+
},
|
| 837 |
+
"sunpy/io/special/asdf/resources/schemas/helioprojectiveradial-1.0.0.yaml": {
|
| 838 |
+
"size": 2416
|
| 839 |
+
},
|
| 840 |
+
"sunpy/io/special/asdf/resources/schemas/helioprojectiveradial-1.1.0.yaml": {
|
| 841 |
+
"size": 2416
|
| 842 |
+
},
|
| 843 |
+
"sunpy/io/special/asdf/resources/schemas/solarmagnetic-1.0.0.yaml": {
|
| 844 |
+
"size": 1076
|
| 845 |
+
},
|
| 846 |
+
"sunpy/io/special/asdf/resources/schemas/solarmagnetic-1.1.0.yaml": {
|
| 847 |
+
"size": 1074
|
| 848 |
+
},
|
| 849 |
+
"sunpy/io/special/asdf/tests/__init__.py": {
|
| 850 |
+
"size": 43
|
| 851 |
+
},
|
| 852 |
+
"sunpy/io/special/asdf/tests/test_coordinate_frames.py": {
|
| 853 |
+
"size": 3391
|
| 854 |
+
},
|
| 855 |
+
"sunpy/io/special/asdf/tests/test_genericmap.py": {
|
| 856 |
+
"size": 2228
|
| 857 |
+
},
|
| 858 |
+
"sunpy/io/special/asdf/tests/test_time.py": {
|
| 859 |
+
"size": 507
|
| 860 |
+
},
|
| 861 |
+
"sunpy/io/special/genx.py": {
|
| 862 |
+
"size": 10353
|
| 863 |
+
},
|
| 864 |
+
"sunpy/io/special/srs.py": {
|
| 865 |
+
"size": 11387
|
| 866 |
+
},
|
| 867 |
+
"sunpy/io/tests/__init__.py": {
|
| 868 |
+
"size": 0
|
| 869 |
+
},
|
| 870 |
+
"sunpy/io/tests/test_ana.py": {
|
| 871 |
+
"size": 2752
|
| 872 |
+
},
|
| 873 |
+
"sunpy/io/tests/test_cdf.py": {
|
| 874 |
+
"size": 1364
|
| 875 |
+
},
|
| 876 |
+
"sunpy/io/tests/test_filetools.py": {
|
| 877 |
+
"size": 7262
|
| 878 |
+
},
|
| 879 |
+
"sunpy/io/tests/test_fits.py": {
|
| 880 |
+
"size": 9212
|
| 881 |
+
},
|
| 882 |
+
"sunpy/io/tests/test_genx.py": {
|
| 883 |
+
"size": 5150
|
| 884 |
+
},
|
| 885 |
+
"sunpy/io/tests/test_jp2.py": {
|
| 886 |
+
"size": 2024
|
| 887 |
+
},
|
| 888 |
+
"sunpy/io/tests/test_srs.py": {
|
| 889 |
+
"size": 6469
|
| 890 |
+
},
|
| 891 |
+
"sunpy/map/__init__.py": {
|
| 892 |
+
"size": 405
|
| 893 |
+
},
|
| 894 |
+
"sunpy/map/compositemap.py": {
|
| 895 |
+
"size": 18770
|
| 896 |
+
},
|
| 897 |
+
"sunpy/map/header_helper.py": {
|
| 898 |
+
"size": 18599
|
| 899 |
+
},
|
| 900 |
+
"sunpy/map/map_factory.py": {
|
| 901 |
+
"size": 14229
|
| 902 |
+
},
|
| 903 |
+
"sunpy/map/mapbase.py": {
|
| 904 |
+
"size": 134024
|
| 905 |
+
},
|
| 906 |
+
"sunpy/map/mapsequence.py": {
|
| 907 |
+
"size": 19055
|
| 908 |
+
},
|
| 909 |
+
"sunpy/map/maputils.py": {
|
| 910 |
+
"size": 19940
|
| 911 |
+
},
|
| 912 |
+
"sunpy/map/sources/__init__.py": {
|
| 913 |
+
"size": 680
|
| 914 |
+
},
|
| 915 |
+
"sunpy/map/sources/adapt.py": {
|
| 916 |
+
"size": 2309
|
| 917 |
+
},
|
| 918 |
+
"sunpy/map/sources/asos.py": {
|
| 919 |
+
"size": 5565
|
| 920 |
+
},
|
| 921 |
+
"sunpy/map/sources/gong.py": {
|
| 922 |
+
"size": 9103
|
| 923 |
+
},
|
| 924 |
+
"sunpy/map/sources/hinode.py": {
|
| 925 |
+
"size": 8339
|
| 926 |
+
},
|
| 927 |
+
"sunpy/map/sources/iris.py": {
|
| 928 |
+
"size": 2625
|
| 929 |
+
},
|
| 930 |
+
"sunpy/map/sources/mlso.py": {
|
| 931 |
+
"size": 3235
|
| 932 |
+
},
|
| 933 |
+
"sunpy/map/sources/proba2.py": {
|
| 934 |
+
"size": 1570
|
| 935 |
+
},
|
| 936 |
+
"sunpy/map/sources/psp.py": {
|
| 937 |
+
"size": 2271
|
| 938 |
+
},
|
| 939 |
+
"sunpy/map/sources/punch.py": {
|
| 940 |
+
"size": 1463
|
| 941 |
+
},
|
| 942 |
+
"sunpy/map/sources/rhessi.py": {
|
| 943 |
+
"size": 3662
|
| 944 |
+
},
|
| 945 |
+
"sunpy/map/sources/sdo.py": {
|
| 946 |
+
"size": 10808
|
| 947 |
+
},
|
| 948 |
+
"sunpy/map/sources/soho.py": {
|
| 949 |
+
"size": 15866
|
| 950 |
+
},
|
| 951 |
+
"sunpy/map/sources/solo.py": {
|
| 952 |
+
"size": 2838
|
| 953 |
+
},
|
| 954 |
+
"sunpy/map/sources/source_type.py": {
|
| 955 |
+
"size": 1527
|
| 956 |
+
},
|
| 957 |
+
"sunpy/map/sources/stereo.py": {
|
| 958 |
+
"size": 5032
|
| 959 |
+
},
|
| 960 |
+
"sunpy/map/sources/suit.py": {
|
| 961 |
+
"size": 2879
|
| 962 |
+
},
|
| 963 |
+
"sunpy/map/sources/suvi.py": {
|
| 964 |
+
"size": 4571
|
| 965 |
+
},
|
| 966 |
+
"sunpy/map/sources/tests/__init__.py": {
|
| 967 |
+
"size": 0
|
| 968 |
+
},
|
| 969 |
+
"sunpy/map/sources/tests/helpers.py": {
|
| 970 |
+
"size": 283
|
| 971 |
+
},
|
| 972 |
+
"sunpy/map/sources/tests/test_adapt_source.py": {
|
| 973 |
+
"size": 1877
|
| 974 |
+
},
|
| 975 |
+
"sunpy/map/sources/tests/test_aia_source.py": {
|
| 976 |
+
"size": 3450
|
| 977 |
+
},
|
| 978 |
+
"sunpy/map/sources/tests/test_asos_hxi_source.py": {
|
| 979 |
+
"size": 3641
|
| 980 |
+
},
|
| 981 |
+
"sunpy/map/sources/tests/test_cor_source.py": {
|
| 982 |
+
"size": 1642
|
| 983 |
+
},
|
| 984 |
+
"sunpy/map/sources/tests/test_eit_l1_source.py": {
|
| 985 |
+
"size": 2999
|
| 986 |
+
},
|
| 987 |
+
"sunpy/map/sources/tests/test_eit_source.py": {
|
| 988 |
+
"size": 2220
|
| 989 |
+
},
|
| 990 |
+
"sunpy/map/sources/tests/test_eui_source.py": {
|
| 991 |
+
"size": 1847
|
| 992 |
+
},
|
| 993 |
+
"sunpy/map/sources/tests/test_euvi_source.py": {
|
| 994 |
+
"size": 2206
|
| 995 |
+
},
|
| 996 |
+
"sunpy/map/sources/tests/test_gong_halpha_source.py": {
|
| 997 |
+
"size": 2306
|
| 998 |
+
},
|
| 999 |
+
"sunpy/map/sources/tests/test_gong_magnetogram_source.py": {
|
| 1000 |
+
"size": 2684
|
| 1001 |
+
},
|
| 1002 |
+
"sunpy/map/sources/tests/test_gong_synoptic_source.py": {
|
| 1003 |
+
"size": 1797
|
| 1004 |
+
},
|
| 1005 |
+
"sunpy/map/sources/tests/test_hi_source.py": {
|
| 1006 |
+
"size": 1610
|
| 1007 |
+
},
|
| 1008 |
+
"sunpy/map/sources/tests/test_hmi_source.py": {
|
| 1009 |
+
"size": 5024
|
| 1010 |
+
},
|
| 1011 |
+
"sunpy/map/sources/tests/test_hmi_synoptic_source.py": {
|
| 1012 |
+
"size": 1962
|
| 1013 |
+
},
|
| 1014 |
+
"sunpy/map/sources/tests/test_iris_source.py": {
|
| 1015 |
+
"size": 1697
|
| 1016 |
+
},
|
| 1017 |
+
"sunpy/map/sources/tests/test_kcor_source.py": {
|
| 1018 |
+
"size": 2480
|
| 1019 |
+
},
|
| 1020 |
+
"sunpy/map/sources/tests/test_lasco_source.py": {
|
| 1021 |
+
"size": 3401
|
| 1022 |
+
},
|
| 1023 |
+
"sunpy/map/sources/tests/test_mdi_source.py": {
|
| 1024 |
+
"size": 2864
|
| 1025 |
+
},
|
| 1026 |
+
"sunpy/map/sources/tests/test_punch_source.py": {
|
| 1027 |
+
"size": 1361
|
| 1028 |
+
},
|
| 1029 |
+
"sunpy/map/sources/tests/test_rhessi_source.py": {
|
| 1030 |
+
"size": 3147
|
| 1031 |
+
},
|
| 1032 |
+
"sunpy/map/sources/tests/test_sot_source.py": {
|
| 1033 |
+
"size": 2736
|
| 1034 |
+
},
|
| 1035 |
+
"sunpy/map/sources/tests/test_source_type.py": {
|
| 1036 |
+
"size": 1085
|
| 1037 |
+
},
|
| 1038 |
+
"sunpy/map/sources/tests/test_suit_source.py": {
|
| 1039 |
+
"size": 1543
|
| 1040 |
+
},
|
| 1041 |
+
"sunpy/map/sources/tests/test_suvi_source.py": {
|
| 1042 |
+
"size": 1883
|
| 1043 |
+
},
|
| 1044 |
+
"sunpy/map/sources/tests/test_swap_source.py": {
|
| 1045 |
+
"size": 1474
|
| 1046 |
+
},
|
| 1047 |
+
"sunpy/map/sources/tests/test_sxt_source.py": {
|
| 1048 |
+
"size": 2232
|
| 1049 |
+
},
|
| 1050 |
+
"sunpy/map/sources/tests/test_trace_source.py": {
|
| 1051 |
+
"size": 1934
|
| 1052 |
+
},
|
| 1053 |
+
"sunpy/map/sources/tests/test_wispr_source.py": {
|
| 1054 |
+
"size": 12208
|
| 1055 |
+
},
|
| 1056 |
+
"sunpy/map/sources/tests/test_xrt_source.py": {
|
| 1057 |
+
"size": 2698
|
| 1058 |
+
},
|
| 1059 |
+
"sunpy/map/sources/trace.py": {
|
| 1060 |
+
"size": 3492
|
| 1061 |
+
},
|
| 1062 |
+
"sunpy/map/sources/yohkoh.py": {
|
| 1063 |
+
"size": 3535
|
| 1064 |
+
},
|
| 1065 |
+
"sunpy/map/tests/__init__.py": {
|
| 1066 |
+
"size": 0
|
| 1067 |
+
},
|
| 1068 |
+
"sunpy/map/tests/conftest.py": {
|
| 1069 |
+
"size": 5677
|
| 1070 |
+
},
|
| 1071 |
+
"sunpy/map/tests/strategies.py": {
|
| 1072 |
+
"size": 728
|
| 1073 |
+
},
|
| 1074 |
+
"sunpy/map/tests/test_compositemap.py": {
|
| 1075 |
+
"size": 5288
|
| 1076 |
+
},
|
| 1077 |
+
"sunpy/map/tests/test_header.py": {
|
| 1078 |
+
"size": 1100
|
| 1079 |
+
},
|
| 1080 |
+
"sunpy/map/tests/test_header_helper.py": {
|
| 1081 |
+
"size": 13395
|
| 1082 |
+
},
|
| 1083 |
+
"sunpy/map/tests/test_map_factory.py": {
|
| 1084 |
+
"size": 15470
|
| 1085 |
+
},
|
| 1086 |
+
"sunpy/map/tests/test_mapbase.py": {
|
| 1087 |
+
"size": 75254
|
| 1088 |
+
},
|
| 1089 |
+
"sunpy/map/tests/test_mapbase_dask.py": {
|
| 1090 |
+
"size": 2633
|
| 1091 |
+
},
|
| 1092 |
+
"sunpy/map/tests/test_mapsequence.py": {
|
| 1093 |
+
"size": 8776
|
| 1094 |
+
},
|
| 1095 |
+
"sunpy/map/tests/test_maputils.py": {
|
| 1096 |
+
"size": 14495
|
| 1097 |
+
},
|
| 1098 |
+
"sunpy/map/tests/test_plotting.py": {
|
| 1099 |
+
"size": 15295
|
| 1100 |
+
},
|
| 1101 |
+
"sunpy/map/tests/test_reproject_to.py": {
|
| 1102 |
+
"size": 11475
|
| 1103 |
+
},
|
| 1104 |
+
"sunpy/net/__init__.py": {
|
| 1105 |
+
"size": 605
|
| 1106 |
+
},
|
| 1107 |
+
"sunpy/net/_attrs.py": {
|
| 1108 |
+
"size": 9110
|
| 1109 |
+
},
|
| 1110 |
+
"sunpy/net/attr.py": {
|
| 1111 |
+
"size": 25395
|
| 1112 |
+
},
|
| 1113 |
+
"sunpy/net/attrs.py": {
|
| 1114 |
+
"size": 1497
|
| 1115 |
+
},
|
| 1116 |
+
"sunpy/net/base_client.py": {
|
| 1117 |
+
"size": 16588
|
| 1118 |
+
},
|
| 1119 |
+
"sunpy/net/cdaweb/__init__.py": {
|
| 1120 |
+
"size": 114
|
| 1121 |
+
},
|
| 1122 |
+
"sunpy/net/cdaweb/attrs.py": {
|
| 1123 |
+
"size": 122
|
| 1124 |
+
},
|
| 1125 |
+
"sunpy/net/cdaweb/cdaweb.py": {
|
| 1126 |
+
"size": 6105
|
| 1127 |
+
},
|
| 1128 |
+
"sunpy/net/cdaweb/data/attrs.json": {
|
| 1129 |
+
"size": 379618
|
| 1130 |
+
},
|
| 1131 |
+
"sunpy/net/cdaweb/helpers.py": {
|
| 1132 |
+
"size": 5006
|
| 1133 |
+
},
|
| 1134 |
+
"sunpy/net/cdaweb/test/__init__.py": {
|
| 1135 |
+
"size": 0
|
| 1136 |
+
},
|
| 1137 |
+
"sunpy/net/cdaweb/test/test_cdaweb.py": {
|
| 1138 |
+
"size": 1053
|
| 1139 |
+
},
|
| 1140 |
+
"sunpy/net/cdaweb/walker.py": {
|
| 1141 |
+
"size": 857
|
| 1142 |
+
},
|
| 1143 |
+
"sunpy/net/dataretriever/__init__.py": {
|
| 1144 |
+
"size": 820
|
| 1145 |
+
},
|
| 1146 |
+
"sunpy/net/dataretriever/attrs/__init__.py": {
|
| 1147 |
+
"size": 55
|
| 1148 |
+
},
|
| 1149 |
+
"sunpy/net/dataretriever/attrs/adapt.py": {
|
| 1150 |
+
"size": 1839
|
| 1151 |
+
},
|
| 1152 |
+
"sunpy/net/dataretriever/attrs/goes.py": {
|
| 1153 |
+
"size": 252
|
| 1154 |
+
},
|
| 1155 |
+
"sunpy/net/dataretriever/client.py": {
|
| 1156 |
+
"size": 11435
|
| 1157 |
+
},
|
| 1158 |
+
"sunpy/net/dataretriever/sources/__init__.py": {
|
| 1159 |
+
"size": 0
|
| 1160 |
+
},
|
| 1161 |
+
"sunpy/net/dataretriever/sources/adapt.py": {
|
| 1162 |
+
"size": 8069
|
| 1163 |
+
},
|
| 1164 |
+
"sunpy/net/dataretriever/sources/aia_synopsis.py": {
|
| 1165 |
+
"size": 5474
|
| 1166 |
+
},
|
| 1167 |
+
"sunpy/net/dataretriever/sources/eve.py": {
|
| 1168 |
+
"size": 2428
|
| 1169 |
+
},
|
| 1170 |
+
"sunpy/net/dataretriever/sources/fermi_gbm.py": {
|
| 1171 |
+
"size": 3283
|
| 1172 |
+
},
|
| 1173 |
+
"sunpy/net/dataretriever/sources/goes.py": {
|
| 1174 |
+
"size": 17791
|
| 1175 |
+
},
|
| 1176 |
+
"sunpy/net/dataretriever/sources/gong.py": {
|
| 1177 |
+
"size": 2087
|
| 1178 |
+
},
|
| 1179 |
+
"sunpy/net/dataretriever/sources/lyra.py": {
|
| 1180 |
+
"size": 2454
|
| 1181 |
+
},
|
| 1182 |
+
"sunpy/net/dataretriever/sources/noaa.py": {
|
| 1183 |
+
"size": 7259
|
| 1184 |
+
},
|
| 1185 |
+
"sunpy/net/dataretriever/sources/norh.py": {
|
| 1186 |
+
"size": 3949
|
| 1187 |
+
},
|
| 1188 |
+
"sunpy/net/dataretriever/sources/rhessi.py": {
|
| 1189 |
+
"size": 9098
|
| 1190 |
+
},
|
| 1191 |
+
"sunpy/net/dataretriever/sources/tests/__init__.py": {
|
| 1192 |
+
"size": 0
|
| 1193 |
+
},
|
| 1194 |
+
"sunpy/net/dataretriever/sources/tests/test_adapt.py": {
|
| 1195 |
+
"size": 4670
|
| 1196 |
+
},
|
| 1197 |
+
"sunpy/net/dataretriever/sources/tests/test_aia_synopsis.py": {
|
| 1198 |
+
"size": 5261
|
| 1199 |
+
},
|
| 1200 |
+
"sunpy/net/dataretriever/sources/tests/test_eve.py": {
|
| 1201 |
+
"size": 5416
|
| 1202 |
+
},
|
| 1203 |
+
"sunpy/net/dataretriever/sources/tests/test_fermi_gbm.py": {
|
| 1204 |
+
"size": 4440
|
| 1205 |
+
},
|
| 1206 |
+
"sunpy/net/dataretriever/sources/tests/test_goes_suvi.py": {
|
| 1207 |
+
"size": 4061
|
| 1208 |
+
},
|
| 1209 |
+
"sunpy/net/dataretriever/sources/tests/test_goes_ud.py": {
|
| 1210 |
+
"size": 10087
|
| 1211 |
+
},
|
| 1212 |
+
"sunpy/net/dataretriever/sources/tests/test_gong_synoptic.py": {
|
| 1213 |
+
"size": 3214
|
| 1214 |
+
},
|
| 1215 |
+
"sunpy/net/dataretriever/sources/tests/test_lyra_ud.py": {
|
| 1216 |
+
"size": 4437
|
| 1217 |
+
},
|
| 1218 |
+
"sunpy/net/dataretriever/sources/tests/test_noaa.py": {
|
| 1219 |
+
"size": 9325
|
| 1220 |
+
},
|
| 1221 |
+
"sunpy/net/dataretriever/sources/tests/test_norh.py": {
|
| 1222 |
+
"size": 4502
|
| 1223 |
+
},
|
| 1224 |
+
"sunpy/net/dataretriever/sources/tests/test_rhessi.py": {
|
| 1225 |
+
"size": 9755
|
| 1226 |
+
},
|
| 1227 |
+
"sunpy/net/dataretriever/tests/__init__.py": {
|
| 1228 |
+
"size": 0
|
| 1229 |
+
},
|
| 1230 |
+
"sunpy/net/dataretriever/tests/test_client.py": {
|
| 1231 |
+
"size": 958
|
| 1232 |
+
},
|
| 1233 |
+
"sunpy/net/fido_factory.py": {
|
| 1234 |
+
"size": 22421
|
| 1235 |
+
},
|
| 1236 |
+
"sunpy/net/hek/__init__.py": {
|
| 1237 |
+
"size": 32
|
| 1238 |
+
},
|
| 1239 |
+
"sunpy/net/hek/attrs.py": {
|
| 1240 |
+
"size": 17902
|
| 1241 |
+
},
|
| 1242 |
+
"sunpy/net/hek/data/coord_properties.json": {
|
| 1243 |
+
"size": 17301
|
| 1244 |
+
},
|
| 1245 |
+
"sunpy/net/hek/data/unit_properties.json": {
|
| 1246 |
+
"size": 97583
|
| 1247 |
+
},
|
| 1248 |
+
"sunpy/net/hek/hek.py": {
|
| 1249 |
+
"size": 8484
|
| 1250 |
+
},
|
| 1251 |
+
"sunpy/net/hek/tests/__init__.py": {
|
| 1252 |
+
"size": 0
|
| 1253 |
+
},
|
| 1254 |
+
"sunpy/net/hek/tests/test_hek.py": {
|
| 1255 |
+
"size": 12197
|
| 1256 |
+
},
|
| 1257 |
+
"sunpy/net/hek/tests/test_utils.py": {
|
| 1258 |
+
"size": 8283
|
| 1259 |
+
},
|
| 1260 |
+
"sunpy/net/hek/utils.py": {
|
| 1261 |
+
"size": 16116
|
| 1262 |
+
},
|
| 1263 |
+
"sunpy/net/hek2vso/__init__.py": {
|
| 1264 |
+
"size": 293
|
| 1265 |
+
},
|
| 1266 |
+
"sunpy/net/hek2vso/hek2vso.py": {
|
| 1267 |
+
"size": 7152
|
| 1268 |
+
},
|
| 1269 |
+
"sunpy/net/hek2vso/tests/__init__.py": {
|
| 1270 |
+
"size": 0
|
| 1271 |
+
},
|
| 1272 |
+
"sunpy/net/hek2vso/tests/test_hek2vso.py": {
|
| 1273 |
+
"size": 4011
|
| 1274 |
+
},
|
| 1275 |
+
"sunpy/net/helio/__init__.py": {
|
| 1276 |
+
"size": 187
|
| 1277 |
+
},
|
| 1278 |
+
"sunpy/net/helio/attrs.py": {
|
| 1279 |
+
"size": 516
|
| 1280 |
+
},
|
| 1281 |
+
"sunpy/net/helio/chaincode.py": {
|
| 1282 |
+
"size": 3828
|
| 1283 |
+
},
|
| 1284 |
+
"sunpy/net/helio/hec.py": {
|
| 1285 |
+
"size": 9417
|
| 1286 |
+
},
|
| 1287 |
+
"sunpy/net/helio/parser.py": {
|
| 1288 |
+
"size": 7635
|
| 1289 |
+
},
|
| 1290 |
+
"sunpy/net/helio/tests/__init__.py": {
|
| 1291 |
+
"size": 0
|
| 1292 |
+
},
|
| 1293 |
+
"sunpy/net/helio/tests/test_chaincode.py": {
|
| 1294 |
+
"size": 1576
|
| 1295 |
+
},
|
| 1296 |
+
"sunpy/net/helio/tests/test_helio.py": {
|
| 1297 |
+
"size": 11952
|
| 1298 |
+
},
|
| 1299 |
+
"sunpy/net/jsoc/__init__.py": {
|
| 1300 |
+
"size": 69
|
| 1301 |
+
},
|
| 1302 |
+
"sunpy/net/jsoc/attrs.py": {
|
| 1303 |
+
"size": 8506
|
| 1304 |
+
},
|
| 1305 |
+
"sunpy/net/jsoc/data/__init__.py": {
|
| 1306 |
+
"size": 0
|
| 1307 |
+
},
|
| 1308 |
+
"sunpy/net/jsoc/data/attrs.json": {
|
| 1309 |
+
"size": 45897
|
| 1310 |
+
},
|
| 1311 |
+
"sunpy/net/jsoc/jsoc.py": {
|
| 1312 |
+
"size": 39569
|
| 1313 |
+
},
|
| 1314 |
+
"sunpy/net/jsoc/tests/__init__.py": {
|
| 1315 |
+
"size": 0
|
| 1316 |
+
},
|
| 1317 |
+
"sunpy/net/jsoc/tests/test_attr.py": {
|
| 1318 |
+
"size": 3954
|
| 1319 |
+
},
|
| 1320 |
+
"sunpy/net/jsoc/tests/test_jsoc.py": {
|
| 1321 |
+
"size": 15500
|
| 1322 |
+
},
|
| 1323 |
+
"sunpy/net/scraper.py": {
|
| 1324 |
+
"size": 20045
|
| 1325 |
+
},
|
| 1326 |
+
"sunpy/net/scraper_utils.py": {
|
| 1327 |
+
"size": 4187
|
| 1328 |
+
},
|
| 1329 |
+
"sunpy/net/solarnet/__init__.py": {
|
| 1330 |
+
"size": 81
|
| 1331 |
+
},
|
| 1332 |
+
"sunpy/net/solarnet/attrs.py": {
|
| 1333 |
+
"size": 1882
|
| 1334 |
+
},
|
| 1335 |
+
"sunpy/net/solarnet/data/datasets.json": {
|
| 1336 |
+
"size": 3771
|
| 1337 |
+
},
|
| 1338 |
+
"sunpy/net/solarnet/data/tags.json": {
|
| 1339 |
+
"size": 338
|
| 1340 |
+
},
|
| 1341 |
+
"sunpy/net/solarnet/solarnet.py": {
|
| 1342 |
+
"size": 7754
|
| 1343 |
+
},
|
| 1344 |
+
"sunpy/net/solarnet/tests/__init__.py": {
|
| 1345 |
+
"size": 0
|
| 1346 |
+
},
|
| 1347 |
+
"sunpy/net/solarnet/tests/test_solarnet.py": {
|
| 1348 |
+
"size": 2572
|
| 1349 |
+
},
|
| 1350 |
+
"sunpy/net/tests/__init__.py": {
|
| 1351 |
+
"size": 0
|
| 1352 |
+
},
|
| 1353 |
+
"sunpy/net/tests/helpers.py": {
|
| 1354 |
+
"size": 1407
|
| 1355 |
+
},
|
| 1356 |
+
"sunpy/net/tests/strategies.py": {
|
| 1357 |
+
"size": 3911
|
| 1358 |
+
},
|
| 1359 |
+
"sunpy/net/tests/test_attr.py": {
|
| 1360 |
+
"size": 11258
|
| 1361 |
+
},
|
| 1362 |
+
"sunpy/net/tests/test_attr_walker.py": {
|
| 1363 |
+
"size": 1870
|
| 1364 |
+
},
|
| 1365 |
+
"sunpy/net/tests/test_attrs.py": {
|
| 1366 |
+
"size": 1093
|
| 1367 |
+
},
|
| 1368 |
+
"sunpy/net/tests/test_baseclient.py": {
|
| 1369 |
+
"size": 1739
|
| 1370 |
+
},
|
| 1371 |
+
"sunpy/net/tests/test_fido.py": {
|
| 1372 |
+
"size": 16775
|
| 1373 |
+
},
|
| 1374 |
+
"sunpy/net/tests/test_scraper.py": {
|
| 1375 |
+
"size": 15356
|
| 1376 |
+
},
|
| 1377 |
+
"sunpy/net/tests/test_scraper_utils.py": {
|
| 1378 |
+
"size": 2051
|
| 1379 |
+
},
|
| 1380 |
+
"sunpy/net/vso/__init__.py": {
|
| 1381 |
+
"size": 199
|
| 1382 |
+
},
|
| 1383 |
+
"sunpy/net/vso/attrs.py": {
|
| 1384 |
+
"size": 6191
|
| 1385 |
+
},
|
| 1386 |
+
"sunpy/net/vso/data/__init__.py": {
|
| 1387 |
+
"size": 0
|
| 1388 |
+
},
|
| 1389 |
+
"sunpy/net/vso/data/attrs.json": {
|
| 1390 |
+
"size": 23026
|
| 1391 |
+
},
|
| 1392 |
+
"sunpy/net/vso/exceptions.py": {
|
| 1393 |
+
"size": 400
|
| 1394 |
+
},
|
| 1395 |
+
"sunpy/net/vso/table_response.py": {
|
| 1396 |
+
"size": 4786
|
| 1397 |
+
},
|
| 1398 |
+
"sunpy/net/vso/tests/__init__.py": {
|
| 1399 |
+
"size": 0
|
| 1400 |
+
},
|
| 1401 |
+
"sunpy/net/vso/tests/conftest.py": {
|
| 1402 |
+
"size": 100
|
| 1403 |
+
},
|
| 1404 |
+
"sunpy/net/vso/tests/test_attrs.py": {
|
| 1405 |
+
"size": 6853
|
| 1406 |
+
},
|
| 1407 |
+
"sunpy/net/vso/tests/test_vso.py": {
|
| 1408 |
+
"size": 16805
|
| 1409 |
+
},
|
| 1410 |
+
"sunpy/net/vso/vso.py": {
|
| 1411 |
+
"size": 25755
|
| 1412 |
+
},
|
| 1413 |
+
"sunpy/net/vso/zeep_plugins.py": {
|
| 1414 |
+
"size": 556
|
| 1415 |
+
},
|
| 1416 |
+
"sunpy/physics/__init__.py": {
|
| 1417 |
+
"size": 0
|
| 1418 |
+
},
|
| 1419 |
+
"sunpy/physics/differential_rotation.py": {
|
| 1420 |
+
"size": 25646
|
| 1421 |
+
},
|
| 1422 |
+
"sunpy/physics/tests/__init__.py": {
|
| 1423 |
+
"size": 0
|
| 1424 |
+
},
|
| 1425 |
+
"sunpy/physics/tests/reference/test_differential_rotation.txt": {
|
| 1426 |
+
"size": 95355
|
| 1427 |
+
},
|
| 1428 |
+
"sunpy/physics/tests/test_differential_rotation.py": {
|
| 1429 |
+
"size": 20509
|
| 1430 |
+
},
|
| 1431 |
+
"sunpy/sun/__init__.py": {
|
| 1432 |
+
"size": 35
|
| 1433 |
+
},
|
| 1434 |
+
"sunpy/sun/_constants.py": {
|
| 1435 |
+
"size": 9846
|
| 1436 |
+
},
|
| 1437 |
+
"sunpy/sun/constants.py": {
|
| 1438 |
+
"size": 4311
|
| 1439 |
+
},
|
| 1440 |
+
"sunpy/sun/models.py": {
|
| 1441 |
+
"size": 7421
|
| 1442 |
+
},
|
| 1443 |
+
"sunpy/sun/tests/__init__.py": {
|
| 1444 |
+
"size": 0
|
| 1445 |
+
},
|
| 1446 |
+
"sunpy/sun/tests/test_constants.py": {
|
| 1447 |
+
"size": 2324
|
| 1448 |
+
},
|
| 1449 |
+
"sunpy/sun/tests/test_models.py": {
|
| 1450 |
+
"size": 2038
|
| 1451 |
+
},
|
| 1452 |
+
"sunpy/tests/__init__.py": {
|
| 1453 |
+
"size": 44
|
| 1454 |
+
},
|
| 1455 |
+
"sunpy/tests/figure_hashes_mpl_382_ft_261_astropy_702_animators_121.json": {
|
| 1456 |
+
"size": 12483
|
| 1457 |
+
},
|
| 1458 |
+
"sunpy/tests/figure_hashes_mpl_dev_ft_261_astropy_dev_animators_dev.json": {
|
| 1459 |
+
"size": 12483
|
| 1460 |
+
},
|
| 1461 |
+
"sunpy/tests/helpers.py": {
|
| 1462 |
+
"size": 4728
|
| 1463 |
+
},
|
| 1464 |
+
"sunpy/tests/mocks.py": {
|
| 1465 |
+
"size": 6565
|
| 1466 |
+
},
|
| 1467 |
+
"sunpy/tests/self_test.py": {
|
| 1468 |
+
"size": 3792
|
| 1469 |
+
},
|
| 1470 |
+
"sunpy/tests/tests/__init__.py": {
|
| 1471 |
+
"size": 0
|
| 1472 |
+
},
|
| 1473 |
+
"sunpy/tests/tests/test_mocks.py": {
|
| 1474 |
+
"size": 6126
|
| 1475 |
+
},
|
| 1476 |
+
"sunpy/tests/tests/test_self_test.py": {
|
| 1477 |
+
"size": 1855
|
| 1478 |
+
},
|
| 1479 |
+
"sunpy/tests/tests/test_sunpy_data_filenames.py": {
|
| 1480 |
+
"size": 671
|
| 1481 |
+
},
|
| 1482 |
+
"sunpy/time/__init__.py": {
|
| 1483 |
+
"size": 102
|
| 1484 |
+
},
|
| 1485 |
+
"sunpy/time/tests/__init__.py": {
|
| 1486 |
+
"size": 0
|
| 1487 |
+
},
|
| 1488 |
+
"sunpy/time/tests/test_taiseconds.py": {
|
| 1489 |
+
"size": 1272
|
| 1490 |
+
},
|
| 1491 |
+
"sunpy/time/tests/test_time.py": {
|
| 1492 |
+
"size": 13027
|
| 1493 |
+
},
|
| 1494 |
+
"sunpy/time/tests/test_timerange.py": {
|
| 1495 |
+
"size": 9885
|
| 1496 |
+
},
|
| 1497 |
+
"sunpy/time/tests/test_utime.py": {
|
| 1498 |
+
"size": 485
|
| 1499 |
+
},
|
| 1500 |
+
"sunpy/time/time.py": {
|
| 1501 |
+
"size": 14465
|
| 1502 |
+
},
|
| 1503 |
+
"sunpy/time/timeformats.py": {
|
| 1504 |
+
"size": 3702
|
| 1505 |
+
},
|
| 1506 |
+
"sunpy/time/timerange.py": {
|
| 1507 |
+
"size": 15384
|
| 1508 |
+
},
|
| 1509 |
+
"sunpy/timeseries/__init__.py": {
|
| 1510 |
+
"size": 595
|
| 1511 |
+
},
|
| 1512 |
+
"sunpy/timeseries/conftest.py": {
|
| 1513 |
+
"size": 5242
|
| 1514 |
+
},
|
| 1515 |
+
"sunpy/timeseries/metadata.py": {
|
| 1516 |
+
"size": 28715
|
| 1517 |
+
},
|
| 1518 |
+
"sunpy/timeseries/sources/__init__.py": {
|
| 1519 |
+
"size": 1012
|
| 1520 |
+
},
|
| 1521 |
+
"sunpy/timeseries/sources/eve.py": {
|
| 1522 |
+
"size": 13902
|
| 1523 |
+
},
|
| 1524 |
+
"sunpy/timeseries/sources/fermi_gbm.py": {
|
| 1525 |
+
"size": 8598
|
| 1526 |
+
},
|
| 1527 |
+
"sunpy/timeseries/sources/goes.py": {
|
| 1528 |
+
"size": 13281
|
| 1529 |
+
},
|
| 1530 |
+
"sunpy/timeseries/sources/lyra.py": {
|
| 1531 |
+
"size": 7220
|
| 1532 |
+
},
|
| 1533 |
+
"sunpy/timeseries/sources/noaa.py": {
|
| 1534 |
+
"size": 12826
|
| 1535 |
+
},
|
| 1536 |
+
"sunpy/timeseries/sources/norh.py": {
|
| 1537 |
+
"size": 6069
|
| 1538 |
+
},
|
| 1539 |
+
"sunpy/timeseries/sources/rhessi.py": {
|
| 1540 |
+
"size": 8379
|
| 1541 |
+
},
|
| 1542 |
+
"sunpy/timeseries/sources/tests/__init__.py": {
|
| 1543 |
+
"size": 0
|
| 1544 |
+
},
|
| 1545 |
+
"sunpy/timeseries/sources/tests/test_eve.py": {
|
| 1546 |
+
"size": 1545
|
| 1547 |
+
},
|
| 1548 |
+
"sunpy/timeseries/sources/tests/test_fermi_gbm.py": {
|
| 1549 |
+
"size": 952
|
| 1550 |
+
},
|
| 1551 |
+
"sunpy/timeseries/sources/tests/test_goes.py": {
|
| 1552 |
+
"size": 6381
|
| 1553 |
+
},
|
| 1554 |
+
"sunpy/timeseries/sources/tests/test_lyra.py": {
|
| 1555 |
+
"size": 889
|
| 1556 |
+
},
|
| 1557 |
+
"sunpy/timeseries/sources/tests/test_noaa.py": {
|
| 1558 |
+
"size": 1819
|
| 1559 |
+
},
|
| 1560 |
+
"sunpy/timeseries/sources/tests/test_norh.py": {
|
| 1561 |
+
"size": 816
|
| 1562 |
+
},
|
| 1563 |
+
"sunpy/timeseries/sources/tests/test_rhessi.py": {
|
| 1564 |
+
"size": 1025
|
| 1565 |
+
},
|
| 1566 |
+
"sunpy/timeseries/tests/__init__.py": {
|
| 1567 |
+
"size": 0
|
| 1568 |
+
},
|
| 1569 |
+
"sunpy/timeseries/tests/test_timeseries_factory.py": {
|
| 1570 |
+
"size": 19254
|
| 1571 |
+
},
|
| 1572 |
+
"sunpy/timeseries/tests/test_timeseriesbase.py": {
|
| 1573 |
+
"size": 23217
|
| 1574 |
+
},
|
| 1575 |
+
"sunpy/timeseries/tests/test_timeseriesmetadata.py": {
|
| 1576 |
+
"size": 21764
|
| 1577 |
+
},
|
| 1578 |
+
"sunpy/timeseries/timeseries_factory.py": {
|
| 1579 |
+
"size": 21252
|
| 1580 |
+
},
|
| 1581 |
+
"sunpy/timeseries/timeseriesbase.py": {
|
| 1582 |
+
"size": 32737
|
| 1583 |
+
},
|
| 1584 |
+
"sunpy/util/__init__.py": {
|
| 1585 |
+
"size": 169
|
| 1586 |
+
},
|
| 1587 |
+
"sunpy/util/config.py": {
|
| 1588 |
+
"size": 6976
|
| 1589 |
+
},
|
| 1590 |
+
"sunpy/util/datatype_factory_base.py": {
|
| 1591 |
+
"size": 5908
|
| 1592 |
+
},
|
| 1593 |
+
"sunpy/util/decorators.py": {
|
| 1594 |
+
"size": 11444
|
| 1595 |
+
},
|
| 1596 |
+
"sunpy/util/exceptions.py": {
|
| 1597 |
+
"size": 3693
|
| 1598 |
+
},
|
| 1599 |
+
"sunpy/util/functools.py": {
|
| 1600 |
+
"size": 780
|
| 1601 |
+
},
|
| 1602 |
+
"sunpy/util/io.py": {
|
| 1603 |
+
"size": 3262
|
| 1604 |
+
},
|
| 1605 |
+
"sunpy/util/logger.py": {
|
| 1606 |
+
"size": 3327
|
| 1607 |
+
},
|
| 1608 |
+
"sunpy/util/metadata.py": {
|
| 1609 |
+
"size": 7734
|
| 1610 |
+
},
|
| 1611 |
+
"sunpy/util/net.py": {
|
| 1612 |
+
"size": 6598
|
| 1613 |
+
},
|
| 1614 |
+
"sunpy/util/parfive_helpers.py": {
|
| 1615 |
+
"size": 921
|
| 1616 |
+
},
|
| 1617 |
+
"sunpy/util/sphinx/__init__.py": {
|
| 1618 |
+
"size": 527
|
| 1619 |
+
},
|
| 1620 |
+
"sunpy/util/sphinx/doctest.py": {
|
| 1621 |
+
"size": 1965
|
| 1622 |
+
},
|
| 1623 |
+
"sunpy/util/sphinx/generate.py": {
|
| 1624 |
+
"size": 2320
|
| 1625 |
+
},
|
| 1626 |
+
"sunpy/util/sysinfo.py": {
|
| 1627 |
+
"size": 8990
|
| 1628 |
+
},
|
| 1629 |
+
"sunpy/util/tests/__init__.py": {
|
| 1630 |
+
"size": 0
|
| 1631 |
+
},
|
| 1632 |
+
"sunpy/util/tests/test_config.py": {
|
| 1633 |
+
"size": 7052
|
| 1634 |
+
},
|
| 1635 |
+
"sunpy/util/tests/test_datatype_factory_base.py": {
|
| 1636 |
+
"size": 4606
|
| 1637 |
+
},
|
| 1638 |
+
"sunpy/util/tests/test_decorators.py": {
|
| 1639 |
+
"size": 1866
|
| 1640 |
+
},
|
| 1641 |
+
"sunpy/util/tests/test_functools.py": {
|
| 1642 |
+
"size": 2689
|
| 1643 |
+
},
|
| 1644 |
+
"sunpy/util/tests/test_logger.py": {
|
| 1645 |
+
"size": 3984
|
| 1646 |
+
},
|
| 1647 |
+
"sunpy/util/tests/test_metadata.py": {
|
| 1648 |
+
"size": 15975
|
| 1649 |
+
},
|
| 1650 |
+
"sunpy/util/tests/test_net.py": {
|
| 1651 |
+
"size": 1185
|
| 1652 |
+
},
|
| 1653 |
+
"sunpy/util/tests/test_sysinfo.py": {
|
| 1654 |
+
"size": 3345
|
| 1655 |
+
},
|
| 1656 |
+
"sunpy/util/tests/test_util.py": {
|
| 1657 |
+
"size": 5918
|
| 1658 |
+
},
|
| 1659 |
+
"sunpy/util/tests/test_xml.py": {
|
| 1660 |
+
"size": 8199
|
| 1661 |
+
},
|
| 1662 |
+
"sunpy/util/util.py": {
|
| 1663 |
+
"size": 11763
|
| 1664 |
+
},
|
| 1665 |
+
"sunpy/util/xml.py": {
|
| 1666 |
+
"size": 3208
|
| 1667 |
+
},
|
| 1668 |
+
"sunpy/version.py": {
|
| 1669 |
+
"size": 699
|
| 1670 |
+
},
|
| 1671 |
+
"sunpy/visualization/__init__.py": {
|
| 1672 |
+
"size": 234
|
| 1673 |
+
},
|
| 1674 |
+
"sunpy/visualization/animator/__init__.py": {
|
| 1675 |
+
"size": 116
|
| 1676 |
+
},
|
| 1677 |
+
"sunpy/visualization/animator/mapsequenceanimator.py": {
|
| 1678 |
+
"size": 4307
|
| 1679 |
+
},
|
| 1680 |
+
"sunpy/visualization/animator/tests/__init__.py": {
|
| 1681 |
+
"size": 0
|
| 1682 |
+
},
|
| 1683 |
+
"sunpy/visualization/animator/tests/test_mapsequenceanimator.py": {
|
| 1684 |
+
"size": 1269
|
| 1685 |
+
},
|
| 1686 |
+
"sunpy/visualization/colormaps/__init__.py": {
|
| 1687 |
+
"size": 308
|
| 1688 |
+
},
|
| 1689 |
+
"sunpy/visualization/colormaps/cm.py": {
|
| 1690 |
+
"size": 7534
|
| 1691 |
+
},
|
| 1692 |
+
"sunpy/visualization/colormaps/color_tables.py": {
|
| 1693 |
+
"size": 12206
|
| 1694 |
+
},
|
| 1695 |
+
"sunpy/visualization/colormaps/tests/__init__.py": {
|
| 1696 |
+
"size": 0
|
| 1697 |
+
},
|
| 1698 |
+
"sunpy/visualization/colormaps/tests/test_cm.py": {
|
| 1699 |
+
"size": 1441
|
| 1700 |
+
},
|
| 1701 |
+
"sunpy/visualization/drawing.py": {
|
| 1702 |
+
"size": 11926
|
| 1703 |
+
},
|
| 1704 |
+
"sunpy/visualization/tests/__init__.py": {
|
| 1705 |
+
"size": 0
|
| 1706 |
+
},
|
| 1707 |
+
"sunpy/visualization/tests/test_drawing.py": {
|
| 1708 |
+
"size": 5265
|
| 1709 |
+
},
|
| 1710 |
+
"sunpy/visualization/tests/test_visualization.py": {
|
| 1711 |
+
"size": 1143
|
| 1712 |
+
},
|
| 1713 |
+
"sunpy/visualization/visualization.py": {
|
| 1714 |
+
"size": 4163
|
| 1715 |
+
},
|
| 1716 |
+
"sunpy/visualization/wcsaxes_compat.py": {
|
| 1717 |
+
"size": 6568
|
| 1718 |
+
},
|
| 1719 |
+
"tools/gen_tutorial_graph.py": {
|
| 1720 |
+
"size": 1797
|
| 1721 |
+
},
|
| 1722 |
+
"tools/generate_github_changelog.py": {
|
| 1723 |
+
"size": 428
|
| 1724 |
+
},
|
| 1725 |
+
"tools/hek_mkcls.py": {
|
| 1726 |
+
"size": 13149
|
| 1727 |
+
},
|
| 1728 |
+
"tools/hektemplate.py": {
|
| 1729 |
+
"size": 5456
|
| 1730 |
+
},
|
| 1731 |
+
"tools/resize_jp2.py": {
|
| 1732 |
+
"size": 648
|
| 1733 |
+
},
|
| 1734 |
+
"tools/unify_section_headings.py": {
|
| 1735 |
+
"size": 2362
|
| 1736 |
+
},
|
| 1737 |
+
"tools/update_attrs_json.py": {
|
| 1738 |
+
"size": 692
|
| 1739 |
+
},
|
| 1740 |
+
"tools/update_extern.py": {
|
| 1741 |
+
"size": 1869
|
| 1742 |
+
},
|
| 1743 |
+
"tools/update_zenodo.py": {
|
| 1744 |
+
"size": 2097
|
| 1745 |
+
},
|
| 1746 |
+
"tools/version_bumps.py": {
|
| 1747 |
+
"size": 7049
|
| 1748 |
+
},
|
| 1749 |
+
"tox.ini": {
|
| 1750 |
+
"size": 5641
|
| 1751 |
+
}
|
| 1752 |
+
},
|
| 1753 |
+
"processed_by": "zip_fallback",
|
| 1754 |
+
"success": true
|
| 1755 |
+
},
|
| 1756 |
+
"structure": {
|
| 1757 |
+
"packages": [
|
| 1758 |
+
"source.benchmarks",
|
| 1759 |
+
"source.sunpy",
|
| 1760 |
+
"source.sunpy._dev",
|
| 1761 |
+
"source.sunpy.coordinates",
|
| 1762 |
+
"source.sunpy.data",
|
| 1763 |
+
"source.sunpy.extern",
|
| 1764 |
+
"source.sunpy.image",
|
| 1765 |
+
"source.sunpy.io",
|
| 1766 |
+
"source.sunpy.map",
|
| 1767 |
+
"source.sunpy.net",
|
| 1768 |
+
"source.sunpy.physics",
|
| 1769 |
+
"source.sunpy.sun",
|
| 1770 |
+
"source.sunpy.tests",
|
| 1771 |
+
"source.sunpy.time",
|
| 1772 |
+
"source.sunpy.timeseries",
|
| 1773 |
+
"source.sunpy.util",
|
| 1774 |
+
"source.sunpy.visualization"
|
| 1775 |
+
]
|
| 1776 |
+
},
|
| 1777 |
+
"dependencies": {
|
| 1778 |
+
"has_environment_yml": false,
|
| 1779 |
+
"has_requirements_txt": false,
|
| 1780 |
+
"pyproject": true,
|
| 1781 |
+
"setup_cfg": false,
|
| 1782 |
+
"setup_py": false
|
| 1783 |
+
},
|
| 1784 |
+
"entry_points": {
|
| 1785 |
+
"imports": [],
|
| 1786 |
+
"cli": [],
|
| 1787 |
+
"modules": []
|
| 1788 |
+
},
|
| 1789 |
+
"llm_analysis": {
|
| 1790 |
+
"core_modules": [
|
| 1791 |
+
{
|
| 1792 |
+
"package": "source.sunpy.net",
|
| 1793 |
+
"module": "fido_factory",
|
| 1794 |
+
"functions": [],
|
| 1795 |
+
"classes": [
|
| 1796 |
+
"UnifiedDownloaderFactory"
|
| 1797 |
+
],
|
| 1798 |
+
"description": "Primary high-level data discovery/download orchestration (Fido); best MCP-facing surface for search/fetch workflows."
|
| 1799 |
+
},
|
| 1800 |
+
{
|
| 1801 |
+
"package": "source.sunpy.map",
|
| 1802 |
+
"module": "map_factory",
|
| 1803 |
+
"functions": [],
|
| 1804 |
+
"classes": [
|
| 1805 |
+
"MapFactory"
|
| 1806 |
+
],
|
| 1807 |
+
"description": "Factory for constructing map objects from files/data; central entry point for image/map ingestion."
|
| 1808 |
+
},
|
| 1809 |
+
{
|
| 1810 |
+
"package": "source.sunpy.map",
|
| 1811 |
+
"module": "mapbase",
|
| 1812 |
+
"functions": [],
|
| 1813 |
+
"classes": [
|
| 1814 |
+
"GenericMap"
|
| 1815 |
+
],
|
| 1816 |
+
"description": "Core solar map abstraction with metadata, WCS-aware operations, and plotting hooks."
|
| 1817 |
+
},
|
| 1818 |
+
{
|
| 1819 |
+
"package": "source.sunpy.timeseries",
|
| 1820 |
+
"module": "timeseries_factory",
|
| 1821 |
+
"functions": [],
|
| 1822 |
+
"classes": [
|
| 1823 |
+
"TimeSeriesFactory"
|
| 1824 |
+
],
|
| 1825 |
+
"description": "Factory entry point for creating time series objects from multiple source formats."
|
| 1826 |
+
},
|
| 1827 |
+
{
|
| 1828 |
+
"package": "source.sunpy.timeseries",
|
| 1829 |
+
"module": "timeseriesbase",
|
| 1830 |
+
"functions": [],
|
| 1831 |
+
"classes": [
|
| 1832 |
+
"GenericTimeSeries"
|
| 1833 |
+
],
|
| 1834 |
+
"description": "Core time-series abstraction for solar/space-weather data analysis."
|
| 1835 |
+
},
|
| 1836 |
+
{
|
| 1837 |
+
"package": "source.sunpy.coordinates",
|
| 1838 |
+
"module": "frames",
|
| 1839 |
+
"functions": [],
|
| 1840 |
+
"classes": [
|
| 1841 |
+
"Helioprojective",
|
| 1842 |
+
"HeliographicStonyhurst",
|
| 1843 |
+
"HeliographicCarrington",
|
| 1844 |
+
"Heliocentric",
|
| 1845 |
+
"HelioprojectiveRadial"
|
| 1846 |
+
],
|
| 1847 |
+
"description": "Domain coordinate frame definitions used widely in map and ephemeris operations."
|
| 1848 |
+
},
|
| 1849 |
+
{
|
| 1850 |
+
"package": "source.sunpy.coordinates",
|
| 1851 |
+
"module": "sun",
|
| 1852 |
+
"functions": [
|
| 1853 |
+
"angular_radius",
|
| 1854 |
+
"B0",
|
| 1855 |
+
"L0",
|
| 1856 |
+
"P",
|
| 1857 |
+
"carrington_rotation_number"
|
| 1858 |
+
],
|
| 1859 |
+
"classes": [],
|
| 1860 |
+
"description": "Solar ephemeris/geometry utility functions suitable for stateless MCP tools."
|
| 1861 |
+
},
|
| 1862 |
+
{
|
| 1863 |
+
"package": "source.sunpy.time",
|
| 1864 |
+
"module": "time",
|
| 1865 |
+
"functions": [
|
| 1866 |
+
"parse_time",
|
| 1867 |
+
"is_time",
|
| 1868 |
+
"is_time_in_given_format"
|
| 1869 |
+
],
|
| 1870 |
+
"classes": [],
|
| 1871 |
+
"description": "Canonical time parsing/normalization helpers; useful as shared MCP utility layer."
|
| 1872 |
+
},
|
| 1873 |
+
{
|
| 1874 |
+
"package": "source.sunpy.time",
|
| 1875 |
+
"module": "timerange",
|
| 1876 |
+
"functions": [],
|
| 1877 |
+
"classes": [
|
| 1878 |
+
"TimeRange"
|
| 1879 |
+
],
|
| 1880 |
+
"description": "Time interval representation for queries and slicing."
|
| 1881 |
+
},
|
| 1882 |
+
{
|
| 1883 |
+
"package": "source.sunpy.net",
|
| 1884 |
+
"module": "attrs",
|
| 1885 |
+
"functions": [],
|
| 1886 |
+
"classes": [],
|
| 1887 |
+
"description": "Attribute namespace used to build Fido/client queries; required for expressive search filters."
|
| 1888 |
+
}
|
| 1889 |
+
],
|
| 1890 |
+
"cli_commands": [],
|
| 1891 |
+
"import_strategy": {
|
| 1892 |
+
"primary": "import",
|
| 1893 |
+
"fallback": "blackbox",
|
| 1894 |
+
"confidence": 0.91
|
| 1895 |
+
},
|
| 1896 |
+
"dependencies": {
|
| 1897 |
+
"required": [
|
| 1898 |
+
"numpy",
|
| 1899 |
+
"astropy",
|
| 1900 |
+
"packaging"
|
| 1901 |
+
],
|
| 1902 |
+
"optional": [
|
| 1903 |
+
"matplotlib",
|
| 1904 |
+
"reproject",
|
| 1905 |
+
"parfive",
|
| 1906 |
+
"drms",
|
| 1907 |
+
"zeep",
|
| 1908 |
+
"asdf",
|
| 1909 |
+
"scipy",
|
| 1910 |
+
"pandas",
|
| 1911 |
+
"aiohttp",
|
| 1912 |
+
"h5py"
|
| 1913 |
+
]
|
| 1914 |
+
},
|
| 1915 |
+
"risk_assessment": {
|
| 1916 |
+
"import_feasibility": 0.9,
|
| 1917 |
+
"intrusiveness_risk": "low",
|
| 1918 |
+
"complexity": "medium"
|
| 1919 |
+
}
|
| 1920 |
+
},
|
| 1921 |
+
"deepwiki_analysis": {
|
| 1922 |
+
"repo_url": "https://github.com/sunpy/sunpy",
|
| 1923 |
+
"repo_name": "sunpy",
|
| 1924 |
+
"error": "DeepWiki analysis failed",
|
| 1925 |
+
"model": "gpt-5.3-codex",
|
| 1926 |
+
"source": "llm_direct_analysis",
|
| 1927 |
+
"success": false
|
| 1928 |
+
},
|
| 1929 |
+
"deepwiki_options": {
|
| 1930 |
+
"enabled": true,
|
| 1931 |
+
"model": "gpt-5.3-codex"
|
| 1932 |
+
},
|
| 1933 |
+
"risk": {
|
| 1934 |
+
"import_feasibility": 0.9,
|
| 1935 |
+
"intrusiveness_risk": "low",
|
| 1936 |
+
"complexity": "medium"
|
| 1937 |
+
}
|
| 1938 |
+
}
|
sunpy/mcp_output/diff_report.md
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Difference Report — **sunpy**
|
| 2 |
+
**Generated:** 2026-03-12 06:22:53
|
| 3 |
+
**Repository:** `sunpy`
|
| 4 |
+
**Project Type:** Python library
|
| 5 |
+
**Scope:** Basic functionality
|
| 6 |
+
**Intrusiveness:** None
|
| 7 |
+
**Workflow Status:** ✅ Success
|
| 8 |
+
**Test Status:** ❌ Failed
|
| 9 |
+
|
| 10 |
+
---
|
| 11 |
+
|
| 12 |
+
## 1) Project Overview
|
| 13 |
+
|
| 14 |
+
This update introduces **8 new files** and **no modifications to existing files**.
|
| 15 |
+
Given the non-intrusive scope and unchanged existing code, the changes appear additive and likely intended to extend baseline capabilities or support infrastructure without direct refactoring.
|
| 16 |
+
|
| 17 |
+
---
|
| 18 |
+
|
| 19 |
+
## 2) Change Summary
|
| 20 |
+
|
| 21 |
+
| Metric | Value |
|
| 22 |
+
|---|---|
|
| 23 |
+
| New files | 8 |
|
| 24 |
+
| Modified files | 0 |
|
| 25 |
+
| Deleted files | 0 *(not reported)* |
|
| 26 |
+
| Intrusiveness | None |
|
| 27 |
+
| Workflow | Success |
|
| 28 |
+
| Tests | Failed |
|
| 29 |
+
|
| 30 |
+
### High-level interpretation
|
| 31 |
+
- The CI/workflow pipeline completed successfully (e.g., lint/build/package steps likely passed).
|
| 32 |
+
- Test suite did not pass, indicating either:
|
| 33 |
+
- new tests or fixtures fail,
|
| 34 |
+
- environment/dependency mismatch,
|
| 35 |
+
- integration assumptions broken by additive files,
|
| 36 |
+
- or unrelated pre-existing test instability surfaced in this run.
|
| 37 |
+
|
| 38 |
+
---
|
| 39 |
+
|
| 40 |
+
## 3) Difference Analysis
|
| 41 |
+
|
| 42 |
+
### Structural impact
|
| 43 |
+
- **Codebase stability risk:** Low to medium (no existing files changed).
|
| 44 |
+
- **Behavioral risk:** Medium (new files can still affect import paths, plugin discovery, runtime registration, packaging, or test collection).
|
| 45 |
+
- **Maintenance impact:** Low immediate, potentially medium if files introduce new modules without documentation/tests.
|
| 46 |
+
|
| 47 |
+
### Likely affected areas (in additive-only updates)
|
| 48 |
+
1. **Module discovery / imports**
|
| 49 |
+
New packages or modules may be auto-discovered and imported during tests.
|
| 50 |
+
2. **Test collection behavior**
|
| 51 |
+
New files can alter pytest discovery (`test_*.py`, `conftest.py`, fixtures, markers).
|
| 52 |
+
3. **Packaging metadata side effects**
|
| 53 |
+
If new files include entry points, configuration, or data files, runtime behavior may change.
|
| 54 |
+
4. **Documentation and examples**
|
| 55 |
+
New example files may execute in doctest/test pipelines and fail.
|
| 56 |
+
|
| 57 |
+
---
|
| 58 |
+
|
| 59 |
+
## 4) Technical Analysis
|
| 60 |
+
|
| 61 |
+
## CI vs Test outcome mismatch
|
| 62 |
+
A successful workflow with failed tests often indicates:
|
| 63 |
+
- Build/lint/static checks are green.
|
| 64 |
+
- Unit/integration/regression tests failed at runtime.
|
| 65 |
+
|
| 66 |
+
### Potential technical causes
|
| 67 |
+
- Missing optional dependency required by newly added functionality.
|
| 68 |
+
- Version pinning conflict (local passes, CI fails).
|
| 69 |
+
- New files not wired into test fixtures or mocks.
|
| 70 |
+
- Time/network-dependent tests (flaky or environment-specific).
|
| 71 |
+
- Incomplete test data/resources for new functionality.
|
| 72 |
+
|
| 73 |
+
### Risk profile
|
| 74 |
+
- **Runtime risk:** Moderate until test failures are triaged.
|
| 75 |
+
- **Release readiness:** Not ready for production release while test status is failed.
|
| 76 |
+
- **Rollback need:** Not required yet (no modified files), but merge/release should be gated.
|
| 77 |
+
|
| 78 |
+
---
|
| 79 |
+
|
| 80 |
+
## 5) Recommendations & Improvements
|
| 81 |
+
|
| 82 |
+
## Immediate actions (high priority)
|
| 83 |
+
1. **Collect failing test logs** and categorize by failure type:
|
| 84 |
+
- import error,
|
| 85 |
+
- assertion failure,
|
| 86 |
+
- dependency error,
|
| 87 |
+
- timeout/flaky.
|
| 88 |
+
2. **Map failures to new files** (direct/indirect linkage).
|
| 89 |
+
3. **Run targeted test subsets** for impacted modules first, then full suite.
|
| 90 |
+
4. **Validate dependency matrix** (Python versions, optional extras, pinned libs).
|
| 91 |
+
|
| 92 |
+
## Quality hardening
|
| 93 |
+
- Add/expand tests for each new file’s intended behavior.
|
| 94 |
+
- Ensure deterministic tests (no external network/time unless mocked).
|
| 95 |
+
- Add minimal integration test to verify package discovery and import stability.
|
| 96 |
+
- If examples/docs are included, gate doctests separately or mark unstable cases.
|
| 97 |
+
|
| 98 |
+
## Process improvements
|
| 99 |
+
- Enforce “tests must pass” branch protection.
|
| 100 |
+
- Add a pre-merge smoke test job for newly added modules.
|
| 101 |
+
- Include a change manifest in PRs: purpose, dependencies, expected test impact.
|
| 102 |
+
|
| 103 |
+
---
|
| 104 |
+
|
| 105 |
+
## 6) Deployment Information
|
| 106 |
+
|
| 107 |
+
## Current deployment posture
|
| 108 |
+
- **Do not deploy/release** this change set in its current state due to failed tests.
|
| 109 |
+
- Artifacts from successful workflow stages may be usable for debugging only.
|
| 110 |
+
|
| 111 |
+
## Release gate checklist
|
| 112 |
+
- [ ] All tests pass in CI across supported Python versions.
|
| 113 |
+
- [ ] New files reviewed for packaging/import side effects.
|
| 114 |
+
- [ ] Changelog entry added (if user-facing behavior introduced).
|
| 115 |
+
- [ ] Version bump policy verified (patch/minor as applicable).
|
| 116 |
+
- [ ] Rollback plan documented (even if low-risk additive change).
|
| 117 |
+
|
| 118 |
+
---
|
| 119 |
+
|
| 120 |
+
## 7) Future Planning
|
| 121 |
+
|
| 122 |
+
1. **Stabilization sprint (short-term)**
|
| 123 |
+
Resolve current test failures; improve coverage around new files.
|
| 124 |
+
2. **Reliability improvements (mid-term)**
|
| 125 |
+
Add flaky-test detection/quarantine process and dependency lock validation.
|
| 126 |
+
3. **Observability (mid-term)**
|
| 127 |
+
Track CI failure categories and mean time to resolution for test regressions.
|
| 128 |
+
4. **Governance (long-term)**
|
| 129 |
+
Require “change impact notes” for additive updates to reduce hidden integration risks.
|
| 130 |
+
|
| 131 |
+
---
|
| 132 |
+
|
| 133 |
+
## 8) Executive Conclusion
|
| 134 |
+
|
| 135 |
+
The `sunpy` update is structurally conservative (**8 new files, 0 modified files**) and operationally low-intrusive, but **not release-ready** because tests failed despite a successful workflow.
|
| 136 |
+
Primary next step is rapid test-failure triage tied to newly introduced files, followed by CI hardening to prevent similar regressions.
|
sunpy/mcp_output/mcp_plugin/__init__.py
ADDED
|
File without changes
|
sunpy/mcp_output/mcp_plugin/adapter.py
ADDED
|
@@ -0,0 +1,349 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
import sys
|
| 3 |
+
from typing import Any, Dict, Optional
|
| 4 |
+
|
| 5 |
+
source_path = os.path.join(
|
| 6 |
+
os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))),
|
| 7 |
+
"source",
|
| 8 |
+
)
|
| 9 |
+
sys.path.insert(0, source_path)
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
class Adapter:
|
| 13 |
+
"""
|
| 14 |
+
Import-mode adapter for the SunPy repository.
|
| 15 |
+
|
| 16 |
+
This adapter attempts to import SunPy from the local `source` directory and exposes
|
| 17 |
+
practical high-level methods that map to core repository functionality discovered
|
| 18 |
+
during analysis (time parsing/ranges, map loading, timeseries loading, Fido search/fetch,
|
| 19 |
+
and key solar coordinate/physics helpers).
|
| 20 |
+
|
| 21 |
+
All public methods return a unified dictionary format:
|
| 22 |
+
{
|
| 23 |
+
"status": "success" | "error" | "fallback",
|
| 24 |
+
...
|
| 25 |
+
}
|
| 26 |
+
"""
|
| 27 |
+
|
| 28 |
+
# -------------------------------------------------------------------------
|
| 29 |
+
# Lifecycle / module management
|
| 30 |
+
# -------------------------------------------------------------------------
|
| 31 |
+
def __init__(self) -> None:
|
| 32 |
+
self.mode = "import"
|
| 33 |
+
self._modules: Dict[str, Any] = {}
|
| 34 |
+
self._import_error: Optional[str] = None
|
| 35 |
+
self._load_modules()
|
| 36 |
+
|
| 37 |
+
def _ok(self, **payload: Any) -> Dict[str, Any]:
|
| 38 |
+
data = {"status": "success"}
|
| 39 |
+
data.update(payload)
|
| 40 |
+
return data
|
| 41 |
+
|
| 42 |
+
def _err(self, message: str, guidance: Optional[str] = None, **payload: Any) -> Dict[str, Any]:
|
| 43 |
+
data = {"status": "error", "message": message}
|
| 44 |
+
if guidance:
|
| 45 |
+
data["guidance"] = guidance
|
| 46 |
+
data.update(payload)
|
| 47 |
+
return data
|
| 48 |
+
|
| 49 |
+
def _fallback(self, message: str, guidance: Optional[str] = None, **payload: Any) -> Dict[str, Any]:
|
| 50 |
+
data = {"status": "fallback", "message": message}
|
| 51 |
+
if guidance:
|
| 52 |
+
data["guidance"] = guidance
|
| 53 |
+
data.update(payload)
|
| 54 |
+
return data
|
| 55 |
+
|
| 56 |
+
def _load_modules(self) -> None:
|
| 57 |
+
try:
|
| 58 |
+
import sunpy # full path from source root
|
| 59 |
+
import sunpy.map
|
| 60 |
+
import sunpy.time
|
| 61 |
+
import sunpy.timeseries
|
| 62 |
+
import sunpy.net
|
| 63 |
+
import sunpy.net.fido_factory
|
| 64 |
+
import sunpy.coordinates
|
| 65 |
+
import sunpy.coordinates.sun
|
| 66 |
+
import sunpy.physics.differential_rotation
|
| 67 |
+
|
| 68 |
+
self._modules = {
|
| 69 |
+
"sunpy": sunpy,
|
| 70 |
+
"sunpy.map": sunpy.map,
|
| 71 |
+
"sunpy.time": sunpy.time,
|
| 72 |
+
"sunpy.timeseries": sunpy.timeseries,
|
| 73 |
+
"sunpy.net": sunpy.net,
|
| 74 |
+
"sunpy.net.fido_factory": sunpy.net.fido_factory,
|
| 75 |
+
"sunpy.coordinates": sunpy.coordinates,
|
| 76 |
+
"sunpy.coordinates.sun": sunpy.coordinates.sun,
|
| 77 |
+
"sunpy.physics.differential_rotation": sunpy.physics.differential_rotation,
|
| 78 |
+
}
|
| 79 |
+
self._import_error = None
|
| 80 |
+
except Exception as exc:
|
| 81 |
+
self._modules = {}
|
| 82 |
+
self._import_error = str(exc)
|
| 83 |
+
|
| 84 |
+
def health_check(self) -> Dict[str, Any]:
|
| 85 |
+
"""
|
| 86 |
+
Validate adapter import status.
|
| 87 |
+
|
| 88 |
+
Returns:
|
| 89 |
+
dict: Unified status with mode, loaded module list, and import diagnostics.
|
| 90 |
+
"""
|
| 91 |
+
if self._modules:
|
| 92 |
+
return self._ok(mode=self.mode, loaded_modules=sorted(self._modules.keys()))
|
| 93 |
+
return self._fallback(
|
| 94 |
+
message="Import mode unavailable because local SunPy modules could not be loaded.",
|
| 95 |
+
guidance=(
|
| 96 |
+
"Verify repository source is available under '<plugin_root>/source' and includes "
|
| 97 |
+
"the 'sunpy' package. Check dependency availability: numpy, astropy, packaging."
|
| 98 |
+
),
|
| 99 |
+
mode=self.mode,
|
| 100 |
+
import_error=self._import_error,
|
| 101 |
+
)
|
| 102 |
+
|
| 103 |
+
# -------------------------------------------------------------------------
|
| 104 |
+
# Time utilities (sunpy.time)
|
| 105 |
+
# -------------------------------------------------------------------------
|
| 106 |
+
def call_parse_time(self, time_input: Any, format: Optional[str] = None, **kwargs: Any) -> Dict[str, Any]:
|
| 107 |
+
"""
|
| 108 |
+
Parse a time input using sunpy.time.parse_time.
|
| 109 |
+
|
| 110 |
+
Args:
|
| 111 |
+
time_input: Input accepted by SunPy time parser (str, datetime, astropy Time, etc.).
|
| 112 |
+
format: Optional explicit format passed through to parser.
|
| 113 |
+
**kwargs: Additional parser keyword arguments.
|
| 114 |
+
|
| 115 |
+
Returns:
|
| 116 |
+
dict: Unified status with parsed `astropy.time.Time` object on success.
|
| 117 |
+
"""
|
| 118 |
+
if "sunpy.time" not in self._modules:
|
| 119 |
+
return self._fallback(
|
| 120 |
+
message="sunpy.time is not available in import mode.",
|
| 121 |
+
guidance="Run health_check() and resolve import/dependency issues before calling parse_time.",
|
| 122 |
+
)
|
| 123 |
+
try:
|
| 124 |
+
fn = self._modules["sunpy.time"].parse_time
|
| 125 |
+
result = fn(time_input, format=format, **kwargs) if format else fn(time_input, **kwargs)
|
| 126 |
+
return self._ok(result=result)
|
| 127 |
+
except Exception as exc:
|
| 128 |
+
return self._err(
|
| 129 |
+
message=f"Failed to parse time input: {exc}",
|
| 130 |
+
guidance="Ensure the input time format is valid and compatible with SunPy/Astropy.",
|
| 131 |
+
)
|
| 132 |
+
|
| 133 |
+
def instance_timerange(self, a: Any = None, b: Any = None, **kwargs: Any) -> Dict[str, Any]:
|
| 134 |
+
"""
|
| 135 |
+
Create an instance of sunpy.time.timerange.TimeRange.
|
| 136 |
+
|
| 137 |
+
Args:
|
| 138 |
+
a: Start value or pair-like input accepted by TimeRange.
|
| 139 |
+
b: End value or duration depending on constructor usage.
|
| 140 |
+
**kwargs: Additional constructor args.
|
| 141 |
+
|
| 142 |
+
Returns:
|
| 143 |
+
dict: Unified status with TimeRange instance on success.
|
| 144 |
+
"""
|
| 145 |
+
if "sunpy.time" not in self._modules:
|
| 146 |
+
return self._fallback(
|
| 147 |
+
message="sunpy.time is not available in import mode.",
|
| 148 |
+
guidance="Run health_check() and confirm local source/dependencies.",
|
| 149 |
+
)
|
| 150 |
+
try:
|
| 151 |
+
cls = self._modules["sunpy.time"].TimeRange
|
| 152 |
+
obj = cls(a, b, **kwargs) if b is not None else cls(a, **kwargs)
|
| 153 |
+
return self._ok(instance=obj)
|
| 154 |
+
except Exception as exc:
|
| 155 |
+
return self._err(
|
| 156 |
+
message=f"Failed to create TimeRange instance: {exc}",
|
| 157 |
+
guidance="Provide valid start/end inputs or valid constructor arguments.",
|
| 158 |
+
)
|
| 159 |
+
|
| 160 |
+
# -------------------------------------------------------------------------
|
| 161 |
+
# Map utilities (sunpy.map)
|
| 162 |
+
# -------------------------------------------------------------------------
|
| 163 |
+
def instance_map(self, data: Any, header: Any = None, **kwargs: Any) -> Dict[str, Any]:
|
| 164 |
+
"""
|
| 165 |
+
Create a map object via sunpy.map.Map factory.
|
| 166 |
+
|
| 167 |
+
Args:
|
| 168 |
+
data: File path, array, or supported map input.
|
| 169 |
+
header: Optional metadata/header when constructing from raw array data.
|
| 170 |
+
**kwargs: Additional map factory arguments.
|
| 171 |
+
|
| 172 |
+
Returns:
|
| 173 |
+
dict: Unified status with map instance on success.
|
| 174 |
+
"""
|
| 175 |
+
if "sunpy.map" not in self._modules:
|
| 176 |
+
return self._fallback(
|
| 177 |
+
message="sunpy.map is not available in import mode.",
|
| 178 |
+
guidance="Install optional dependencies for map workflows and verify source path.",
|
| 179 |
+
)
|
| 180 |
+
try:
|
| 181 |
+
map_factory = self._modules["sunpy.map"].Map
|
| 182 |
+
obj = map_factory(data, header, **kwargs) if header is not None else map_factory(data, **kwargs)
|
| 183 |
+
return self._ok(instance=obj)
|
| 184 |
+
except Exception as exc:
|
| 185 |
+
return self._err(
|
| 186 |
+
message=f"Failed to create map instance: {exc}",
|
| 187 |
+
guidance="Check input FITS path/data-array validity and metadata consistency.",
|
| 188 |
+
)
|
| 189 |
+
|
| 190 |
+
# -------------------------------------------------------------------------
|
| 191 |
+
# TimeSeries utilities (sunpy.timeseries)
|
| 192 |
+
# -------------------------------------------------------------------------
|
| 193 |
+
def instance_timeseries(self, source: Any, **kwargs: Any) -> Dict[str, Any]:
|
| 194 |
+
"""
|
| 195 |
+
Create a TimeSeries object via sunpy.timeseries.TimeSeries factory.
|
| 196 |
+
|
| 197 |
+
Args:
|
| 198 |
+
source: Input accepted by TimeSeries factory (file path, URL result, etc.).
|
| 199 |
+
**kwargs: Additional factory options.
|
| 200 |
+
|
| 201 |
+
Returns:
|
| 202 |
+
dict: Unified status with TimeSeries instance on success.
|
| 203 |
+
"""
|
| 204 |
+
if "sunpy.timeseries" not in self._modules:
|
| 205 |
+
return self._fallback(
|
| 206 |
+
message="sunpy.timeseries is not available in import mode.",
|
| 207 |
+
guidance="Confirm optional dependencies (e.g., pandas) and local source integrity.",
|
| 208 |
+
)
|
| 209 |
+
try:
|
| 210 |
+
factory = self._modules["sunpy.timeseries"].TimeSeries
|
| 211 |
+
obj = factory(source, **kwargs)
|
| 212 |
+
return self._ok(instance=obj)
|
| 213 |
+
except Exception as exc:
|
| 214 |
+
return self._err(
|
| 215 |
+
message=f"Failed to create TimeSeries instance: {exc}",
|
| 216 |
+
guidance="Check source path/content and ensure required extras are installed.",
|
| 217 |
+
)
|
| 218 |
+
|
| 219 |
+
# -------------------------------------------------------------------------
|
| 220 |
+
# Network/Fido utilities (sunpy.net)
|
| 221 |
+
# -------------------------------------------------------------------------
|
| 222 |
+
def instance_fido(self) -> Dict[str, Any]:
|
| 223 |
+
"""
|
| 224 |
+
Return the Fido client facade from sunpy.net.
|
| 225 |
+
|
| 226 |
+
Returns:
|
| 227 |
+
dict: Unified status with Fido facade on success.
|
| 228 |
+
"""
|
| 229 |
+
if "sunpy.net" not in self._modules:
|
| 230 |
+
return self._fallback(
|
| 231 |
+
message="sunpy.net is not available in import mode.",
|
| 232 |
+
guidance="Confirm network-related optional dependencies and import availability.",
|
| 233 |
+
)
|
| 234 |
+
try:
|
| 235 |
+
fido = self._modules["sunpy.net"].Fido
|
| 236 |
+
return self._ok(instance=fido)
|
| 237 |
+
except Exception as exc:
|
| 238 |
+
return self._err(
|
| 239 |
+
message=f"Failed to access Fido facade: {exc}",
|
| 240 |
+
guidance="Verify sunpy.net import and compatibility of dependencies.",
|
| 241 |
+
)
|
| 242 |
+
|
| 243 |
+
def call_fido_search(self, *query_attrs: Any) -> Dict[str, Any]:
|
| 244 |
+
"""
|
| 245 |
+
Execute a Fido search with provided query attributes.
|
| 246 |
+
|
| 247 |
+
Args:
|
| 248 |
+
*query_attrs: SunPy attr objects, e.g. attrs.Time(...), attrs.Instrument(...).
|
| 249 |
+
|
| 250 |
+
Returns:
|
| 251 |
+
dict: Unified status with search results on success.
|
| 252 |
+
"""
|
| 253 |
+
if "sunpy.net" not in self._modules:
|
| 254 |
+
return self._fallback(
|
| 255 |
+
message="sunpy.net is not available in import mode.",
|
| 256 |
+
guidance="Resolve import issues before performing remote searches.",
|
| 257 |
+
)
|
| 258 |
+
try:
|
| 259 |
+
result = self._modules["sunpy.net"].Fido.search(*query_attrs)
|
| 260 |
+
return self._ok(result=result)
|
| 261 |
+
except Exception as exc:
|
| 262 |
+
return self._err(
|
| 263 |
+
message=f"Fido search failed: {exc}",
|
| 264 |
+
guidance="Confirm query attrs are valid and network access is available.",
|
| 265 |
+
)
|
| 266 |
+
|
| 267 |
+
def call_fido_fetch(self, search_result: Any, **kwargs: Any) -> Dict[str, Any]:
|
| 268 |
+
"""
|
| 269 |
+
Fetch files from a Fido search result.
|
| 270 |
+
|
| 271 |
+
Args:
|
| 272 |
+
search_result: Result returned by Fido.search.
|
| 273 |
+
**kwargs: Additional fetch options (path, max_conn, progress, etc.).
|
| 274 |
+
|
| 275 |
+
Returns:
|
| 276 |
+
dict: Unified status with fetch response on success.
|
| 277 |
+
"""
|
| 278 |
+
if "sunpy.net" not in self._modules:
|
| 279 |
+
return self._fallback(
|
| 280 |
+
message="sunpy.net is not available in import mode.",
|
| 281 |
+
guidance="Resolve import issues before attempting fetch.",
|
| 282 |
+
)
|
| 283 |
+
try:
|
| 284 |
+
fetched = self._modules["sunpy.net"].Fido.fetch(search_result, **kwargs)
|
| 285 |
+
return self._ok(result=fetched)
|
| 286 |
+
except Exception as exc:
|
| 287 |
+
return self._err(
|
| 288 |
+
message=f"Fido fetch failed: {exc}",
|
| 289 |
+
guidance="Check download path permissions, network connectivity, and fetch arguments.",
|
| 290 |
+
)
|
| 291 |
+
|
| 292 |
+
# -------------------------------------------------------------------------
|
| 293 |
+
# Coordinates / solar helpers
|
| 294 |
+
# -------------------------------------------------------------------------
|
| 295 |
+
def call_solar_angular_radius(self, time: Any = "now") -> Dict[str, Any]:
|
| 296 |
+
"""
|
| 297 |
+
Compute the apparent solar angular radius at a given time.
|
| 298 |
+
|
| 299 |
+
Args:
|
| 300 |
+
time: Time input accepted by SunPy coordinate helpers.
|
| 301 |
+
|
| 302 |
+
Returns:
|
| 303 |
+
dict: Unified status with angular radius quantity on success.
|
| 304 |
+
"""
|
| 305 |
+
if "sunpy.coordinates.sun" not in self._modules:
|
| 306 |
+
return self._fallback(
|
| 307 |
+
message="sunpy.coordinates.sun is not available in import mode.",
|
| 308 |
+
guidance="Ensure astropy and sunpy coordinate modules are importable.",
|
| 309 |
+
)
|
| 310 |
+
try:
|
| 311 |
+
fn = self._modules["sunpy.coordinates.sun"].angular_radius
|
| 312 |
+
value = fn(time=time)
|
| 313 |
+
return self._ok(result=value)
|
| 314 |
+
except Exception as exc:
|
| 315 |
+
return self._err(
|
| 316 |
+
message=f"Failed to compute solar angular radius: {exc}",
|
| 317 |
+
guidance="Provide a valid time input or use default 'now'.",
|
| 318 |
+
)
|
| 319 |
+
|
| 320 |
+
# -------------------------------------------------------------------------
|
| 321 |
+
# Physics helpers
|
| 322 |
+
# -------------------------------------------------------------------------
|
| 323 |
+
def call_diff_rot(self, duration: Any, latitude: Any, rot_type: str = "howard", frame_time: str = "sidereal") -> Dict[str, Any]:
|
| 324 |
+
"""
|
| 325 |
+
Compute solar differential rotation using SunPy physics helper.
|
| 326 |
+
|
| 327 |
+
Args:
|
| 328 |
+
duration: Time duration quantity (e.g., astropy.units day/hour quantity).
|
| 329 |
+
latitude: Latitude quantity/array in angular units.
|
| 330 |
+
rot_type: Rotation model (e.g., 'howard', 'snodgrass', 'allen', 'rigid').
|
| 331 |
+
frame_time: 'sidereal' or 'synodic'.
|
| 332 |
+
|
| 333 |
+
Returns:
|
| 334 |
+
dict: Unified status with rotation result on success.
|
| 335 |
+
"""
|
| 336 |
+
if "sunpy.physics.differential_rotation" not in self._modules:
|
| 337 |
+
return self._fallback(
|
| 338 |
+
message="sunpy.physics.differential_rotation is not available in import mode.",
|
| 339 |
+
guidance="Ensure sunpy physics module and unit dependencies are installed.",
|
| 340 |
+
)
|
| 341 |
+
try:
|
| 342 |
+
fn = self._modules["sunpy.physics.differential_rotation"].diff_rot
|
| 343 |
+
result = fn(duration=duration, latitude=latitude, rot_type=rot_type, frame_time=frame_time)
|
| 344 |
+
return self._ok(result=result)
|
| 345 |
+
except Exception as exc:
|
| 346 |
+
return self._err(
|
| 347 |
+
message=f"Differential rotation computation failed: {exc}",
|
| 348 |
+
guidance="Validate duration/latitude units and model arguments.",
|
| 349 |
+
)
|
sunpy/mcp_output/mcp_plugin/main.py
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
MCP Service Auto-Wrapper - Auto-generated
|
| 3 |
+
"""
|
| 4 |
+
from mcp_service import create_app
|
| 5 |
+
|
| 6 |
+
def main():
|
| 7 |
+
"""Main entry point"""
|
| 8 |
+
app = create_app()
|
| 9 |
+
return app
|
| 10 |
+
|
| 11 |
+
if __name__ == "__main__":
|
| 12 |
+
app = main()
|
| 13 |
+
app.run()
|
sunpy/mcp_output/mcp_plugin/mcp_service.py
ADDED
|
@@ -0,0 +1,274 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
import sys
|
| 3 |
+
from typing import Any
|
| 4 |
+
|
| 5 |
+
source_path = os.path.join(
|
| 6 |
+
os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))),
|
| 7 |
+
"source",
|
| 8 |
+
)
|
| 9 |
+
if source_path not in sys.path:
|
| 10 |
+
sys.path.insert(0, source_path)
|
| 11 |
+
|
| 12 |
+
from fastmcp import FastMCP
|
| 13 |
+
|
| 14 |
+
import sunpy.coordinates as sunpy_coordinates
|
| 15 |
+
import sunpy.map as sunpy_map
|
| 16 |
+
import sunpy.net as sunpy_net
|
| 17 |
+
import sunpy.time as sunpy_time
|
| 18 |
+
import sunpy.timeseries as sunpy_timeseries
|
| 19 |
+
|
| 20 |
+
mcp = FastMCP("sunpy_mcp_service")
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
@mcp.tool(
|
| 24 |
+
name="parse_time",
|
| 25 |
+
description="Parse a time input into an Astropy Time object representation.",
|
| 26 |
+
)
|
| 27 |
+
def parse_time(time_input: str) -> dict[str, Any]:
|
| 28 |
+
"""
|
| 29 |
+
Parse a user-provided time string into SunPy/Astropy time.
|
| 30 |
+
|
| 31 |
+
Parameters:
|
| 32 |
+
time_input: Time string or supported time format (e.g. ISO timestamp).
|
| 33 |
+
|
| 34 |
+
Returns:
|
| 35 |
+
Dictionary with:
|
| 36 |
+
- success: bool indicating whether parsing succeeded
|
| 37 |
+
- result: Parsed time as string on success, else None
|
| 38 |
+
- error: Error message on failure, else None
|
| 39 |
+
"""
|
| 40 |
+
try:
|
| 41 |
+
parsed = sunpy_time.parse_time(time_input)
|
| 42 |
+
return {"success": True, "result": str(parsed), "error": None}
|
| 43 |
+
except Exception as exc:
|
| 44 |
+
return {"success": False, "result": None, "error": str(exc)}
|
| 45 |
+
|
| 46 |
+
|
| 47 |
+
@mcp.tool(
|
| 48 |
+
name="create_time_range",
|
| 49 |
+
description="Create a SunPy TimeRange from start and end timestamps.",
|
| 50 |
+
)
|
| 51 |
+
def create_time_range(start: str, end: str) -> dict[str, Any]:
|
| 52 |
+
"""
|
| 53 |
+
Create a time range object.
|
| 54 |
+
|
| 55 |
+
Parameters:
|
| 56 |
+
start: Start timestamp string.
|
| 57 |
+
end: End timestamp string.
|
| 58 |
+
|
| 59 |
+
Returns:
|
| 60 |
+
Dictionary with:
|
| 61 |
+
- success: bool
|
| 62 |
+
- result: TimeRange summary string on success, else None
|
| 63 |
+
- error: Error message on failure, else None
|
| 64 |
+
"""
|
| 65 |
+
try:
|
| 66 |
+
tr = sunpy_time.TimeRange(start, end)
|
| 67 |
+
return {"success": True, "result": str(tr), "error": None}
|
| 68 |
+
except Exception as exc:
|
| 69 |
+
return {"success": False, "result": None, "error": str(exc)}
|
| 70 |
+
|
| 71 |
+
|
| 72 |
+
@mcp.tool(
|
| 73 |
+
name="load_map",
|
| 74 |
+
description="Load a SunPy map from a file path.",
|
| 75 |
+
)
|
| 76 |
+
def load_map(file_path: str) -> dict[str, Any]:
|
| 77 |
+
"""
|
| 78 |
+
Load a map using sunpy.map.Map.
|
| 79 |
+
|
| 80 |
+
Parameters:
|
| 81 |
+
file_path: Path to a solar data file supported by SunPy.
|
| 82 |
+
|
| 83 |
+
Returns:
|
| 84 |
+
Dictionary with:
|
| 85 |
+
- success: bool
|
| 86 |
+
- result: Basic map metadata on success, else None
|
| 87 |
+
- error: Error message on failure, else None
|
| 88 |
+
"""
|
| 89 |
+
try:
|
| 90 |
+
m = sunpy_map.Map(file_path)
|
| 91 |
+
result = {
|
| 92 |
+
"map_type": type(m).__name__,
|
| 93 |
+
"instrument": str(getattr(m, "instrument", "")),
|
| 94 |
+
"observatory": str(getattr(m, "observatory", "")),
|
| 95 |
+
"date": str(getattr(m, "date", "")),
|
| 96 |
+
"dimensions": str(getattr(m, "dimensions", "")),
|
| 97 |
+
"wavelength": str(getattr(m, "wavelength", "")),
|
| 98 |
+
}
|
| 99 |
+
return {"success": True, "result": result, "error": None}
|
| 100 |
+
except Exception as exc:
|
| 101 |
+
return {"success": False, "result": None, "error": str(exc)}
|
| 102 |
+
|
| 103 |
+
|
| 104 |
+
@mcp.tool(
|
| 105 |
+
name="map_subregion_info",
|
| 106 |
+
description="Extract submap info using coordinate bounds in arcseconds.",
|
| 107 |
+
)
|
| 108 |
+
def map_subregion_info(
|
| 109 |
+
file_path: str,
|
| 110 |
+
bottom_left_tx_arcsec: float,
|
| 111 |
+
bottom_left_ty_arcsec: float,
|
| 112 |
+
top_right_tx_arcsec: float,
|
| 113 |
+
top_right_ty_arcsec: float,
|
| 114 |
+
) -> dict[str, Any]:
|
| 115 |
+
"""
|
| 116 |
+
Build a submap from helioprojective bounds and return summary information.
|
| 117 |
+
|
| 118 |
+
Parameters:
|
| 119 |
+
file_path: Input map file path.
|
| 120 |
+
bottom_left_tx_arcsec: Bottom-left x (arcsec).
|
| 121 |
+
bottom_left_ty_arcsec: Bottom-left y (arcsec).
|
| 122 |
+
top_right_tx_arcsec: Top-right x (arcsec).
|
| 123 |
+
top_right_ty_arcsec: Top-right y (arcsec).
|
| 124 |
+
|
| 125 |
+
Returns:
|
| 126 |
+
Dictionary with:
|
| 127 |
+
- success: bool
|
| 128 |
+
- result: Submap summary on success, else None
|
| 129 |
+
- error: Error message on failure, else None
|
| 130 |
+
"""
|
| 131 |
+
try:
|
| 132 |
+
import astropy.units as u
|
| 133 |
+
from astropy.coordinates import SkyCoord
|
| 134 |
+
|
| 135 |
+
m = sunpy_map.Map(file_path)
|
| 136 |
+
frame = m.coordinate_frame
|
| 137 |
+
bl = SkyCoord(bottom_left_tx_arcsec * u.arcsec, bottom_left_ty_arcsec * u.arcsec, frame=frame)
|
| 138 |
+
tr = SkyCoord(top_right_tx_arcsec * u.arcsec, top_right_ty_arcsec * u.arcsec, frame=frame)
|
| 139 |
+
sub = m.submap(bl, top_right=tr)
|
| 140 |
+
result = {
|
| 141 |
+
"shape": str(sub.data.shape),
|
| 142 |
+
"date": str(getattr(sub, "date", "")),
|
| 143 |
+
"dimensions": str(getattr(sub, "dimensions", "")),
|
| 144 |
+
}
|
| 145 |
+
return {"success": True, "result": result, "error": None}
|
| 146 |
+
except Exception as exc:
|
| 147 |
+
return {"success": False, "result": None, "error": str(exc)}
|
| 148 |
+
|
| 149 |
+
|
| 150 |
+
@mcp.tool(
|
| 151 |
+
name="search_fido",
|
| 152 |
+
description="Search remote solar data using sunpy.net.Fido.",
|
| 153 |
+
)
|
| 154 |
+
def search_fido(
|
| 155 |
+
start_time: str,
|
| 156 |
+
end_time: str,
|
| 157 |
+
instrument: str,
|
| 158 |
+
) -> dict[str, Any]:
|
| 159 |
+
"""
|
| 160 |
+
Query SunPy Fido for data matching time range and instrument.
|
| 161 |
+
|
| 162 |
+
Parameters:
|
| 163 |
+
start_time: Query start time.
|
| 164 |
+
end_time: Query end time.
|
| 165 |
+
instrument: Instrument name (e.g. AIA, HMI, EIT).
|
| 166 |
+
|
| 167 |
+
Returns:
|
| 168 |
+
Dictionary with:
|
| 169 |
+
- success: bool
|
| 170 |
+
- result: Stringified query response on success, else None
|
| 171 |
+
- error: Error message on failure, else None
|
| 172 |
+
"""
|
| 173 |
+
try:
|
| 174 |
+
from sunpy.net import attrs as a
|
| 175 |
+
|
| 176 |
+
query = sunpy_net.Fido.search(
|
| 177 |
+
a.Time(start_time, end_time),
|
| 178 |
+
a.Instrument(instrument),
|
| 179 |
+
)
|
| 180 |
+
return {"success": True, "result": str(query), "error": None}
|
| 181 |
+
except Exception as exc:
|
| 182 |
+
return {"success": False, "result": None, "error": str(exc)}
|
| 183 |
+
|
| 184 |
+
|
| 185 |
+
@mcp.tool(
|
| 186 |
+
name="peek_timeseries",
|
| 187 |
+
description="Load a SunPy TimeSeries and return core metadata.",
|
| 188 |
+
)
|
| 189 |
+
def peek_timeseries(file_path: str) -> dict[str, Any]:
|
| 190 |
+
"""
|
| 191 |
+
Load a timeseries file and expose core descriptive information.
|
| 192 |
+
|
| 193 |
+
Parameters:
|
| 194 |
+
file_path: Path to a time series file.
|
| 195 |
+
|
| 196 |
+
Returns:
|
| 197 |
+
Dictionary with:
|
| 198 |
+
- success: bool
|
| 199 |
+
- result: TimeSeries summary on success, else None
|
| 200 |
+
- error: Error message on failure, else None
|
| 201 |
+
"""
|
| 202 |
+
try:
|
| 203 |
+
ts = sunpy_timeseries.TimeSeries(file_path)
|
| 204 |
+
result = {
|
| 205 |
+
"timeseries_type": type(ts).__name__,
|
| 206 |
+
"columns": list(ts.columns) if hasattr(ts, "columns") else [],
|
| 207 |
+
"time_range": str(getattr(ts, "time_range", "")),
|
| 208 |
+
"units": str(getattr(ts, "units", "")),
|
| 209 |
+
}
|
| 210 |
+
return {"success": True, "result": result, "error": None}
|
| 211 |
+
except Exception as exc:
|
| 212 |
+
return {"success": False, "result": None, "error": str(exc)}
|
| 213 |
+
|
| 214 |
+
|
| 215 |
+
@mcp.tool(
|
| 216 |
+
name="solar_angular_radius",
|
| 217 |
+
description="Compute apparent solar angular radius at a given time.",
|
| 218 |
+
)
|
| 219 |
+
def solar_angular_radius(time_input: str) -> dict[str, Any]:
|
| 220 |
+
"""
|
| 221 |
+
Compute solar angular radius using sunpy.coordinates.sun.
|
| 222 |
+
|
| 223 |
+
Parameters:
|
| 224 |
+
time_input: Observation time.
|
| 225 |
+
|
| 226 |
+
Returns:
|
| 227 |
+
Dictionary with:
|
| 228 |
+
- success: bool
|
| 229 |
+
- result: Angular radius string on success, else None
|
| 230 |
+
- error: Error message on failure, else None
|
| 231 |
+
"""
|
| 232 |
+
try:
|
| 233 |
+
from sunpy.coordinates import sun
|
| 234 |
+
|
| 235 |
+
t = sunpy_time.parse_time(time_input)
|
| 236 |
+
radius = sun.angular_radius(t)
|
| 237 |
+
return {"success": True, "result": str(radius), "error": None}
|
| 238 |
+
except Exception as exc:
|
| 239 |
+
return {"success": False, "result": None, "error": str(exc)}
|
| 240 |
+
|
| 241 |
+
|
| 242 |
+
@mcp.tool(
|
| 243 |
+
name="earth_sun_distance",
|
| 244 |
+
description="Compute Earth-Sun distance at a given time.",
|
| 245 |
+
)
|
| 246 |
+
def earth_sun_distance(time_input: str) -> dict[str, Any]:
|
| 247 |
+
"""
|
| 248 |
+
Compute Earth-Sun distance via sunpy.coordinates.sun.
|
| 249 |
+
|
| 250 |
+
Parameters:
|
| 251 |
+
time_input: Observation time.
|
| 252 |
+
|
| 253 |
+
Returns:
|
| 254 |
+
Dictionary with:
|
| 255 |
+
- success: bool
|
| 256 |
+
- result: Distance string on success, else None
|
| 257 |
+
- error: Error message on failure, else None
|
| 258 |
+
"""
|
| 259 |
+
try:
|
| 260 |
+
from sunpy.coordinates import sun
|
| 261 |
+
|
| 262 |
+
t = sunpy_time.parse_time(time_input)
|
| 263 |
+
distance = sun.earth_distance(t)
|
| 264 |
+
return {"success": True, "result": str(distance), "error": None}
|
| 265 |
+
except Exception as exc:
|
| 266 |
+
return {"success": False, "result": None, "error": str(exc)}
|
| 267 |
+
|
| 268 |
+
|
| 269 |
+
def create_app() -> FastMCP:
|
| 270 |
+
return mcp
|
| 271 |
+
|
| 272 |
+
|
| 273 |
+
if __name__ == "__main__":
|
| 274 |
+
mcp.run()
|
sunpy/mcp_output/requirements.txt
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
fastmcp
|
| 2 |
+
fastapi
|
| 3 |
+
uvicorn[standard]
|
| 4 |
+
pydantic>=2.0.0
|
| 5 |
+
astropy>=6.1.0
|
| 6 |
+
fsspec>=2023.6.0
|
| 7 |
+
numpy>=1.26.0
|
| 8 |
+
packaging>=23.2
|
| 9 |
+
parfive[ftp]>=2.1.0
|
| 10 |
+
pyerfa>=2.0.1.1
|
| 11 |
+
requests>=2.32.1
|
sunpy/mcp_output/start_mcp.py
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
"""
|
| 3 |
+
MCP Service Startup Entry
|
| 4 |
+
"""
|
| 5 |
+
import sys
|
| 6 |
+
import os
|
| 7 |
+
|
| 8 |
+
project_root = os.path.dirname(os.path.abspath(__file__))
|
| 9 |
+
mcp_plugin_dir = os.path.join(project_root, "mcp_plugin")
|
| 10 |
+
if mcp_plugin_dir not in sys.path:
|
| 11 |
+
sys.path.insert(0, mcp_plugin_dir)
|
| 12 |
+
|
| 13 |
+
from mcp_service import create_app
|
| 14 |
+
|
| 15 |
+
def main():
|
| 16 |
+
"""Start FastMCP service"""
|
| 17 |
+
app = create_app()
|
| 18 |
+
# Use environment variable to configure port, default 8000
|
| 19 |
+
port = int(os.environ.get("MCP_PORT", "8000"))
|
| 20 |
+
|
| 21 |
+
# Choose transport mode based on environment variable
|
| 22 |
+
transport = os.environ.get("MCP_TRANSPORT", "stdio")
|
| 23 |
+
if transport == "http":
|
| 24 |
+
app.run(transport="http", host="0.0.0.0", port=port)
|
| 25 |
+
else:
|
| 26 |
+
# Default to STDIO mode
|
| 27 |
+
app.run()
|
| 28 |
+
|
| 29 |
+
if __name__ == "__main__":
|
| 30 |
+
main()
|
sunpy/mcp_output/workflow_summary.json
ADDED
|
@@ -0,0 +1,237 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"repository": {
|
| 3 |
+
"name": "sunpy",
|
| 4 |
+
"url": "https://github.com/sunpy/sunpy",
|
| 5 |
+
"local_path": "/Users/ghh/Documents/Code/Code2MCP-private/workspace/sunpy",
|
| 6 |
+
"description": "Python library",
|
| 7 |
+
"features": "Basic functionality",
|
| 8 |
+
"tech_stack": "Python",
|
| 9 |
+
"stars": 0,
|
| 10 |
+
"forks": 0,
|
| 11 |
+
"language": "Python",
|
| 12 |
+
"last_updated": "",
|
| 13 |
+
"complexity": "medium",
|
| 14 |
+
"intrusiveness_risk": "low"
|
| 15 |
+
},
|
| 16 |
+
"execution": {
|
| 17 |
+
"start_time": 1773267411.486086,
|
| 18 |
+
"end_time": 1773267629.4328032,
|
| 19 |
+
"duration": 217.94671726226807,
|
| 20 |
+
"status": "success",
|
| 21 |
+
"workflow_status": "success",
|
| 22 |
+
"nodes_executed": [
|
| 23 |
+
"download",
|
| 24 |
+
"analysis",
|
| 25 |
+
"env",
|
| 26 |
+
"generate",
|
| 27 |
+
"run",
|
| 28 |
+
"review",
|
| 29 |
+
"finalize"
|
| 30 |
+
],
|
| 31 |
+
"total_files_processed": 17,
|
| 32 |
+
"environment_type": "unknown",
|
| 33 |
+
"llm_calls": 0,
|
| 34 |
+
"deepwiki_calls": 0
|
| 35 |
+
},
|
| 36 |
+
"tests": {
|
| 37 |
+
"original_project": {
|
| 38 |
+
"passed": false,
|
| 39 |
+
"details": {},
|
| 40 |
+
"test_coverage": "100%",
|
| 41 |
+
"execution_time": 0,
|
| 42 |
+
"test_files": []
|
| 43 |
+
},
|
| 44 |
+
"mcp_plugin": {
|
| 45 |
+
"passed": true,
|
| 46 |
+
"details": {},
|
| 47 |
+
"service_health": "healthy",
|
| 48 |
+
"startup_time": 0,
|
| 49 |
+
"transport_mode": "stdio",
|
| 50 |
+
"fastmcp_version": "unknown",
|
| 51 |
+
"mcp_version": "unknown"
|
| 52 |
+
}
|
| 53 |
+
},
|
| 54 |
+
"analysis": {
|
| 55 |
+
"structure": {
|
| 56 |
+
"packages": [
|
| 57 |
+
"source.benchmarks",
|
| 58 |
+
"source.sunpy",
|
| 59 |
+
"source.sunpy._dev",
|
| 60 |
+
"source.sunpy.coordinates",
|
| 61 |
+
"source.sunpy.data",
|
| 62 |
+
"source.sunpy.extern",
|
| 63 |
+
"source.sunpy.image",
|
| 64 |
+
"source.sunpy.io",
|
| 65 |
+
"source.sunpy.map",
|
| 66 |
+
"source.sunpy.net",
|
| 67 |
+
"source.sunpy.physics",
|
| 68 |
+
"source.sunpy.sun",
|
| 69 |
+
"source.sunpy.tests",
|
| 70 |
+
"source.sunpy.time",
|
| 71 |
+
"source.sunpy.timeseries",
|
| 72 |
+
"source.sunpy.util",
|
| 73 |
+
"source.sunpy.visualization"
|
| 74 |
+
]
|
| 75 |
+
},
|
| 76 |
+
"dependencies": {
|
| 77 |
+
"has_environment_yml": false,
|
| 78 |
+
"has_requirements_txt": false,
|
| 79 |
+
"pyproject": true,
|
| 80 |
+
"setup_cfg": false,
|
| 81 |
+
"setup_py": false
|
| 82 |
+
},
|
| 83 |
+
"entry_points": {
|
| 84 |
+
"imports": [],
|
| 85 |
+
"cli": [],
|
| 86 |
+
"modules": []
|
| 87 |
+
},
|
| 88 |
+
"risk_assessment": {
|
| 89 |
+
"import_feasibility": 0.9,
|
| 90 |
+
"intrusiveness_risk": "low",
|
| 91 |
+
"complexity": "medium"
|
| 92 |
+
},
|
| 93 |
+
"deepwiki_analysis": {
|
| 94 |
+
"repo_url": "https://github.com/sunpy/sunpy",
|
| 95 |
+
"repo_name": "sunpy",
|
| 96 |
+
"error": "DeepWiki analysis failed",
|
| 97 |
+
"model": "gpt-5.3-codex",
|
| 98 |
+
"source": "llm_direct_analysis",
|
| 99 |
+
"success": false
|
| 100 |
+
},
|
| 101 |
+
"code_complexity": {
|
| 102 |
+
"cyclomatic_complexity": "medium",
|
| 103 |
+
"cognitive_complexity": "medium",
|
| 104 |
+
"maintainability_index": 75
|
| 105 |
+
},
|
| 106 |
+
"security_analysis": {
|
| 107 |
+
"vulnerabilities_found": 0,
|
| 108 |
+
"security_score": 85,
|
| 109 |
+
"recommendations": []
|
| 110 |
+
}
|
| 111 |
+
},
|
| 112 |
+
"plugin_generation": {
|
| 113 |
+
"files_created": [
|
| 114 |
+
"mcp_output/start_mcp.py",
|
| 115 |
+
"mcp_output/mcp_plugin/__init__.py",
|
| 116 |
+
"mcp_output/mcp_plugin/mcp_service.py",
|
| 117 |
+
"mcp_output/mcp_plugin/adapter.py",
|
| 118 |
+
"mcp_output/mcp_plugin/main.py",
|
| 119 |
+
"mcp_output/requirements.txt",
|
| 120 |
+
"mcp_output/README_MCP.md"
|
| 121 |
+
],
|
| 122 |
+
"main_entry": "start_mcp.py",
|
| 123 |
+
"requirements": [
|
| 124 |
+
"fastmcp>=0.1.0",
|
| 125 |
+
"pydantic>=2.0.0"
|
| 126 |
+
],
|
| 127 |
+
"readme_path": "/Users/ghh/Documents/Code/Code2MCP-private/workspace/sunpy/mcp_output/README_MCP.md",
|
| 128 |
+
"adapter_mode": "import",
|
| 129 |
+
"total_lines_of_code": 0,
|
| 130 |
+
"generated_files_size": 0,
|
| 131 |
+
"tool_endpoints": 0,
|
| 132 |
+
"supported_features": [
|
| 133 |
+
"Basic functionality"
|
| 134 |
+
],
|
| 135 |
+
"generated_tools": [
|
| 136 |
+
"Basic tools",
|
| 137 |
+
"Health check tools",
|
| 138 |
+
"Version info tools"
|
| 139 |
+
]
|
| 140 |
+
},
|
| 141 |
+
"code_review": {},
|
| 142 |
+
"errors": [],
|
| 143 |
+
"warnings": [],
|
| 144 |
+
"recommendations": [
|
| 145 |
+
"add a minimal smoke-test suite for MCP endpoints (server boot",
|
| 146 |
+
"endpoint discovery",
|
| 147 |
+
"one happy-path call per endpoint)",
|
| 148 |
+
"add contract tests with fixed fixtures for high-value tools (`parse_time`",
|
| 149 |
+
"`TimeRange`",
|
| 150 |
+
"`angular_radius`",
|
| 151 |
+
"`MapFactory`) to catch upstream API drift",
|
| 152 |
+
"introduce endpoint input/output schemas (Pydantic models) with stricter validation and clearer error messages",
|
| 153 |
+
"create a dependency-tiered CI matrix (core-only vs optional extras like `reproject/drms/zeep/asdf`) and mark endpoint availability accordingly",
|
| 154 |
+
"implement graceful degradation for missing optional dependencies with actionable install hints in responses",
|
| 155 |
+
"add timeout/retry/circuit-breaker guards around network-backed flows (notably `UnifiedDownloaderFactory`) to improve MCP reliability",
|
| 156 |
+
"provide async-safe wrappers or explicit sync execution boundaries for blocking SunPy calls to avoid event-loop stalls",
|
| 157 |
+
"add lightweight performance benchmarks for representative operations (time parsing",
|
| 158 |
+
"map creation",
|
| 159 |
+
"simple Fido query) and track regressions in CI",
|
| 160 |
+
"pin and periodically refresh MCP plugin requirements plus add compatibility tests against multiple SunPy/Astropy versions",
|
| 161 |
+
"expand `README_MCP.md` with concrete endpoint examples",
|
| 162 |
+
"dependency profiles",
|
| 163 |
+
"and troubleshooting for common import/runtime failures",
|
| 164 |
+
"add structured logging and request correlation IDs in `mcp_service.py` for observability and easier incident triage",
|
| 165 |
+
"add caching for deterministic expensive computations (ephemeris/time parsing hot paths) with bounded TTL/size",
|
| 166 |
+
"expose a health/readiness endpoint that verifies critical imports and optional capability flags",
|
| 167 |
+
"add security hardening (input size limits",
|
| 168 |
+
"safe path handling for file/map inputs",
|
| 169 |
+
"redaction of sensitive URLs/tokens in logs)",
|
| 170 |
+
"and document/automate release checks (lint",
|
| 171 |
+
"type-check",
|
| 172 |
+
"smoke tests",
|
| 173 |
+
"version bump) for the generated MCP plugin"
|
| 174 |
+
],
|
| 175 |
+
"performance_metrics": {
|
| 176 |
+
"memory_usage_mb": 0,
|
| 177 |
+
"cpu_usage_percent": 0,
|
| 178 |
+
"response_time_ms": 0,
|
| 179 |
+
"throughput_requests_per_second": 0
|
| 180 |
+
},
|
| 181 |
+
"deployment_info": {
|
| 182 |
+
"supported_platforms": [
|
| 183 |
+
"Linux",
|
| 184 |
+
"Windows",
|
| 185 |
+
"macOS"
|
| 186 |
+
],
|
| 187 |
+
"python_versions": [
|
| 188 |
+
"3.8",
|
| 189 |
+
"3.9",
|
| 190 |
+
"3.10",
|
| 191 |
+
"3.11",
|
| 192 |
+
"3.12"
|
| 193 |
+
],
|
| 194 |
+
"deployment_methods": [
|
| 195 |
+
"Docker",
|
| 196 |
+
"pip",
|
| 197 |
+
"conda"
|
| 198 |
+
],
|
| 199 |
+
"monitoring_support": true,
|
| 200 |
+
"logging_configuration": "structured"
|
| 201 |
+
},
|
| 202 |
+
"execution_analysis": {
|
| 203 |
+
"success_factors": [
|
| 204 |
+
"Workflow completed end-to-end with status=success across all planned nodes (download, analysis, env, generate, run, review, finalize).",
|
| 205 |
+
"Import-mode adapter strategy was feasible (import_feasibility=0.9), enabling direct wrapping of SunPy core APIs.",
|
| 206 |
+
"Generated MCP service booted healthy over stdio and plugin-level tests passed.",
|
| 207 |
+
"Low intrusiveness risk and medium complexity profile allowed non-invasive service scaffolding.",
|
| 208 |
+
"Repository analysis successfully completed via zip fallback despite DeepWiki failure."
|
| 209 |
+
],
|
| 210 |
+
"failure_reasons": [
|
| 211 |
+
"No hard execution failure detected.",
|
| 212 |
+
"DeepWiki analysis failed (non-blocking) and reduced depth of automated semantic enrichment.",
|
| 213 |
+
"Observability/metrics gaps (0 for memory/cpu/latency/throughput) prevent runtime efficiency validation.",
|
| 214 |
+
"Original project test result indicates passed=false with empty details; this is a validation coverage gap rather than a workflow crash."
|
| 215 |
+
],
|
| 216 |
+
"overall_assessment": "good",
|
| 217 |
+
"node_performance": {
|
| 218 |
+
"download_time": "Node completed successfully; exact per-node timing not provided. Repository ingestion worked via zip fallback for a large codebase (~582 files).",
|
| 219 |
+
"analysis_time": "Completed successfully with comprehensive package/dependency/risk mapping; medium complexity correctly identified.",
|
| 220 |
+
"generation_time": "Completed successfully; 7 MCP files generated with import adapter and 19 endpoint mappings identified in service info.",
|
| 221 |
+
"test_time": "MCP plugin health checks passed (healthy/stdin transport). Test depth appears minimal (startup and basic checks), with no granular endpoint contract/performance timings."
|
| 222 |
+
},
|
| 223 |
+
"resource_usage": {
|
| 224 |
+
"memory_efficiency": "Unknown due to missing telemetry (reported 0 MB). Instrument memory profiling in CI/runtime.",
|
| 225 |
+
"cpu_efficiency": "Unknown due to missing telemetry (reported 0%). Add CPU sampling for endpoint calls.",
|
| 226 |
+
"disk_usage": "Generated artifact footprint recorded as 0 (likely instrumentation/reporting defect). Actual disk use is non-zero given multiple generated files."
|
| 227 |
+
}
|
| 228 |
+
},
|
| 229 |
+
"technical_quality": {
|
| 230 |
+
"code_quality_score": 74,
|
| 231 |
+
"architecture_score": 78,
|
| 232 |
+
"performance_score": 61,
|
| 233 |
+
"maintainability_score": 76,
|
| 234 |
+
"security_score": 85,
|
| 235 |
+
"scalability_score": 68
|
| 236 |
+
}
|
| 237 |
+
}
|
sunpy/source/.DS_Store
ADDED
|
Binary file (8.2 kB). View file
|
|
|
sunpy/source/.circleci/codecov_upload.sh
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash -e
|
| 2 |
+
curl https://keybase.io/codecovsecurity/pgp_keys.asc | gpg --no-default-keyring --keyring trustedkeys.gpg --import
|
| 3 |
+
curl -Os https://uploader.codecov.io/latest/linux/codecov
|
| 4 |
+
curl -Os https://uploader.codecov.io/latest/linux/codecov.SHA256SUM
|
| 5 |
+
curl -Os https://uploader.codecov.io/latest/linux/codecov.SHA256SUM.sig
|
| 6 |
+
gpgv codecov.SHA256SUM.sig codecov.SHA256SUM
|
| 7 |
+
shasum -a 256 -c codecov.SHA256SUM
|
| 8 |
+
chmod +x codecov
|
| 9 |
+
./codecov "$@"
|
sunpy/source/.circleci/config.yml
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version: 2.1
|
| 2 |
+
|
| 3 |
+
no-backports: &no-backports
|
| 4 |
+
name: Skip any branches called cherry-pick
|
| 5 |
+
command: |
|
| 6 |
+
if [[ "${CIRCLE_BRANCH}" == *"cherry-pick"* || "${CIRCLE_BRANCH}" == *"backport"* ]]; then
|
| 7 |
+
circleci step halt
|
| 8 |
+
fi
|
| 9 |
+
|
| 10 |
+
skip-check: &skip-check
|
| 11 |
+
name: Check for [ci skip]
|
| 12 |
+
command: bash .circleci/early_exit.sh
|
| 13 |
+
|
| 14 |
+
merge-check: &merge-check
|
| 15 |
+
name: Check if we need to merge upstream main
|
| 16 |
+
command: |
|
| 17 |
+
if [[ -n "${CIRCLE_PR_NUMBER}" ]]; then
|
| 18 |
+
git fetch origin --tags
|
| 19 |
+
git fetch origin +refs/pull/$CIRCLE_PR_NUMBER/merge:pr/$CIRCLE_PR_NUMBER/merge
|
| 20 |
+
git checkout -qf pr/$CIRCLE_PR_NUMBER/merge
|
| 21 |
+
fi
|
| 22 |
+
|
| 23 |
+
apt-run: &apt-install
|
| 24 |
+
name: Install apt packages
|
| 25 |
+
command: |
|
| 26 |
+
sudo apt update
|
| 27 |
+
sudo apt install -y libopenjp2-7
|
| 28 |
+
|
| 29 |
+
jobs:
|
| 30 |
+
figure:
|
| 31 |
+
parameters:
|
| 32 |
+
jobname:
|
| 33 |
+
type: string
|
| 34 |
+
docker:
|
| 35 |
+
- image: cimg/python:3.12
|
| 36 |
+
environment:
|
| 37 |
+
TOXENV=<< parameters.jobname >>
|
| 38 |
+
steps:
|
| 39 |
+
- run: *no-backports
|
| 40 |
+
- checkout
|
| 41 |
+
- run: *skip-check
|
| 42 |
+
- run: *merge-check
|
| 43 |
+
- run: *apt-install
|
| 44 |
+
- run: pip install --user -U tox tox-pypi-filter
|
| 45 |
+
- run: tox -v -- -n 4
|
| 46 |
+
- run:
|
| 47 |
+
name: Running codecov
|
| 48 |
+
command: bash -e .circleci/codecov_upload.sh -f ".tmp/${TOXENV}/coverage.xml"
|
| 49 |
+
- store_artifacts:
|
| 50 |
+
path: .tmp/<< parameters.jobname >>/figure_test_images
|
| 51 |
+
- run:
|
| 52 |
+
name: "Image comparison page is available at: "
|
| 53 |
+
command: echo "${CIRCLE_BUILD_URL}/artifacts/${CIRCLE_NODE_INDEX}/.tmp/${TOXENV}/figure_test_images/fig_comparison.html"
|
| 54 |
+
|
| 55 |
+
deploy-reference-images:
|
| 56 |
+
parameters:
|
| 57 |
+
jobname:
|
| 58 |
+
type: string
|
| 59 |
+
docker:
|
| 60 |
+
- image: cimg/python:3.12
|
| 61 |
+
environment:
|
| 62 |
+
TOXENV: << parameters.jobname >>
|
| 63 |
+
GIT_SSH_COMMAND: ssh -i ~/.ssh/id_rsa_7b8fc81c13a3b446ec9aa50d3f626978
|
| 64 |
+
steps:
|
| 65 |
+
- checkout
|
| 66 |
+
- run: *skip-check
|
| 67 |
+
- run: *merge-check
|
| 68 |
+
- run: *apt-install
|
| 69 |
+
# Clear out all the ssh keys so that it always uses the write deploy key
|
| 70 |
+
- run: ssh-add -D
|
| 71 |
+
# Add private key for deploying to the figure tests repo
|
| 72 |
+
- add_ssh_keys:
|
| 73 |
+
fingerprints: "7b:8f:c8:1c:13:a3:b4:46:ec:9a:a5:0d:3f:62:69:78"
|
| 74 |
+
- run: ssh-keyscan github.com >> ~/.ssh/known_hosts
|
| 75 |
+
- run: git config --global user.email "sunpy@circleci" && git config --global user.name "SunPy Circle CI"
|
| 76 |
+
- run: git clone git@github.com:sunpy/sunpy-figure-tests.git --depth 1 -b sunpy-${CIRCLE_BRANCH} ~/sunpy-figure-tests/
|
| 77 |
+
# Generate Reference images
|
| 78 |
+
- run: pip install --user -U tox tox-pypi-filter
|
| 79 |
+
- run: rm -rf /home/circleci/sunpy-figure-tests/figures/$TOXENV/*
|
| 80 |
+
- run: tox -v -- -n 4 --mpl-generate-path=/home/circleci/sunpy-figure-tests/figures/$TOXENV | tee toxlog
|
| 81 |
+
- run: |
|
| 82 |
+
hashlib=$(grep "^figure_hashes.*\.json$" toxlog)
|
| 83 |
+
cp ./sunpy/tests/$hashlib /home/circleci/sunpy-figure-tests/figures/$TOXENV/
|
| 84 |
+
- run: |
|
| 85 |
+
cd ~/sunpy-figure-tests/
|
| 86 |
+
git pull
|
| 87 |
+
git status
|
| 88 |
+
git add .
|
| 89 |
+
git commit -m "Update reference figures from ${CIRCLE_BRANCH}" || echo "No changes to reference images to deploy"
|
| 90 |
+
git push
|
| 91 |
+
|
| 92 |
+
workflows:
|
| 93 |
+
version: 2
|
| 94 |
+
|
| 95 |
+
figure-tests:
|
| 96 |
+
jobs:
|
| 97 |
+
- figure:
|
| 98 |
+
name: << matrix.jobname >>
|
| 99 |
+
matrix:
|
| 100 |
+
parameters:
|
| 101 |
+
jobname:
|
| 102 |
+
- "py312-figure"
|
| 103 |
+
- "py312-figure-devdeps"
|
| 104 |
+
|
| 105 |
+
- deploy-reference-images:
|
| 106 |
+
name: baseline-<< matrix.jobname >>
|
| 107 |
+
matrix:
|
| 108 |
+
parameters:
|
| 109 |
+
jobname:
|
| 110 |
+
- "py312-figure"
|
| 111 |
+
- "py312-figure-devdeps"
|
| 112 |
+
requires:
|
| 113 |
+
- << matrix.jobname >>
|
| 114 |
+
filters:
|
| 115 |
+
branches:
|
| 116 |
+
only:
|
| 117 |
+
- main
|
sunpy/source/.circleci/early_exit.sh
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
|
| 3 |
+
commitmessage=$(git log --pretty=%B -n 1)
|
| 4 |
+
if [[ $commitmessage = *"[ci skip]"* ]] || [[ $commitmessage = *"[skip ci]"* ]]; then
|
| 5 |
+
echo "Skipping build because [ci skip] found in commit message"
|
| 6 |
+
circleci step halt
|
| 7 |
+
fi
|
sunpy/source/.codecov.yaml
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
comment: off
|
| 2 |
+
coverage:
|
| 3 |
+
status:
|
| 4 |
+
project:
|
| 5 |
+
default:
|
| 6 |
+
threshold: 0.2%
|
| 7 |
+
|
| 8 |
+
codecov:
|
| 9 |
+
require_ci_to_pass: false
|
| 10 |
+
notify:
|
| 11 |
+
wait_for_ci: true
|
sunpy/source/.coveragerc
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[run]
|
| 2 |
+
omit =
|
| 3 |
+
sunpy/conftest.py
|
| 4 |
+
sunpy/*setup_package*
|
| 5 |
+
sunpy/extern/*
|
| 6 |
+
sunpy/version*
|
| 7 |
+
*/sunpy/conftest.py
|
| 8 |
+
*/sunpy/*setup_package*
|
| 9 |
+
*/sunpy/extern/*
|
| 10 |
+
*/sunpy/version*
|
| 11 |
+
disable_warnings =
|
| 12 |
+
module-not-measured
|
| 13 |
+
|
| 14 |
+
[report]
|
| 15 |
+
exclude_lines =
|
| 16 |
+
# Have to re-enable the standard pragma
|
| 17 |
+
pragma: no cover
|
| 18 |
+
# Don't complain about packages we have installed
|
| 19 |
+
except ImportError
|
| 20 |
+
# Don't complain if tests don't hit assertions
|
| 21 |
+
raise AssertionError
|
| 22 |
+
raise NotImplementedError
|
| 23 |
+
# Don't complain about script hooks
|
| 24 |
+
def main(.*):
|
| 25 |
+
# Ignore branches that don't pertain to this version of Python
|
| 26 |
+
pragma: py{ignore_python_version}
|
| 27 |
+
# Don't complain about IPython completion helper
|
| 28 |
+
def _ipython_key_completions_
|
| 29 |
+
# typing.TYPE_CHECKING is False at runtime
|
| 30 |
+
if TYPE_CHECKING:
|
| 31 |
+
# Ignore typing overloads
|
| 32 |
+
@overload
|
sunpy/source/.cruft.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"template": "https://github.com/sunpy/package-template",
|
| 3 |
+
"commit": "9fdedba64f2ea78ba2fb3023285fb22a434cd91f",
|
| 4 |
+
"checkout": null,
|
| 5 |
+
"context": {
|
| 6 |
+
"cookiecutter": {
|
| 7 |
+
"package_name": "sunpy",
|
| 8 |
+
"module_name": "sunpy",
|
| 9 |
+
"short_description": "SunPy core package: Python for Solar Physics",
|
| 10 |
+
"author_name": "The SunPy Community",
|
| 11 |
+
"author_email": "sunpy@googlegroups.com",
|
| 12 |
+
"project_url": "https://sunpy.org",
|
| 13 |
+
"github_repo": "sunpy/sunpy",
|
| 14 |
+
"sourcecode_url": "https://github.com/sunpy/sunpy",
|
| 15 |
+
"download_url": "https://pypi.org/project/sunpy",
|
| 16 |
+
"documentation_url": "https://docs.sunpy.org",
|
| 17 |
+
"changelog_url": "https://docs.sunpy.org/en/stable/whatsnew/changelog.html",
|
| 18 |
+
"issue_tracker_url": "https://github.com/sunpy/sunpy/issues",
|
| 19 |
+
"license": "BSD 2-Clause",
|
| 20 |
+
"minimum_python_version": "3.12",
|
| 21 |
+
"use_compiled_extensions": "y",
|
| 22 |
+
"enable_dynamic_dev_versions": "y",
|
| 23 |
+
"include_example_code": "n",
|
| 24 |
+
"include_cruft_update_github_workflow": "y",
|
| 25 |
+
"use_extended_ruff_linting": "n",
|
| 26 |
+
"_sphinx_theme": "sunpy",
|
| 27 |
+
"_parent_project": "",
|
| 28 |
+
"_install_requires": "",
|
| 29 |
+
"_copy_without_render": [
|
| 30 |
+
"docs/_templates",
|
| 31 |
+
"docs/_static",
|
| 32 |
+
".github/workflows/sub_package_update.yml"
|
| 33 |
+
],
|
| 34 |
+
"_template": "https://github.com/sunpy/package-template",
|
| 35 |
+
"_commit": "9fdedba64f2ea78ba2fb3023285fb22a434cd91f"
|
| 36 |
+
}
|
| 37 |
+
},
|
| 38 |
+
"directory": null
|
| 39 |
+
}
|
sunpy/source/.editorconfig
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# https://editorconfig.org
|
| 2 |
+
root=true
|
| 3 |
+
# utf, UNIX-style new line
|
| 4 |
+
|
| 5 |
+
[*]
|
| 6 |
+
charset=utf-8
|
| 7 |
+
end_of_line=lf
|
| 8 |
+
insert_final_newline=true
|
| 9 |
+
trim_trailing_whitespace=true
|
| 10 |
+
|
| 11 |
+
[*.{py,rst,md}]
|
| 12 |
+
indent_style=space
|
| 13 |
+
indent_size=4
|
| 14 |
+
|
| 15 |
+
[*.yml]
|
| 16 |
+
indent_style=space
|
| 17 |
+
indent_size=2
|
sunpy/source/.flake8
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[flake8]
|
| 2 |
+
ignore =
|
| 3 |
+
# missing-whitespace-around-operator
|
| 4 |
+
E225
|
| 5 |
+
# missing-whitespace-around-arithmetic-operator
|
| 6 |
+
E226
|
| 7 |
+
# line-too-long
|
| 8 |
+
E501
|
| 9 |
+
# unused-import
|
| 10 |
+
F401
|
| 11 |
+
# undefined-local-with-import-star
|
| 12 |
+
F403
|
| 13 |
+
# redefined-while-unused
|
| 14 |
+
F811
|
| 15 |
+
# Line break occurred before a binary operator
|
| 16 |
+
W503,
|
| 17 |
+
# Line break occurred after a binary operator
|
| 18 |
+
W504
|
| 19 |
+
max-line-length = 110
|
| 20 |
+
exclude =
|
| 21 |
+
.git
|
| 22 |
+
__pycache__
|
| 23 |
+
docs/conf.py
|
| 24 |
+
build
|
| 25 |
+
sunpy/data/sample.py
|
| 26 |
+
sunpy/extern/**
|
| 27 |
+
sunpy/__init__.py
|
| 28 |
+
rst-directives =
|
| 29 |
+
plot
|
sunpy/source/.isort.cfg
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[settings]
|
| 2 |
+
balanced_wrapping = true
|
| 3 |
+
skip =
|
| 4 |
+
sunpy/extern/
|
| 5 |
+
sunpy/cm/__init__.py
|
| 6 |
+
docs/conf.py
|
| 7 |
+
sunpy/__init__.py
|
| 8 |
+
default_section = THIRDPARTY
|
| 9 |
+
include_trailing_comma = true
|
| 10 |
+
known_astropy = astropy, asdf
|
| 11 |
+
known_first_party = sunpy
|
| 12 |
+
length_sort = false
|
| 13 |
+
length_sort_sections = stdlib
|
| 14 |
+
line_length = 110
|
| 15 |
+
multi_line_output = 3
|
| 16 |
+
no_lines_before = LOCALFOLDER
|
| 17 |
+
sections = STDLIB, THIRDPARTY, ASTROPY, FIRSTPARTY, LOCALFOLDER
|
sunpy/source/.mailmap
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Abhijeet Manhas <abhijeetmanhas720@gmail.com> Abhijeet Manhas <43112347+abhijeetmanhas@users.noreply.github.com>
|
| 2 |
+
Abhijeet Manhas <abhijeetmanhas720@gmail.com> abhijeetmanhas <abhijeetmanhas720@gmail.com>
|
| 3 |
+
Abigail L. Stevens <A.L.Stevens@uva.nl> Abigail Stevens <A.L.Stevens@uva.nl>
|
| 4 |
+
Abijith Bahuleyan <abijithbahuleyan@gmail.com> Abijith B <twentyse7en@github.com>
|
| 5 |
+
Abijith Bahuleyan <abijithbahuleyan@gmail.com> abijith-bahuleyan <abijithbahuleyan@gmail.com>
|
| 6 |
+
Advait Pimparkar <144479092+advait-zx@users.noreply.github.com> advait pimparkar <144479092+advait-zx@users.noreply.github.com>
|
| 7 |
+
Ahmad Saeed <ahmadsaeed3290@gmail.com> ahmad <53330530+ahmvdev@users.noreply.github.com>
|
| 8 |
+
Ahmad Saeed <ahmadsaeed3290@gmail.com> ahmvdev <ahmadsaeed3290@gmail.com>
|
| 9 |
+
Ahmed Hossam <hoss4614@gmail.com> Ahmed Hossam <108437588+ahmedhosssam@users.noreply.github.com>
|
| 10 |
+
Akash Verma <shivamvermashs@gmail.com> Akash Verma <akashzsh08@gmail.com>
|
| 11 |
+
Akash Verma <shivamvermashs@gmail.com> akash5100 <shivamvermashs@gmail.com>
|
| 12 |
+
Akshit Tyagi <tyagiakshit833@gmail.com> Akshit Tyagi <37214399+exitflynn@users.noreply.github.com>
|
| 13 |
+
Alasdair Wilson <alasdair.wlsn@gmail.com> Alasdair Wilson <60351846+alasdairwilson@users.noreply.github.com>
|
| 14 |
+
Alasdair Wilson <alasdair.wlsn@gmail.com> Alasdair Wilson <alasdair.wlsn@googlemail.com>
|
| 15 |
+
Alasdair Wilson <alasdair.wlsn@gmail.com> alasdairwilson <60351846+alasdairwilson@users.noreply.github.com>
|
| 16 |
+
Albert Y. Shih <ayshih@gmail.com> Albert Shih <ayshih@gmail.com>
|
| 17 |
+
Albert Y. Shih <ayshih@gmail.com> ayshih <ayshih@gmail.com>
|
| 18 |
+
Alex Hamilton <alex_ian_hamilton@hotmail.com> <alex@DESKTOP-UDJUNRJ.home>
|
| 19 |
+
Alex Hamilton <alex_ian_hamilton@hotmail.com> Alex <alex_ian_hamilton@hotmail.com>
|
| 20 |
+
Alex Hamilton <alex_ian_hamilton@hotmail.com> Alex Hamilton <Alex Hamilton>
|
| 21 |
+
Alex Hamilton <alex_ian_hamilton@hotmail.com> Alex Hamilton <Alex_Ian_Hamilton@hotmail.com>
|
| 22 |
+
Alex Hamilton <alex_ian_hamilton@hotmail.com> Alex-Ian-Hamilton <alex_ian_hamilton@hotmail.com>
|
| 23 |
+
Alex Hamilton <alex_ian_hamilton@hotmail.com> unknown <alex_ian_hamilton@hotmail.com>
|
| 24 |
+
Alex Wang <x249wang@uwaterloo.ca> Alex W <x249wang@uwaterloo.ca>
|
| 25 |
+
Amarjit Singh Gaba <asinghgaba@gmail.com> Amarjit <asinghgaba@gmail.com>
|
| 26 |
+
Amogh Jahagirdar <amoghjahagirdargsf@gmail.com> Amogh J <amoghjahagirdargsf@gmail.com>
|
| 27 |
+
Andrew Hill <andrewh.5299@gmail.com> Andrew Hill (AstroEngiSci) <andrewh.5299@gmail.com>
|
| 28 |
+
Andrew Inglis <a.r.inglis@gmail.com> Andrew Inglis <Inglis@scapa.local>
|
| 29 |
+
Andrew Inglis <a.r.inglis@gmail.com> System Administrator <root@scapa.local>
|
| 30 |
+
Andrew Inglis <a.r.inglis@gmail.com> aringlis <a.r.inglis@gmail.com>
|
| 31 |
+
Andrew Leonard <andy.j.leonard@gmail.com> Drew Leonard <andy.j.leonard@gmail.com>
|
| 32 |
+
Andrew Leonard <andy.j.leonard@gmail.com> drew <drew@corona.(none)>
|
| 33 |
+
André Chicrala <andrechicrala@northumbria.ac.uk> Andre Chicrala <andrechicrala@northumbria.ac.uk>
|
| 34 |
+
Aniket Mishra <aniketmishra717@gmail.com> yeppAniket <aniketmishra717@gmail.com>
|
| 35 |
+
Ankit <emonstar333@gmail.com> ankit <emonstar333@gmail.com>
|
| 36 |
+
Ankit Baruah <ankit.baruah1@gmail.com> abit2 <ankit.baruah1@gmail.com>
|
| 37 |
+
Ankit Khushwaha <ankitkhushwaha.dev@gmail.com> Ankit Khushwaha <124484362+ankitkhushwaha@users.noreply.github.com>
|
| 38 |
+
Ankit Khushwaha <ankitkhushwaha.dev@gmail.com> ankitkhushwaha <ankitkhushwaha.dev@gmail.com>
|
| 39 |
+
Ankit Kumar <ankitkmr@users.noreply.github.com> ankitkmr <technocrat.ankit@gmail.com>
|
| 40 |
+
Ansh Dixit <awesomeansh03@gmail.com> Ansh Dixit <64737847+Jett-Code@users.noreply.github.com>
|
| 41 |
+
Arib Alam <aribalam64@gmail.com> Arib Alam <arib.alam.iitkgp@gmail.com>
|
| 42 |
+
Aryan Chouhan <chouhanaryan@yahoo.com> Aryan Chouhan <46817791+chouhanaryan@users.noreply.github.com>
|
| 43 |
+
Aryan Shukla <shuklas2002@gmail.com> Telomelonia <shuklas2002@gmail.com>
|
| 44 |
+
Ashish Bastola <abastola0@gmail.com> abastola0 <abastola0@gmail.com>
|
| 45 |
+
Asish Panda <asishrocks95@gmail.com> kaichogami <asishrocks95@gmail.com>
|
| 46 |
+
Brett J Graham <brettgraham@gmail.com> Brett <brettgraham@gmail.com>
|
| 47 |
+
Brett J Graham <brettgraham@gmail.com> Brett Graham <brettgraham@gmail.com>
|
| 48 |
+
Brigitta Sipőcz <bsipocz@gmail.com> Brigitta Sipocz <b.sipocz@gmail.com>
|
| 49 |
+
Brigitta Sipőcz <bsipocz@gmail.com> Brigitta Sipocz <bsipocz@gmail.com>
|
| 50 |
+
Carlos Molina <carlosmolina.ord@gmail.com> cmolinaord <carlosmolina.ord@gmail.com>
|
| 51 |
+
Chloé Guennou <c.guennou@gmail.com> Chloé <c.guennou@gmail.com>
|
| 52 |
+
Chloé Guennou <c.guennou@gmail.com> cguennou <c.guennou@gmail.com>
|
| 53 |
+
Chris Bard <1957217+cbard@users.noreply.github.com> cbard <1957217+cbard@users.noreply.github.com>
|
| 54 |
+
Chris R. Gilly <gilly@swri.org> C. R. Gilly <gilly@swri.org>
|
| 55 |
+
Chris R. Gilly <gilly@swri.org> gillyspace27 <gilly@swri.org>
|
| 56 |
+
Daniel D'Avella <ddavella@stsci.edu> Dan D'Avella <ddavella@stsci.edu>
|
| 57 |
+
Daniel F. Ryan <ryand5@tcd.ie> Dan Ryan <ryand5@tcd.ie>
|
| 58 |
+
Daniel F. Ryan <ryand5@tcd.ie> DanRyanIrish <ryand5@tcd.ie>
|
| 59 |
+
Daniel Garcia Briseno <daniel.garciabriseno@nasa.gov> Daniel Garcia Briseno <94071409+dgarciabriseno@users.noreply.github.com>
|
| 60 |
+
David Pérez-Suárez <dps.helio@gmail.com> David PS <dps.helio@gmail.com>
|
| 61 |
+
David Pérez-Suárez <dps.helio@gmail.com> David Perez-Suarez <d.perez-suarez@ucl.ac.uk>
|
| 62 |
+
David Pérez-Suárez <dps.helio@gmail.com> David Perez-Suarez <dps.helio@gmail.com>
|
| 63 |
+
David Pérez-Suárez <dps.helio@gmail.com> DavidPS <dps.helio@gmail.com>
|
| 64 |
+
David Pérez-Suárez <dps.helio@gmail.com> dpshelio <dps.helio@gmail.com>
|
| 65 |
+
Devansh Shukla <devanshshukla99@outlook.com> devanshshukla99 <48386249+devanshshukla99@users.noreply.github.com>
|
| 66 |
+
Devansh Shukla <devanshshukla99@outlook.com> devanshshukla99 <devanshshukla99@outlook.com>
|
| 67 |
+
Dipanshu Verma <dipanshu231099@gmail.com> dipanshu <43211840+dipanshu231099@users.noreply.github.com>
|
| 68 |
+
Diya Khetarpal <152620955+Diya910@users.noreply.github.com> Diya910 <152620955+Diya910@users.noreply.github.com>
|
| 69 |
+
Dumindu Buddhika <dumindukarunathilaka@gmail.com> dumindux <dumindukarunathilaka@gmail.com>
|
| 70 |
+
Duygu Keşkek <duygukeskek@hotmail.com> Duygu KEŞKEK <duygukeskek@hotmail.com>
|
| 71 |
+
Ed Mansky <mansky@mindspring.com> ejm4567 <mansky@mindspring.com>
|
| 72 |
+
Enrico Paganin <enrico.paganin@mail.com> platipo <enrico.paganin@mail.com>
|
| 73 |
+
Fionnlagh Mackenzie Dover <fmackenziedover1@sheffield.ac.uk> FinMacDov <fmackenziedover1@sheffield.ac.uk>
|
| 74 |
+
Florian Mayer <florian.mayer@bitsrc.org> Florian Mayer <flormayer@aim.com>
|
| 75 |
+
Freek Verstringe <freek.verstringe@oma.be> freekv <freek.verstringe@oma.be>
|
| 76 |
+
Fu Yu <HaHaPanda@tutamail.com> 须臾 <HaHaPanda@tutamail.com>
|
| 77 |
+
Garrison Taylor <garrisontaylor@gmail.com> gbear605 <garrisontaylor@gmail.com>
|
| 78 |
+
Ghaith Kdimati <87309361+Ghaithq@users.noreply.github.com> Ghaithq <87309361+Ghaithq@users.noreply.github.com>
|
| 79 |
+
Gulshan Kumar <gulshankumar1210iiit@gmail.com> Gulshan Mittal <gulshankumar1210iiit@gmail.com>
|
| 80 |
+
Gulshan Kumar <gulshankumar1210iiit@gmail.com> gulshan-mittal <gulshankumar1210iiit@gmail.com>
|
| 81 |
+
Guntbert Reiter <guntbert@gmx.at> G. Reiter <guntbert@gmx.at>
|
| 82 |
+
Hannah Collier <hannah.collier@fhnw.ch> Hannah Collier <76849369+hannahc243@users.noreply.github.com>
|
| 83 |
+
Harsh Shah <80237556+ryuusama09@users.noreply.github.com> ryuusama <80237556+ryuusama09@users.noreply.github.com>
|
| 84 |
+
Haruhisa Iijima <haruhisa.iijima@gmail.com> Haruhisa IIIJIMA <h.iijima0202@gmail.com>
|
| 85 |
+
Haruhisa Iijima <haruhisa.iijima@gmail.com> Haruhisa IIIJIMA <haruhisa.iijima@gmail.com>
|
| 86 |
+
Himanshu <hs80941@gmail.com> himanshukgp <hs80941@gmail.com>
|
| 87 |
+
Himanshu Pathak <hpathak336@gmail.com> himanshupathak21061998 <hpathak336@gmail.com>
|
| 88 |
+
Jack Ireland <jack.ireland@nasa.gov> Jack Ireland <ireland@Ganymede.(none)>
|
| 89 |
+
Jack Ireland <jack.ireland@nasa.gov> Jack Ireland <ireland@blue.local>
|
| 90 |
+
Jack Ireland <jack.ireland@nasa.gov> Jack Ireland <jackireland@gmail.com>
|
| 91 |
+
Jack Ireland <jack.ireland@nasa.gov> wafels <jackireland@gmail.com>
|
| 92 |
+
Jack Ireland <jack.ireland@nasa.gov> wafels <jackreland@gmail.com>
|
| 93 |
+
Jacob <jgreg23@vt.edu> sudozer <36239573+sudozer@users.noreply.github.com>
|
| 94 |
+
James Calixto <jc2386@cornell.edu> jamescalixto <jc2386@cornell.edu>
|
| 95 |
+
James Paul Mason <jmason86@gmail.com> James Mason <jmason86@gmail.com>
|
| 96 |
+
Jan Gieseler <jan.gieseler@utu.fi> Jan Gieseler <39489154+jgieseler@users.noreply.github.com>
|
| 97 |
+
Jan Gieseler <jan.gieseler@utu.fi> jgieseler <jan.gieseler@utu.fi>
|
| 98 |
+
Jayraj Dulange <jayraj.jayraj@iitgn.ac.in> Deus1704 <jayraj.jayraj@iitgn.ac.in>
|
| 99 |
+
Jayraj Dulange <jayraj.jayraj@iitgn.ac.in> Jayraj Dulange <117574289+Deus1704@users.noreply.github.com>
|
| 100 |
+
Jeffrey Aaron Paul <jeffrey.paul2000@gmail.com> Jeffrey Aaron Paul <50923538+jeffreypaul15@users.noreply.github.com>
|
| 101 |
+
Jeffrey Aaron Paul <jeffrey.paul2000@gmail.com> jeffreypaul15 <jeffrey.paul2000@gmail.com>
|
| 102 |
+
Johan L. Freiherr von Forstner <forstner@physik.uni-kiel.de> Johan von Forstner <forstner@physik.uni-kiel.de>
|
| 103 |
+
Johan L. Freiherr von Forstner <forstner@physik.uni-kiel.de> Johan von Forstner <johan.forstner@gmail.com>
|
| 104 |
+
John Evans <john.g.evans.ne@gmail.com> jevans <john.g.evans.ne@gmail.com>
|
| 105 |
+
John Evans <john.g.evans.ne@gmail.com> quintusdias <john.g.evans.ne@gmail.com>
|
| 106 |
+
Jongyeob Park <pjystar@gmail.com> jongyeob <x9bong@hanmail.net>
|
| 107 |
+
Jose Ivan Campos Rozo <hypnus1803@gmail.com> Hypnus <hypnus1803@gmail.com>
|
| 108 |
+
Joseph Letts <joe@fasteroute.com> Joe Letts <joe@fasteroute.com>
|
| 109 |
+
Juan Camilo Buitrago-Casas <jcbuitragoc@unal.edu.co> Milo BC <jcbuitragoc@unal.edu.co>
|
| 110 |
+
Kalpesh Krishna <kalpeshk2011@gmail.com> KALPESH KRISHNA <kalpeshk2011@gmail.com>
|
| 111 |
+
Kateryna Ivashkiv <kate777iv@gmail.com> Katherine Ivashkiv <kate777iv@gmail.com>
|
| 112 |
+
Kateryna Ivashkiv <kate777iv@gmail.com> kathivashkiv <kate777iv@gmail.com>
|
| 113 |
+
Kaustubh Chaudhari <ckaustubhm06@gmail.com> kc611 <ckaustubhm06@gmail.com>
|
| 114 |
+
Kaustubh Hiware <hiwarekaustubh@googlemail.com> kaustubhhiware <hiwarekaustubh@googlemail.com>
|
| 115 |
+
Kris Akira Stern <krisastern@gmail.com> Kris Stern <krisastern@gmail.com>
|
| 116 |
+
Kris Akira Stern <krisastern@gmail.com> Kris Stern <krisastern@gobuddy.asia>
|
| 117 |
+
Krish Agrawal <diwankrish.17@gmail.com> Krish Agrawal <32320437+Krish2208@users.noreply.github.com>
|
| 118 |
+
Kritika Ranjan <kritikaranjan28@gmail.com> Kritika <kritikaranjan28@gmail.com>
|
| 119 |
+
Laura Hayes <hayesla@tcd.ie> Laura Hayes <lahayes@gs671-lhayesmbp.ndc.nasa.gov>
|
| 120 |
+
Laura Hayes <hayesla@tcd.ie> Laura Hayes <lauraannhayes@gmail.com>
|
| 121 |
+
Laura Hayes <hayesla@tcd.ie> hayesla <hayesla@tcd.ie>
|
| 122 |
+
Laura Hayes <hayesla@tcd.ie> hayesla <lauraannhayes@gmail.com>
|
| 123 |
+
Manit Singh <79140607+NucleonGodX@users.noreply.github.com> NucleonGodX <racerpro41@gmail.com>
|
| 124 |
+
Marius Giger <marius@akenza.io> Marius Giger <gigermarius@gmail.com>
|
| 125 |
+
Mateo Inchaurrandieta <mateo.inchaurrandieta@gmail.com> Mateo Inchaurrandieta <mateo.inchaurrandieta.13@ucl.ac.uk>
|
| 126 |
+
Matthew Mendero <39359693+Mmendero@users.noreply.github.com> Mmendero <39359693+Mmendero@users.noreply.github.com>
|
| 127 |
+
Maya Mohamed <mayamoh5m@gmail.com> Maya-Mohamed <mayamoh5m@gmail.com>
|
| 128 |
+
Md Akramul Haque <haquemdakramul@hotmail.com> Akram9 <haquemdakramul@hotmail.com>
|
| 129 |
+
Md Akramul Haque <haquemdakramul@hotmail.com> Md. Akramul Haque <akram@localhost.localdomain>
|
| 130 |
+
Michael Charlton <m.charlton@mac.com> Michael <m.charlton@mac.com>
|
| 131 |
+
Michael S Kirk <michael.s.kirk@nasa.gov> Michael Kirk <michael.s.kirk@nasa.gov>
|
| 132 |
+
Michael S Kirk <michael.s.kirk@nasa.gov> Michael S Kirk <michael.s.kirk@nasa.gov>
|
| 133 |
+
Michael S Kirk <michael.s.kirk@nasa.gov> SolarBoy <michael.s.kirk@nasa.gov>
|
| 134 |
+
Michael S Kirk <michael.s.kirk@nasa.gov> SolarBoy <mskirk@gs670-mkmac.ndc.nasa.gov>
|
| 135 |
+
Michael S Kirk <michael.s.kirk@nasa.gov> mskirk <michael.s.kirk@gmail.com>
|
| 136 |
+
Mika <77445020+tal66@users.noreply.github.com> tal66 <77445020+tal66@users.noreply.github.com>
|
| 137 |
+
Mingyu Jeon <mgjeon@khu.ac.kr> mgjeon <mgjeon@khu.ac.kr>
|
| 138 |
+
Monica Bobra <mbobra@stanford.edu> mbobra <mbobra@stanford.edu>
|
| 139 |
+
Mouloudi Mohamed Lyes <lyes.mouloudi.007@gmail.com> MOULOUDI Mohamed Lyes <lyes.mouloudi.007@gmail.com>
|
| 140 |
+
Mridul Pandey <mridulpandey27@gmail.com> mridulpandey <39450878+mridullpandey@users.noreply.github.com>
|
| 141 |
+
Mridul Pandey <mridulpandey27@gmail.com> mridulpandey <mridulpandey27@gmail.com>
|
| 142 |
+
Nabil Freij <nabil.freij@gmail.com> Nabil <nabil.freij@gmail.com>
|
| 143 |
+
Nabil Freij <nabil.freij@gmail.com> Nabil Freij <freij@baeri.org>
|
| 144 |
+
Nabil Freij <nabil.freij@gmail.com> Nabil Freij <n.freij@the-iea.org>
|
| 145 |
+
Nabil Freij <nabil.freij@gmail.com> Nabil Freij <nfreij@seti.org>
|
| 146 |
+
Nabil Freij <nabil.freij@gmail.com> Nabobalis <nabil.freij@gmail.com>
|
| 147 |
+
Nabil Freij <nabil.freij@gmail.com> nabobalis <1392107+nabobalis@users.noreply.github.com>
|
| 148 |
+
Nakul Shahdadpuri <nakulshahdadpuri3141@gmail.com> nakul-shahdadpuri <nakulshahdadpuri3141@gmail.com>
|
| 149 |
+
Naman9639 <naman9639224290@gmail.com> Naman <31286078+Naman9639@users.noreply.github.com>
|
| 150 |
+
Naman9639 <naman9639224290@gmail.com> Naman <naman9639224290@gmail.com>
|
| 151 |
+
Naman9639 <naman9639224290@gmail.com> Naman9639 <31286078+Naman9639@users.noreply.github.com>
|
| 152 |
+
Naveen Srinivasan <172697+naveensrinivasan@users.noreply.github.com>naveen <172697+naveensrinivasan@users.noreply.github.com>
|
| 153 |
+
Neeraj Kulkarni <nrjklk@gmail.com> neerajkulk <nrjklk@gmail.com>
|
| 154 |
+
Nischal Singh <32027279+davnish@users.noreply.github.com> Nischal Singh <nischalsingh@Nischals-MacBook-Air.local>
|
| 155 |
+
Norbert G Gyenge <gyenge.norbert@hotmail.com> Norbert Gyenge <gyenge.norbert@hotmail.com>
|
| 156 |
+
Ole Streicher <ole@aip.de> Ole Streicher <olebole@debian.org>
|
| 157 |
+
Paul J. Wright <paul@pauljwright.co.uk> Paul Wright <paul@pauljwright.co.uk>
|
| 158 |
+
Piyush Sharma <piyushsharma04321@gmail.com> ViciousEagle03 <piyushsharma04321@gmail.com>
|
| 159 |
+
Pratham Hole <prathamhole@gmail.com> Pratham Hole <139000226+Prtm2110@users.noreply.github.com>
|
| 160 |
+
Pratham Hole <prathamhole@gmail.com> Prtm2110 <139000226+Prtm2110@users.noreply.github.com>
|
| 161 |
+
Pratham Hole <prathamhole@gmail.com> Prtm2110 <prathamhole@gmail.com>
|
| 162 |
+
Pritish Chakraborty <chakrabortypritish@gmail.com> PritishC <pritishc@pritishc-HP-Mini-210-1100.(none)>
|
| 163 |
+
Pritish Chakraborty <chakrabortypritish@gmail.com> VaticanCameos <chakrabortypritish@gmail.com>
|
| 164 |
+
Priyank Lodha <priyank.bpgc@gmail.com> thelazy <priyank.bpgc@gmail.com>
|
| 165 |
+
Punyaslok Pattnaik <punyaslokpattnaik@yahoo.co.in> Punyaslok <punyaslokpattnaik@yahoo.co.in>
|
| 166 |
+
Punyaslok Pattnaik <punyaslokpattnaik@yahoo.co.in> punyaslokpattnaik@yahoo.co.in <punyaslokpattnaik@yahoo.co.in>
|
| 167 |
+
Punyaslok Pattnaik <punyaslokpattnaik@yahoo.co.in> punyaslokpattnaik@yahoo.co.in <punyaslokpattnaik@yahoo.co.in>
|
| 168 |
+
Quinn Arbolante <quinn.arbolante@gmail.com> Cubostar <cubostar@gmail.com>
|
| 169 |
+
Raahul Singh <raahulsingh002@gmail.com> Raahul Singh <raahul.s18@iiits.in>
|
| 170 |
+
Raahul Singh <raahulsingh002@gmail.com> Raahul-Singh <raahul.s18@iiits.in>
|
| 171 |
+
Raghav Agrawal <153320363+raghav20232023@users.noreply.github.com> RAGHAV AGRAWAL <153320363+raghav20232023@users.noreply.github.com>
|
| 172 |
+
Rajasekhar Reddy Mekala <rajasekharreddymekala732@gmail.com> rajasekharmekala <rajasekharreddymekala732@gmail.com>
|
| 173 |
+
Rajul Srivastava <rajul.iitkgp@gmail.com> Rajul <rajul.iitkgp@gmail.com>
|
| 174 |
+
Rajul Srivastava <rajul.iitkgp@gmail.com> Rajul <rajul09@gmail.com>
|
| 175 |
+
Rajul Srivastava <rajul.iitkgp@gmail.com> Rajul Srivastava <rajul09@gmail.com>
|
| 176 |
+
Ratul Das <53458166+ratuldas6@users.noreply.github.com> Ratul Das (NISER) <53458166+ratuldas6@users.noreply.github.com>
|
| 177 |
+
Rehan Chalana <rehanchalanaprsnl@gmail.com> rehan <rehanchalanaprsnl@gmail.com>
|
| 178 |
+
Rishabh Sharma <rishabh.sharma@students.iiit.ac.in> gunner272 <rishabh.sharma@students.iiit.ac.in>
|
| 179 |
+
Rishabh Sharma <rishabh.sharma@students.iiit.ac.in> rishabh <rishabh.sharma@students.iiit.ac.in>
|
| 180 |
+
Ruben De Visscher <ruben.de.visscher@gmail.com> Ruben De Visscher <ruben.devisscher@observatory.be>
|
| 181 |
+
Russell Hewett <rhewett@mit.edu> rhewett <russell.j.hewett@gmail.com>
|
| 182 |
+
Sally Dacie <sally.dacie.14@ucl.ac.uk> Sally <sally.dacie.14@ucl.ac.uk>
|
| 183 |
+
Sally Dacie <sally.dacie.14@ucl.ac.uk> SallyDa <sally.dacie.14@ucl.ac.uk>
|
| 184 |
+
Samriddhi Agarwal <samriddhi-dev@users.noreply.github.com> samriddhi-dev <samriddhi-dev@users.noreply.github.com>
|
| 185 |
+
Samuel Bennett <bennett.sm89@gmail.com> CyclingNinja <bennett.sm89@gmail.com>
|
| 186 |
+
Samuel Bennett <bennett.sm89@gmail.com> Samuel Bennett <CyclingNinja@users.noreply.github.com>
|
| 187 |
+
Samuel J. Van Kooten <svank@users.noreply.github.com> Sam Van Kooten <svank@users.noreply.github.com>
|
| 188 |
+
Samuel Jackson <mishraayush8705@gmail.com> samuel jackson <mishraayush8705@gmail.com>
|
| 189 |
+
Samuel T. Badman <54911235+STBadman@users.noreply.github.com> Samuel Badman <54911235+STBadman@users.noreply.github.com>
|
| 190 |
+
Sanjeev Dubey <getsanjeevdubey@gmail.com> getsanjeev <getsanjeevdubey@gmail.com>
|
| 191 |
+
Sanskar Modi <sanskar.modi.civ14@iitbhu.ac.in> Sanskar Modi <sanskarmodi97@gmail.com>
|
| 192 |
+
Sanskar Modi <sanskar.modi.civ14@iitbhu.ac.in> sanskar-modi <sanskar.modi.civ14@iitbhu.ac.in>
|
| 193 |
+
Sarthak Jain <jains8844@gmail.com> Sarthak Jain <42547508+jains8844@users.noreply.github.com>
|
| 194 |
+
Sarthak Jain <jains8844@gmail.com> jains8844 <jains8844@gmail.com>
|
| 195 |
+
Sashank Mishra <sashankmishra27@gmail.com> sashank27 <sashankmishra27@gmail.com>
|
| 196 |
+
Sashank Mishra <sashankmishra27@gmail.com> sashmish <sashankmishra27@gmail.com>
|
| 197 |
+
Saurav Kumar Roy <sauravnotfound29@gmail.com> Saurav Kumar Roy <136881235+Sauravroy34@users.noreply.github.com>
|
| 198 |
+
Saurav Kumar Roy <sauravnotfound29@gmail.com> Sauravroy34 <sauravnotfound29@gmail.com>
|
| 199 |
+
Shane Maloney <shane.maloney@dias.ie> Shane Maloney <maloneys@tcd.ie> Shane Maloney
|
| 200 |
+
Shane Maloney <shane.maloney@dias.ie> Shane Maloney <shane.maloney@tcd.ie> Shane Maloney
|
| 201 |
+
Shashank Srikanth <s.shashank2401@gmail.com> S Shashank <s.shashank2401@gmail.com>
|
| 202 |
+
Shivansh Mishra <dHoneysh@gmail.com> honey <dHoneysh@gmail.com>
|
| 203 |
+
Simon Liedtke <liedtke.simon@googlemail.com> derdon <liedtke.simon@googlemail.com>
|
| 204 |
+
Sophie Lemos <sophielemos@outlook.com> SophieLemos <48099481+SophieLemos@users.noreply.github.com>
|
| 205 |
+
Sophie Lemos <sophielemos@outlook.com> sophielemos <sophielemos@outlook.com>
|
| 206 |
+
Steven Christe <steven.d.christe@nasa.gov> Steven Christe <ehsteve@users.noreply.github.com>
|
| 207 |
+
Steven Christe <steven.d.christe@nasa.gov> Steven Christe <schriste@imacnation.(none)>
|
| 208 |
+
Steven Christe <steven.d.christe@nasa.gov> Steven Christe <steven.christe@nasa.gov>
|
| 209 |
+
Steven Christe <steven.d.christe@nasa.gov> steven christe <steven.d.christe@nasa.gov>
|
| 210 |
+
Stuart J. Mumford <stuart@cadair.com> Bertie Smith <stuart@cadair.com>
|
| 211 |
+
Stuart J. Mumford <stuart@cadair.com> Cadair <1391051+Cadair@users.noreply.github.com>
|
| 212 |
+
Stuart J. Mumford <stuart@cadair.com> Stuart Mumford <s.mumford@sheffield.ac.uk>
|
| 213 |
+
Stuart J. Mumford <stuart@cadair.com> Stuart Mumford <stuart@cadair.com>
|
| 214 |
+
Stuart J. Mumford <stuart@cadair.com> Stuart Mumford <stuart@mumford.me.uk>
|
| 215 |
+
Stuart J. Mumford <stuart@cadair.com> Stuart Mumford <stuartmumford@physics.org>
|
| 216 |
+
Stuart J. Mumford <stuart@cadair.com> U-Cadair-Core\stuart <stuart@Cadair-Core.(none)>
|
| 217 |
+
Sudarshan Konge <sudk1896@gmail.com> sudarshan <ssudk1896@gmail.com>
|
| 218 |
+
Sudarshan Konge <sudk1896@gmail.com> sudarshan <sudk1896@gmail.com>
|
| 219 |
+
Sudeep Sidhu <sudeepmanilsidhu@gmail.com> sidhu1012 <sudeepmanilsidhu@gmail.com>
|
| 220 |
+
Suleiman Farah <116139540+SuleimanFarah@users.noreply.github.com> SuleimanFarah <116139540+SuleimanFarah@users.noreply.github.com>
|
| 221 |
+
Swapnil Kannojia <swapnilkannojia123@gmail.com> swapnil99007 <swapnilkannojia123@gmail.com>
|
| 222 |
+
Tan Jia Qing <jiaqing2303@gmail.com> jiaqing23 <jiaqing2303@gmail.com>
|
| 223 |
+
Tannmay Yadav <tanmayy98@gmail.com> tannmay <tanmayy98@gmail.com>
|
| 224 |
+
Tathagata Paul <tathagatapaul7@gmail.com> 4molybdenum2 <tathagatapaul7@gmail.com>
|
| 225 |
+
Tiago M. D. Pereira <tiago.pereira@astro.uio.no> Tiago Pereira <tiago.pereira@astro.uio.no>
|
| 226 |
+
Tiago M. D. Pereira <tiago.pereira@astro.uio.no> tiagopereira <tiago@1x-193-157-254-255.uio.no>
|
| 227 |
+
Timo Laitinen <tlml@users.noreply.github.com> tlml <tlml@users.noreply.github.com>
|
| 228 |
+
Trestan F. Simon <trestansimon@gmail.com> Trestan Simon <trestansimon@gmail.com>
|
| 229 |
+
Trung Kien Dang <kiendang@users.noreply.github.com> Dang Trung Kien <kiendang@users.noreply.github.com>
|
| 230 |
+
Utkarsh Parkhi <uparkhi@ph.iitr.ac.in> utkarsh <uparkhi@ph.iitr.ac.in>
|
| 231 |
+
Utkarsh Parkhi <uparkhi@ph.iitr.ac.in> utkarsh parkhi <42688747+utkarshparkhi@users.noreply.github.com>
|
| 232 |
+
V. Keith Hughitt <keith.hughitt@gmail.com> Keith Hughitt <keith.hughitt@gmail.com>
|
| 233 |
+
V. Keith Hughitt <keith.hughitt@gmail.com> Keith Hughitt <keith@kore.(none)>
|
| 234 |
+
Vishnunarayan K I. <appukuttancr@gmail.com> Vishnunarayan K I <31964688+vn-ki@users.noreply.github.com>
|
| 235 |
+
Vishnunarayan K I. <appukuttancr@gmail.com> Vishnunarayan K I <appukuttancr@gmail.com>
|
| 236 |
+
Vishnunarayan K I. <appukuttancr@gmail.com> vn-ki <appukuttancr@gmail.com>
|
| 237 |
+
Wenli Mo <144060883+wmoapl@users.noreply.github.com> wmoapl <144060883+wmoapl@users.noreply.github.com>
|
| 238 |
+
Will Barnes <wtb2@rice.edu> Will Barnes <will.t.barnes@gmail.com>
|
| 239 |
+
Yash Jain <yashjainjain1704@gmail.com> yash_jain <yashjainjain1704@gmail.com>
|
| 240 |
+
Yash Kothari <yashkothari199767@gmail.com> CaptainDaVinci <yashkothari199767@gmail.com>
|
| 241 |
+
Yash Sharma <yashrsharma44@gmail.com> Yash <yashrsharma44@gmail.com>
|
| 242 |
+
Yudhik Agrawal <yudhik100@gmail.com> yudhik11 <yudhik100@gmail.com>
|
| 243 |
+
Yukie Nomiya <49163604+yukienomiya@users.noreply.github.com> Yuki <49163604+yukienomiya@users.noreply.github.com>
|
| 244 |
+
Zach Burnett <zachary.r.burnett@gmail.com> zacharyburnett <zburnett@stsci.edu>
|
sunpy/source/.pre-commit-config.yaml
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
exclude: ".*(.csv|.fits|.fts|.fit|.header|.txt|tca.*|.json|.asdf)$|^CITATION.rst|tools\/|sunpy\/extern\/|sunpy\/io\/src\/ana\/"
|
| 2 |
+
repos:
|
| 3 |
+
# This should be before any formatting hooks like isort
|
| 4 |
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
| 5 |
+
rev: "v0.14.14"
|
| 6 |
+
hooks:
|
| 7 |
+
- id: ruff
|
| 8 |
+
args: ["--fix"]
|
| 9 |
+
- repo: https://github.com/PyCQA/isort
|
| 10 |
+
rev: 7.0.0
|
| 11 |
+
hooks:
|
| 12 |
+
- id: isort
|
| 13 |
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
| 14 |
+
rev: v6.0.0
|
| 15 |
+
hooks:
|
| 16 |
+
- id: check-ast
|
| 17 |
+
- id: check-case-conflict
|
| 18 |
+
- id: trailing-whitespace
|
| 19 |
+
- id: check-yaml
|
| 20 |
+
- id: debug-statements
|
| 21 |
+
- id: check-added-large-files
|
| 22 |
+
args: ["--enforce-all", "--maxkb=1054"]
|
| 23 |
+
exclude: ""
|
| 24 |
+
- id: end-of-file-fixer
|
| 25 |
+
- id: mixed-line-ending
|
| 26 |
+
- repo: https://github.com/adhtruong/mirrors-typos
|
| 27 |
+
rev: v1.38.1
|
| 28 |
+
hooks:
|
| 29 |
+
- id: typos
|
| 30 |
+
- repo: local
|
| 31 |
+
hooks:
|
| 32 |
+
- id: generate-sunpy-net-hek-attrs
|
| 33 |
+
name: generate sunpy.net.hek.attrs
|
| 34 |
+
entry: python tools/hek_mkcls.py
|
| 35 |
+
language: system
|
| 36 |
+
pass_filenames: false
|
| 37 |
+
files: (^tools/(hek_mkcls|hektemplate)\.py$)|(^sunpy/net/hek/attrs\.py$)
|
| 38 |
+
- id: git-diff
|
| 39 |
+
name: git diff
|
| 40 |
+
entry: git diff --color --exit-code
|
| 41 |
+
language: system
|
| 42 |
+
pass_filenames: false
|
| 43 |
+
always_run: true
|
| 44 |
+
ci:
|
| 45 |
+
autofix_prs: false
|
| 46 |
+
autoupdate_schedule: "quarterly"
|
sunpy/source/.readthedocs.yaml
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version: 2
|
| 2 |
+
|
| 3 |
+
build:
|
| 4 |
+
os: ubuntu-lts-latest
|
| 5 |
+
tools:
|
| 6 |
+
python: "mambaforge-latest"
|
| 7 |
+
jobs:
|
| 8 |
+
post_checkout:
|
| 9 |
+
- git fetch --unshallow || true
|
| 10 |
+
pre_install:
|
| 11 |
+
- git update-index --assume-unchanged .rtd-environment.yml docs/conf.py
|
| 12 |
+
|
| 13 |
+
conda:
|
| 14 |
+
environment: .rtd-environment.yml
|
| 15 |
+
|
| 16 |
+
sphinx:
|
| 17 |
+
builder: html
|
| 18 |
+
configuration: docs/conf.py
|
| 19 |
+
fail_on_warning: false
|
| 20 |
+
|
| 21 |
+
formats:
|
| 22 |
+
- htmlzip
|
| 23 |
+
|
| 24 |
+
python:
|
| 25 |
+
install:
|
| 26 |
+
- method: pip
|
| 27 |
+
extra_requirements:
|
| 28 |
+
- all
|
| 29 |
+
- docs
|
| 30 |
+
- docs-gallery
|
| 31 |
+
path: .
|
sunpy/source/.rtd-environment.yml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
name: rtd_sunpy
|
| 2 |
+
channels:
|
| 3 |
+
- conda-forge
|
| 4 |
+
dependencies:
|
| 5 |
+
- python=3.13
|
| 6 |
+
- pip
|
| 7 |
+
- openjpeg
|
| 8 |
+
- graphviz!=2.42.*,!=2.43.*
|
| 9 |
+
- pycairo
|
sunpy/source/.ruff.toml
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
target-version = "py311"
|
| 2 |
+
line-length = 120
|
| 3 |
+
exclude = [
|
| 4 |
+
".git,",
|
| 5 |
+
"__pycache__",
|
| 6 |
+
"build",
|
| 7 |
+
"sunpy/extern/**",
|
| 8 |
+
"sunpy/version.py",
|
| 9 |
+
]
|
| 10 |
+
|
| 11 |
+
[lint]
|
| 12 |
+
select = [
|
| 13 |
+
"E",
|
| 14 |
+
"F",
|
| 15 |
+
"W",
|
| 16 |
+
"UP",
|
| 17 |
+
"PT",
|
| 18 |
+
]
|
| 19 |
+
extend-ignore = [
|
| 20 |
+
# pycodestyle (E, W)
|
| 21 |
+
"E501", # ignore line length will use a formatter instead
|
| 22 |
+
# pytest (PT)
|
| 23 |
+
"PT001", # Always use pytest.fixture()
|
| 24 |
+
"PT023", # Always use () on pytest decorators
|
| 25 |
+
# flake8-pie (PIE)
|
| 26 |
+
"PIE808", # Disallow passing 0 as the first argument to range
|
| 27 |
+
# flake8-use-pathlib (PTH)
|
| 28 |
+
"PTH123", # open() should be replaced by Path.open()
|
| 29 |
+
# Ruff (RUF)
|
| 30 |
+
"RUF003", # Ignore ambiguous quote marks, doesn't allow ' in comments
|
| 31 |
+
"RUF012", # Mutable class attributes should be annotated with `typing.ClassVar`
|
| 32 |
+
"RUF013", # PEP 484 prohibits implicit `Optional`
|
| 33 |
+
"RUF015", # Prefer `next(iter(...))` over single element slice
|
| 34 |
+
]
|
| 35 |
+
|
| 36 |
+
[lint.per-file-ignores]
|
| 37 |
+
"setup.py" = [
|
| 38 |
+
"INP001", # File is part of an implicit namespace package.
|
| 39 |
+
]
|
| 40 |
+
"conftest.py" = [
|
| 41 |
+
"INP001", # File is part of an implicit namespace package.
|
| 42 |
+
]
|
| 43 |
+
"docs/conf.py" = [
|
| 44 |
+
"E402" # Module imports not at top of file
|
| 45 |
+
]
|
| 46 |
+
"docs/*.py" = [
|
| 47 |
+
"INP001", # File is part of an implicit namespace package.
|
| 48 |
+
]
|
| 49 |
+
"examples/**.py" = [
|
| 50 |
+
"T201", # allow use of print in examples
|
| 51 |
+
"INP001", # File is part of an implicit namespace package.
|
| 52 |
+
]
|
| 53 |
+
"__init__.py" = [
|
| 54 |
+
"E402", # Module level import not at top of cell
|
| 55 |
+
"F401", # Unused import
|
| 56 |
+
"F403", # from {name} import * used; unable to detect undefined names
|
| 57 |
+
"F405", # {name} may be undefined, or defined from star imports
|
| 58 |
+
]
|
| 59 |
+
"test_*.py" = [
|
| 60 |
+
"E402", # Module level import not at top of cell
|
| 61 |
+
]
|
| 62 |
+
# Need to import clients to register them, but don't use them in file
|
| 63 |
+
"sunpy/net/__init__.py" = [
|
| 64 |
+
"F811", # Redefinition of unused {name} from {row}
|
| 65 |
+
]
|
| 66 |
+
# These files are allowed to use warnings.warn
|
| 67 |
+
"sunpy/util/exceptions.py" = ["TID251"]
|
| 68 |
+
"sunpy/util/tests/test_logger.py" = ["TID251"]
|
| 69 |
+
"sunpy/util/decorators.py" = ["TID251"]
|
| 70 |
+
|
| 71 |
+
[lint.pydocstyle]
|
| 72 |
+
convention = "numpy"
|
| 73 |
+
|
| 74 |
+
[lint.flake8-tidy-imports]
|
| 75 |
+
[lint.flake8-tidy-imports.banned-api]
|
| 76 |
+
"warnings.warn".msg = "Use sunpy specific warning helpers warn_* from sunpy.utils.exceptions"
|
sunpy/source/.test_package_pins.txt
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file is used to pin test packages across sunpy coordinated packages
|
| 2 |
+
# Do not remove, even if it's empty!
|
sunpy/source/.zenodo.json
ADDED
|
@@ -0,0 +1,1046 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"description": "sunpy is a software library that provides fundamental tools for accessing, loading and interacting with solar physics data in Python",
|
| 3 |
+
"license": "BSD-2-Clause",
|
| 4 |
+
"title": "sunpy: A Core Package for Solar Physics",
|
| 5 |
+
"upload_type": "software",
|
| 6 |
+
"creators": [
|
| 7 |
+
{
|
| 8 |
+
"name": "Stuart J. Mumford",
|
| 9 |
+
"orcid": "0000-0003-4217-4642",
|
| 10 |
+
"affiliation": "Aperio Software Ltd."
|
| 11 |
+
},
|
| 12 |
+
{
|
| 13 |
+
"name": "Nabil Freij",
|
| 14 |
+
"orcid": "0000-0002-6253-082X",
|
| 15 |
+
"affiliation": "SETI Institute & Lockheed Martin Solar and Astrophysics Laboratory"
|
| 16 |
+
},
|
| 17 |
+
{
|
| 18 |
+
"name": "David Stansby",
|
| 19 |
+
"orcid": "0000-0002-1365-1908",
|
| 20 |
+
"affiliation": "University College London"
|
| 21 |
+
},
|
| 22 |
+
{
|
| 23 |
+
"name": "Albert Y. Shih",
|
| 24 |
+
"orcid": "0000-0001-6874-2594",
|
| 25 |
+
"affiliation": "NASA Goddard Space Flight Center"
|
| 26 |
+
},
|
| 27 |
+
{
|
| 28 |
+
"name": "Steven Christe",
|
| 29 |
+
"orcid": "0000-0001-6127-795X",
|
| 30 |
+
"affiliation": "NASA Goddard Space Flight Center"
|
| 31 |
+
},
|
| 32 |
+
{
|
| 33 |
+
"name": "Jack Ireland",
|
| 34 |
+
"orcid": "0000-0002-2019-8881",
|
| 35 |
+
"affiliation": "NASA Goddard Space Flight Center"
|
| 36 |
+
},
|
| 37 |
+
{
|
| 38 |
+
"name": "Florian Mayer"
|
| 39 |
+
},
|
| 40 |
+
{
|
| 41 |
+
"name": "V. Keith Hughitt",
|
| 42 |
+
"orcid": "0000-0003-0787-9559",
|
| 43 |
+
"affiliation": "Center for Cancer Research, National Cancer Institute"
|
| 44 |
+
},
|
| 45 |
+
{
|
| 46 |
+
"name": "Daniel F. Ryan",
|
| 47 |
+
"orcid": "0000-0001-8661-3825",
|
| 48 |
+
"affiliation": "University College London, Mullard Space Science Laboratory (UCL/MSSL)"
|
| 49 |
+
},
|
| 50 |
+
{
|
| 51 |
+
"name": "Simon Liedtke"
|
| 52 |
+
},
|
| 53 |
+
{
|
| 54 |
+
"name": "Will Barnes",
|
| 55 |
+
"orcid": "0000-0001-9642-6089",
|
| 56 |
+
"affiliation": "Department of Physics, American University & NASA Goddard Space Flight Center"
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"name": "Laura Hayes",
|
| 60 |
+
"orcid": "0000-0002-6835-2390",
|
| 61 |
+
"affiliation": "Dublin Institute for Advanced Studies"
|
| 62 |
+
},
|
| 63 |
+
{
|
| 64 |
+
"name": "David Pérez-Suárez",
|
| 65 |
+
"orcid": "0000-0003-0784-6909",
|
| 66 |
+
"affiliation": "University College London"
|
| 67 |
+
},
|
| 68 |
+
{
|
| 69 |
+
"name": "Vishnunarayan K I."
|
| 70 |
+
},
|
| 71 |
+
{
|
| 72 |
+
"name": "Pritish Chakraborty",
|
| 73 |
+
"orcid": "0000-0001-8875-5819",
|
| 74 |
+
"affiliation": "Manav Rachna University"
|
| 75 |
+
},
|
| 76 |
+
{
|
| 77 |
+
"name": "Andrew Inglis",
|
| 78 |
+
"orcid": "0000-0003-0656-2437",
|
| 79 |
+
"affiliation": "Catholic University of America & NASA Goddard Space Flight Center"
|
| 80 |
+
},
|
| 81 |
+
{
|
| 82 |
+
"name": "Punyaslok Pattnaik",
|
| 83 |
+
"orcid": "0000-0001-6216-2353",
|
| 84 |
+
"affiliation": "International Institute of Information Technology, Hyderabad"
|
| 85 |
+
},
|
| 86 |
+
{
|
| 87 |
+
"name": "Brigitta Sipőcz",
|
| 88 |
+
"orcid": "0000-0002-3713-6337",
|
| 89 |
+
"affiliation": "DIRAC Institute, University of Washington"
|
| 90 |
+
},
|
| 91 |
+
{
|
| 92 |
+
"name": "Ahmed Hossam",
|
| 93 |
+
"orcid": "0009-0007-7321-9109",
|
| 94 |
+
"affiliation": "Faculty of Computers and Informatics, Zagazig University"
|
| 95 |
+
},
|
| 96 |
+
{
|
| 97 |
+
"name": "Conor MacBride",
|
| 98 |
+
"orcid": "0000-0002-9901-8723",
|
| 99 |
+
"affiliation": "Astrophysics Research Centre, School of Mathematics and Physics, Queen's University Belfast"
|
| 100 |
+
},
|
| 101 |
+
{
|
| 102 |
+
"name": "Rishabh Sharma"
|
| 103 |
+
},
|
| 104 |
+
{
|
| 105 |
+
"name": "Andrew Leonard",
|
| 106 |
+
"orcid": "0000-0001-5270-7487",
|
| 107 |
+
"affiliation": "Aperio Software Ltd."
|
| 108 |
+
},
|
| 109 |
+
{
|
| 110 |
+
"name": "Russell Hewett",
|
| 111 |
+
"orcid": "0000-0001-8944-4705",
|
| 112 |
+
"affiliation": "Department of Mathematics, Virginia Polytechnic Institute and State University"
|
| 113 |
+
},
|
| 114 |
+
{
|
| 115 |
+
"name": "Alex Hamilton"
|
| 116 |
+
},
|
| 117 |
+
{
|
| 118 |
+
"name": "Abhijeet Manhas",
|
| 119 |
+
"orcid": "0000-0002-0757-2883",
|
| 120 |
+
"affiliation": "School of Computing and Electrical Engineering, Indian Institute of Technology Mandi"
|
| 121 |
+
},
|
| 122 |
+
{
|
| 123 |
+
"name": "Asish Panda"
|
| 124 |
+
},
|
| 125 |
+
{
|
| 126 |
+
"name": "Matt Earnshaw"
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"name": "Nitin Choudhary",
|
| 130 |
+
"orcid": "0000-0001-6915-4583",
|
| 131 |
+
"affiliation": "Department of Mathematics, Indian Institute of Technology, Kharagpur"
|
| 132 |
+
},
|
| 133 |
+
{
|
| 134 |
+
"name": "Ankit Kumar"
|
| 135 |
+
},
|
| 136 |
+
{
|
| 137 |
+
"name": "Raahul Singh",
|
| 138 |
+
"orcid": "0000-0003-4114-8856",
|
| 139 |
+
"affiliation": "Indian Institute of Information Technology, Sri City"
|
| 140 |
+
},
|
| 141 |
+
{
|
| 142 |
+
"name": "Prateek Chanda",
|
| 143 |
+
"orcid": "0000-0002-7068-2866",
|
| 144 |
+
"affiliation": "Department of Computer Science & Technology, Indian Institute of Engineering Science & Technology, Shibpur"
|
| 145 |
+
},
|
| 146 |
+
{
|
| 147 |
+
"name": "Saurav Kumar Roy",
|
| 148 |
+
"orcid": "0009-0007-3703-6532",
|
| 149 |
+
"affiliation": "Amrita Vishwa Vidyapeetham, Amritapuri"
|
| 150 |
+
},
|
| 151 |
+
{
|
| 152 |
+
"name": "Shane Maloney",
|
| 153 |
+
"orcid": "0000-0002-4715-1805",
|
| 154 |
+
"affiliation": "Dublin Institute for Advanced Studies"
|
| 155 |
+
},
|
| 156 |
+
{
|
| 157 |
+
"name": "Pratham Hole",
|
| 158 |
+
"orcid": "0009-0009-6926-1034"
|
| 159 |
+
},
|
| 160 |
+
{
|
| 161 |
+
"name": "Alasdair Wilson",
|
| 162 |
+
"orcid": "0000-0003-0820-8159",
|
| 163 |
+
"affiliation": "Oxford Research Software Engineering Team, University of Oxford"
|
| 164 |
+
},
|
| 165 |
+
{
|
| 166 |
+
"name": "Md Akramul Haque",
|
| 167 |
+
"affiliation": "Department of Mechanical Engineering, ZHCET, Aligarh Muslim University"
|
| 168 |
+
},
|
| 169 |
+
{
|
| 170 |
+
"name": "Chris R. Gilly",
|
| 171 |
+
"orcid": "0000-0003-0021-9056",
|
| 172 |
+
"affiliation": "Southwest Research Institute"
|
| 173 |
+
},
|
| 174 |
+
{
|
| 175 |
+
"name": "Michael S Kirk",
|
| 176 |
+
"orcid": "0000-0001-9874-1429",
|
| 177 |
+
"affiliation": "Catholic University of America & NASA Goddard Space Flight Center"
|
| 178 |
+
},
|
| 179 |
+
{
|
| 180 |
+
"name": "Michael Mueller"
|
| 181 |
+
},
|
| 182 |
+
{
|
| 183 |
+
"name": "Sudarshan Konge"
|
| 184 |
+
},
|
| 185 |
+
{
|
| 186 |
+
"name": "Matt Wentzel-Long",
|
| 187 |
+
"orcid": "0000-0002-3106-4598",
|
| 188 |
+
"affiliation": "Stark State College"
|
| 189 |
+
},
|
| 190 |
+
{
|
| 191 |
+
"name": "Rajul Srivastava"
|
| 192 |
+
},
|
| 193 |
+
{
|
| 194 |
+
"name": "Samuel Bennett",
|
| 195 |
+
"orcid": "0000-0001-6420-4422",
|
| 196 |
+
"affiliation": "Aperio Software Ltd."
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"name": "Yash Jain",
|
| 200 |
+
"orcid": "0000-0001-5347-4734",
|
| 201 |
+
"affiliation": "Indian Institute of Technology, Kharagpur"
|
| 202 |
+
},
|
| 203 |
+
{
|
| 204 |
+
"name": "Lazar Zivadinovic",
|
| 205 |
+
"orcid": "0000-0003-1349-1606"
|
| 206 |
+
},
|
| 207 |
+
{
|
| 208 |
+
"name": "Ankit Baruah"
|
| 209 |
+
},
|
| 210 |
+
{
|
| 211 |
+
"name": "Quinn Arbolante",
|
| 212 |
+
"affiliation": "Lockheed Martin Solar and Astrophysics Laboratory",
|
| 213 |
+
"orcid": "0000-0003-0260-453X"
|
| 214 |
+
},
|
| 215 |
+
{
|
| 216 |
+
"name": "Trestan F. Simon",
|
| 217 |
+
"orcid": "0009-0000-3029-8619"
|
| 218 |
+
},
|
| 219 |
+
{
|
| 220 |
+
"name": "Michael Charlton"
|
| 221 |
+
},
|
| 222 |
+
{
|
| 223 |
+
"name": "Sashank Mishra",
|
| 224 |
+
"orcid": "0000-0001-8302-1584",
|
| 225 |
+
"affiliation": "Indian Institute of Information Technology, Allahabad"
|
| 226 |
+
},
|
| 227 |
+
{
|
| 228 |
+
"name": "Jeffrey Aaron Paul",
|
| 229 |
+
"affiliation": "Dayananda Sagar College of Engineering, Bangalore"
|
| 230 |
+
},
|
| 231 |
+
{
|
| 232 |
+
"name": "Akash Verma"
|
| 233 |
+
},
|
| 234 |
+
{
|
| 235 |
+
"name": "Nicky Chorley",
|
| 236 |
+
"orcid": "0000-0002-2747-2716",
|
| 237 |
+
"affiliation": "Centre for Fusion, Space and Astrophysics, Department of Physics, University of Warwick"
|
| 238 |
+
},
|
| 239 |
+
{
|
| 240 |
+
"name": "Aryan Chouhan",
|
| 241 |
+
"orcid": "0000-0001-8004-7586",
|
| 242 |
+
"affiliation": "Dwarkadas Jivanlal Sanghvi College of Engineering, University of Mumbai"
|
| 243 |
+
},
|
| 244 |
+
{
|
| 245 |
+
"name": "Himanshu"
|
| 246 |
+
},
|
| 247 |
+
{
|
| 248 |
+
"name": "James Paul Mason",
|
| 249 |
+
"orcid": "0000-0002-3783-5509",
|
| 250 |
+
"affiliation": "Laboratory for Atmospheric and Space Physics, University of Colorado Boulder"
|
| 251 |
+
},
|
| 252 |
+
{
|
| 253 |
+
"name": "Sanskar Modi"
|
| 254 |
+
},
|
| 255 |
+
{
|
| 256 |
+
"name": "Yash Sharma",
|
| 257 |
+
"orcid": "0000-0002-7861-9677",
|
| 258 |
+
"affiliation": "Indian Institute of Technology, Kharagpur"
|
| 259 |
+
},
|
| 260 |
+
{
|
| 261 |
+
"name": "Akshit Tyagi",
|
| 262 |
+
"orcid": "0009-0005-4804-9035",
|
| 263 |
+
"affiliation": "Jaypee Institute of Information Technology"
|
| 264 |
+
},
|
| 265 |
+
{
|
| 266 |
+
"name": "Aritra Sinha",
|
| 267 |
+
"orcid": "0009-0008-2531-1012",
|
| 268 |
+
"affiliation": "National Institute of Technology Karnataka, Surathkal"
|
| 269 |
+
},
|
| 270 |
+
{
|
| 271 |
+
"name": "Naman9639"
|
| 272 |
+
},
|
| 273 |
+
{
|
| 274 |
+
"name": "Monica Bobra",
|
| 275 |
+
"orcid": "0000-0002-5662-9604"
|
| 276 |
+
},
|
| 277 |
+
{
|
| 278 |
+
"name": "Jose Ivan Campos Rozo",
|
| 279 |
+
"orcid": "0000-0001-8883-6790",
|
| 280 |
+
"affiliation": "Institut für Physik/IGAM, Karl-Franzens-Universität Graz"
|
| 281 |
+
},
|
| 282 |
+
{
|
| 283 |
+
"name": "Larry Manley"
|
| 284 |
+
},
|
| 285 |
+
{
|
| 286 |
+
"name": "Kateryna Ivashkiv"
|
| 287 |
+
},
|
| 288 |
+
{
|
| 289 |
+
"name": "Timo Laitinen",
|
| 290 |
+
"orcid": "0000-0002-7719-7783",
|
| 291 |
+
"affiliation": "Jeremiah Horrocks Institute, University of Central Lancashire"
|
| 292 |
+
},
|
| 293 |
+
{
|
| 294 |
+
"name": "Agneet Chatterjee",
|
| 295 |
+
"orcid": "0000-0002-0961-9569",
|
| 296 |
+
"affiliation": "Jadavpur University, Kolkata"
|
| 297 |
+
},
|
| 298 |
+
{
|
| 299 |
+
"name": "Ansh Dixit",
|
| 300 |
+
"orcid": "0009-0004-7872-0419",
|
| 301 |
+
"affiliation": "Graphic Era (Deemed to be University), Dehradun"
|
| 302 |
+
},
|
| 303 |
+
{
|
| 304 |
+
"name": "Brett J Graham",
|
| 305 |
+
"orcid": "0000-0001-6315-4507",
|
| 306 |
+
"affiliation": "Space Telescope Science Institute"
|
| 307 |
+
},
|
| 308 |
+
{
|
| 309 |
+
"name": "Jan Gieseler",
|
| 310 |
+
"orcid": "0000-0003-1848-7067",
|
| 311 |
+
"affiliation": "University of Turku"
|
| 312 |
+
},
|
| 313 |
+
{
|
| 314 |
+
"name": "Jayraj Dulange",
|
| 315 |
+
"orcid": "0009-0003-2993-7382",
|
| 316 |
+
"affiliation": "Indian Institute of Technology Gandhinagar"
|
| 317 |
+
},
|
| 318 |
+
{
|
| 319 |
+
"name": "Johan Freiherr von Forstner",
|
| 320 |
+
"orcid": "0000-0002-1390-4776",
|
| 321 |
+
"affiliation": "Institut für Experimentelle und Angewandte Physik, University of Kiel"
|
| 322 |
+
},
|
| 323 |
+
{
|
| 324 |
+
"name": "Juanjo Bazán",
|
| 325 |
+
"orcid": "0000-0001-7699-3983",
|
| 326 |
+
"affiliation": "CIEMAT Particle Physics Unit"
|
| 327 |
+
},
|
| 328 |
+
{
|
| 329 |
+
"name": "Kris Akira Stern",
|
| 330 |
+
"orcid": "0000-0003-1613-8947",
|
| 331 |
+
"affiliation": "University of Hong Kong & University of London"
|
| 332 |
+
},
|
| 333 |
+
{
|
| 334 |
+
"name": "Aryan Shukla",
|
| 335 |
+
"orcid": "0009-0001-9467-4836",
|
| 336 |
+
"affiliation": "Indian Institute of Technology Roorkee"
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"name": "John Evans"
|
| 340 |
+
},
|
| 341 |
+
{
|
| 342 |
+
"name": "Sarthak Jain"
|
| 343 |
+
},
|
| 344 |
+
{
|
| 345 |
+
"name": "Michael Malocha"
|
| 346 |
+
},
|
| 347 |
+
{
|
| 348 |
+
"name": "Sourav Ghosh",
|
| 349 |
+
"orcid": "0000-0002-7259-5651",
|
| 350 |
+
"affiliation": "Jadavpur University, Kolkata"
|
| 351 |
+
},
|
| 352 |
+
{
|
| 353 |
+
"name": "Airmansmith97"
|
| 354 |
+
},
|
| 355 |
+
{
|
| 356 |
+
"name": "Ankit Khushwaha",
|
| 357 |
+
"orcid": "0009-0009-3953-4206",
|
| 358 |
+
"affiliation": "Indian Institute Of Technology Dharwad (IIT-DH)"
|
| 359 |
+
},
|
| 360 |
+
{
|
| 361 |
+
"name": "Dominik Stańczak",
|
| 362 |
+
"orcid": "0000-0001-6291-8843",
|
| 363 |
+
"affiliation": "University of Warsaw"
|
| 364 |
+
},
|
| 365 |
+
{
|
| 366 |
+
"name": "Manit Singh",
|
| 367 |
+
"orcid": "0009-0002-6031-3810",
|
| 368 |
+
"affiliation": "Netaji Subhas University of Technology"
|
| 369 |
+
},
|
| 370 |
+
{
|
| 371 |
+
"name": "Rajiv Ranjan Singh",
|
| 372 |
+
"orcid": "0000-0002-1266-4790",
|
| 373 |
+
"affiliation": "JSS Academy of Technical Education, Bengaluru"
|
| 374 |
+
},
|
| 375 |
+
{
|
| 376 |
+
"name": "Ruben De Visscher"
|
| 377 |
+
},
|
| 378 |
+
{
|
| 379 |
+
"name": "Shresth Verma",
|
| 380 |
+
"orcid": "0000-0003-0370-5471",
|
| 381 |
+
"affiliation": "Atal Bihari Vajpayee-Indian Institute of Information Technology and Management, Gwalior"
|
| 382 |
+
},
|
| 383 |
+
{
|
| 384 |
+
"name": "Sophie Lemos"
|
| 385 |
+
},
|
| 386 |
+
{
|
| 387 |
+
"name": "Ankit Agrawal"
|
| 388 |
+
},
|
| 389 |
+
{
|
| 390 |
+
"name": "Arib Alam"
|
| 391 |
+
},
|
| 392 |
+
{
|
| 393 |
+
"name": "Dumindu Buddhika"
|
| 394 |
+
},
|
| 395 |
+
{
|
| 396 |
+
"name": "Hannah Collier",
|
| 397 |
+
"orcid": "0000-0001-5592-8023",
|
| 398 |
+
"affiliation": "University of Applied Sciences Northwestern Switzerland & ETH Zürich"
|
| 399 |
+
},
|
| 400 |
+
{
|
| 401 |
+
"name": "Haruhisa Iijima",
|
| 402 |
+
"orcid": "0000-0002-1007-181X",
|
| 403 |
+
"affiliation": "Nagoya University"
|
| 404 |
+
},
|
| 405 |
+
{
|
| 406 |
+
"name": "Himanshu Pathak",
|
| 407 |
+
"orcid": "0000-0001-9387-4492",
|
| 408 |
+
"affiliation": "Shri Siddhi Vinayak Institute of Technology"
|
| 409 |
+
},
|
| 410 |
+
{
|
| 411 |
+
"name": "Jai Ram Rideout",
|
| 412 |
+
"orcid": "0000-0003-2587-1454",
|
| 413 |
+
"affiliation": "Dogfox Software LLC"
|
| 414 |
+
},
|
| 415 |
+
{
|
| 416 |
+
"name": "Swapnil Sharma"
|
| 417 |
+
},
|
| 418 |
+
{
|
| 419 |
+
"name": "Wenli Mo",
|
| 420 |
+
"orcid": "0000-0002-9179-9801",
|
| 421 |
+
"affiliation": "Johns Hopkins Applied Physics Lab"
|
| 422 |
+
},
|
| 423 |
+
{
|
| 424 |
+
"name": "Daniel Garcia Briseno"
|
| 425 |
+
},
|
| 426 |
+
{
|
| 427 |
+
"name": "Harsh Shah",
|
| 428 |
+
"orcid": "0009-0000-0795-8471",
|
| 429 |
+
"affiliation": "Dwarkadas Jivanlal Sanghvi College of Engineering, University of Mumbai"
|
| 430 |
+
},
|
| 431 |
+
{
|
| 432 |
+
"name": "Jongyeob Park",
|
| 433 |
+
"orcid": "0000-0002-1063-9129",
|
| 434 |
+
"affiliation": "Space Science Division, Korea Astronomy and Space Science Institute"
|
| 435 |
+
},
|
| 436 |
+
{
|
| 437 |
+
"name": "Matt Bates"
|
| 438 |
+
},
|
| 439 |
+
{
|
| 440 |
+
"name": "Tanish Yelgoe",
|
| 441 |
+
"affiliation": "Indian Institute of Technology Gandhinagar (IIT-GN)"
|
| 442 |
+
},
|
| 443 |
+
{
|
| 444 |
+
"name": "Devansh Shukla",
|
| 445 |
+
"orcid": "0000-0003-0610-9747",
|
| 446 |
+
"affiliation": "Sardar Vallabhbhai National Institute of Technology, Surat"
|
| 447 |
+
},
|
| 448 |
+
{
|
| 449 |
+
"name": "Marius Giger",
|
| 450 |
+
"orcid": "0000-0002-6863-6502",
|
| 451 |
+
"affiliation": "FHNW - University of Applied Sciences and Arts Northwestern Switzerland"
|
| 452 |
+
},
|
| 453 |
+
{
|
| 454 |
+
"name": "Pankaj Mishra"
|
| 455 |
+
},
|
| 456 |
+
{
|
| 457 |
+
"name": "Deepankar Sharma"
|
| 458 |
+
},
|
| 459 |
+
{
|
| 460 |
+
"name": "Dhruv Goel"
|
| 461 |
+
},
|
| 462 |
+
{
|
| 463 |
+
"name": "Garrison Taylor",
|
| 464 |
+
"affiliation": "Center for Astrophysics | Harvard & Smithsonian"
|
| 465 |
+
},
|
| 466 |
+
{
|
| 467 |
+
"name": "Goran Cetusic"
|
| 468 |
+
},
|
| 469 |
+
{
|
| 470 |
+
"name": "Guntbert Reiter"
|
| 471 |
+
},
|
| 472 |
+
{
|
| 473 |
+
"name": "Jacob"
|
| 474 |
+
},
|
| 475 |
+
{
|
| 476 |
+
"name": "Mateo Inchaurrandieta"
|
| 477 |
+
},
|
| 478 |
+
{
|
| 479 |
+
"name": "Piyush Sharma",
|
| 480 |
+
"orcid": "0009-0005-1579-5787",
|
| 481 |
+
"affiliation": "Indian Institute of Technology Roorkee"
|
| 482 |
+
},
|
| 483 |
+
{
|
| 484 |
+
"name": "Sally Dacie",
|
| 485 |
+
"orcid": "0000-0001-7572-2903",
|
| 486 |
+
"affiliation": "Mullard Space Science Laboratory, University College London"
|
| 487 |
+
},
|
| 488 |
+
{
|
| 489 |
+
"name": "Sanjeev Dubey"
|
| 490 |
+
},
|
| 491 |
+
{
|
| 492 |
+
"name": "Arthur Eigenbrot",
|
| 493 |
+
"orcid": "0000-0003-0810-4368",
|
| 494 |
+
"affiliation": "National Solar Observatory"
|
| 495 |
+
},
|
| 496 |
+
{
|
| 497 |
+
"name": "Benjamin Mampaey",
|
| 498 |
+
"orcid": "0000-0001-6541-4966",
|
| 499 |
+
"affiliation": "Royal Observatory of Belgium"
|
| 500 |
+
},
|
| 501 |
+
{
|
| 502 |
+
"name": "Erik Bray"
|
| 503 |
+
},
|
| 504 |
+
{
|
| 505 |
+
"name": "Maya Mohamed",
|
| 506 |
+
"affiliation": "Cairo University"
|
| 507 |
+
},
|
| 508 |
+
{
|
| 509 |
+
"name": "Nick Murphy",
|
| 510 |
+
"affiliation": "Center for Astrophysics | Harvard & Smithsonian",
|
| 511 |
+
"orcid": "0000-0001-6628-8033"
|
| 512 |
+
},
|
| 513 |
+
{
|
| 514 |
+
"name": "Rutuja Surve"
|
| 515 |
+
},
|
| 516 |
+
{
|
| 517 |
+
"name": "Samuel Jackson"
|
| 518 |
+
},
|
| 519 |
+
{
|
| 520 |
+
"name": "Serge Zahniy",
|
| 521 |
+
"orcid": "0000-0001-8835-7087",
|
| 522 |
+
"affiliation": "NASA Goddard Space Flight Center"
|
| 523 |
+
},
|
| 524 |
+
{
|
| 525 |
+
"name": "Sudeep Sidhu"
|
| 526 |
+
},
|
| 527 |
+
{
|
| 528 |
+
"name": "Tomas Meszaros"
|
| 529 |
+
},
|
| 530 |
+
{
|
| 531 |
+
"name": "Utkarsh Parkhi"
|
| 532 |
+
},
|
| 533 |
+
{
|
| 534 |
+
"name": "William Russell"
|
| 535 |
+
},
|
| 536 |
+
{
|
| 537 |
+
"name": "Abhigyan Bose"
|
| 538 |
+
},
|
| 539 |
+
{
|
| 540 |
+
"name": "Abhishek Pandey"
|
| 541 |
+
},
|
| 542 |
+
{
|
| 543 |
+
"name": "Abinash Mahapatra",
|
| 544 |
+
"orcid": "0009-0000-5975-6775",
|
| 545 |
+
"affiliation": "Odisha University of Technology and Research"
|
| 546 |
+
},
|
| 547 |
+
{
|
| 548 |
+
"name": "Adrian Price-Whelan",
|
| 549 |
+
"orcid": "0000-0003-0872-7098",
|
| 550 |
+
"affiliation": "Center for Computational Astrophysics, Flatiron Institute"
|
| 551 |
+
},
|
| 552 |
+
{
|
| 553 |
+
"name": "Amogh Jahagirdar"
|
| 554 |
+
},
|
| 555 |
+
{
|
| 556 |
+
"name": "André Chicrala",
|
| 557 |
+
"orcid": "0000-0002-5230-4909",
|
| 558 |
+
"affiliation": "Northumbria University"
|
| 559 |
+
},
|
| 560 |
+
{
|
| 561 |
+
"name": "Aniket Mishra",
|
| 562 |
+
"orcid": "0009-0008-4790-5604"
|
| 563 |
+
},
|
| 564 |
+
{
|
| 565 |
+
"name": "Ankit"
|
| 566 |
+
},
|
| 567 |
+
{
|
| 568 |
+
"name": "Chloé Guennou"
|
| 569 |
+
},
|
| 570 |
+
{
|
| 571 |
+
"name": "Daniel D'Avella"
|
| 572 |
+
},
|
| 573 |
+
{
|
| 574 |
+
"name": "Daniel Williams",
|
| 575 |
+
"orcid": "0000-0003-3772-198X",
|
| 576 |
+
"affiliation": "School of Physics & Astronomy, University of Glasgow"
|
| 577 |
+
},
|
| 578 |
+
{
|
| 579 |
+
"name": "Dipanshu Verma",
|
| 580 |
+
"orcid": "0000-0003-2461-5547",
|
| 581 |
+
"affiliation": "Indian Institute of Technology, Mandi"
|
| 582 |
+
},
|
| 583 |
+
{
|
| 584 |
+
"name": "Jordan Ballew"
|
| 585 |
+
},
|
| 586 |
+
{
|
| 587 |
+
"name": "Krish Agrawal"
|
| 588 |
+
},
|
| 589 |
+
{
|
| 590 |
+
"name": "Mingyu Jeon",
|
| 591 |
+
"orcid": "0009-0004-7798-5052",
|
| 592 |
+
"affiliation": "Kyung Hee University"
|
| 593 |
+
},
|
| 594 |
+
{
|
| 595 |
+
"name": "Mubin Manasia"
|
| 596 |
+
},
|
| 597 |
+
{
|
| 598 |
+
"name": "Neeraj Kulkarni"
|
| 599 |
+
},
|
| 600 |
+
{
|
| 601 |
+
"name": "Nischal Singh",
|
| 602 |
+
"orcid": "0009-0007-2165-052X",
|
| 603 |
+
"affiliation": "Madhav Institute of Technology & Science, Gwalior"
|
| 604 |
+
},
|
| 605 |
+
{
|
| 606 |
+
"name": "Ole Streicher",
|
| 607 |
+
"orcid": "0000-0001-7751-1843",
|
| 608 |
+
"affiliation": "Leibniz Institute for Astrophysics Potsdam"
|
| 609 |
+
},
|
| 610 |
+
{
|
| 611 |
+
"name": "Priyank Lodha"
|
| 612 |
+
},
|
| 613 |
+
{
|
| 614 |
+
"name": "Samuel J. Van Kooten",
|
| 615 |
+
"orcid": "0000-0002-4472-8517",
|
| 616 |
+
"affiliation": "Southwest Research Institute"
|
| 617 |
+
},
|
| 618 |
+
{
|
| 619 |
+
"name": "Shivansh Mishra"
|
| 620 |
+
},
|
| 621 |
+
{
|
| 622 |
+
"name": "Thomas Robitaille"
|
| 623 |
+
},
|
| 624 |
+
{
|
| 625 |
+
"name": "Tom Augspurger"
|
| 626 |
+
},
|
| 627 |
+
{
|
| 628 |
+
"name": "Yash Krishan"
|
| 629 |
+
},
|
| 630 |
+
{
|
| 631 |
+
"name": "Abijith Bahuleyan"
|
| 632 |
+
},
|
| 633 |
+
{
|
| 634 |
+
"name": "Advait Pimparkar"
|
| 635 |
+
},
|
| 636 |
+
{
|
| 637 |
+
"name": "Adwait Bhope",
|
| 638 |
+
"orcid": "0000-0002-7133-8776",
|
| 639 |
+
"affiliation": "Savitribai Phule Pune University"
|
| 640 |
+
},
|
| 641 |
+
{
|
| 642 |
+
"name": "Ahmad Saeed"
|
| 643 |
+
},
|
| 644 |
+
{
|
| 645 |
+
"name": "Amarjit Singh Gaba",
|
| 646 |
+
"orcid": "0000-0002-9505-0160",
|
| 647 |
+
"affiliation": "School of Mathematics, Cardiff University"
|
| 648 |
+
},
|
| 649 |
+
{
|
| 650 |
+
"name": "Andrew Hill"
|
| 651 |
+
},
|
| 652 |
+
{
|
| 653 |
+
"name": "Bernhard M. Wiedemann"
|
| 654 |
+
},
|
| 655 |
+
{
|
| 656 |
+
"name": "Carlos Molina",
|
| 657 |
+
"orcid": "0000-0003-0300-4106"
|
| 658 |
+
},
|
| 659 |
+
{
|
| 660 |
+
"name": "Diya Khetarpal",
|
| 661 |
+
"orcid": "0009-0009-4729-6797"
|
| 662 |
+
},
|
| 663 |
+
{
|
| 664 |
+
"name": "Duygu Keşkek"
|
| 665 |
+
},
|
| 666 |
+
{
|
| 667 |
+
"name": "Ishtyaq Habib"
|
| 668 |
+
},
|
| 669 |
+
{
|
| 670 |
+
"name": "Joseph Letts",
|
| 671 |
+
"orcid": "0000-0001-9900-739X"
|
| 672 |
+
},
|
| 673 |
+
{
|
| 674 |
+
"name": "Karthikeyan Singaravelan"
|
| 675 |
+
},
|
| 676 |
+
{
|
| 677 |
+
"name": "Kritika Ranjan",
|
| 678 |
+
"orcid": "0000-0001-5638-016X",
|
| 679 |
+
"affiliation": "Jain (Deemed-to-be University), Bangalore"
|
| 680 |
+
},
|
| 681 |
+
{
|
| 682 |
+
"name": "Mridul Pandey"
|
| 683 |
+
},
|
| 684 |
+
{
|
| 685 |
+
"name": "Noah Altunian"
|
| 686 |
+
},
|
| 687 |
+
{
|
| 688 |
+
"name": "Reid Gomillion"
|
| 689 |
+
},
|
| 690 |
+
{
|
| 691 |
+
"name": "Samriddhi Agarwal",
|
| 692 |
+
"orcid": "0000-0003-4497-1637",
|
| 693 |
+
"affiliation": "Ryan International School, Bengaluru, Karnataka"
|
| 694 |
+
},
|
| 695 |
+
{
|
| 696 |
+
"name": "Yash Kothari"
|
| 697 |
+
},
|
| 698 |
+
{
|
| 699 |
+
"name": "Yash Malik",
|
| 700 |
+
"orcid": "0009-0005-7611-034X"
|
| 701 |
+
},
|
| 702 |
+
{
|
| 703 |
+
"name": "Yukie Nomiya",
|
| 704 |
+
"orcid": "0000-0002-9572-6300",
|
| 705 |
+
"affiliation": "Sapienza University of Rome"
|
| 706 |
+
},
|
| 707 |
+
{
|
| 708 |
+
"name": "Zach Burnett",
|
| 709 |
+
"affiliation": "Space Telescope Science Institute"
|
| 710 |
+
},
|
| 711 |
+
{
|
| 712 |
+
"name": "Abigail L. Stevens",
|
| 713 |
+
"orcid": "0000-0002-5041-3079",
|
| 714 |
+
"affiliation": "Department of Physics & Astronomy, Michigan State University & Department of Astronomy, University of Michigan"
|
| 715 |
+
},
|
| 716 |
+
{
|
| 717 |
+
"name": "Akhoury Shauryam",
|
| 718 |
+
"orcid": "0009-0005-8038-8301",
|
| 719 |
+
"affiliation": "Chennai Mathematical Institute"
|
| 720 |
+
},
|
| 721 |
+
{
|
| 722 |
+
"name": "Alex Kaszynski"
|
| 723 |
+
},
|
| 724 |
+
{
|
| 725 |
+
"name": "Alex Wang"
|
| 726 |
+
},
|
| 727 |
+
{
|
| 728 |
+
"name": "Ambar Mehrotra"
|
| 729 |
+
},
|
| 730 |
+
{
|
| 731 |
+
"name": "Andy Tang"
|
| 732 |
+
},
|
| 733 |
+
{
|
| 734 |
+
"name": "Anubhav Sinha"
|
| 735 |
+
},
|
| 736 |
+
{
|
| 737 |
+
"name": "Arfon Smith"
|
| 738 |
+
},
|
| 739 |
+
{
|
| 740 |
+
"name": "Arseniy Kustov"
|
| 741 |
+
},
|
| 742 |
+
{
|
| 743 |
+
"name": "Ashish Bastola",
|
| 744 |
+
"orcid": "0009-0006-4968-1005",
|
| 745 |
+
"affiliation": "Clemson University"
|
| 746 |
+
},
|
| 747 |
+
{
|
| 748 |
+
"name": "Brandon Stone"
|
| 749 |
+
},
|
| 750 |
+
{
|
| 751 |
+
"name": "Chris Bard"
|
| 752 |
+
},
|
| 753 |
+
{
|
| 754 |
+
"name": "Chris Lowder",
|
| 755 |
+
"orcid": "0000-0001-8318-8229",
|
| 756 |
+
"affiliation": "Southwest Research Institute"
|
| 757 |
+
},
|
| 758 |
+
{
|
| 759 |
+
"name": "Clément Robert",
|
| 760 |
+
"orcid": "0000-0001-8629-7068"
|
| 761 |
+
},
|
| 762 |
+
{
|
| 763 |
+
"name": "Ed Behn"
|
| 764 |
+
},
|
| 765 |
+
{
|
| 766 |
+
"name": "Ed Mansky"
|
| 767 |
+
},
|
| 768 |
+
{
|
| 769 |
+
"name": "Emmanuel Arias"
|
| 770 |
+
},
|
| 771 |
+
{
|
| 772 |
+
"name": "Enrico Paganin"
|
| 773 |
+
},
|
| 774 |
+
{
|
| 775 |
+
"name": "Erik Tollerud"
|
| 776 |
+
},
|
| 777 |
+
{
|
| 778 |
+
"name": "Fionnlagh Mackenzie Dover",
|
| 779 |
+
"orcid": "0000-0002-1984-7303",
|
| 780 |
+
"affiliation": "SP2RC, School of Mathematics and Statistics, University of Sheffield"
|
| 781 |
+
},
|
| 782 |
+
{
|
| 783 |
+
"name": "Freek Verstringe",
|
| 784 |
+
"affiliation": "Royal Observatory of Belgium"
|
| 785 |
+
},
|
| 786 |
+
{
|
| 787 |
+
"name": "FreyaJain"
|
| 788 |
+
},
|
| 789 |
+
{
|
| 790 |
+
"name": "Fu Yu",
|
| 791 |
+
"affiliation": "Purple Mountain Observatory"
|
| 792 |
+
},
|
| 793 |
+
{
|
| 794 |
+
"name": "Ghaith Kdimati",
|
| 795 |
+
"orcid": "0009-0006-8851-7814",
|
| 796 |
+
"affiliation": "Cairo University"
|
| 797 |
+
},
|
| 798 |
+
{
|
| 799 |
+
"name": "Gulshan Kumar",
|
| 800 |
+
"orcid": "0000-0001-8523-7223",
|
| 801 |
+
"affiliation": "International Institute of Information Technology, Hyderabad"
|
| 802 |
+
},
|
| 803 |
+
{
|
| 804 |
+
"name": "Hardik"
|
| 805 |
+
},
|
| 806 |
+
{
|
| 807 |
+
"name": "Harsh Mathur",
|
| 808 |
+
"orcid": "0000-0001-5253-4213",
|
| 809 |
+
"affiliation": "Indian Institute of Astrophysics, Bengaluru"
|
| 810 |
+
},
|
| 811 |
+
{
|
| 812 |
+
"name": "Igor Babuschkin"
|
| 813 |
+
},
|
| 814 |
+
{
|
| 815 |
+
"name": "James Calixto"
|
| 816 |
+
},
|
| 817 |
+
{
|
| 818 |
+
"name": "Jaylen Wimbish"
|
| 819 |
+
},
|
| 820 |
+
{
|
| 821 |
+
"name": "Jia Qing"
|
| 822 |
+
},
|
| 823 |
+
{
|
| 824 |
+
"name": "Juan Camilo Buitrago-Casas"
|
| 825 |
+
},
|
| 826 |
+
{
|
| 827 |
+
"name": "Kalpesh Krishna",
|
| 828 |
+
"orcid": "0000-0001-6574-0817",
|
| 829 |
+
"affiliation": "University of Massachusetts Amherst"
|
| 830 |
+
},
|
| 831 |
+
{
|
| 832 |
+
"name": "Kaustubh Chaudhari",
|
| 833 |
+
"orcid": "0000-0003-1734-5075",
|
| 834 |
+
"affiliation": "Atal Bihari Vajpayee Indian Institute of Information Technology and Management, Gwalior"
|
| 835 |
+
},
|
| 836 |
+
{
|
| 837 |
+
"name": "Kaustubh Hiware",
|
| 838 |
+
"orcid": "0000-0003-3301-1016",
|
| 839 |
+
"affiliation": "Indian Institute of Technology, Kharagpur"
|
| 840 |
+
},
|
| 841 |
+
{
|
| 842 |
+
"name": "Koustav Ghosh"
|
| 843 |
+
},
|
| 844 |
+
{
|
| 845 |
+
"name": "Kurt McKee",
|
| 846 |
+
"orcid": "0000-0002-8547-8489",
|
| 847 |
+
"affiliation": "University of Chicago"
|
| 848 |
+
},
|
| 849 |
+
{
|
| 850 |
+
"name": "Manas Mangaonkar"
|
| 851 |
+
},
|
| 852 |
+
{
|
| 853 |
+
"name": "Manish Tiwari"
|
| 854 |
+
},
|
| 855 |
+
{
|
| 856 |
+
"name": "Mark Cheung"
|
| 857 |
+
},
|
| 858 |
+
{
|
| 859 |
+
"name": "Matthew Mendero"
|
| 860 |
+
},
|
| 861 |
+
{
|
| 862 |
+
"name": "Megh Dedhia",
|
| 863 |
+
"orcid": "0000-0002-5828-7679",
|
| 864 |
+
"affiliation": "Dwarkadas Jivanlal Sanghvi College of Engineering, University of Mumbai"
|
| 865 |
+
},
|
| 866 |
+
{
|
| 867 |
+
"name": "Mickaël Schoentgen",
|
| 868 |
+
"orcid": "0000-0002-0106-4810"
|
| 869 |
+
},
|
| 870 |
+
{
|
| 871 |
+
"name": "Mika"
|
| 872 |
+
},
|
| 873 |
+
{
|
| 874 |
+
"name": "Mouloudi Mohamed Lyes"
|
| 875 |
+
},
|
| 876 |
+
{
|
| 877 |
+
"name": "Nakshatra",
|
| 878 |
+
"affiliation": "IIT Kharagpur"
|
| 879 |
+
},
|
| 880 |
+
{
|
| 881 |
+
"name": "Nakul Shahdadpuri"
|
| 882 |
+
},
|
| 883 |
+
{
|
| 884 |
+
"name": "Naveen Srinivasan"
|
| 885 |
+
},
|
| 886 |
+
{
|
| 887 |
+
"name": "Norbert G Gyenge",
|
| 888 |
+
"orcid": "0000-0003-0464-1537",
|
| 889 |
+
"affiliation": "SP2RC, School of Mathematics and Statistics, University of Sheffield"
|
| 890 |
+
},
|
| 891 |
+
{
|
| 892 |
+
"name": "OussCHE"
|
| 893 |
+
},
|
| 894 |
+
{
|
| 895 |
+
"name": "Paul J. Wright",
|
| 896 |
+
"orcid": "0000-0001-9021-611X",
|
| 897 |
+
"affiliation": "Dublin Institute for Advanced Studies"
|
| 898 |
+
},
|
| 899 |
+
{
|
| 900 |
+
"name": "Prisha Sharma"
|
| 901 |
+
},
|
| 902 |
+
{
|
| 903 |
+
"name": "Raghav Agrawal",
|
| 904 |
+
"orcid": "0009-0000-1788-2917",
|
| 905 |
+
"affiliation": "Netaji Subhas University of Technology, New Delhi (NSUT New Delhi) and Indian Institute of Technology, Madras (IIT Madras)"
|
| 906 |
+
},
|
| 907 |
+
{
|
| 908 |
+
"name": "Rahul Gopalakrishnan",
|
| 909 |
+
"orcid": "0000-0002-1282-3480",
|
| 910 |
+
"affiliation": "Inter-University Centre for Astronomy and Astrophysics (IUCAA), Pune"
|
| 911 |
+
},
|
| 912 |
+
{
|
| 913 |
+
"name": "Rajasekhar Reddy Mekala"
|
| 914 |
+
},
|
| 915 |
+
{
|
| 916 |
+
"name": "Ratul Das",
|
| 917 |
+
"orcid": "0000-0002-5845-9979",
|
| 918 |
+
"affiliation": "National Institute of Science Education and Research, Bhubaneswar"
|
| 919 |
+
},
|
| 920 |
+
{
|
| 921 |
+
"name": "Rehan Chalana",
|
| 922 |
+
"affiliation": "Chitkara University, Punjab"
|
| 923 |
+
},
|
| 924 |
+
{
|
| 925 |
+
"name": "Rishabh Mishra"
|
| 926 |
+
},
|
| 927 |
+
{
|
| 928 |
+
"name": "Rohan Sharma"
|
| 929 |
+
},
|
| 930 |
+
{
|
| 931 |
+
"name": "Samuel T. Badman",
|
| 932 |
+
"orcid": "0000-0002-6145-436X",
|
| 933 |
+
"affiliation": "Center for Astrophysics | Harvard & Smithsonian"
|
| 934 |
+
},
|
| 935 |
+
{
|
| 936 |
+
"name": "Shashank Srikanth",
|
| 937 |
+
"affiliation": "International Institute of Information Technology, Hyderabad"
|
| 938 |
+
},
|
| 939 |
+
{
|
| 940 |
+
"name": "Shubham Jain"
|
| 941 |
+
},
|
| 942 |
+
{
|
| 943 |
+
"name": "Sijie Yu",
|
| 944 |
+
"orcid": "0000-0003-2872-2614",
|
| 945 |
+
"affiliation": "New Jersey Institute of Technology"
|
| 946 |
+
},
|
| 947 |
+
{
|
| 948 |
+
"name": "Sirjan Hansda",
|
| 949 |
+
"orcid": "0009-0004-0333-3166",
|
| 950 |
+
"affiliation": "Indian Institute of Science, Karnataka"
|
| 951 |
+
},
|
| 952 |
+
{
|
| 953 |
+
"name": "Suleiman Farah",
|
| 954 |
+
"orcid": "0009-0001-3304-2923",
|
| 955 |
+
"affiliation": "University of Toronto"
|
| 956 |
+
},
|
| 957 |
+
{
|
| 958 |
+
"name": "Swapnil Kannojia",
|
| 959 |
+
"orcid": "0000-0002-4233-774X",
|
| 960 |
+
"affiliation": "Maulana Azad National Institute of Technology Bhopal"
|
| 961 |
+
},
|
| 962 |
+
{
|
| 963 |
+
"name": "Syed Md Mihan Chistie",
|
| 964 |
+
"orcid": "0009-0007-5883-2749",
|
| 965 |
+
"affiliation": "Dayananda Sagar University, Bangalore"
|
| 966 |
+
},
|
| 967 |
+
{
|
| 968 |
+
"name": "Tan Jia Qing",
|
| 969 |
+
"orcid": "0009-0003-6749-982X",
|
| 970 |
+
"affiliation": "Nanyang Technological University"
|
| 971 |
+
},
|
| 972 |
+
{
|
| 973 |
+
"name": "Tannmay Yadav",
|
| 974 |
+
"orcid": "0000-0002-3143-5635",
|
| 975 |
+
"affiliation": "Department of Chemical Engineering, Indian Institute of Technology, Kharagpur"
|
| 976 |
+
},
|
| 977 |
+
{
|
| 978 |
+
"name": "Tathagata Paul"
|
| 979 |
+
},
|
| 980 |
+
{
|
| 981 |
+
"name": "Tessa D. Wilkinson"
|
| 982 |
+
},
|
| 983 |
+
{
|
| 984 |
+
"name": "Thomas A Caswell"
|
| 985 |
+
},
|
| 986 |
+
{
|
| 987 |
+
"name": "Thomas Braccia"
|
| 988 |
+
},
|
| 989 |
+
{
|
| 990 |
+
"name": "Tiago M. D. Pereira",
|
| 991 |
+
"orcid": "0000-0003-4747-4329",
|
| 992 |
+
"affiliation": "Rosseland Centre for Solar Physics, University of Oslo & Institute of Theoretical Astrophysics, University of Oslo"
|
| 993 |
+
},
|
| 994 |
+
{
|
| 995 |
+
"name": "Tim Gates"
|
| 996 |
+
},
|
| 997 |
+
{
|
| 998 |
+
"name": "Trung Kien Dang",
|
| 999 |
+
"orcid": "0000-0001-7562-6495",
|
| 1000 |
+
"affiliation": "Saw Swee Hock School Of Public Health, National University Of Singapore"
|
| 1001 |
+
},
|
| 1002 |
+
{
|
| 1003 |
+
"name": "Varun Bankar"
|
| 1004 |
+
},
|
| 1005 |
+
{
|
| 1006 |
+
"name": "William Jamieson",
|
| 1007 |
+
"orcid": "0000-0001-5976-4492"
|
| 1008 |
+
},
|
| 1009 |
+
{
|
| 1010 |
+
"name": "William Setterberg",
|
| 1011 |
+
"orcid": "0000-0003-2165-8314",
|
| 1012 |
+
"affiliation": "University of Minnesota"
|
| 1013 |
+
},
|
| 1014 |
+
{
|
| 1015 |
+
"name": "Yudhik Agrawal",
|
| 1016 |
+
"orcid": "0000-0003-3827-6857",
|
| 1017 |
+
"affiliation": "International Institute of Information Technology, Hyderabad"
|
| 1018 |
+
},
|
| 1019 |
+
{
|
| 1020 |
+
"name": "_Gagan"
|
| 1021 |
+
},
|
| 1022 |
+
{
|
| 1023 |
+
"name": "eebbaaf"
|
| 1024 |
+
},
|
| 1025 |
+
{
|
| 1026 |
+
"name": "graham"
|
| 1027 |
+
},
|
| 1028 |
+
{
|
| 1029 |
+
"name": "pradeep"
|
| 1030 |
+
},
|
| 1031 |
+
{
|
| 1032 |
+
"name": "resakra"
|
| 1033 |
+
},
|
| 1034 |
+
{
|
| 1035 |
+
"name": "yasintoda"
|
| 1036 |
+
},
|
| 1037 |
+
{
|
| 1038 |
+
"name": "Raphael Attie"
|
| 1039 |
+
},
|
| 1040 |
+
{
|
| 1041 |
+
"name": "Sophie A. Murray",
|
| 1042 |
+
"orcid": "0000-0002-9378-5315"
|
| 1043 |
+
}
|
| 1044 |
+
],
|
| 1045 |
+
"access_right": "open"
|
| 1046 |
+
}
|
sunpy/source/CHANGELOG.rst
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
sunpy/source/CITATION.cff
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
cff-version: '1.1.0'
|
| 2 |
+
message: 'Please cite the following work when using this software.'
|
| 3 |
+
authors:
|
| 4 |
+
- name: 'The SunPy Community'
|
| 5 |
+
- family-names: 'Barnes'
|
| 6 |
+
given-names: 'Will T.'
|
| 7 |
+
- family-names: 'Bobra'
|
| 8 |
+
given-names: 'Monica G.'
|
| 9 |
+
- family-names: 'Christe'
|
| 10 |
+
given-names: 'Steven D.'
|
| 11 |
+
- family-names: 'Freij'
|
| 12 |
+
given-names: 'Nabil'
|
| 13 |
+
- family-names: 'Hayes'
|
| 14 |
+
given-names: 'Laura A.'
|
| 15 |
+
- family-names: 'Ireland'
|
| 16 |
+
given-names: 'Jack'
|
| 17 |
+
- family-names: 'Mumford'
|
| 18 |
+
given-names: 'Stuart'
|
| 19 |
+
- family-names: 'Perez-Suarez'
|
| 20 |
+
given-names: 'David'
|
| 21 |
+
- family-names: 'Ryan'
|
| 22 |
+
given-names: 'Daniel F.'
|
| 23 |
+
- family-names: 'Shih'
|
| 24 |
+
given-names: 'Albert Y.'
|
| 25 |
+
- family-names: 'Chanda'
|
| 26 |
+
given-names: 'Prateek'
|
| 27 |
+
- family-names: 'Glogowski'
|
| 28 |
+
given-names: 'Kolja'
|
| 29 |
+
- family-names: 'Hewett'
|
| 30 |
+
given-names: 'Russell'
|
| 31 |
+
- family-names: 'Hughitt'
|
| 32 |
+
given-names: 'V. Keith'
|
| 33 |
+
- family-names: 'Hill'
|
| 34 |
+
given-names: 'Andrew'
|
| 35 |
+
- family-names: 'Hiware'
|
| 36 |
+
given-names: 'Kaustubh'
|
| 37 |
+
- family-names: 'Inglis'
|
| 38 |
+
given-names: 'Andrew'
|
| 39 |
+
- family-names: 'Kirk'
|
| 40 |
+
given-names: 'Michael S. F.'
|
| 41 |
+
- family-names: 'Konge'
|
| 42 |
+
given-names: 'Sudarshan'
|
| 43 |
+
- family-names: 'Mason'
|
| 44 |
+
given-names: 'James Paul'
|
| 45 |
+
- family-names: 'Maloney'
|
| 46 |
+
given-names: 'Shane Anthony'
|
| 47 |
+
- family-names: 'Murray'
|
| 48 |
+
given-names: 'Sophie A.'
|
| 49 |
+
- family-names: 'Panda'
|
| 50 |
+
given-names: 'Asish'
|
| 51 |
+
- family-names: 'Park'
|
| 52 |
+
given-names: 'Jongyeob'
|
| 53 |
+
- family-names: 'Pereira'
|
| 54 |
+
given-names: 'Tiago M. D.'
|
| 55 |
+
- family-names: 'Reardon'
|
| 56 |
+
given-names: 'Kevin'
|
| 57 |
+
- family-names: 'Savage'
|
| 58 |
+
given-names: 'Sabrina'
|
| 59 |
+
- family-names: 'Sipőcz'
|
| 60 |
+
given-names: 'Brigitta M.'
|
| 61 |
+
- family-names: 'Stansby'
|
| 62 |
+
given-names: 'David'
|
| 63 |
+
- family-names: 'Jain'
|
| 64 |
+
given-names: 'Yash'
|
| 65 |
+
- family-names: 'Taylor'
|
| 66 |
+
given-names: 'Garrison'
|
| 67 |
+
- family-names: 'Yadav'
|
| 68 |
+
given-names: 'Tannmay'
|
| 69 |
+
- family-names: 'Rajul'
|
| 70 |
+
- family-names: 'Dang'
|
| 71 |
+
given-names: 'Trung Kien'
|
| 72 |
+
doi: '10.3847/1538-4357/ab4f7a'
|
| 73 |
+
identifiers:
|
| 74 |
+
- type: 'doi'
|
| 75 |
+
value: '10.3847/1538-4357/ab4f7a'
|
| 76 |
+
- type: 'url'
|
| 77 |
+
value: 'https://iopscience.iop.org/article/10.3847/1538-4357/ab4f7a'
|
| 78 |
+
title: 'The SunPy Project: Open Source Development and Status of the Version 1.0 Core Package'
|
| 79 |
+
url: 'https://iopscience.iop.org/article/10.3847/1538-4357/ab4f7a'
|
sunpy/source/CITATION.rst
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
.. _citing_sunpy:
|
| 2 |
+
|
| 3 |
+
Acknowledging or Citing SunPy
|
| 4 |
+
=============================
|
| 5 |
+
|
| 6 |
+
If you use SunPy in your scientific work, we would appreciate citing it in your publications.
|
| 7 |
+
The continued growth and development of SunPy is dependent on the community being aware of SunPy.
|
| 8 |
+
|
| 9 |
+
Citing SunPy in Publications
|
| 10 |
+
----------------------------
|
| 11 |
+
|
| 12 |
+
Please add the following line within your methods, conclusion or acknowledgements sections:
|
| 13 |
+
|
| 14 |
+
*This research used version X.Y.Z (software citation) of the SunPy open source
|
| 15 |
+
software package (project citation).*
|
| 16 |
+
|
| 17 |
+
The project citation should be to the SunPy paper :cite:p:`the_sunpy_community_sunpy_2020`, and the software citation should be the specific `Zenodo DOI`_ for the version used in your work.
|
| 18 |
+
|
| 19 |
+
.. code:: bibtex
|
| 20 |
+
|
| 21 |
+
@ARTICLE{sunpy_community2020,
|
| 22 |
+
doi = {10.3847/1538-4357/ab4f7a},
|
| 23 |
+
url = {https://iopscience.iop.org/article/10.3847/1538-4357/ab4f7a},
|
| 24 |
+
author = {{The SunPy Community} and Barnes, Will T. and Bobra, Monica G. and Christe, Steven D. and Freij, Nabil and Hayes, Laura A. and Ireland, Jack and Mumford, Stuart and Perez-Suarez, David and Ryan, Daniel F. and Shih, Albert Y. and Chanda, Prateek and Glogowski, Kolja and Hewett, Russell and Hughitt, V. Keith and Hill, Andrew and Hiware, Kaustubh and Inglis, Andrew and Kirk, Michael S. F. and Konge, Sudarshan and Mason, James Paul and Maloney, Shane Anthony and Murray, Sophie A. and Panda, Asish and Park, Jongyeob and Pereira, Tiago M. D. and Reardon, Kevin and Savage, Sabrina and Sipőcz, Brigitta M. and Stansby, David and Jain, Yash and Taylor, Garrison and Yadav, Tannmay and Rajul and Dang, Trung Kien},
|
| 25 |
+
title = {The SunPy Project: Open Source Development and Status of the Version 1.0 Core Package},
|
| 26 |
+
journal = {The Astrophysical Journal},
|
| 27 |
+
volume = {890},
|
| 28 |
+
issue = {1},
|
| 29 |
+
pages = {68-},
|
| 30 |
+
publisher = {American Astronomical Society},
|
| 31 |
+
year = {2020}
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
You can also get this information with ``sunpy.__citation__``.
|
| 35 |
+
|
| 36 |
+
Other SunPy publications
|
| 37 |
+
########################
|
| 38 |
+
|
| 39 |
+
- :cite:t:`sunpy_community_sunpypython_2015` --- First paper describing sunpy v0.5
|
| 40 |
+
|
| 41 |
+
- :cite:t:`mumford_sunpy_2020` --- JOSS review of sunpy v1.0.8
|
| 42 |
+
|
| 43 |
+
- :cite:t:`the_sunpy_community_sunpy_2023` --- Description of the SunPy Project
|
| 44 |
+
|
| 45 |
+
Acknowledging SunPy in Posters and Talks
|
| 46 |
+
----------------------------------------
|
| 47 |
+
|
| 48 |
+
Please include the `Sunpy logo`_ on the title, conclusion slide, or about page.
|
| 49 |
+
For websites please link the image to `sunpy.org`_.
|
| 50 |
+
Other versions of the logo are available in the `sunpy-logo repository`_.
|
| 51 |
+
|
| 52 |
+
.. _Sunpy logo: https://github.com/sunpy/sunpy-logo/blob/master/sunpy_logo.svg
|
| 53 |
+
.. _sunpy.org: https://sunpy.org/
|
| 54 |
+
.. _sunpy-logo repository: https://github.com/sunpy/sunpy-logo/
|
| 55 |
+
.. _Zenodo DOI: https://doi.org/10.5281/zenodo.591887
|
sunpy/source/LICENSE.rst
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Copyright (c) 2013-2025 The SunPy developers
|
| 2 |
+
All rights reserved.
|
| 3 |
+
|
| 4 |
+
Redistribution and use in source and binary forms, with or without
|
| 5 |
+
modification, are permitted provided that the following conditions are
|
| 6 |
+
met:
|
| 7 |
+
|
| 8 |
+
* Redistributions of source code must retain the above copyright
|
| 9 |
+
notice, this list of conditions and the following disclaimer.
|
| 10 |
+
|
| 11 |
+
* Redistributions in binary form must reproduce the above copyright
|
| 12 |
+
notice, this list of conditions and the following disclaimer in the
|
| 13 |
+
documentation and/or other materials provided with the distribution.
|
| 14 |
+
|
| 15 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| 16 |
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| 17 |
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| 18 |
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| 19 |
+
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| 20 |
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| 21 |
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| 22 |
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| 23 |
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| 24 |
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| 25 |
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
sunpy/source/MANIFEST.in
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Exclude specific files
|
| 2 |
+
# All files which are tracked by git and not explicitly excluded here are included by setuptools_scm
|
| 3 |
+
exclude .codecov.yaml
|
| 4 |
+
exclude .editorconfig
|
| 5 |
+
exclude .gitattributes
|
| 6 |
+
exclude .gitignore
|
| 7 |
+
exclude .mailmap
|
| 8 |
+
exclude .pre-commit-config.yaml
|
| 9 |
+
exclude .readthedocs.yaml
|
| 10 |
+
exclude .rtd-environment.yml
|
| 11 |
+
exclude .test_package_pins.txt
|
| 12 |
+
exclude .zenodo.json
|
| 13 |
+
exclude asv.conf.json
|
| 14 |
+
exclude CITATION.cff
|
| 15 |
+
exclude sunpy-dev-env.yml
|
| 16 |
+
exclude tox.ini
|
| 17 |
+
|
| 18 |
+
# Prune folders
|
| 19 |
+
prune .circleci
|
| 20 |
+
prune .github
|
| 21 |
+
prune benchmarks
|
| 22 |
+
prune binder
|
| 23 |
+
prune changelog
|
| 24 |
+
prune tools
|
| 25 |
+
|
| 26 |
+
prune sunpy/_dev
|
sunpy/source/README.rst
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
*********
|
| 2 |
+
``sunpy``
|
| 3 |
+
*********
|
| 4 |
+
|SunPy Logo|
|
| 5 |
+
|
| 6 |
+
+-----------------------------------+-----------------------------------+-----------------------------------+
|
| 7 |
+
| Release | Development | Community |
|
| 8 |
+
+===================================+===================================+===================================+
|
| 9 |
+
| |Latest PyPi Version| | |Python Versions| | |Matrix Chat Room| |
|
| 10 |
+
+-----------------------------------+-----------------------------------+-----------------------------------+
|
| 11 |
+
| |Latest Conda Version| | |Project Status: Active| | |OpenAstronomy Discourse| |
|
| 12 |
+
+-----------------------------------+-----------------------------------+-----------------------------------+
|
| 13 |
+
| |Zenodo - Latest DOI| | |Continuous Integration Status| | |Google Groups Mailing List| |
|
| 14 |
+
+-----------------------------------+-----------------------------------+-----------------------------------+
|
| 15 |
+
| |sunpy stable documentation| | |CodeCov Code Coverage| | |Powered by NumFOCUS| |
|
| 16 |
+
+-----------------------------------+-----------------------------------+-----------------------------------+
|
| 17 |
+
| |sunpy citation| | | |pyOpenSci| |
|
| 18 |
+
+-----------------------------------+-----------------------------------+-----------------------------------+
|
| 19 |
+
|
| 20 |
+
.. |SunPy Logo| image:: https://raw.githubusercontent.com/sunpy/sunpy-logo/master/generated/sunpy_logo_landscape.png
|
| 21 |
+
:width: 200px
|
| 22 |
+
.. |Latest PyPi Version| image:: https://img.shields.io/pypi/v/sunpy.svg
|
| 23 |
+
:target: https://pypi.python.org/pypi/sunpy/
|
| 24 |
+
.. |Python Versions| image:: https://img.shields.io/pypi/pyversions/sunpy
|
| 25 |
+
:target: https://pypi.python.org/pypi/sunpy/
|
| 26 |
+
.. |Matrix Chat Room| image:: https://img.shields.io/matrix/sunpy:openastronomy.org.svg?colorB=%23FE7900&label=Chat&logo=matrix&server_fqdn=matrix.org
|
| 27 |
+
:target: https://app.element.io/#/room/#sunpy:openastronomy.org
|
| 28 |
+
.. |Latest Conda Version| image:: https://anaconda.org/conda-forge/sunpy/badges/version.svg
|
| 29 |
+
:target: https://anaconda.org/conda-forge/sunpy
|
| 30 |
+
.. |Project Status: Active| image:: https://www.repostatus.org/badges/latest/active.svg
|
| 31 |
+
:target: https://www.repostatus.org/#active
|
| 32 |
+
.. |OpenAstronomy Discourse| image:: https://cdck-file-uploads-global.s3.dualstack.us-west-2.amazonaws.com/try2/original/1X/5e1e3b3cada2d7fbae4734d4bc53999933d71c95.svg
|
| 33 |
+
:height: 20px
|
| 34 |
+
:target: https://community.openastronomy.org/
|
| 35 |
+
.. |Zenodo - Latest DOI| image:: https://zenodo.org/badge/2165383.svg
|
| 36 |
+
:target: https://zenodo.org/badge/latestdoi/2165383
|
| 37 |
+
.. |Continuous Integration Status| image:: https://github.com/sunpy/sunpy/actions/workflows/ci.yml/badge.svg?branch=main
|
| 38 |
+
:target: https://github.com/sunpy/sunpy/actions/workflows/ci.yml
|
| 39 |
+
.. |Google Groups Mailing List| image:: https://upload.wikimedia.org/wikipedia/commons/2/27/Google_Groups_logo.gif
|
| 40 |
+
:height: 20px
|
| 41 |
+
:target: https://groups.google.com/g/sunpy
|
| 42 |
+
.. |sunpy stable documentation| image:: https://readthedocs.org/projects/sunpy/badge/?version=stable
|
| 43 |
+
:target: https://docs.sunpy.org/
|
| 44 |
+
.. |CodeCov Code Coverage| image:: https://codecov.io/gh/sunpy/sunpy/branch/main/graph/badge.svg
|
| 45 |
+
:target: https://codecov.io/gh/sunpy/sunpy
|
| 46 |
+
.. |Powered by NumFOCUS| image:: https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A
|
| 47 |
+
:target: https://numfocus.org
|
| 48 |
+
.. |sunpy citation| image:: https://img.shields.io/badge/cite-sunpy-orange
|
| 49 |
+
:target: https://docs.sunpy.org/en/stable/citation.html
|
| 50 |
+
.. |pyOpenSci| image:: https://tinyurl.com/y22nb8up
|
| 51 |
+
:target: https://github.com/pyOpenSci/software-submission/issues/147
|
| 52 |
+
|
| 53 |
+
``sunpy`` is a Python software package that provides fundamental tools for accessing, loading and interacting with solar physics data in Python.
|
| 54 |
+
It includes an interface for searching and downloading data from multiple data providers, data containers for image and time series data, commonly used solar coordinate frames and associated transformations, as well as other functionality needed for solar data analysis.
|
| 55 |
+
|
| 56 |
+
Installation
|
| 57 |
+
============
|
| 58 |
+
|
| 59 |
+
We recommend following the `installation guide <https://docs.sunpy.org/en/stable/guide/installation.html>`__ in the ``sunpy`` documentation.
|
| 60 |
+
This will walk you through installing ``sunpy`` and all of its dependencies.
|
| 61 |
+
|
| 62 |
+
Usage
|
| 63 |
+
=====
|
| 64 |
+
|
| 65 |
+
If you are new to ``sunpy``, the best place to start is the `tutorial <https://docs.sunpy.org/en/stable/tutorial/index.html>`__.
|
| 66 |
+
The `example gallery <https://docs.sunpy.org/en/stable/generated/gallery/index.html>`__ also includes a collection of shorter and more specific examples of using ``sunpy``.
|
| 67 |
+
|
| 68 |
+
Changes
|
| 69 |
+
=======
|
| 70 |
+
|
| 71 |
+
See our `changelog <https://docs.sunpy.org/en/stable/whatsnew/changelog.html>`__ for the latest changes in ``sunpy``.
|
| 72 |
+
|
| 73 |
+
Getting Help
|
| 74 |
+
============
|
| 75 |
+
|
| 76 |
+
For more information or to ask questions about ``sunpy`` or any other SunPy Project package, please check out:
|
| 77 |
+
|
| 78 |
+
- `sunpy documentation <https://docs.sunpy.org/en/stable/>`__
|
| 79 |
+
- `SunPy Affiliated Packages <https://sunpy.org/affiliated>`__
|
| 80 |
+
- `SunPy Chat`_
|
| 81 |
+
- `SunPy mailing list <https://groups.google.com/forum/#!forum/sunpy>`__
|
| 82 |
+
- `SunPy Community forum <https://community.openastronomy.org/c/sunpy/5>`__
|
| 83 |
+
|
| 84 |
+
Acknowledging or Citing ``sunpy``
|
| 85 |
+
=================================
|
| 86 |
+
|
| 87 |
+
If you use ``sunpy`` in your scientific work, we would appreciate your `citing it in your publications <https://docs.sunpy.org/en/stable/citation.html>`__.
|
| 88 |
+
The continued growth and development of ``sunpy`` is dependent on the community being aware of ``sunpy``.
|
| 89 |
+
|
| 90 |
+
Contributing
|
| 91 |
+
============
|
| 92 |
+
|
| 93 |
+
The SunPy Project is a community-driven open-source project that welcomes any and all contributions.
|
| 94 |
+
Whether you are a developer, student, or user, you can help by contributing code, documentation, or community support.
|
| 95 |
+
|
| 96 |
+
If you would like to get involved, the `Newcomers Guide`_ guide explains the many different ways to contribute to the SunPy Project and also shows how to get set up with a development workflow.
|
| 97 |
+
|
| 98 |
+
Help is always welcome, so come and say hello by joining the `SunPy Chat`_ and look over the `Good First Issues list`_ for the ideal places to start.
|
| 99 |
+
|
| 100 |
+
.. _Newcomers Guide: https://docs.sunpy.org/en/latest/dev_guide/contents/newcomers.html
|
| 101 |
+
.. _Good First Issues list: https://github.com/sunpy/sunpy/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22Good+First+Issue%22
|
| 102 |
+
|
| 103 |
+
Usage of Generative AI
|
| 104 |
+
======================
|
| 105 |
+
|
| 106 |
+
We expect authentic engagement in our community.
|
| 107 |
+
**Do no post the output from Large Language Models or similar generative AI as code, issues or comments on GitHub or any other platform.**
|
| 108 |
+
If you use generative AI tools as an aid in developing code or documentation changes, ensure that you fully understand the proposed changes and can explain why they are the correct approach and an improvement to the current state.
|
| 109 |
+
For more information see our documentation on fair and appropriate [AI usage](https://docs.sunpy.org/en/latest/dev_guide/contents/ai_usage.html).
|
| 110 |
+
|
| 111 |
+
Code of Conduct
|
| 112 |
+
===============
|
| 113 |
+
|
| 114 |
+
When you are interacting with the SunPy Community you are asked to follow our `Code of Conduct <https://sunpy.org/coc>`__.
|
| 115 |
+
|
| 116 |
+
.. _SunPy Chat: https://app.element.io/#/room/#sunpy:openastronomy.org
|
sunpy/source/__init__.py
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# -*- coding: utf-8 -*-
|
| 2 |
+
"""
|
| 3 |
+
sunpy Project Package Initialization File
|
| 4 |
+
"""
|
sunpy/source/_typos.toml
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
default.extend-ignore-identifiers-re = [
|
| 2 |
+
"ANDed",
|
| 3 |
+
"arange",
|
| 4 |
+
"iy",
|
| 5 |
+
"iy1",
|
| 6 |
+
"iy2",
|
| 7 |
+
"EIS",
|
| 8 |
+
"eis",
|
| 9 |
+
"EIT",
|
| 10 |
+
"eit",
|
| 11 |
+
"HAE",
|
| 12 |
+
"hsi",
|
| 13 |
+
"Hsi",
|
| 14 |
+
"nd",
|
| 15 |
+
"NDData",
|
| 16 |
+
"alog",
|
| 17 |
+
"alog10",
|
| 18 |
+
"FOVs",
|
| 19 |
+
"FOV",
|
| 20 |
+
"ISES",
|
| 21 |
+
# HEK
|
| 22 |
+
"OT",
|
| 23 |
+
"ot",
|
| 24 |
+
# Coords,
|
| 25 |
+
"pn",
|
| 26 |
+
"lightyear",
|
| 27 |
+
"PNGs",
|
| 28 |
+
"setp",
|
| 29 |
+
"Precess",
|
| 30 |
+
"precess",
|
| 31 |
+
"precessed",
|
| 32 |
+
"ASO",
|
| 33 |
+
"aso",
|
| 34 |
+
]
|
sunpy/source/asv.conf.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"version": 1,
|
| 3 |
+
"project": "sunpy",
|
| 4 |
+
"project_url": "https://sunpy.org/",
|
| 5 |
+
"repo": "./",
|
| 6 |
+
"branches": [
|
| 7 |
+
"main"
|
| 8 |
+
],
|
| 9 |
+
"environment_type": "virtualenv",
|
| 10 |
+
"show_commit_url": "https://github.com/sunpy/sunpy/commit/",
|
| 11 |
+
"benchmark_dir": "benchmarks",
|
| 12 |
+
"results_dir": "asv_results/results",
|
| 13 |
+
"env_dir": "asv_env",
|
| 14 |
+
"install_command": [
|
| 15 |
+
"in-dir={env_dir} python -mpip install {wheel_file}[all]"
|
| 16 |
+
],
|
| 17 |
+
"build_command": [
|
| 18 |
+
"python -mpip install -U build",
|
| 19 |
+
"python -m build",
|
| 20 |
+
"PIP_NO_BUILD_ISOLATION=false python -mpip wheel --no-deps --no-index -w {build_cache_dir} {build_dir}"
|
| 21 |
+
]
|
| 22 |
+
}
|
sunpy/source/benchmarks/__init__.py
ADDED
|
File without changes
|
sunpy/source/benchmarks/coordinates.py
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from asv_runner.benchmarks.mark import SkipNotImplemented
|
| 2 |
+
|
| 3 |
+
import astropy.units as u
|
| 4 |
+
from astropy.coordinates import HCRS, ITRS, HeliocentricMeanEcliptic, SphericalRepresentation
|
| 5 |
+
|
| 6 |
+
import sunpy.coordinates.frames as f
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
class TransformationHeliographic:
|
| 10 |
+
frame_names = ['HCRS', 'HGS', 'HGC', 'HCC', 'HPC', 'HPR', 'HCI']
|
| 11 |
+
|
| 12 |
+
params = (frame_names, frame_names)
|
| 13 |
+
param_names = ['src', 'dest']
|
| 14 |
+
|
| 15 |
+
def setup_cache(self):
|
| 16 |
+
obstime = '2023-01-01'
|
| 17 |
+
vect = SphericalRepresentation(0*u.deg, 0*u.deg, 1*u.AU)
|
| 18 |
+
observer = f.HeliographicStonyhurst(vect, obstime=obstime)
|
| 19 |
+
frames = {
|
| 20 |
+
'HCRS': HCRS(vect, obstime=obstime),
|
| 21 |
+
'HGS': f.HeliographicStonyhurst(vect, obstime=obstime),
|
| 22 |
+
'HGC': f.HeliographicCarrington(vect, obstime=obstime, observer=observer),
|
| 23 |
+
'HCC': f.Heliocentric(vect, obstime=obstime, observer=observer),
|
| 24 |
+
'HPC': f.Helioprojective(vect, obstime=obstime, observer=observer),
|
| 25 |
+
'HPR': f.HelioprojectiveRadial(vect, obstime=obstime, observer=observer),
|
| 26 |
+
'HCI': f.HeliocentricInertial(vect, obstime=obstime),
|
| 27 |
+
}
|
| 28 |
+
return frames
|
| 29 |
+
|
| 30 |
+
def setup(self, frames, src, dest):
|
| 31 |
+
if src == dest:
|
| 32 |
+
raise SkipNotImplemented
|
| 33 |
+
|
| 34 |
+
def time_transform(self, frames, src, dest):
|
| 35 |
+
frames[src].transform_to(frames[dest])
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
class TransformationEcliptic:
|
| 39 |
+
frame_names = ['HAE', 'HEE', 'GSE', 'GEI']
|
| 40 |
+
|
| 41 |
+
params = (frame_names, frame_names)
|
| 42 |
+
param_names = ['src', 'dest']
|
| 43 |
+
|
| 44 |
+
def setup_cache(self):
|
| 45 |
+
obstime = '2023-01-01'
|
| 46 |
+
vect = SphericalRepresentation(0*u.deg, 0*u.deg, 1*u.AU)
|
| 47 |
+
frames = {
|
| 48 |
+
'HAE': HeliocentricMeanEcliptic(vect, obstime=obstime, equinox='J2000'),
|
| 49 |
+
'HEE': f.HeliocentricEarthEcliptic(vect, obstime=obstime),
|
| 50 |
+
'GSE': f.GeocentricSolarEcliptic(vect, obstime=obstime),
|
| 51 |
+
'GEI': f.GeocentricEarthEquatorial(vect, obstime=obstime, equinox='J2000'),
|
| 52 |
+
}
|
| 53 |
+
return frames
|
| 54 |
+
|
| 55 |
+
def setup(self, frames, src, dest):
|
| 56 |
+
if src == dest:
|
| 57 |
+
raise SkipNotImplemented
|
| 58 |
+
|
| 59 |
+
def time_transform(self, frames, src, dest):
|
| 60 |
+
frames[src].transform_to(frames[dest])
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
class TransformationMagnetic:
|
| 64 |
+
frame_names = ['GEO', 'MAG', 'SM', 'GSM']
|
| 65 |
+
|
| 66 |
+
params = (frame_names, frame_names)
|
| 67 |
+
param_names = ['src', 'dest']
|
| 68 |
+
|
| 69 |
+
def setup_cache(self):
|
| 70 |
+
obstime = '2023-01-01'
|
| 71 |
+
vect = SphericalRepresentation(0*u.deg, 0*u.deg, 1*u.AU)
|
| 72 |
+
frames = {
|
| 73 |
+
'GEO': ITRS(vect, obstime=obstime),
|
| 74 |
+
'MAG': f.Geomagnetic(vect, obstime=obstime),
|
| 75 |
+
'SM': f.SolarMagnetic(vect, obstime=obstime),
|
| 76 |
+
'GSM': f.GeocentricSolarMagnetospheric(vect, obstime=obstime),
|
| 77 |
+
}
|
| 78 |
+
return frames
|
| 79 |
+
|
| 80 |
+
def setup(self, frames, src, dest):
|
| 81 |
+
if src == dest:
|
| 82 |
+
raise SkipNotImplemented
|
| 83 |
+
|
| 84 |
+
def time_transform(self, frames, src, dest):
|
| 85 |
+
frames[src].transform_to(frames[dest])
|
sunpy/source/benchmarks/map.py
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from io import BytesIO
|
| 2 |
+
|
| 3 |
+
from asv_runner.benchmarks.mark import SkipNotImplemented, skip_benchmark
|
| 4 |
+
from matplotlib.figure import Figure
|
| 5 |
+
|
| 6 |
+
import astropy.units as u
|
| 7 |
+
|
| 8 |
+
import sunpy.data.sample
|
| 9 |
+
import sunpy.map
|
| 10 |
+
from sunpy.coordinates import propagate_with_solar_surface
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
class Creation:
|
| 14 |
+
params = ['AIA_171_IMAGE', 'HMI_LOS_IMAGE']
|
| 15 |
+
param_names = ['name']
|
| 16 |
+
|
| 17 |
+
def setup(self, name):
|
| 18 |
+
self.filename = getattr(sunpy.data.sample, name)
|
| 19 |
+
|
| 20 |
+
def time_create_map(self, name):
|
| 21 |
+
sunpy.map.Map(self.filename)
|
| 22 |
+
|
| 23 |
+
# Skipped due to a bug in pympler.asizeof
|
| 24 |
+
# https://github.com/pympler/pympler/issues/151
|
| 25 |
+
@skip_benchmark
|
| 26 |
+
def mem_create_map(self, name):
|
| 27 |
+
return sunpy.map.Map(self.filename)
|
| 28 |
+
|
| 29 |
+
def peakmem_create_map(self, name):
|
| 30 |
+
sunpy.map.Map(self.filename)
|
| 31 |
+
|
| 32 |
+
|
| 33 |
+
class Resample:
|
| 34 |
+
def setup_cache(self):
|
| 35 |
+
aiamap = sunpy.map.Map(sunpy.data.sample.AIA_171_IMAGE)
|
| 36 |
+
return aiamap
|
| 37 |
+
|
| 38 |
+
def time_resample(self, aiamap):
|
| 39 |
+
aiamap.resample([100, 100] * u.pix)
|
| 40 |
+
|
| 41 |
+
def peakmem_resample(self, aiamap):
|
| 42 |
+
aiamap.resample([100, 100] * u.pix)
|
| 43 |
+
|
| 44 |
+
|
| 45 |
+
class Rotate:
|
| 46 |
+
params = (['scipy', 'scikit-image', 'opencv'], range(0, 6))
|
| 47 |
+
param_names = ['method', 'order']
|
| 48 |
+
|
| 49 |
+
def setup_cache(self):
|
| 50 |
+
aiamap = sunpy.map.Map(sunpy.data.sample.AIA_171_IMAGE)
|
| 51 |
+
return aiamap
|
| 52 |
+
|
| 53 |
+
def setup(self, aiamap, method, order):
|
| 54 |
+
if method == 'opencv' and order not in {0, 1, 3}:
|
| 55 |
+
raise SkipNotImplemented
|
| 56 |
+
|
| 57 |
+
def time_rotate(self, aiamap, method, order):
|
| 58 |
+
aiamap.rotate(30*u.deg, method=method, order=order)
|
| 59 |
+
|
| 60 |
+
def peakmem_rotate(self, aiamap, method, order):
|
| 61 |
+
aiamap.rotate(30*u.deg, method=method, order=order)
|
| 62 |
+
|
| 63 |
+
|
| 64 |
+
class Reproject:
|
| 65 |
+
params = ['interpolation', 'adaptive']
|
| 66 |
+
param_names = ['algorithm']
|
| 67 |
+
|
| 68 |
+
def setup_cache(self):
|
| 69 |
+
maps = sunpy.map.Map(sunpy.data.sample.AIA_171_IMAGE, sunpy.data.sample.HMI_LOS_IMAGE)
|
| 70 |
+
return maps
|
| 71 |
+
|
| 72 |
+
def time_reproject_to(self, maps, algorithm):
|
| 73 |
+
maps[1].reproject_to(maps[0].wcs, algorithm=algorithm)
|
| 74 |
+
|
| 75 |
+
def peakmem_reproject_to(self, maps, algorithm):
|
| 76 |
+
maps[1].reproject_to(maps[0].wcs, algorithm=algorithm)
|
| 77 |
+
|
| 78 |
+
def time_reproject_to_plus_diffrot(self, maps, algorithm):
|
| 79 |
+
with propagate_with_solar_surface():
|
| 80 |
+
maps[1].reproject_to(maps[0].wcs, algorithm=algorithm)
|
| 81 |
+
|
| 82 |
+
def peakmem_reproject_to_plus_diffrot(self, maps, algorithm):
|
| 83 |
+
with propagate_with_solar_surface():
|
| 84 |
+
maps[1].reproject_to(maps[0].wcs, algorithm=algorithm)
|
| 85 |
+
|
| 86 |
+
|
| 87 |
+
class Autoalign:
|
| 88 |
+
params = [False, True, 'pcolormesh']
|
| 89 |
+
param_names = ['autoalign']
|
| 90 |
+
|
| 91 |
+
def setup_cache(self):
|
| 92 |
+
maps = sunpy.map.Map(sunpy.data.sample.AIA_171_IMAGE, sunpy.data.sample.HMI_LOS_IMAGE)
|
| 93 |
+
return maps
|
| 94 |
+
|
| 95 |
+
def time_autoalign(self, maps, autoalign):
|
| 96 |
+
fig = Figure()
|
| 97 |
+
ax = fig.add_subplot(projection=maps[0])
|
| 98 |
+
maps[1].plot(axes=ax, autoalign=autoalign)
|
| 99 |
+
buf = BytesIO()
|
| 100 |
+
fig.savefig(buf, format='png')
|
| 101 |
+
|
| 102 |
+
def peakmem_autoalign(self, maps, autoalign):
|
| 103 |
+
fig = Figure()
|
| 104 |
+
ax = fig.add_subplot(projection=maps[0])
|
| 105 |
+
maps[1].plot(axes=ax, autoalign=autoalign)
|
| 106 |
+
buf = BytesIO()
|
| 107 |
+
fig.savefig(buf, format='png')
|
sunpy/source/benchmarks/time.py
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from sunpy.time import is_time, parse_time
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
def time_is_time():
|
| 5 |
+
is_time('1995-12-31 23:59:60')
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
def time_parse_time():
|
| 9 |
+
parse_time('1995-12-31 23:59:60')
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
def mem_parse_time():
|
| 13 |
+
t = parse_time('1995-12-31 23:59:60')
|
| 14 |
+
return t
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
def peakmem_parse_time():
|
| 18 |
+
parse_time('1995-12-31 23:59:60')
|
sunpy/source/changelog/8493.bugfix.rst
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
Fix ~`sunpy.net.scraper.Scraper` to correctly handle proper local file URI on Windows and make internal code more consistent.
|
sunpy/source/changelog/8505.doc.rst
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
Add `AI Usage <https://docs.sunpy.org/en/latest/dev_guide/contents/ai_usage.html>`__ document and update newcomers guide to cross reference.
|