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,434 @@
1
+ #!/usr/bin/env python
2
+ r"""Utility functions for common :mod:`matplotlib` tasks.
3
+
4
+ These helpers provide shortcuts for creating figures, saving output, and building grids
5
+ of axes with shared colorbars.
6
+ """
7
+
8
+ import pdb # noqa: F401
9
+ import logging
10
+ import numpy as np
11
+ import matplotlib as mpl
12
+ from matplotlib import pyplot as plt
13
+ from datetime import datetime
14
+ from pathlib import Path
15
+
16
+
17
+ def subplots(nrows=1, ncols=1, scale_width=1.0, scale_height=1.0, **kwargs):
18
+ r"""Create a grid of subplots with a scaled figure size.
19
+
20
+ Parameters
21
+ ----------
22
+ nrows : int, optional
23
+ Number of subplot rows.
24
+ ncols : int, optional
25
+ Number of subplot columns.
26
+ scale_width : float, optional
27
+ Factor applied to the default figure width.
28
+ scale_height : float, optional
29
+ Factor applied to the default figure height.
30
+ **kwargs
31
+ Additional keyword arguments passed directly to
32
+ :func:`matplotlib.pyplot.subplots`.
33
+
34
+ Returns
35
+ -------
36
+ fig : :class:`matplotlib.figure.Figure`
37
+ ax : :class:`matplotlib.axes.Axes` or array of Axes
38
+
39
+ Examples
40
+ --------
41
+ >>> fig, ax = subplots(2, 2, scale_width=1.5)
42
+ """
43
+ scale = np.array([scale_width * ncols, scale_height * nrows])
44
+ figsize = scale * kwargs.pop("figsize", mpl.rcParams["figure.figsize"])
45
+
46
+ return plt.subplots(nrows=nrows, ncols=ncols, figsize=figsize, **kwargs)
47
+
48
+
49
+ def save(
50
+ fig,
51
+ spath,
52
+ add_info=True,
53
+ info_x=0,
54
+ info_y=0,
55
+ log=True,
56
+ pdf=True,
57
+ png=True,
58
+ **kwargs,
59
+ ):
60
+ r"""Save a figure in both PDF and PNG formats.
61
+
62
+ Parameters
63
+ ----------
64
+ fig : :class:`matplotlib.figure.Figure` or :class:`matplotlib.axes.Axes`
65
+ The figure or axis to save.
66
+ spath : :class:`pathlib.Path`
67
+ Base path for the output files. The appropriate extension will be
68
+ added automatically.
69
+ add_info : bool, optional
70
+ If ``True``, add an attribution and timestamp to the bottom left of the
71
+ PNG version.
72
+ info_x : float, optional
73
+ X-position of the attribution text in figure coordinates.
74
+ info_y : float, optional
75
+ Y-position of the attribution text in figure coordinates.
76
+ log : bool, optional
77
+ If ``True``, write information about the saved files to ``alog``.
78
+ pdf : bool, optional
79
+ Save a PDF version of the figure.
80
+ png : bool, optional
81
+ Save a PNG version of the figure.
82
+ **kwargs
83
+ Additional keyword arguments passed to :meth:`Figure.savefig`.
84
+
85
+ Returns
86
+ -------
87
+ None
88
+
89
+ Examples
90
+ --------
91
+ >>> fig, ax = subplots()
92
+ >>> save(fig, Path('my_plot'))
93
+ """
94
+ if isinstance(fig, mpl.axes.Axes):
95
+ fig = fig.figure
96
+
97
+ assert isinstance(fig, mpl.figure.Figure)
98
+ assert isinstance(spath, Path)
99
+
100
+ # tight_layout = kwargs.pop("tight_layout", True)
101
+ bbox_inches = kwargs.pop("bbox_inches", "tight")
102
+
103
+ # if tight_layout:
104
+ # fig.tight_layout()
105
+
106
+ # Save the PDF without the timestamp so we can create the final LaTeX file
107
+ # without them.
108
+ # Add the datetime stamp to the PNG as those are what we render most often when
109
+ # working, drafting, etc.
110
+
111
+ if log:
112
+ alog = logging.getLogger(__name__)
113
+ alog.info("Saving figure\n%s", spath.resolve().with_suffix(""))
114
+
115
+ if pdf:
116
+
117
+ fig.savefig(
118
+ spath.with_suffix(".pdf"),
119
+ bbox_inches=bbox_inches,
120
+ format="pdf",
121
+ **kwargs,
122
+ )
123
+
124
+ if log:
125
+ alog.info("Suffix saved: pdf")
126
+
127
+ if png:
128
+ if add_info:
129
+ info = "B. L. Alterman {}".format(datetime.now().strftime("%Y%m%dT%H%M%S"))
130
+ fig.text(info_x, info_y, info)
131
+
132
+ fig.savefig(
133
+ spath.with_suffix(".png"),
134
+ bbox_inches=bbox_inches,
135
+ format="png",
136
+ **kwargs,
137
+ )
138
+
139
+ if log:
140
+ alog.info("Suffix saved: png")
141
+
142
+
143
+ def joint_legend(*axes, idx_for_legend=-1, **kwargs):
144
+ r"""Create a combined legend for multiple axes.
145
+
146
+ Parameters
147
+ ----------
148
+ *axes : :class:`matplotlib.axes.Axes`
149
+ Axes objects from which to collect legend handles and labels.
150
+ idx_for_legend : int, optional
151
+ Index of the axis (after flattening) on which to place the legend.
152
+ By default the legend is placed on the last axis. ``idx_for_legend=-1``
153
+ assumes that the last axis is on the right hand side of the figure.
154
+ **kwargs
155
+ Extra keyword arguments forwarded to :meth:`Axes.legend`.
156
+
157
+ Returns
158
+ -------
159
+ legend : :class:`matplotlib.legend.Legend`
160
+
161
+ Examples
162
+ --------
163
+ >>> fig, ax = subplots(1, 2)
164
+ >>> ax[0].plot([1, 2], label='a') # doctest: +ELLIPSIS
165
+ [<matplotlib.lines.Line2D object at 0x...>]
166
+ >>> ax[1].plot([2, 3], label='b') # doctest: +ELLIPSIS
167
+ [<matplotlib.lines.Line2D object at 0x...>]
168
+ >>> joint_legend(ax[0], ax[1]) # doctest: +ELLIPSIS
169
+ <matplotlib.legend.Legend object at 0x...>
170
+ """
171
+ axes = np.array(axes).ravel()
172
+
173
+ handles = []
174
+ labels = []
175
+
176
+ for ax in axes:
177
+ hdl, lbl = ax.get_legend_handles_labels()
178
+ for i, l in enumerate(lbl):
179
+ if l not in labels:
180
+ h = hdl[i]
181
+ if isinstance(h, mpl.container.ErrorbarContainer):
182
+ h = h[0]
183
+ # h = hdl[i]
184
+ # try:
185
+ # if len(h) == 3:
186
+ # # Used `ax.errorbar`, not `ax.plot`.
187
+ # h = h[0]
188
+ # except TypeError:
189
+ # pass
190
+
191
+ labels.append(l)
192
+ handles.append(h)
193
+
194
+ handles = np.array(handles)
195
+ labels = np.array(labels)
196
+
197
+ sorter = np.argsort(labels)
198
+ labels = labels[sorter]
199
+ handles = handles[sorter]
200
+
201
+ loc = kwargs.pop("loc", (1.05, 0.1))
202
+ return axes[idx_for_legend].legend(handles, labels, loc=loc, **kwargs)
203
+
204
+
205
+ def multipanel_figure_shared_cbar(
206
+ nrows: int,
207
+ ncols: int,
208
+ vertical_cbar: bool = True,
209
+ sharex: bool = True,
210
+ sharey: bool = True,
211
+ **kwargs,
212
+ ):
213
+ r"""Create a grid of axes that share a single colorbar.
214
+
215
+ This is a lightweight wrapper around
216
+ :func:`build_ax_array_with_common_colorbar` for backward compatibility.
217
+
218
+ Parameters
219
+ ----------
220
+ nrows, ncols : int
221
+ Shape of the axes grid.
222
+ vertical_cbar : bool, optional
223
+ If ``True`` the colorbar is placed to the right of the axes; otherwise
224
+ it is placed above them.
225
+ sharex, sharey : bool, optional
226
+ If ``True`` share the respective axis limits across all panels.
227
+ **kwargs
228
+ Additional arguments controlling layout such as ``figsize`` or grid
229
+ ratios.
230
+
231
+ Returns
232
+ -------
233
+ fig : :class:`matplotlib.figure.Figure`
234
+ axes : ndarray of :class:`matplotlib.axes.Axes`
235
+ cax : :class:`matplotlib.axes.Axes`
236
+
237
+ Examples
238
+ --------
239
+ >>> fig, axs, cax = multipanel_figure_shared_cbar(2, 2) # doctest: +SKIP
240
+ """
241
+
242
+ fig_kwargs = {}
243
+ gs_kwargs = {}
244
+
245
+ if "figsize" in kwargs:
246
+ fig_kwargs["figsize"] = kwargs.pop("figsize")
247
+
248
+ for key in ("width_ratios", "height_ratios", "wspace", "hspace"):
249
+ if key in kwargs:
250
+ gs_kwargs[key] = kwargs.pop(key)
251
+
252
+ fig_kwargs.update(kwargs)
253
+
254
+ cbar_loc = "right" if vertical_cbar else "top"
255
+
256
+ return build_ax_array_with_common_colorbar(
257
+ nrows,
258
+ ncols,
259
+ cbar_loc=cbar_loc,
260
+ fig_kwargs=fig_kwargs,
261
+ gs_kwargs=dict(gs_kwargs, sharex=sharex, sharey=sharey),
262
+ )
263
+
264
+
265
+ def build_ax_array_with_common_colorbar(
266
+ nrows=1, ncols=1, cbar_loc="top", fig_kwargs=None, gs_kwargs=None
267
+ ):
268
+ r"""Build an array of axes that share a colour bar.
269
+
270
+ Parameters
271
+ ----------
272
+ nrows, ncols : int, optional
273
+ Desired grid shape.
274
+ cbar_loc : {"top", "bottom", "left", "right"}, optional
275
+ Location of the colorbar relative to the axes grid.
276
+ fig_kwargs : dict, optional
277
+ Keyword arguments forwarded to :func:`matplotlib.pyplot.figure`.
278
+ gs_kwargs : dict, optional
279
+ Additional options for :class:`matplotlib.gridspec.GridSpec`.
280
+
281
+ Returns
282
+ -------
283
+ fig : :class:`matplotlib.figure.Figure`
284
+ axes : ndarray of :class:`matplotlib.axes.Axes`
285
+ cax : :class:`matplotlib.axes.Axes`
286
+
287
+ Examples
288
+ --------
289
+ >>> fig, axes, cax = build_ax_array_with_common_colorbar(2, 3, cbar_loc='right') # doctest: +SKIP
290
+ """
291
+
292
+ if fig_kwargs is None:
293
+ fig_kwargs = dict()
294
+ if gs_kwargs is None:
295
+ gs_kwargs = dict()
296
+
297
+ cbar_loc = cbar_loc.lower()
298
+ if cbar_loc not in ("top", "bottom", "left", "right"):
299
+ raise ValueError
300
+
301
+ figsize = np.array(mpl.rcParams["figure.figsize"])
302
+ fig_scale = np.array([ncols, nrows])
303
+
304
+ if cbar_loc in ("right", "left"):
305
+ cbar_scale = np.array([1.3, 1])
306
+ height_ratios = nrows * [1]
307
+ width_ratios = (ncols * [1]) + [0.05, 0.075]
308
+ if cbar_loc == "left":
309
+ width_ratios = width_ratios[::-1]
310
+
311
+ else:
312
+ cbar_scale = np.array([1, 1.3])
313
+ height_ratios = [0.075, 0.05] + (nrows * [1])
314
+ if cbar_loc == "bottom":
315
+ height_ratios = height_ratios[::-1]
316
+ width_ratios = ncols * [1]
317
+
318
+ figsize = figsize * fig_scale * cbar_scale
319
+ fig = plt.figure(figsize=figsize, **fig_kwargs)
320
+
321
+ hspace = gs_kwargs.pop("hspace", 0)
322
+ wspace = gs_kwargs.pop("wspace", 0)
323
+ sharex = gs_kwargs.pop("sharex", True)
324
+ sharey = gs_kwargs.pop("sharey", True)
325
+
326
+ # print(cbar_loc)
327
+ # print(nrows, ncols)
328
+ # print(len(height_ratios), len(width_ratios))
329
+ # print()
330
+
331
+ gs = mpl.gridspec.GridSpec(
332
+ len(height_ratios),
333
+ len(width_ratios),
334
+ hspace=hspace,
335
+ wspace=wspace,
336
+ height_ratios=height_ratios,
337
+ width_ratios=width_ratios,
338
+ **gs_kwargs,
339
+ )
340
+
341
+ if cbar_loc == "left":
342
+ cax = gs[:, 0]
343
+ col_range = range(2, ncols + 2)
344
+ row_range = range(nrows)
345
+ elif cbar_loc == "right":
346
+ cax = gs[:, -1]
347
+ col_range = range(0, ncols)
348
+ row_range = range(nrows)
349
+ elif cbar_loc == "top":
350
+ cax = gs[0, :]
351
+ col_range = range(ncols)
352
+ row_range = range(2, nrows + 2)
353
+ elif cbar_loc == "bottom":
354
+ cax = gs[-1, :]
355
+ col_range = range(ncols)
356
+ row_range = range(0, nrows)
357
+ else:
358
+ raise ValueError
359
+
360
+ cax = fig.add_subplot(cax)
361
+ axes = np.array([[fig.add_subplot(gs[i, j]) for j in col_range] for i in row_range])
362
+
363
+ if cbar_loc == "top":
364
+ cax.xaxis.set_ticks_position("top")
365
+ cax.xaxis.set_label_position("top")
366
+ elif cbar_loc == "left":
367
+ cax.yaxis.set_ticks_position("left")
368
+ cax.yaxis.set_label_position("left")
369
+
370
+ if sharex:
371
+ axes.flat[0].get_shared_x_axes().join(*axes.flat)
372
+ if sharey:
373
+ axes.flat[0].get_shared_y_axes().join(*axes.flat)
374
+
375
+ if axes.shape != (nrows, ncols):
376
+ raise ValueError(
377
+ f"""Unexpected axes shape
378
+ Expected : {(nrows, ncols)}
379
+ Created : {axes.shape}
380
+ """
381
+ )
382
+
383
+ # print("rows")
384
+ # print(list(row_range))
385
+ # print(height_ratios)
386
+ # print()
387
+
388
+ # print("cols")
389
+ # print(list(col_range))
390
+ # print(width_ratios)
391
+
392
+ axes = axes.squeeze()
393
+ return fig, axes, cax
394
+
395
+
396
+ def calculate_nrows_ncols(n):
397
+ r"""Determine a sensible ``(nrows, ncols)`` pair for ``n`` axes.
398
+
399
+ The heuristic attempts to generate a nearly square layout while also taking
400
+ typical display aspect ratios into account.
401
+
402
+ Parameters
403
+ ----------
404
+ n : int
405
+ Total number of axes required.
406
+
407
+ Returns
408
+ -------
409
+ nrows : int
410
+ ncols : int
411
+
412
+ Examples
413
+ --------
414
+ >>> calculate_nrows_ncols(5) # doctest: +ELLIPSIS
415
+ (...2..., ...3...)
416
+ """
417
+ root = int(np.fix(np.sqrt(n)))
418
+ while n % root:
419
+ root -= 1
420
+ other = int(n / root)
421
+
422
+ if ((other == 1) or (root == 1)) and (n > 4):
423
+ n += 1
424
+ root = int(np.fix(np.sqrt(n)))
425
+ while n % root:
426
+ root -= 1
427
+ other = int(n / root)
428
+
429
+ nrows = np.max([root, other])
430
+ ncols = np.min([root, other])
431
+ if nrows < 4:
432
+ nrows, ncols = ncols, nrows
433
+
434
+ return nrows, ncols
@@ -0,0 +1 @@
1
+ """Helper scripts for SolarWindPy."""
@@ -0,0 +1 @@
1
+ *.log
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env python
2
+ """Helper functions and shortcuts for solar activity data.
3
+
4
+ This package consolidates the different solar activity indicators available in
5
+ :mod:`solarwindpy` and exposes convenience utilities for working with them.
6
+ """
7
+
8
+ __all__ = ["sunspot_number", "ssn", "lisird", "plots"]
9
+
10
+ import pdb # noqa: F401
11
+ import pandas as pd
12
+
13
+ from . import sunspot_number # noqa: F401
14
+ from . import lisird # noqa: F401
15
+ from . import plots # noqa: F401
16
+
17
+ ssn = sunspot_number
18
+
19
+
20
+ def get_all_indices():
21
+ """Return a table of common solar activity indicators.
22
+
23
+ Returns
24
+ -------
25
+ pandas.DataFrame
26
+ DataFrame containing Lyman-alpha, Calcium K line, monthly smoothed
27
+ sunspot number, the Bremen MgII index, and other indices where
28
+ available. The index is daily and missing data are preserved.
29
+ """
30
+ Lalpha = lisird.lisird.LISIRD("Lalpha")
31
+ CaK = lisird.lisird.LISIRD("CaK")
32
+ # f107 = lisird.lisird.LISIRD("f107-penticton")
33
+ MgII = lisird.lisird.LISIRD("MgII")
34
+ sidc = ssn.sidc.SIDC("m13")
35
+
36
+ mgII = MgII.data.mg_index
37
+ mgII.index = pd.DatetimeIndex(MgII.data.index.date)
38
+
39
+ sa = pd.concat(
40
+ {
41
+ "Lalpha": Lalpha.data.loc[:, "irradiance"],
42
+ # "F107": f107.data.loc[:, "adjusted_flux"],
43
+ "ssn": sidc.data.loc[:, "ssn"],
44
+ "MgII": mgII,
45
+ "CaK": CaK.data.drop("milliseconds", axis=1),
46
+ },
47
+ axis=1,
48
+ ).sort_index(
49
+ axis=1
50
+ ) # .dropna()
51
+ # sa.loc[:, "JD"] = sa.index.to_julian_date()
52
+
53
+ return sa