solarwindpy 0.0.1.dev0__py3-none-any.whl → 0.1.0__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.0.dist-info/METADATA +181 -0
  341. solarwindpy-0.1.0.dist-info/RECORD +409 -0
  342. {solarwindpy-0.0.1.dev0.dist-info → solarwindpy-0.1.0.dist-info}/WHEEL +1 -1
  343. solarwindpy-0.1.0.dist-info/licenses/LICENSE.rst +32 -0
  344. solarwindpy-0.1.0.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,256 @@
1
+ #!/usr/bin/env python
2
+ r"""Contais :py:class:`~solarwindpy.core.spacecraft.Spacecraft` class.
3
+
4
+ Class inherets from :py:class:`~solarwindpy.core.base.Base` and contains :py:class:`~solarwindpy.core.vector.Vector` objects.
5
+ """
6
+
7
+ import pandas as pd
8
+ import numpy as np
9
+
10
+ # We rely on views via DataFrame.xs to reduce memory size and do not
11
+ # `.copy(deep=True)`, so we want to make sure that this doesn't
12
+ # accidentally cause a problem.
13
+
14
+ from . import base
15
+ from . import vector
16
+
17
+
18
+ class Spacecraft(base.Base):
19
+ r"""Representation of a spacecraft trajectory.
20
+
21
+ Parameters
22
+ ----------
23
+ data : :class:`pandas.DataFrame`
24
+ Vector position (and optionally velocity) with MultiIndex columns
25
+ ``("M", "C")``.
26
+ name : str
27
+ Identifier of the spacecraft.
28
+ frame : str
29
+ Reference frame of the vectors, e.g. ``"HCI"`` or ``"GSE"``.
30
+ """
31
+
32
+ def __init__(self, data, name, frame):
33
+ r"""Initialize a spacecraft with `data`.
34
+
35
+ Parameters
36
+ ----------
37
+ data: pd.DataFrame
38
+ 2-level MultiIndex columns identifying measurment "M" and component "C".
39
+ Should contain at a minimum vector position. Can also contain vector
40
+ velocity and Carrington location. If vector velocity included, it should be
41
+ in the same frame of reference as the position.
42
+ name: str
43
+ Identify the spacecraft, e.g. Parker Solar Probe (PSP) or Wind. Internally
44
+ stored in all caps for consistency.
45
+ frame: str
46
+ The frame of reference for the spacecraft position and velocity, e.g.
47
+ Geocentric Solar Ecliptic (GSE) or Heliocentric Internal (HCI).
48
+
49
+ Examples
50
+ --------
51
+ >>> epoch = pd.Series({0: pd.to_datetime("1995-01-01"),
52
+ 1: pd.to_datetime("2015-03-23"),
53
+ 2: pd.to_datetime("2022-10-09")}, name="Epoch")
54
+ >>> data = {("pos", "x", ""): {0: -42, 1: -22, 2: -34},
55
+ ("pos", "y", ""): {0: 23, 1: 31, 2: 11},
56
+ ("pos", "z", ""): {0: 35, 1: 27, 2: 49},
57
+ ("v", "x", ""): {0: 9.0, 1: 10.0, 2: 8.0},
58
+ ("v", "y", ""): {0: -80.0, 1: -70.0, 2: -90.0},
59
+ ("v", "z", ""): {0: -0.5, 1: 0.5, 2: 1.5},
60
+ ("carr", "lat", ""): {0: -2.0, 1: -1.0, 2: 3.0},
61
+ ("carr", "lon", ""): {0: -26.0, 1: -36.0, 2: -16.0}}
62
+ >>> spacecraft = pd.DataFrame.from_dict(data,
63
+ orient="columns",
64
+ dtype=np.float64)
65
+ >>> spacecraft.index = epoch
66
+ >>> spacecraft.columns.names = ["M", "C", "S"]
67
+ >>> spacecraft = spacecraft.xs("", axis=1, level="S")
68
+ >>> spacecraft
69
+ M pos v carr
70
+ C x y z x y z lat lon
71
+ Epoch
72
+ 1995-01-01 -42.0 23.0 35.0 9.0 -80.0 -0.5 -2.0 -26.0
73
+ 2015-03-23 -22.0 31.0 27.0 10.0 -70.0 0.5 -1.0 -36.0
74
+ 2022-10-09 -34.0 11.0 49.0 8.0 -90.0 1.5 3.0 -16.0
75
+ >>> spacecraft = Spacecraft(spacecraft, "PSP", "HCI")
76
+ """
77
+ super(Spacecraft, self).__init__(data)
78
+ self.set_frame_name(frame, name)
79
+ self.set_data(data)
80
+ self._log_spacecraft()
81
+
82
+ @property
83
+ def frame(self):
84
+ r"""Spacecraft's frame of reference (e.g. GSE, HCI, etc.)."""
85
+ return self._frame
86
+
87
+ @property
88
+ def name(self):
89
+ r"""Spacecraft name (e.g. WIND, PSP)."""
90
+ return self._name
91
+
92
+ @property
93
+ def position(self):
94
+ """Position vector of the spacecraft.
95
+
96
+ Returns
97
+ -------
98
+ vector.Vector
99
+ Position vector with x, y, z components.
100
+ """
101
+ pos = self.data.xs("pos", axis=1, level="M").loc[:, ("x", "y", "z")]
102
+ return vector.Vector(pos)
103
+
104
+ @property
105
+ def pos(self):
106
+ """Shortcut to position property.
107
+
108
+ Returns
109
+ -------
110
+ vector.Vector
111
+ Position vector with x, y, z components.
112
+ """
113
+ # Ensures that `sc.pos` returns vector.
114
+ return self.position
115
+
116
+ @property
117
+ def r(self):
118
+ r"""Shortcut to :py:attr:`position`."""
119
+ return self.position
120
+
121
+ @property
122
+ def velocity(self):
123
+ """Velocity vector of the spacecraft.
124
+
125
+ Returns
126
+ -------
127
+ vector.Vector
128
+ Velocity vector with x, y, z components.
129
+
130
+ Raises
131
+ ------
132
+ KeyError
133
+ If spacecraft velocity data is not available.
134
+ """
135
+ try:
136
+ v = self.data.xs("v", axis=1, level="M").loc[:, ("x", "y", "z")]
137
+ return vector.Vector(v)
138
+ except KeyError as e: # noqa: F841
139
+ raise KeyError("Spacecraft doesn't know it's velocity.")
140
+
141
+ @property
142
+ def v(self):
143
+ r"""Shortcut to :py:attr:`velocity`."""
144
+ return self.velocity
145
+
146
+ @property
147
+ def carrington(self):
148
+ r"""Carrington latitude and longitude."""
149
+ try:
150
+ return self.data.xs("carr", axis=1, level="M").loc[:, ("lat", "lon")]
151
+ except KeyError as e: # noqa: F841
152
+ raise KeyError("Spacecraft doesn't know its Carrington location.")
153
+
154
+ @property
155
+ def distance2sun(self):
156
+ r"""Radial distance to Sun in meters."""
157
+ pos = self.position.data
158
+ frame = self.frame
159
+
160
+ if frame == "GSE":
161
+ re = self.constants.misc.loc["Re [m]"]
162
+ au = self.constants.misc.loc["1AU [m]"]
163
+ sign_x = pd.Series(
164
+ [-1.0, 1.0, 1.0], index=pd.Index(("x", "y", "z"), name="C")
165
+ )
166
+ change_origin = pd.Series(
167
+ [au, 0.0, 0.0], index=pd.Index(("x", "y", "z"), name="C")
168
+ )
169
+ pos_SI = (
170
+ pos.multiply(sign_x, axis=1).multiply(re).add(change_origin, axis=1)
171
+ )
172
+
173
+ elif frame == "HCI":
174
+ rs = self.constants.misc.loc["Rs [m]"]
175
+ pos_SI = pos.multiply(rs)
176
+
177
+ else:
178
+ raise NotImplementedError("Unrecognized reference frame `{}`".format(frame))
179
+
180
+ # distance2sun units should be [m], so this shouldn't matter. However, just as
181
+ # beta is treated in this way, we similarly treat distance2sun.
182
+ d2s = pos_SI.pow(2).sum(axis=1).pipe(np.sqrt) / self.units.distance2sun
183
+ d2s.name = "distance2sun"
184
+ return d2s
185
+
186
+ def _log_spacecraft(self):
187
+ self.logger.info(
188
+ "Created %s spacecraft with %s reference frame", self.name, self.frame
189
+ )
190
+
191
+ def set_frame_name(self, frame, name):
192
+ """Set the coordinate frame and spacecraft name.
193
+
194
+ Parameters
195
+ ----------
196
+ frame : str
197
+ Coordinate frame ('GSE' or 'HCI').
198
+ name : str
199
+ Spacecraft name.
200
+
201
+ Raises
202
+ ------
203
+ NotImplementedError
204
+ If frame is not 'GSE' or 'HCI'.
205
+ """
206
+ frame = frame.upper()
207
+ name = name.upper()
208
+
209
+ if frame not in ("GSE", "HCI"):
210
+ raise NotImplementedError("Unrecognized frame: {}".format(frame))
211
+ if name not in ("WIND", "PSP"):
212
+ raise NotImplementedError("Unrecognized name: {}".format(name))
213
+
214
+ self._frame = frame
215
+ self._name = name
216
+
217
+ def set_data(self, data):
218
+ """Set the spacecraft data.
219
+
220
+ Parameters
221
+ ----------
222
+ data : pd.DataFrame
223
+ Spacecraft position/velocity data.
224
+ """
225
+ super(Spacecraft, self).set_data(data)
226
+
227
+ p = data.xs("pos", axis=1, level="M")
228
+ # assert isinstance(p, pd.DataFrame)
229
+
230
+ p = p.loc[:, ["x", "y", "z"]]
231
+ assert p.shape[1] == 3
232
+
233
+ target = {"pos": p}
234
+
235
+ try:
236
+ v = data.xs("v", axis=1, level="M")
237
+ assert isinstance(v, pd.DataFrame)
238
+ v = v.loc[:, ["x", "y", "z"]]
239
+ assert v.shape[1] == 3
240
+ target["v"] = v
241
+ except KeyError:
242
+ pass
243
+
244
+ try:
245
+ c = data.xs("carr", axis=1, level="M")
246
+ assert isinstance(c, pd.DataFrame)
247
+ c = c.loc[:, ["lat", "lon"]]
248
+ assert c.shape[1] == 2
249
+ target["carr"] = c
250
+ except KeyError:
251
+ pass
252
+
253
+ target = pd.concat(target, axis=1, names=["M"], sort=False).sort_index(axis=1)
254
+
255
+ assert isinstance(target.index, pd.DatetimeIndex)
256
+ self._data = target
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env python
2
+ """Tensor class for storing quantities like thermal speed, pressure, and temperature."""
3
+
4
+ import pandas as pd
5
+
6
+ from . import base
7
+
8
+
9
+ class Tensor(base.Base):
10
+ """Container for tensor-valued quantities.
11
+
12
+ Parameters
13
+ ----------
14
+ data : :class:`pandas.DataFrame`
15
+ Tensor data with components ``par``, ``per`` and ``scalar``.
16
+ """
17
+
18
+ def __init__(self, data: pd.DataFrame):
19
+ """Initialize the Tensor object.
20
+
21
+ Parameters
22
+ ----------
23
+ data : :class:`pandas.DataFrame`
24
+ Tensor data to be stored.
25
+ """
26
+ super().__init__(data)
27
+ self._validate_data(data)
28
+ self._data = data
29
+
30
+ def __call__(self, component: str) -> pd.Series | pd.DataFrame:
31
+ """Access a specific component of the tensor.
32
+
33
+ Parameters
34
+ ----------
35
+ component : str
36
+ The name of the component to access.
37
+
38
+ Returns
39
+ -------
40
+ pd.Series | pd.DataFrame
41
+ The requested component data.
42
+
43
+ Raises
44
+ ------
45
+ AttributeError
46
+ If the component does not exist.
47
+ """
48
+ return self.__getattr__(component)
49
+
50
+ def set_data(self, new: pd.DataFrame):
51
+ """Set new tensor data.
52
+
53
+ Parameters
54
+ ----------
55
+ new : :class:`pandas.DataFrame`
56
+ The new tensor data.
57
+
58
+ Raises
59
+ ------
60
+ ValueError
61
+ If ``new`` does not contain the required columns.
62
+ """
63
+ super().set_data(new)
64
+ self._validate_data(new)
65
+
66
+ @staticmethod
67
+ def _validate_data(data: pd.DataFrame):
68
+ """Validate the tensor data structure.
69
+
70
+ Parameters
71
+ ----------
72
+ data : :class:`pandas.DataFrame`
73
+ Tensor data to validate.
74
+
75
+ Raises
76
+ ------
77
+ ValueError
78
+ If the data does not contain the required columns.
79
+ """
80
+ required_columns = pd.Index(["per", "par", "scalar"])
81
+ if not required_columns.isin(data.columns).all():
82
+ missing_columns = required_columns[~required_columns.isin(data.columns)]
83
+ raise ValueError(f"Missing required columns: {missing_columns.tolist()}")
84
+
85
+ @property
86
+ def magnitude(self) -> pd.Series | pd.DataFrame:
87
+ """Calculate and return the magnitude of the tensor."""
88
+ return self.data.multiply({"par": 1 / 3, "per": 2 / 3}, axis=1, level="C").sum(
89
+ axis=1
90
+ )
@@ -0,0 +1,199 @@
1
+ #!/usr/bin/env python
2
+ """Definitions of common units and physical constants.
3
+
4
+ The values are derived from :mod:`scipy.constants`. All quantities stored in
5
+ the :class:`~solarwindpy.core.plasma.Plasma` object have a corresponding entry
6
+ in :class:`Constants` and can be converted using :class:`Units`.
7
+ """
8
+
9
+ from dataclasses import dataclass, field
10
+
11
+ import pandas as pd
12
+
13
+ from scipy import constants
14
+ from scipy.constants import physical_constants
15
+
16
+ # We rely on views via DataFrame.xs to reduce memory size and do not
17
+ # `.copy(deep=True)`, so we want to make sure that this doesn't
18
+ # accidentally cause a problem.
19
+
20
+ _misc_constants = {
21
+ "e0": constants.epsilon_0,
22
+ "mu0": constants.mu_0,
23
+ "c": constants.c,
24
+ # "gamma": 5.0 / 3.0,
25
+ "hbar": physical_constants["Planck constant over 2 pi"][0],
26
+ "1AU [m]": constants.au,
27
+ "Re [m]": 6378.1e3, # Earth Radius in meters
28
+ "Rs [m]": 695.508e6, # Sun Radius in meters
29
+ "gas constant": constants.R,
30
+ }
31
+
32
+ _kBoltzmann = {
33
+ "J": constants.k,
34
+ "eV": physical_constants["Boltzmann constant in eV/K"][0],
35
+ }
36
+
37
+ _polytropic_index = dict(par=3.0, per=2.0, scalar=5.0 / 3.0)
38
+
39
+ _m_in_mp = {
40
+ "p": 1.0,
41
+ "p1": 1.0,
42
+ "p2": 1.0,
43
+ "pm": 1.0,
44
+ "p_bimax": 1.0,
45
+ "a": physical_constants["alpha particle-proton mass ratio"][0],
46
+ "a1": physical_constants["alpha particle-proton mass ratio"][0],
47
+ "a2": physical_constants["alpha particle-proton mass ratio"][0],
48
+ "a_bimax": physical_constants["alpha particle-proton mass ratio"][0],
49
+ "e": physical_constants["electron-proton mass ratio"][0],
50
+ }
51
+
52
+ _charges = {
53
+ "e": -constants.e,
54
+ "p": constants.e,
55
+ "p1": constants.e,
56
+ "p2": constants.e,
57
+ "pm": constants.e,
58
+ "p_bimax": constants.e,
59
+ "a": 2.0 * constants.e,
60
+ "a1": 2.0 * constants.e,
61
+ "a2": 2.0 * constants.e,
62
+ "a_bimax": 2.0 * constants.e,
63
+ }
64
+
65
+ _charge_states = {
66
+ "e": -1.0,
67
+ "p": 1.0,
68
+ "p1": 1.0,
69
+ "p2": 1.0,
70
+ "pm": 1.0,
71
+ "p_bimax": 1.0,
72
+ "a": 2.0,
73
+ "a1": 2.0,
74
+ "a2": 2.0,
75
+ "a_bimax": 2.0,
76
+ }
77
+
78
+ _masses = {
79
+ "e": constants.m_e,
80
+ "p": constants.m_p,
81
+ "p1": constants.m_p,
82
+ "p2": constants.m_p,
83
+ "pm": constants.m_p, # proton moment
84
+ "p_bimax": constants.m_p,
85
+ "a_bimax": physical_constants["alpha particle mass"][0],
86
+ "a": physical_constants["alpha particle mass"][0],
87
+ "a1": physical_constants["alpha particle mass"][0],
88
+ "a2": physical_constants["alpha particle mass"][0],
89
+ }
90
+
91
+ _m_amu = {
92
+ "a": physical_constants["alpha particle mass in u"][0],
93
+ "a1": physical_constants["alpha particle mass in u"][0],
94
+ "a2": physical_constants["alpha particle mass in u"][0],
95
+ "a_bimax": physical_constants["alpha particle mass in u"][0],
96
+ "p": physical_constants["proton mass in u"][0],
97
+ "p1": physical_constants["proton mass in u"][0],
98
+ "p2": physical_constants["proton mass in u"][0],
99
+ "pm": physical_constants["proton mass in u"][0],
100
+ "p_bimax": physical_constants["proton mass in u"][0],
101
+ "e": physical_constants["electron mass in u"][0],
102
+ }
103
+
104
+
105
+ @dataclass
106
+ class Constants:
107
+ """Physical constants useful for solar wind calculations."""
108
+
109
+ misc: pd.Series = field(default_factory=lambda: pd.Series(_misc_constants))
110
+ kb: pd.Series = field(default_factory=lambda: pd.Series(_kBoltzmann))
111
+ m_in_mp: pd.Series = field(default_factory=lambda: pd.Series(_m_in_mp))
112
+ m: pd.Series = field(default_factory=lambda: pd.Series(_masses))
113
+ m_amu: pd.Series = field(
114
+ default_factory=lambda: pd.Series(_m_amu),
115
+ metadata={"doc": "Masses in amu."},
116
+ )
117
+ charges: pd.Series = field(default_factory=lambda: pd.Series(_charges))
118
+ charge_states: pd.Series = field(default_factory=lambda: pd.Series(_charge_states))
119
+ polytropic_index: pd.Series = field(
120
+ default_factory=lambda: pd.Series(_polytropic_index),
121
+ metadata={"doc": "Polytropic index for various cases."},
122
+ )
123
+
124
+ def __post_init__(self) -> None:
125
+ """Validate the shapes of series."""
126
+ for s in (
127
+ self.misc,
128
+ self.kb,
129
+ self.m_in_mp,
130
+ self.m,
131
+ self.m_amu,
132
+ self.charges,
133
+ self.charge_states,
134
+ self.polytropic_index,
135
+ ):
136
+ if not isinstance(s, pd.Series):
137
+ raise TypeError("Constant values must be pandas Series")
138
+
139
+
140
+ @dataclass
141
+ class Units:
142
+ r"""Common unit conversion factors.
143
+
144
+ Attributes
145
+ ----------
146
+ bfield : float
147
+ Magnetic field units :math:`[\mathrm{nT}]`.
148
+ v : float
149
+ Velocity units :math:`[\mathrm{km\,s^{-1}}]`.
150
+ pth : float
151
+ Thermal pressure units :math:`[\mathrm{pPa}]`.
152
+ temperature : float
153
+ Temperature units :math:`[10^{5}\,\mathrm{K}]`.
154
+ n : float
155
+ Number density units :math:`[\mathrm{cm^{-3}}]`.
156
+ beta : float
157
+ Dimensionless beta units.
158
+ lnlambda : float
159
+ Dimensionless Coulomb log units.
160
+ nuc : float
161
+ Collision frequency units :math:`[10^{-7}\,\mathrm{Hz}]`.
162
+ nc : float
163
+ Dimensionless count units.
164
+ qpar : float
165
+ Parallel heat flux units :math:`[\mathrm{mW\,cm^{-2}}]`.
166
+ distance2sun : float
167
+ Distance to sun units ``[m]``.
168
+ """
169
+
170
+ bfield: float = 1e-9
171
+ b: float = field(init=False)
172
+ v: float = 1e3
173
+ w: float = field(init=False)
174
+ dv: float = field(init=False)
175
+ ca: float = field(init=False)
176
+ cs: float = field(init=False)
177
+ cfms: float = field(init=False)
178
+ pth: float = 1e-12
179
+ temperature: float = 1e5
180
+ n: float = 1e6
181
+ rho: float = field(init=False)
182
+ beta: float = 1.0
183
+ lnlambda: float = 1.0
184
+ nuc: float = 1e-7
185
+ nc: float = 1.0
186
+ qpar: float = 1e-7
187
+ distance2sun: float = 1.0
188
+ specific_entropy: float = field(init=False)
189
+
190
+ def __post_init__(self) -> None:
191
+ """Compute derived unit conversions."""
192
+ self.b = self.bfield
193
+ self.w = self.v
194
+ self.dv = self.v
195
+ self.ca = self.v
196
+ self.cs = self.v
197
+ self.cfms = self.v
198
+ self.rho = self.n * constants.m_p
199
+ self.specific_entropy = 1e4 / constants.e