solarwindpy 0.0.1.dev0__py3-none-any.whl → 0.1.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of solarwindpy might be problematic. Click here for more details.

Files changed (412) hide show
  1. plans/.velocity/metrics.json +96 -0
  2. plans/0-overview-template.md +268 -0
  3. plans/N-phase-template.md +106 -0
  4. plans/PLAN_AUDIT_SUMMARY.md +173 -0
  5. plans/TEMPLATE-USAGE-GUIDE.md +198 -0
  6. plans/__init__.py +1 -0
  7. plans/abandoned/compaction-agent-system/0-Overview.md +123 -0
  8. plans/abandoned/compaction-agent-system/agents-index-update-plan.md +109 -0
  9. plans/abandoned/compaction-agent-system/compacted_state.md +85 -0
  10. plans/abandoned/compaction-agent-system/implementation-plan.md +107 -0
  11. plans/abandoned/compaction-agent-system/system-validation-report.md +159 -0
  12. plans/abandoned/compaction-agent-system/usage-guide.md +210 -0
  13. plans/abandoned/hook-system-enhancement/0-Overview.md +214 -0
  14. plans/abandoned/hook-system-enhancement/1-Phase1-Core-Infrastructure.md +313 -0
  15. plans/abandoned/hook-system-enhancement/2-Phase2-Intelligent-Testing.md +385 -0
  16. plans/abandoned/hook-system-enhancement/3-Phase3-Physics-Validation.md +444 -0
  17. plans/abandoned/hook-system-enhancement/4-Phase4-Performance-Monitoring.md +458 -0
  18. plans/abandoned/hook-system-enhancement/5-Phase5-Developer-Experience.md +532 -0
  19. plans/abandoned/hook-system-enhancement/6-Implementation-Timeline.md +274 -0
  20. plans/abandoned/hook-system-enhancement/7-Risk-Management.md +376 -0
  21. plans/abandoned/hook-system-enhancement/8-Testing-Strategy.md +579 -0
  22. plans/abandoned/readthedocs-automation/0-Overview.md +247 -0
  23. plans/abandoned/readthedocs-automation/1-Emergency-Documentation-Fixes.md +270 -0
  24. plans/abandoned/readthedocs-automation/2-Template-System-Enhancement.md +811 -0
  25. plans/abandoned/readthedocs-automation/3-Quality-Audit-ReadTheDocs-Integration.md +844 -0
  26. plans/abandoned/readthedocs-automation/4-Plan-Consolidation-Cleanup.md +632 -0
  27. plans/abandoned/readthedocs-automation/9-Closeout.md +207 -0
  28. plans/abandoned/readthedocs-automation/ABANDONMENT_REASON.md +72 -0
  29. plans/cicd-architecture-redesign/0-Overview.md +193 -0
  30. plans/cicd-architecture-redesign/1-Workflow-Creation.md +103 -0
  31. plans/cicd-architecture-redesign/2-Version-Detection.md +123 -0
  32. plans/cicd-architecture-redesign/3-Deployment-Gates.md +169 -0
  33. plans/cicd-architecture-redesign/4-RC-Testing.md +194 -0
  34. plans/cicd-architecture-redesign/5-TestPyPI-Validation.md +264 -0
  35. plans/cicd-architecture-redesign/6-Production-Release.md +263 -0
  36. plans/cicd-architecture-redesign/7-Cleanup.md +243 -0
  37. plans/cicd-architecture-redesign/8-Documentation.md +285 -0
  38. plans/cicd-architecture-redesign/Closeout.md +225 -0
  39. plans/closeout-template.md +259 -0
  40. plans/completed/circular-import-audit/0-Overview.md +152 -0
  41. plans/completed/circular-import-audit/1-Static-Dependency-Analysis.md +62 -0
  42. plans/completed/circular-import-audit/2-Dynamic-Import-Testing.md +56 -0
  43. plans/completed/circular-import-audit/3-Performance-Impact-Assessment.md +56 -0
  44. plans/completed/circular-import-audit/4-Issue-Remediation.md +78 -0
  45. plans/completed/circular-import-audit/5-Preventive-Infrastructure.md +89 -0
  46. plans/completed/claude-settings-ecosystem-alignment/0-Overview.md +162 -0
  47. plans/completed/claude-settings-ecosystem-alignment/1-Security-Foundation.md +148 -0
  48. plans/completed/claude-settings-ecosystem-alignment/2-Hook-Integration.md +158 -0
  49. plans/completed/claude-settings-ecosystem-alignment/3-Agent-System-Integration.md +177 -0
  50. plans/completed/claude-settings-ecosystem-alignment/4-Enhanced-Workflow-Automation.md +159 -0
  51. plans/completed/claude-settings-ecosystem-alignment/5-Validation-Monitoring.md +181 -0
  52. plans/completed/claude-settings-ecosystem-alignment/compacted_session_state.md +290 -0
  53. plans/completed/combined_plan_with_checklist_documentation/1-Overview-and-Goals.md +51 -0
  54. plans/completed/combined_plan_with_checklist_documentation/2-Toolchain-and-Hosting.md +69 -0
  55. plans/completed/combined_plan_with_checklist_documentation/3-Repository-Structure.md +61 -0
  56. plans/completed/combined_plan_with_checklist_documentation/4-Configuration-and-Standards.md +70 -0
  57. plans/completed/combined_plan_with_checklist_documentation/5-Documentation-Content.md +62 -0
  58. plans/completed/combined_plan_with_checklist_documentation/6-CI-CD-and-Validation.md +58 -0
  59. plans/completed/combined_plan_with_checklist_documentation/7-Maintenance.md +55 -0
  60. plans/completed/combined_test_plan_with_checklist_fitfunctions/0-Overview.md +135 -0
  61. plans/completed/combined_test_plan_with_checklist_fitfunctions/1-Common-fixtures.md +59 -0
  62. plans/completed/combined_test_plan_with_checklist_fitfunctions/10-power_laws.md +56 -0
  63. plans/completed/combined_test_plan_with_checklist_fitfunctions/2-core.py-FitFunction.md +118 -0
  64. plans/completed/combined_test_plan_with_checklist_fitfunctions/3-gaussians.py-Gaussian-GaussianNormalized-GaussianLn.md +69 -0
  65. plans/completed/combined_test_plan_with_checklist_fitfunctions/4-trend_fits.py-TrendFit.md +99 -0
  66. plans/completed/combined_test_plan_with_checklist_fitfunctions/5-plots.py-FFPlot.md +98 -0
  67. plans/completed/combined_test_plan_with_checklist_fitfunctions/6-tex_info.py-TeXinfo.md +79 -0
  68. plans/completed/combined_test_plan_with_checklist_fitfunctions/7-Justification.md +49 -0
  69. plans/completed/combined_test_plan_with_checklist_fitfunctions/8-exponentials.md +64 -0
  70. plans/completed/combined_test_plan_with_checklist_fitfunctions/9-lines.md +58 -0
  71. plans/completed/combined_test_plan_with_checklist_plotting/0-Overview.md +142 -0
  72. plans/completed/combined_test_plan_with_checklist_plotting/1-base.py.md +90 -0
  73. plans/completed/combined_test_plan_with_checklist_plotting/10-labels-special.py.md +102 -0
  74. plans/completed/combined_test_plan_with_checklist_plotting/11-labels-chemistry.py.md +212 -0
  75. plans/completed/combined_test_plan_with_checklist_plotting/12-labels-composition.py.md +242 -0
  76. plans/completed/combined_test_plan_with_checklist_plotting/13-labels-datetime.py.md +247 -0
  77. plans/completed/combined_test_plan_with_checklist_plotting/14-labels-elemental_abundance.py.md +274 -0
  78. plans/completed/combined_test_plan_with_checklist_plotting/15-visual-validation.md +256 -0
  79. plans/completed/combined_test_plan_with_checklist_plotting/16-integration-testing.md +266 -0
  80. plans/completed/combined_test_plan_with_checklist_plotting/17-performance-benchmarks.md +267 -0
  81. plans/completed/combined_test_plan_with_checklist_plotting/18-Fixtures-and-Utilities.md +86 -0
  82. plans/completed/combined_test_plan_with_checklist_plotting/2-agg_plot.py.md +90 -0
  83. plans/completed/combined_test_plan_with_checklist_plotting/3-histograms.py.md +201 -0
  84. plans/completed/combined_test_plan_with_checklist_plotting/4-scatter.py.md +167 -0
  85. plans/completed/combined_test_plan_with_checklist_plotting/5-spiral.py.md +216 -0
  86. plans/completed/combined_test_plan_with_checklist_plotting/6-orbits.py.md +108 -0
  87. plans/completed/combined_test_plan_with_checklist_plotting/7-tools.py.md +86 -0
  88. plans/completed/combined_test_plan_with_checklist_plotting/8-select_data_from_figure.py.md +97 -0
  89. plans/completed/combined_test_plan_with_checklist_plotting/9-labels-base.py.md +88 -0
  90. plans/completed/combined_test_plan_with_checklist_solar_activity/.gitkeep +0 -0
  91. plans/completed/combined_test_plan_with_checklist_solar_activity/0-Overview.md +170 -0
  92. plans/completed/combined_test_plan_with_checklist_solar_activity/1-Package-Entry-Point-__init__.py.md +121 -0
  93. plans/completed/combined_test_plan_with_checklist_solar_activity/2-Core-Base-Classes-base.py.md +142 -0
  94. plans/completed/combined_test_plan_with_checklist_solar_activity/3-Plotting-Helpers-plots.py.md +123 -0
  95. plans/completed/combined_test_plan_with_checklist_solar_activity/4-LISIRD-Sub-package.md +119 -0
  96. plans/completed/combined_test_plan_with_checklist_solar_activity/5-Extrema-Calculator.md +103 -0
  97. plans/completed/combined_test_plan_with_checklist_solar_activity/6-Sunspot-Number-Sub-package.md +163 -0
  98. plans/completed/combined_test_plan_with_checklist_solar_activity/7-Sunspot-Number-Init.py.md +217 -0
  99. plans/completed/combined_test_plan_with_checklist_solar_activity/compacted_state.md +52 -0
  100. plans/completed/compaction-agent-modernization/0-Overview.md +156 -0
  101. plans/completed/compaction-agent-modernization/1-Architecture-Audit-Gap-Analysis.md +132 -0
  102. plans/completed/compaction-agent-modernization/2-Token-Baseline-Recalibration.md +153 -0
  103. plans/completed/compaction-agent-modernization/3-Agent-Reference-Updates.md +184 -0
  104. plans/completed/compaction-agent-modernization/4-Compression-Algorithm-Modernization.md +238 -0
  105. plans/completed/compaction-agent-modernization/5-Workflow-Integration-Streamlining.md +252 -0
  106. plans/completed/compaction-agent-modernization/6-Template-Structure-Optimization.md +240 -0
  107. plans/completed/compaction-agent-modernization/7-Integration-Testing-Validation.md +292 -0
  108. plans/completed/compaction-hook-enhancement/0-Overview.md +150 -0
  109. plans/completed/compaction-hook-enhancement/1-Token-Estimation-Enhancement.md +179 -0
  110. plans/completed/compaction-hook-enhancement/2-Compression-Intelligence.md +294 -0
  111. plans/completed/compaction-hook-enhancement/3-Git-Integration-Metadata.md +310 -0
  112. plans/completed/compaction-hook-enhancement/4-Session-Continuity-Features.md +358 -0
  113. plans/completed/compaction-hook-enhancement/5-Testing-Strategy.md +404 -0
  114. plans/completed/compaction-hook-enhancement/6-Integration-Roadmap.md +319 -0
  115. plans/completed/compaction-hook-enhancement/compacted_state.md +142 -0
  116. plans/completed/docstring-audit-enhancement/0-Overview.md +274 -0
  117. plans/completed/docstring-audit-enhancement/1-Infrastructure-Setup-and-Validation-Tools.md +206 -0
  118. plans/completed/docstring-audit-enhancement/2-Core-Physics-Modules-Enhancement.md +237 -0
  119. plans/completed/docstring-audit-enhancement/3-Fitfunctions-Mathematical-Modules-Enhancement.md +188 -0
  120. plans/completed/docstring-audit-enhancement/4-Plotting-Visualization-Modules-Enhancement.md +243 -0
  121. plans/completed/docstring-audit-enhancement/5-Specialized-Modules-Enhancement.md +216 -0
  122. plans/completed/docstring-audit-enhancement/6-Validation-and-Integration.md +216 -0
  123. plans/completed/fitfunctions-testing-implementation/0-Overview.md +130 -0
  124. plans/completed/fitfunctions-testing-implementation/1-Test-Infrastructure-Setup.md +79 -0
  125. plans/completed/fitfunctions-testing-implementation/2-Common-Fixtures-Test-Utilities.md +104 -0
  126. plans/completed/fitfunctions-testing-implementation/3-Core-FitFunction-Testing.md +168 -0
  127. plans/completed/fitfunctions-testing-implementation/4-Specialized-Function-Classes.md +210 -0
  128. plans/completed/fitfunctions-testing-implementation/5-Advanced-Classes-Testing.md +214 -0
  129. plans/completed/fitfunctions-testing-implementation/6-Plotting-Integration-Testing.md +231 -0
  130. plans/completed/fitfunctions-testing-implementation/7-Extended-Coverage-BONUS.md +184 -0
  131. plans/completed/numpy-docstring-conversion-plan/numpy-docstring-conversion-plan.md +118 -0
  132. plans/completed/pr-review-remediation/0-Overview.md +138 -0
  133. plans/completed/pr-review-remediation/1-Critical-Safety-Improvements.md +179 -0
  134. plans/completed/pr-review-remediation/2-Smart-Timeouts-Validation.md +399 -0
  135. plans/completed/pr-review-remediation/3-Enhanced-GitHub-Integration.md +258 -0
  136. plans/completed/pr-review-remediation/compacted_state.md +66 -0
  137. plans/completed/python-310-migration/0-Overview.md +390 -0
  138. plans/completed/python-310-migration/1-Planning-Setup.md +164 -0
  139. plans/completed/python-310-migration/2-Implementation.md +256 -0
  140. plans/completed/python-310-migration/3-Testing-Validation.md +335 -0
  141. plans/completed/python-310-migration/4-Documentation-Release.md +274 -0
  142. plans/completed/python-310-migration/5-Closeout.md +252 -0
  143. plans/completed/requirements-management-consolidation/0-Overview.md +118 -0
  144. plans/completed/requirements-management-consolidation/1-Documentation-Validation-Environment-Setup.md +116 -0
  145. plans/completed/requirements-management-consolidation/2-Requirements-Consolidation.md +161 -0
  146. plans/completed/requirements-management-consolidation/3-Workflow-Automation-Final-Integration.md +196 -0
  147. plans/completed/single-ecosystem-plan-implementation/0-Overview.md +83 -0
  148. plans/completed/single-ecosystem-plan-implementation/1-Plan-Preservation-Session-Management.md +38 -0
  149. plans/completed/single-ecosystem-plan-implementation/2-File-Structure-Optimization.md +43 -0
  150. plans/completed/single-ecosystem-plan-implementation/3-Plan-Migration-Archive-Setup.md +82 -0
  151. plans/completed/single-ecosystem-plan-implementation/4-Agent-System-Transformation.md +108 -0
  152. plans/completed/single-ecosystem-plan-implementation/5-Template-System-Enhancement.md +131 -0
  153. plans/completed/single-ecosystem-plan-implementation/6-Final-Validation-Testing.md +120 -0
  154. plans/completed/test-directory-consolidation/0-Overview.md +51 -0
  155. plans/completed/test-directory-consolidation/1-Structure-Preparation.md +82 -0
  156. plans/completed/test-directory-consolidation/2-File-Migration.md +100 -0
  157. plans/completed/test-directory-consolidation/3-Import-Transformation.md +117 -0
  158. plans/completed/test-directory-consolidation/4-Configuration-Consolidation.md +140 -0
  159. plans/completed/test-directory-consolidation/5-Validation.md +152 -0
  160. plans/completed/test-directory-consolidation/6-Cleanup.md +156 -0
  161. plans/completed/test-planning-agents-architecture/0-Overview.md +79 -0
  162. plans/completed/test-planning-agents-architecture/1-Branch-Isolation-Testing.md +49 -0
  163. plans/completed/test-planning-agents-architecture/2-Cross-Branch-Coordination.md +51 -0
  164. plans/completed/test-planning-agents-architecture/3-Merge-Workflow-Testing.md +48 -0
  165. plans/deployment-semver-pypi-rtd/0-Overview.md +463 -0
  166. plans/deployment-semver-pypi-rtd/1-Semantic-Versioning-Foundation.md +136 -0
  167. plans/deployment-semver-pypi-rtd/2-PyPI-Deployment-Infrastructure.md +168 -0
  168. plans/deployment-semver-pypi-rtd/3-Release-Automation.md +214 -0
  169. plans/deployment-semver-pypi-rtd/4-Plan-Closeout.md +543 -0
  170. plans/deployment-semver-pypi-rtd/compacted_session_state.md +172 -0
  171. plans/deployment-semver-pypi-rtd/compacted_state.md +131 -0
  172. plans/documentation-code-audit/0-Overview.md +393 -0
  173. plans/documentation-code-audit/1-Discovery-Inventory.md +183 -0
  174. plans/documentation-code-audit/2-Execution-Environment-Setup.md +263 -0
  175. plans/documentation-code-audit/3-Systematic-Validation.md +322 -0
  176. plans/documentation-code-audit/4-Code-Example-Remediation.md +358 -0
  177. plans/documentation-code-audit/5-Physics-MultiIndex-Compliance.md +464 -0
  178. plans/documentation-code-audit/6-Doctest-Integration.md +523 -0
  179. plans/documentation-code-audit/7-Reporting-Documentation.md +498 -0
  180. plans/documentation-code-audit/8-Closeout.md +456 -0
  181. plans/documentation-rebuild-session/compacted_state.md +109 -0
  182. plans/documentation-rendering-fixes/0-Overview.md +104 -0
  183. plans/documentation-rendering-fixes/1-Sphinx-Build-Diagnostics-Warning-Audit.md +101 -0
  184. plans/documentation-rendering-fixes/2-Configuration-Infrastructure-Fixes.md +113 -0
  185. plans/documentation-rendering-fixes/3-Docstring-Syntax-Audit-Repair.md +131 -0
  186. plans/documentation-rendering-fixes/4-HTML-Page-Rendering-Verification.md +113 -0
  187. plans/documentation-rendering-fixes/5-Advanced-Documentation-Quality-Assurance.md +119 -0
  188. plans/documentation-rendering-fixes/6-Documentation-Build-Optimization-Testing.md +129 -0
  189. plans/documentation-rendering-fixes/compacted_state.md +132 -0
  190. plans/documentation-template-fix/0-Overview.md +197 -0
  191. plans/documentation-template-fix/1-Template-System-Analysis.md +269 -0
  192. plans/documentation-template-fix/2-Template-Modification.md +609 -0
  193. plans/documentation-template-fix/3-Build-System-Integration.md +766 -0
  194. plans/documentation-template-fix/4-Testing-Validation.md +1399 -0
  195. plans/documentation-template-fix/5-Documentation-Training.md +602 -0
  196. plans/documentation-workflow-fix/0-Overview.md +222 -0
  197. plans/documentation-workflow-fix/1-Immediate-Fixes.md +238 -0
  198. plans/documentation-workflow-fix/2-Configuration-Setup.md +298 -0
  199. plans/documentation-workflow-fix/3-Pre-commit-Integration.md +382 -0
  200. plans/documentation-workflow-fix/4-Workflow-Improvements.md +446 -0
  201. plans/documentation-workflow-fix/5-Documentation-and-Training.md +527 -0
  202. plans/duplicate-object-warnings-fix-plan.md +130 -0
  203. plans/github-issues-migration/0-Overview.md +510 -0
  204. plans/github-issues-migration/1-Foundation-Label-System.md +180 -0
  205. plans/github-issues-migration/2-Migration-Tool-Rewrite.md +235 -0
  206. plans/github-issues-migration/3-CLI-Integration-Automation.md +169 -0
  207. plans/github-issues-migration/4-Validated-Migration.md +252 -0
  208. plans/github-issues-migration/5-Documentation-Training.md +171 -0
  209. plans/github-issues-migration/6-Closeout.md +179 -0
  210. plans/github-workflows-repair/repair-plan.md +299 -0
  211. plans/issues_from_plans.py +342 -0
  212. plans/pr-270-doc-validation-fixes/0-Overview.md +354 -0
  213. plans/pr-270-doc-validation-fixes/1-Critical-PR-Fixes.md +117 -0
  214. plans/pr-270-doc-validation-fixes/2-Framework-Right-Sizing.md +129 -0
  215. plans/pr-270-doc-validation-fixes/3-Sustainable-Documentation.md +126 -0
  216. plans/pr-270-doc-validation-fixes/4-Closeout-Migration.md +143 -0
  217. plans/pr-270-doc-validation-fixes/PLAN_COMPLETED.md +149 -0
  218. plans/python-310-migration/0-Overview.md +390 -0
  219. plans/python-310-migration/1-Planning-Setup.md +164 -0
  220. plans/python-310-migration/2-Implementation.md +256 -0
  221. plans/python-310-migration/3-Testing-Validation.md +335 -0
  222. plans/python-310-migration/4-Documentation-Release.md +274 -0
  223. plans/python-310-migration/5-Closeout.md +252 -0
  224. plans/readthedocs-simplified/0-Overview.md +243 -0
  225. plans/readthedocs-simplified/1-Immediate-Fixes.md +216 -0
  226. plans/readthedocs-simplified/2-Template-Simplification.md +278 -0
  227. plans/readthedocs-simplified/3-ReadTheDocs-Setup.md +298 -0
  228. plans/readthedocs-simplified/4-Testing-Validation.md +328 -0
  229. plans/readthedocs-simplified/5-Closeout.md +231 -0
  230. plans/readthedocs-simplified/compacted_state.md +127 -0
  231. plans/session-compaction-2025-08-12/compacted_state.md +114 -0
  232. plans/session-compaction-2025-08-13/compacted_state.md +145 -0
  233. plans/session-continuity-protocol/0-Overview.md +35 -0
  234. plans/session-continuity-protocol/1-Core-Principles-Framework.md +40 -0
  235. plans/session-continuity-protocol/2-Pre-Session-Validation-System.md +79 -0
  236. plans/session-continuity-protocol/3-Context-Switching-Prevention.md +87 -0
  237. plans/session-continuity-protocol/4-Progress-Tracking-Recovery.md +100 -0
  238. plans/sphinx-warnings-analysis.md +222 -0
  239. plans/systemprompt-optimization/0-Overview.md +447 -0
  240. plans/systemprompt-optimization/1-Deploy-SystemPrompt.md +114 -0
  241. plans/systemprompt-optimization/2-Documentation-Alignment.md +198 -0
  242. plans/systemprompt-optimization/3-Monitoring-Infrastructure.md +396 -0
  243. plans/systemprompt-optimization/4-Implementation-Script.md +450 -0
  244. plans/systemprompt-optimization/9-Closeout.md +165 -0
  245. plans/systemprompt-optimization/compacted_state.md +143 -0
  246. plans/template-value-propositions/0-Overview.md +357 -0
  247. plans/template-value-propositions/1-Value-Proposition-Framework-Design.md +144 -0
  248. plans/template-value-propositions/2-Plan-Template-Enhancement.md +178 -0
  249. plans/template-value-propositions/3-Value-Generator-Hook-Implementation.md +291 -0
  250. plans/template-value-propositions/4-Value-Validator-Hook-Implementation.md +274 -0
  251. plans/template-value-propositions/5-Documentation-Agent-Updates.md +219 -0
  252. plans/template-value-propositions/6-Integration-Testing-Validation.md +247 -0
  253. plans/tests-audit/0-Overview.md +410 -0
  254. plans/tests-audit/1-Discovery-Inventory.md +170 -0
  255. plans/tests-audit/2-Physics-Validation-Audit.md +195 -0
  256. plans/tests-audit/3-Architecture-Compliance.md +195 -0
  257. plans/tests-audit/4-Numerical-Stability-Analysis.md +203 -0
  258. plans/tests-audit/5-Documentation-Enhancement.md +220 -0
  259. plans/tests-audit/6-Audit-Deliverables.md +220 -0
  260. plans/tests-audit/7-Closeout.md +252 -0
  261. plans/tests-audit/artifacts/ARCHITECTURE_COMPLIANCE_REPORT.md +315 -0
  262. plans/tests-audit/artifacts/ARCHITECTURE_RECOMMENDATIONS.md +943 -0
  263. plans/tests-audit/artifacts/COMPREHENSIVE_AUDIT_REPORT.md +356 -0
  264. plans/tests-audit/artifacts/CONTRIBUTING_ENHANCED_TEMPLATE.md +419 -0
  265. plans/tests-audit/artifacts/COVERAGE_GAP_ANALYSIS.md +152 -0
  266. plans/tests-audit/artifacts/DOCUMENTATION_ENHANCEMENT_REPORT.md +502 -0
  267. plans/tests-audit/artifacts/EXECUTIVE_AUDIT_SUMMARY.md +129 -0
  268. plans/tests-audit/artifacts/IMPLEMENTATION_ROADMAP.md +647 -0
  269. plans/tests-audit/artifacts/NUMERICAL_RECOMMENDATIONS.md +739 -0
  270. plans/tests-audit/artifacts/NUMERICAL_STABILITY_GUIDE_TEMPLATE.rst +451 -0
  271. plans/tests-audit/artifacts/NUMERICAL_STABILITY_REPORT.md +301 -0
  272. plans/tests-audit/artifacts/PHASE_3_SUMMARY.md +280 -0
  273. plans/tests-audit/artifacts/PHASE_4_SUMMARY.md +229 -0
  274. plans/tests-audit/artifacts/PHASE_5_SUMMARY.md +292 -0
  275. plans/tests-audit/artifacts/PHASE_6_CLOSEOUT.md +278 -0
  276. plans/tests-audit/artifacts/PHYSICS_GUIDE_TEMPLATE.rst +268 -0
  277. plans/tests-audit/artifacts/PHYSICS_VALIDATION_REPORT.md +235 -0
  278. plans/tests-audit/artifacts/TECHNICAL_DELIVERABLES_PACKAGE.md +2502 -0
  279. plans/tests-audit/artifacts/TEST_INVENTORY.csv +1204 -0
  280. plans/tests-audit/artifacts/TEST_INVENTORY.md +135 -0
  281. plans/tests-audit/artifacts/test_discovery_analysis.py +231 -0
  282. plans/tests-audit/artifacts/test_parser.py +395 -0
  283. solarwindpy/README.md +3 -0
  284. solarwindpy/Untitled.ipynb +54 -0
  285. solarwindpy/__init__.py +74 -0
  286. solarwindpy/core/__init__.py +23 -0
  287. solarwindpy/core/alfvenic_turbulence.py +804 -0
  288. solarwindpy/core/base.py +267 -0
  289. solarwindpy/core/ions.py +309 -0
  290. solarwindpy/core/plasma.py +2133 -0
  291. solarwindpy/core/spacecraft.py +256 -0
  292. solarwindpy/core/tensor.py +90 -0
  293. solarwindpy/core/units_constants.py +199 -0
  294. solarwindpy/core/vector.py +328 -0
  295. solarwindpy/fitfunctions/__init__.py +20 -0
  296. solarwindpy/fitfunctions/core.py +734 -0
  297. solarwindpy/fitfunctions/exponentials.py +188 -0
  298. solarwindpy/fitfunctions/gaussians.py +264 -0
  299. solarwindpy/fitfunctions/lines.py +116 -0
  300. solarwindpy/fitfunctions/moyal.py +71 -0
  301. solarwindpy/fitfunctions/plots.py +751 -0
  302. solarwindpy/fitfunctions/power_laws.py +209 -0
  303. solarwindpy/fitfunctions/tex_info.py +568 -0
  304. solarwindpy/fitfunctions/trend_fits.py +482 -0
  305. solarwindpy/instabilities/__init__.py +16 -0
  306. solarwindpy/instabilities/beta_ani.py +82 -0
  307. solarwindpy/instabilities/verscharen2016.py +631 -0
  308. solarwindpy/plotting/__init__.py +33 -0
  309. solarwindpy/plotting/agg_plot.py +489 -0
  310. solarwindpy/plotting/base.py +465 -0
  311. solarwindpy/plotting/hist1d.py +405 -0
  312. solarwindpy/plotting/hist2d.py +1035 -0
  313. solarwindpy/plotting/histograms.py +1845 -0
  314. solarwindpy/plotting/labels/__init__.py +104 -0
  315. solarwindpy/plotting/labels/base.py +686 -0
  316. solarwindpy/plotting/labels/chemistry.py +19 -0
  317. solarwindpy/plotting/labels/composition.py +100 -0
  318. solarwindpy/plotting/labels/datetime.py +235 -0
  319. solarwindpy/plotting/labels/elemental_abundance.py +73 -0
  320. solarwindpy/plotting/labels/special.py +794 -0
  321. solarwindpy/plotting/orbits.py +515 -0
  322. solarwindpy/plotting/scatter.py +99 -0
  323. solarwindpy/plotting/select_data_from_figure.py +329 -0
  324. solarwindpy/plotting/spiral.py +980 -0
  325. solarwindpy/plotting/tools.py +434 -0
  326. solarwindpy/scripts/__init__.py +1 -0
  327. solarwindpy/scripts/logs/.gitignore +1 -0
  328. solarwindpy/solar_activity/__init__.py +53 -0
  329. solarwindpy/solar_activity/base.py +605 -0
  330. solarwindpy/solar_activity/lisird/__init__.py +3 -0
  331. solarwindpy/solar_activity/lisird/extrema_calculator.py +394 -0
  332. solarwindpy/solar_activity/lisird/lisird.py +319 -0
  333. solarwindpy/solar_activity/plots.py +116 -0
  334. solarwindpy/solar_activity/sunspot_number/.DS_Store +0 -0
  335. solarwindpy/solar_activity/sunspot_number/__init__.py +3 -0
  336. solarwindpy/solar_activity/sunspot_number/sidc.py +556 -0
  337. solarwindpy/solar_activity/sunspot_number/ssn_extrema.csv +72 -0
  338. solarwindpy/solar_activity/sunspot_number/ssn_extrema.csv.silso +72 -0
  339. solarwindpy/tools/__init__.py +162 -0
  340. solarwindpy-0.1.1.dist-info/METADATA +181 -0
  341. solarwindpy-0.1.1.dist-info/RECORD +409 -0
  342. {solarwindpy-0.0.1.dev0.dist-info → solarwindpy-0.1.1.dist-info}/WHEEL +1 -1
  343. solarwindpy-0.1.1.dist-info/licenses/LICENSE.rst +32 -0
  344. solarwindpy-0.1.1.dist-info/top_level.txt +3 -0
  345. tests/__init__.py +1 -0
  346. tests/conftest.py +10 -0
  347. tests/core/__init__.py +1 -0
  348. tests/core/test_alfvenic_turbulence.py +544 -0
  349. tests/core/test_base.py +112 -0
  350. tests/core/test_base_head_tail.py +29 -0
  351. tests/core/test_base_mi_tuples.py +11 -0
  352. tests/core/test_core_verify_datetimeindex.py +32 -0
  353. tests/core/test_ions.py +325 -0
  354. tests/core/test_plasma.py +2581 -0
  355. tests/core/test_plasma_io.py +12 -0
  356. tests/core/test_quantities.py +507 -0
  357. tests/core/test_spacecraft.py +210 -0
  358. tests/core/test_units_constants.py +22 -0
  359. tests/data/epoch.csv +4 -0
  360. tests/data/plasma.csv +4 -0
  361. tests/data/spacecraft.csv +4 -0
  362. tests/fitfunctions/conftest.py +60 -0
  363. tests/fitfunctions/test_core.py +193 -0
  364. tests/fitfunctions/test_exponentials.py +342 -0
  365. tests/fitfunctions/test_gaussians.py +142 -0
  366. tests/fitfunctions/test_lines.py +349 -0
  367. tests/fitfunctions/test_moyal.py +258 -0
  368. tests/fitfunctions/test_plots.py +258 -0
  369. tests/fitfunctions/test_power_laws.py +365 -0
  370. tests/fitfunctions/test_tex_info.py +183 -0
  371. tests/fitfunctions/test_trend_fit_properties.py +31 -0
  372. tests/fitfunctions/test_trend_fits.py +244 -0
  373. tests/plotting/__init__.py +1 -0
  374. tests/plotting/labels/__init__.py +1 -0
  375. tests/plotting/labels/test_chemistry.py +243 -0
  376. tests/plotting/labels/test_composition.py +345 -0
  377. tests/plotting/labels/test_datetime.py +445 -0
  378. tests/plotting/labels/test_elemental_abundance.py +366 -0
  379. tests/plotting/labels/test_init.py +66 -0
  380. tests/plotting/labels/test_labels_base.py +347 -0
  381. tests/plotting/labels/test_special.py +550 -0
  382. tests/plotting/test_agg_plot.py +602 -0
  383. tests/plotting/test_base.py +752 -0
  384. tests/plotting/test_fixtures_utilities.py +775 -0
  385. tests/plotting/test_histograms.py +546 -0
  386. tests/plotting/test_integration.py +675 -0
  387. tests/plotting/test_orbits.py +435 -0
  388. tests/plotting/test_performance.py +708 -0
  389. tests/plotting/test_scatter.py +752 -0
  390. tests/plotting/test_select_data_from_figure.py +1209 -0
  391. tests/plotting/test_spiral.py +573 -0
  392. tests/plotting/test_tools.py +607 -0
  393. tests/plotting/test_visual_validation.py +465 -0
  394. tests/solar_activity/__init__.py +1 -0
  395. tests/solar_activity/lisird/__init__.py +1 -0
  396. tests/solar_activity/lisird/test_extrema_calculator.py +593 -0
  397. tests/solar_activity/lisird/test_lisird_id.py +187 -0
  398. tests/solar_activity/sunspot_number/__init__.py +1 -0
  399. tests/solar_activity/sunspot_number/test_init.py +399 -0
  400. tests/solar_activity/sunspot_number/test_sidc.py +465 -0
  401. tests/solar_activity/sunspot_number/test_sidc_id.py +223 -0
  402. tests/solar_activity/sunspot_number/test_sidc_loader.py +275 -0
  403. tests/solar_activity/sunspot_number/test_ssn_extrema.py +406 -0
  404. tests/solar_activity/test_base.py +656 -0
  405. tests/solar_activity/test_init.py +396 -0
  406. tests/solar_activity/test_plots.py +371 -0
  407. tests/test_circular_imports.py +408 -0
  408. tests/test_issue_titles.py +25 -0
  409. tests/test_statusline.py +298 -0
  410. solarwindpy-0.0.1.dev0.dist-info/METADATA +0 -14
  411. solarwindpy-0.0.1.dev0.dist-info/RECORD +0 -4
  412. solarwindpy-0.0.1.dev0.dist-info/top_level.txt +0 -1
@@ -0,0 +1,396 @@
1
+ #!/usr/bin/env python
2
+ """Test solar_activity package entry point (__init__.py).
3
+
4
+ This module tests the `get_all_indices()` function which aggregates solar activity
5
+ indices from multiple sources (LISIRD and SIDC).
6
+ """
7
+
8
+ import pytest
9
+ import pandas as pd
10
+ import numpy as np
11
+ from unittest.mock import Mock, patch, MagicMock
12
+
13
+ import solarwindpy.solar_activity as sa
14
+
15
+
16
+ class TestGetAllIndices:
17
+ """Test the get_all_indices() aggregation function."""
18
+
19
+ @pytest.fixture
20
+ def mock_lisird_data(self):
21
+ """Create mock LISIRD data structures for testing."""
22
+ # Create synthetic Lalpha data
23
+ dates = pd.date_range("2020-01-01", periods=100, freq="D")
24
+ lalpha_data = pd.DataFrame(
25
+ {"irradiance": np.random.uniform(0.001, 0.005, 100)}, index=dates
26
+ )
27
+
28
+ # Create synthetic CaK data with extra milliseconds column
29
+ cak_data = pd.DataFrame(
30
+ {
31
+ "irradiance": np.random.uniform(1000, 2000, 100),
32
+ "milliseconds": np.zeros(100), # This should be dropped
33
+ },
34
+ index=dates,
35
+ )
36
+
37
+ # Create synthetic MgII data
38
+ mgii_data = pd.DataFrame(
39
+ {"mg_index": np.random.uniform(0.25, 0.30, 100)}, index=dates
40
+ )
41
+
42
+ return {"Lalpha": lalpha_data, "CaK": cak_data, "MgII": mgii_data}
43
+
44
+ @pytest.fixture
45
+ def mock_sidc_data(self):
46
+ """Create mock SIDC data structure for testing."""
47
+ dates = pd.date_range("2020-01-01", periods=100, freq="D")
48
+ sidc_data = pd.DataFrame({"ssn": np.random.uniform(0, 200, 100)}, index=dates)
49
+ return sidc_data
50
+
51
+ @pytest.fixture
52
+ def dummy_lisird_class(self, mock_lisird_data):
53
+ """Create a dummy LISIRD class that returns mock data."""
54
+
55
+ class DummyLISIRD:
56
+ def __init__(self, key):
57
+ self.key = key
58
+ self._data = mock_lisird_data[key].copy()
59
+
60
+ @property
61
+ def data(self):
62
+ return self._data
63
+
64
+ return DummyLISIRD
65
+
66
+ @pytest.fixture
67
+ def dummy_sidc_class(self, mock_sidc_data):
68
+ """Create a dummy SIDC class that returns mock data."""
69
+
70
+ class DummySIDC:
71
+ def __init__(self, key):
72
+ self.key = key
73
+ self._data = mock_sidc_data.copy()
74
+
75
+ @property
76
+ def data(self):
77
+ return self._data
78
+
79
+ return DummySIDC
80
+
81
+ def test_get_all_indices_structure(self, dummy_lisird_class, dummy_sidc_class):
82
+ """Test that get_all_indices() returns correct structure and columns."""
83
+ # Mock the LISIRD and SIDC classes
84
+ with patch(
85
+ "solarwindpy.solar_activity.lisird.lisird.LISIRD", dummy_lisird_class
86
+ ):
87
+ with patch(
88
+ "solarwindpy.solar_activity.sunspot_number.sidc.SIDC", dummy_sidc_class
89
+ ):
90
+ result = sa.get_all_indices()
91
+
92
+ # Check that result is a DataFrame
93
+ assert isinstance(result, pd.DataFrame)
94
+
95
+ # Check expected columns are present (sorted alphabetically)
96
+ expected_columns = ["CaK", "Lalpha", "MgII", "ssn"]
97
+ assert list(
98
+ result.columns.get_level_values(0).unique().sort_values()
99
+ ) == sorted(expected_columns)
100
+
101
+ # Check index type is DatetimeIndex
102
+ assert isinstance(result.index, pd.DatetimeIndex)
103
+
104
+ def test_get_all_indices_columns_exact(self, dummy_lisird_class, dummy_sidc_class):
105
+ """Test exact column structure matches expected format."""
106
+ with patch(
107
+ "solarwindpy.solar_activity.lisird.lisird.LISIRD", dummy_lisird_class
108
+ ):
109
+ with patch(
110
+ "solarwindpy.solar_activity.sunspot_number.sidc.SIDC", dummy_sidc_class
111
+ ):
112
+ result = sa.get_all_indices()
113
+
114
+ # Extract top-level column names
115
+ top_level_columns = result.columns.get_level_values(0).unique()
116
+ assert "CaK" in top_level_columns
117
+ assert "Lalpha" in top_level_columns
118
+ assert "MgII" in top_level_columns
119
+ assert "ssn" in top_level_columns
120
+
121
+ def test_get_all_indices_datetime_index(self, dummy_lisird_class, dummy_sidc_class):
122
+ """Test that result index is properly formatted DatetimeIndex."""
123
+ with patch(
124
+ "solarwindpy.solar_activity.lisird.lisird.LISIRD", dummy_lisird_class
125
+ ):
126
+ with patch(
127
+ "solarwindpy.solar_activity.sunspot_number.sidc.SIDC", dummy_sidc_class
128
+ ):
129
+ result = sa.get_all_indices()
130
+
131
+ # Verify index type
132
+ assert isinstance(result.index, pd.DatetimeIndex)
133
+
134
+ # Verify index is sorted
135
+ assert result.index.is_monotonic_increasing
136
+
137
+ # Verify reasonable date range
138
+ assert result.index.min() >= pd.Timestamp("2019-01-01")
139
+ assert result.index.max() <= pd.Timestamp("2025-01-01")
140
+
141
+ def test_get_all_indices_data_aggregation(
142
+ self, dummy_lisird_class, dummy_sidc_class
143
+ ):
144
+ """Test that data from different sources is properly aggregated."""
145
+ with patch(
146
+ "solarwindpy.solar_activity.lisird.lisird.LISIRD", dummy_lisird_class
147
+ ):
148
+ with patch(
149
+ "solarwindpy.solar_activity.sunspot_number.sidc.SIDC", dummy_sidc_class
150
+ ):
151
+ result = sa.get_all_indices()
152
+
153
+ # Check that data is not empty
154
+ assert len(result) > 0
155
+
156
+ # Check that each column has some non-null data
157
+ assert not result["Lalpha"].isna().all().all()
158
+ assert not result["ssn"].isna().all().all()
159
+ assert not result["MgII"].isna().all().all()
160
+
161
+ # CaK should have milliseconds column dropped
162
+ if hasattr(result, "CaK"):
163
+ cak_columns = [col for col in result.columns if col[0] == "CaK"]
164
+ assert len(cak_columns) >= 1
165
+ # Verify no 'milliseconds' subcolumn
166
+ subcolumns = [col[1] for col in cak_columns if col[0] == "CaK"]
167
+ assert "milliseconds" not in subcolumns
168
+
169
+ def test_get_all_indices_mgii_date_conversion(
170
+ self, dummy_lisird_class, dummy_sidc_class
171
+ ):
172
+ """Test that MgII data index is properly converted to date-only."""
173
+ # Create MgII data with timestamp index
174
+ dates_with_time = pd.date_range("2020-01-01 12:30:45", periods=50, freq="D")
175
+ mgii_data_with_time = pd.DataFrame(
176
+ {"mg_index": np.random.uniform(0.25, 0.30, 50)}, index=dates_with_time
177
+ )
178
+
179
+ class DummyLISIRDWithTime:
180
+ def __init__(self, key):
181
+ self.key = key
182
+ if key == "MgII":
183
+ self._data = mgii_data_with_time
184
+ else:
185
+ # Use simplified mock data for other keys
186
+ dates = pd.date_range("2020-01-01", periods=50, freq="D")
187
+ if key == "Lalpha":
188
+ self._data = pd.DataFrame(
189
+ {"irradiance": np.random.uniform(0.001, 0.005, 50)},
190
+ index=dates,
191
+ )
192
+ else: # CaK
193
+ self._data = pd.DataFrame(
194
+ {
195
+ "irradiance": np.random.uniform(1000, 2000, 50),
196
+ "milliseconds": np.zeros(50),
197
+ },
198
+ index=dates,
199
+ )
200
+
201
+ @property
202
+ def data(self):
203
+ return self._data
204
+
205
+ with patch(
206
+ "solarwindpy.solar_activity.lisird.lisird.LISIRD", DummyLISIRDWithTime
207
+ ):
208
+ with patch(
209
+ "solarwindpy.solar_activity.sunspot_number.sidc.SIDC", dummy_sidc_class
210
+ ):
211
+ result = sa.get_all_indices()
212
+
213
+ # Verify that the result index only contains dates (no time component)
214
+ assert all(
215
+ timestamp.time() == pd.Timestamp("00:00:00").time()
216
+ for timestamp in result.index[:5]
217
+ ) # Check first 5 entries
218
+
219
+ def test_get_all_indices_error_handling(self):
220
+ """Test error handling when mocked classes raise exceptions."""
221
+
222
+ class BrokenLISIRD:
223
+ def __init__(self, key):
224
+ raise ValueError(f"Failed to initialize LISIRD with key {key}")
225
+
226
+ with patch("solarwindpy.solar_activity.lisird.lisird.LISIRD", BrokenLISIRD):
227
+ with pytest.raises(ValueError, match="Failed to initialize LISIRD"):
228
+ sa.get_all_indices()
229
+
230
+ def test_imports_available(self):
231
+ """Test that necessary imports are available in the module."""
232
+ # Test that submodules are accessible
233
+ assert hasattr(sa, "lisird")
234
+ assert hasattr(sa, "sunspot_number")
235
+ assert hasattr(sa, "ssn")
236
+ assert hasattr(sa, "plots")
237
+
238
+ # Test that ssn is an alias for sunspot_number
239
+ assert sa.ssn is sa.sunspot_number
240
+
241
+ def test_get_all_indices_function_exists(self):
242
+ """Test that get_all_indices function is available."""
243
+ assert hasattr(sa, "get_all_indices")
244
+ assert callable(sa.get_all_indices)
245
+
246
+
247
+ class TestPackageStructure:
248
+ """Test package-level structure and imports."""
249
+
250
+ def test_package_all_exports(self):
251
+ """Test that __all__ exports are correct."""
252
+ # Check __all__ contains expected items
253
+ expected_all = ["sunspot_number", "ssn", "lisird", "plots"]
254
+ assert hasattr(sa, "__all__")
255
+
256
+ # Check that all items in __all__ are actually available
257
+ for item in sa.__all__:
258
+ assert hasattr(sa, item), f"Item '{item}' in __all__ but not available"
259
+
260
+ def test_ssn_alias(self):
261
+ """Test that ssn is properly aliased to sunspot_number."""
262
+ assert sa.ssn is sa.sunspot_number
263
+
264
+ def test_submodule_imports(self):
265
+ """Test that required submodules are imported."""
266
+ # These should be available due to import statements
267
+ assert hasattr(sa, "lisird")
268
+ assert hasattr(sa, "sunspot_number")
269
+ assert hasattr(sa, "plots")
270
+
271
+ # Test that they are modules
272
+ import types
273
+
274
+ assert isinstance(sa.lisird, types.ModuleType)
275
+ assert isinstance(sa.sunspot_number, types.ModuleType)
276
+ assert isinstance(sa.plots, types.ModuleType)
277
+
278
+
279
+ class TestMockingIntegration:
280
+ """Test the mocking setup for external dependencies."""
281
+
282
+ def test_lisird_mocking_pattern(self):
283
+ """Test that LISIRD can be properly mocked."""
284
+ mock_lisird = Mock()
285
+ mock_lisird.return_value.data = pd.DataFrame(
286
+ {"irradiance": [0.002, 0.003, 0.004]},
287
+ index=pd.date_range("2020-01-01", periods=3),
288
+ )
289
+
290
+ with patch("solarwindpy.solar_activity.lisird.lisird.LISIRD", mock_lisird):
291
+ # This should work without errors
292
+ sa.lisird.lisird.LISIRD("Lalpha")
293
+
294
+ # Verify mock was called
295
+ mock_lisird.assert_called_with("Lalpha")
296
+
297
+ def test_sidc_mocking_pattern(self):
298
+ """Test that SIDC can be properly mocked."""
299
+ mock_sidc = Mock()
300
+ mock_sidc.return_value.data = pd.DataFrame(
301
+ {"ssn": [50, 75, 100]}, index=pd.date_range("2020-01-01", periods=3)
302
+ )
303
+
304
+ with patch("solarwindpy.solar_activity.sunspot_number.sidc.SIDC", mock_sidc):
305
+ # This should work without errors
306
+ sa.sunspot_number.sidc.SIDC("m13")
307
+
308
+ # Verify mock was called
309
+ mock_sidc.assert_called_with("m13")
310
+
311
+
312
+ class TestRealWorldIntegration:
313
+ """Test integration patterns that mirror real usage."""
314
+
315
+ @pytest.fixture
316
+ def dummy_lisird_class(self):
317
+ """Create a dummy LISIRD class for integration testing."""
318
+ dates = pd.date_range("2020-01-01", periods=100, freq="D")
319
+ mock_data = {
320
+ "Lalpha": pd.DataFrame(
321
+ {"irradiance": np.random.uniform(0.001, 0.005, 100)}, index=dates
322
+ ),
323
+ "CaK": pd.DataFrame(
324
+ {
325
+ "irradiance": np.random.uniform(1000, 2000, 100),
326
+ "milliseconds": np.zeros(100),
327
+ },
328
+ index=dates,
329
+ ),
330
+ "MgII": pd.DataFrame(
331
+ {"mg_index": np.random.uniform(0.25, 0.30, 100)}, index=dates
332
+ ),
333
+ }
334
+
335
+ class DummyLISIRD:
336
+ def __init__(self, key):
337
+ self.key = key
338
+ self._data = mock_data[key].copy()
339
+
340
+ @property
341
+ def data(self):
342
+ return self._data
343
+
344
+ return DummyLISIRD
345
+
346
+ @pytest.fixture
347
+ def dummy_sidc_class(self):
348
+ """Create a dummy SIDC class for integration testing."""
349
+ dates = pd.date_range("2020-01-01", periods=100, freq="D")
350
+ sidc_data = pd.DataFrame({"ssn": np.random.uniform(0, 200, 100)}, index=dates)
351
+
352
+ class DummySIDC:
353
+ def __init__(self, key):
354
+ self.key = key
355
+ self._data = sidc_data.copy()
356
+
357
+ @property
358
+ def data(self):
359
+ return self._data
360
+
361
+ return DummySIDC
362
+
363
+ def test_complete_get_all_indices_workflow(
364
+ self, dummy_lisird_class, dummy_sidc_class
365
+ ):
366
+ """Test complete workflow from start to finish."""
367
+ with patch(
368
+ "solarwindpy.solar_activity.lisird.lisird.LISIRD", dummy_lisird_class
369
+ ):
370
+ with patch(
371
+ "solarwindpy.solar_activity.sunspot_number.sidc.SIDC", dummy_sidc_class
372
+ ):
373
+ # Call the main function
374
+ result = sa.get_all_indices()
375
+
376
+ # Verify comprehensive results
377
+ assert isinstance(result, pd.DataFrame)
378
+ assert len(result) > 0
379
+ assert isinstance(result.index, pd.DatetimeIndex)
380
+
381
+ # Check column structure
382
+ expected_top_level = ["CaK", "Lalpha", "MgII", "ssn"]
383
+ actual_top_level = list(result.columns.get_level_values(0).unique())
384
+ for expected_col in expected_top_level:
385
+ assert (
386
+ expected_col in actual_top_level
387
+ ), f"Missing column: {expected_col}"
388
+
389
+ # Verify data types are reasonable
390
+ for col in result.columns:
391
+ assert result[col].dtype in [
392
+ np.float64,
393
+ np.float32,
394
+ np.int64,
395
+ np.int32,
396
+ ], f"Unexpected dtype for column {col}: {result[col].dtype}"