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,188 @@
1
+ #!/usr/bin/env python
2
+ r"""Fit functions for exponential models.
3
+
4
+ Classes in this module implement exponential decay and related forms
5
+ using the :class:`~solarwindpy.fitfunctions.core.FitFunction` API.
6
+ They provide reasonable starting parameters and formatted LaTeX output
7
+ for visualization.
8
+ """
9
+ import pdb # noqa: F401
10
+ import numpy as np
11
+
12
+ from numbers import Number
13
+
14
+ from .core import FitFunction
15
+
16
+
17
+ class Exponential(FitFunction):
18
+ def __init__(self, xobs, yobs, **kwargs):
19
+ """Fit ``A * exp(-c x)`` to the data.
20
+
21
+ Parameters
22
+ ----------
23
+ xobs : array-like
24
+ Independent variable values.
25
+ yobs : array-like
26
+ Observed dependent variable values.
27
+ **kwargs
28
+ Additional options forwarded to :class:`FitFunction`.
29
+ """
30
+
31
+ super().__init__(xobs, yobs, **kwargs)
32
+
33
+ @property
34
+ def function(self):
35
+ def exp(x, c, A):
36
+ return A * np.exp(-(c * x))
37
+
38
+ return exp
39
+
40
+ @property
41
+ def p0(self):
42
+ r"""Return initial guesses ``[c, A]`` for the fit."""
43
+ assert self.sufficient_data
44
+
45
+ y = self.observations.used.y
46
+
47
+ c = 1.0
48
+ try:
49
+ A = y.max()
50
+ except ValueError as e:
51
+ chk = (
52
+ r"zero-size array to reduction operation maximum "
53
+ "which has no identity"
54
+ )
55
+ if e.message.startswith(chk):
56
+ msg = (
57
+ "There is no maximum of a zero-size array. "
58
+ "Please check input data."
59
+ )
60
+ raise ValueError(msg)
61
+
62
+ p0 = [c, A]
63
+ return p0
64
+
65
+ @property
66
+ def TeX_function(self):
67
+ TeX = r"f(x)=A \cdot e^{-cx}"
68
+ return TeX
69
+
70
+
71
+ class ExponentialPlusC(FitFunction):
72
+ def __init__(self, xobs, yobs, **kwargs):
73
+ """Fit ``A * exp(-c x) + d`` to the data.
74
+
75
+ Parameters
76
+ ----------
77
+ xobs : array-like
78
+ Independent variable values.
79
+ yobs : array-like
80
+ Observed dependent variable values.
81
+ **kwargs
82
+ Additional options forwarded to :class:`FitFunction`.
83
+ """
84
+
85
+ super().__init__(xobs, yobs, **kwargs)
86
+
87
+ @property
88
+ def function(self):
89
+ def expc(x, c, A, d):
90
+ return (A * np.exp(-(c * x))) + d
91
+
92
+ return expc
93
+
94
+ @property
95
+ def p0(self):
96
+ r"""Return initial guesses ``[c, A, d]`` for the fit."""
97
+ assert self.sufficient_data
98
+
99
+ y = self.observations.used.y
100
+
101
+ c = 1.0
102
+ d = 0.0
103
+ try:
104
+ A = y.max()
105
+ except ValueError as e:
106
+ chk = (
107
+ r"zero-size array to reduction operation maximum "
108
+ "which has no identity"
109
+ )
110
+ if e.message.startswith(chk):
111
+ msg = (
112
+ "There is no maximum of a zero-size array. "
113
+ "Please check input data."
114
+ )
115
+ raise ValueError(msg)
116
+
117
+ p0 = [c, A, d]
118
+ return p0
119
+
120
+ @property
121
+ def TeX_function(self):
122
+ TeX = r"f(x)=A \cdot e^{-cx} + d"
123
+ return TeX
124
+
125
+
126
+ class ExponentialCDF(FitFunction):
127
+ def __init__(self, xobs, yobs, **kwargs):
128
+ """Fit an exponential cumulative distribution function.
129
+
130
+ Parameters
131
+ ----------
132
+ xobs : array-like
133
+ Independent variable values.
134
+ yobs : array-like
135
+ Observed cumulative counts.
136
+ **kwargs
137
+ Additional options forwarded to :class:`FitFunction`.
138
+ """
139
+
140
+ super().__init__(xobs, yobs, **kwargs)
141
+
142
+ @property
143
+ def function(self):
144
+ def exp_cdf(x, c):
145
+ return self.y0 * (1.0 - np.exp(-(c * x)))
146
+
147
+ return exp_cdf
148
+
149
+ @property
150
+ def y0(self):
151
+ r"""Amplitude of the CDF."""
152
+ return self._y0
153
+
154
+ def set_y0(self, new):
155
+ assert isinstance(new, Number)
156
+ self._y0 = new
157
+
158
+ @property
159
+ def p0(self):
160
+ r"""Return initial guess ``[c]`` for the fit."""
161
+ assert self.sufficient_data
162
+
163
+ y = self.observations.used.y
164
+
165
+ c = y.mean()
166
+
167
+ p0 = [c]
168
+ return p0
169
+
170
+ @property
171
+ def TeX_function(self):
172
+ TeX = r"f(x)=A \left(1 - e^{-cx}\right)"
173
+ return TeX
174
+
175
+ def set_TeX_info(self, **kwargs):
176
+ """Include ``A`` value in the TeX annotation."""
177
+
178
+ # HACK: assumes integer A
179
+ # If not integer, will need to format float or exp.
180
+ additional_info = kwargs.pop("additional_info", [])
181
+ if not isinstance(additional_info, list):
182
+ additional_info = [additional_info]
183
+ info_A = r"$A = %s$" % self.y0
184
+ additional_info = [info_A] + additional_info
185
+
186
+ super(ExponentialCDF, self).set_TeX_info(
187
+ additional_info=additional_info, **kwargs
188
+ )
@@ -0,0 +1,264 @@
1
+ #!/usr/bin/env python
2
+ r"""Gaussian-based fit functions.
3
+
4
+ The classes here implement standard Gaussian shapes and common
5
+ variations used throughout the package. Each class inherits from
6
+ :class:`~solarwindpy.fitfunctions.core.FitFunction` and defines the
7
+ target function, initial parameter estimates, and LaTeX output helpers.
8
+ """
9
+ import pdb # noqa: F401
10
+ import numpy as np
11
+
12
+ from .core import FitFunction
13
+
14
+
15
+ class Gaussian(FitFunction):
16
+ def __init__(self, xobs, yobs, **kwargs):
17
+ """Fit a standard Gaussian profile."""
18
+
19
+ super().__init__(xobs, yobs, **kwargs)
20
+
21
+ @property
22
+ def function(self):
23
+ def gaussian(x, mu, sigma, A):
24
+ arg = -0.5 * (((x - mu) / sigma) ** 2.0)
25
+ return A * np.exp(arg)
26
+
27
+ return gaussian
28
+
29
+ @property
30
+ def p0(self):
31
+ r"""Return initial guesses ``[mu, sigma, A]`` for the fit."""
32
+ assert self.sufficient_data
33
+
34
+ x, y = self.observations.used.x, self.observations.used.y
35
+ mean = (x * y).sum() / y.sum()
36
+ std = np.sqrt(((x - mean) ** 2.0 * y).sum() / y.sum())
37
+
38
+ try:
39
+ peak = y.max()
40
+ except ValueError as e:
41
+ chk = (
42
+ r"zero-size array to reduction operation maximum "
43
+ "which has no identity"
44
+ )
45
+ if e.message.startswith(chk):
46
+ msg = (
47
+ "There is no maximum of a zero-size array. "
48
+ "Please check input data."
49
+ )
50
+ raise ValueError(msg)
51
+
52
+ p0 = [mean, std, peak]
53
+ return p0
54
+
55
+ @property
56
+ def TeX_function(self):
57
+ # TeX = r"f(x)=\frac{1}{\sqrt{2 \pi} \sigma} A\cdot e^{-\frac{1}{2} (\frac{x-\mu}{\sigma})^2}"
58
+ TeX = r"f(x)=A \cdot e^{-\frac{1}{2} \left(\frac{x-\mu}{\sigma}\right)^2}"
59
+ return TeX
60
+
61
+ def make_fit(self, *args, **kwargs):
62
+ super().make_fit(*args, **kwargs)
63
+ try:
64
+ self.TeX_info.set_TeX_argnames(mu=r"\mu", sigma=r"\sigma")
65
+ except AttributeError: # Fit failed
66
+ pass
67
+
68
+
69
+ class GaussianNormalized(FitFunction):
70
+ def __init__(self, xobs, yobs, **kwargs):
71
+ """Fit a normalized Gaussian where the integral equals ``n``."""
72
+
73
+ super().__init__(xobs, yobs, **kwargs)
74
+
75
+ @property
76
+ def function(self):
77
+ def gaussian_normalized(x, mu, sigma, n):
78
+ arg = -0.5 * (((x - mu) / sigma) ** 2.0)
79
+ A = n / (np.sqrt(2 * np.pi) * sigma)
80
+ return A * np.exp(arg)
81
+
82
+ return gaussian_normalized
83
+
84
+ @property
85
+ def p0(self):
86
+ r"""Return initial guesses ``[mu, sigma, n]`` for the fit."""
87
+ assert self.sufficient_data
88
+
89
+ x, y = self.observations.used.x, self.observations.used.y
90
+ mean = (x * y).sum() / y.sum()
91
+ std = np.sqrt(((x - mean) ** 2.0 * y).sum() / y.sum())
92
+
93
+ try:
94
+ peak = y.max()
95
+ except ValueError as e:
96
+ chk = (
97
+ r"zero-size array to reduction operation maximum "
98
+ "which has no identity"
99
+ )
100
+ if e.message.startswith(chk):
101
+ msg = (
102
+ "There is no maximum of a zero-size array. "
103
+ "Please check input data."
104
+ )
105
+ raise ValueError(msg)
106
+
107
+ n = peak * std * np.sqrt(2 * np.pi)
108
+ p0 = [mean, std, n]
109
+ return p0
110
+
111
+ @property
112
+ def TeX_function(self):
113
+ TeX = r"f(x)=\frac{n}{\sqrt{2 \pi} \sigma} e^{-\frac{1}{2} \left(\frac{x-\mu}{\sigma}\right)^2}"
114
+ # TeX = r"f(x)=A \cdot e^{-\frac{1}{2} (\frac{x-\mu}{\sigma})^2}"
115
+ return TeX
116
+
117
+ def make_fit(self, *args, **kwargs):
118
+ super().make_fit(*args, **kwargs)
119
+ try:
120
+ self.TeX_info.set_TeX_argnames(mu=r"\mu", sigma=r"\sigma")
121
+ except AttributeError: # Fit failed
122
+ pass
123
+
124
+
125
+ class GaussianLn(FitFunction):
126
+ r"""Gaussian where taking :math:`\ln(x)`.
127
+
128
+ [1] https://mathworld.wolfram.com/LogNormalDistribution.html
129
+ """
130
+
131
+ def __init__(self, xobs, yobs, **kwargs):
132
+ """Fit a Gaussian in logarithmic space."""
133
+
134
+ super().__init__(xobs, yobs, **kwargs)
135
+ self.set_TeX_report_normal_parameters(False)
136
+
137
+ @property
138
+ def function(self):
139
+ # def gaussian_ln(x, m, s, A):
140
+ # x = np.log(x)
141
+ # coeff = (np.sqrt(2.0 * np.pi) * s) ** (-1.0)
142
+ # arg = -0.5 * (((x - m) / s) ** 2.0)
143
+ # return A * coeff * np.exp(arg)
144
+
145
+ def gaussian_ln(x, m, s, A):
146
+ lnx = np.log(x)
147
+
148
+ coeff = A
149
+ # coeff *= (np.sqrt(2.0 * np.pi) * s * x) ** (-1.0)
150
+
151
+ arg = -0.5 * (((lnx - m) / s) ** 2.0)
152
+
153
+ return coeff * np.exp(arg)
154
+
155
+ # def gaussian_ln(x, m, s, A):
156
+ # arg = m + (s * x)
157
+ # return A * np.exp(arg)
158
+
159
+ return gaussian_ln
160
+
161
+ @property
162
+ def p0(self):
163
+ r"""Return initial guesses ``[ln(mu), ln(sigma), ln(A)]``."""
164
+ assert self.sufficient_data
165
+
166
+ x, y = self.observations.used.x, self.observations.used.y
167
+
168
+ mean = (x * y).sum() / y.sum()
169
+ std = ((x - mean) ** 2.0 * y).sum() / y.sum()
170
+
171
+ try:
172
+ peak = y.max()
173
+ except ValueError as e:
174
+ chk = (
175
+ r"zero-size array to reduction operation maximum "
176
+ "which has no identity"
177
+ )
178
+ if e.message.startswith(chk):
179
+ msg = (
180
+ "There is no maximum of a zero-size array. "
181
+ "Please check input data."
182
+ )
183
+ raise ValueError(msg)
184
+
185
+ p0 = [mean, std, peak]
186
+ p0 = [np.log(x) for x in p0]
187
+ return p0
188
+
189
+ @property
190
+ def TeX_function(self):
191
+ TeX = (
192
+ r"f(x) = A \cdot "
193
+ r"\mathrm{exp}\left[-\frac{1}{2} "
194
+ r"(\frac{\mathrm{ln}(x)-m}{s})^2\right]"
195
+ )
196
+ TeX = (
197
+ r"f(x) ="
198
+ r"A \cdot"
199
+ # r"\frac{1}{\sqrt{2\pi} s x}"
200
+ r"\exp\left["
201
+ r"\frac{\left(\ln x - m\right)^2}{2 s^2}"
202
+ r"\right]"
203
+ )
204
+ return TeX
205
+
206
+ @property
207
+ def normal_parameters(self):
208
+ r"""Calculate the normal parameters from log-normal parameters.
209
+
210
+ .. math::
211
+
212
+ \mu = \exp[m + (s^2)/2]
213
+ \sigma = \sqrt{\exp[s^2 + 2m] (\exp[s^2] - 1)}
214
+ """
215
+ m = self.popt["m"]
216
+ s = self.popt["s"]
217
+
218
+ mu = np.exp(m + ((s**2.0) / 2.0))
219
+ sigma = np.exp(s**2.0 + 2.0 * m)
220
+ sigma *= np.exp(s**2.0) - 1.0
221
+ sigma = np.sqrt(sigma)
222
+
223
+ return dict(mu=mu, sigma=sigma)
224
+
225
+ @property
226
+ def TeX_report_normal_parameters(self):
227
+ r"""Report normal parameters, not log-normal parameters in the TeX info."""
228
+ try:
229
+ return self._use_normal_parameters
230
+ except AttributeError:
231
+ return False
232
+
233
+ def set_TeX_report_normal_parameters(self, new):
234
+ new = bool(new)
235
+ self._use_normal_parameters = new
236
+
237
+ @property
238
+ def TeX_popt(self):
239
+ r"""Create a dictionary with ``(k, v)`` pairs corresponding to parameter values.
240
+
241
+ ``(self.argnames, :math:`p_{\mathrm{opt}} \pm \sigma_p`)`` with the
242
+ appropriate uncertainty.
243
+
244
+ See ``set_TeX_trans_argnames`` to translate the argnames for TeX.
245
+ """
246
+ TeX_popt = super(GaussianLn, self).TeX_popt
247
+
248
+ if self.TeX_report_normal_parameters:
249
+ # psigma = self.psigma
250
+ popt = self.normal_parameters.items()
251
+ # use -9999 to indicate fill value that hasn't been set.
252
+ # I need to figure out how to calculate the transformation
253
+ # of the uncertainty of log normal to normal.
254
+ normal_popt = {k: self.val_uncert_2_string(v, np.nan) for k, v in popt}
255
+ normal_popt = {k: v.split(r" \pm")[0] for k, v in normal_popt.items()}
256
+
257
+ translate = dict(mu=r"\mu", sigma=r"\sigma")
258
+ for k0, k1 in translate.items():
259
+ normal_popt[k1] = normal_popt[k0]
260
+ del normal_popt[k0]
261
+
262
+ TeX_popt.update(normal_popt)
263
+
264
+ return TeX_popt
@@ -0,0 +1,116 @@
1
+ #!/usr/bin/env python
2
+ r"""Simple linear fit functions.
3
+
4
+ This module defines :class:`~solarwindpy.fitfunctions.core.FitFunction`
5
+ subclasses for straight-line models. They are primarily used for
6
+ quick trend estimation and serve as basic examples of the
7
+ FitFunction interface.
8
+ """
9
+ import pdb # noqa: F401
10
+ import numpy as np
11
+
12
+ from .core import FitFunction
13
+
14
+
15
+ class Line(FitFunction):
16
+ def __init__(self, xobs, yobs, **kwargs):
17
+ """Create a line fit to ``(xobs, yobs)`` data."""
18
+ super().__init__(xobs, yobs, **kwargs)
19
+
20
+ @property
21
+ def function(self):
22
+ def line(x, m, b):
23
+ return (m * x) + b
24
+
25
+ return line
26
+
27
+ @property
28
+ def p0(self):
29
+ r"""Calculate the initial guess for the line parameters.
30
+
31
+ If this fails, return :py:meth:`curve_fit`'s default value `None`.
32
+
33
+ Return
34
+ ------
35
+ p0 : list
36
+ The initial guesses as [m, b].
37
+ """
38
+ assert self.sufficient_data
39
+
40
+ x = self.observations.used.x
41
+ y = self.observations.used.y
42
+ dy, dx = np.ediff1d(y), np.ediff1d(x)
43
+
44
+ m = dy / dx
45
+ m = np.median(m)
46
+ b = (m * x) - y
47
+ b = np.median(b)
48
+
49
+ p0 = [m, b]
50
+
51
+ if not (np.all(np.isfinite(dx)) and (np.all(np.abs(dx) > 0))):
52
+ self.logger.warning(f"Slope estimate failed (dx = {dx}).\nReturning None.")
53
+ p0 = None
54
+
55
+ return p0
56
+
57
+ @property
58
+ def TeX_function(self):
59
+ TeX = r"f(x)=m \cdot x + b"
60
+ return TeX
61
+
62
+ @property
63
+ def x_intercept(self):
64
+ return -self.popt["b"] / self.popt["m"]
65
+
66
+
67
+ class LineXintercept(FitFunction):
68
+ def __init__(self, xobs, yobs, **kwargs):
69
+ super().__init__(xobs, yobs, **kwargs)
70
+
71
+ @property
72
+ def function(self):
73
+ def line(x, m, x0):
74
+ return m * (x - x0)
75
+
76
+ return line
77
+
78
+ @property
79
+ def p0(self):
80
+ r"""Calculate the initial guess for the line parameters.
81
+
82
+ If this fails, return :py:meth:`curve_fit`'s default value `None`.
83
+
84
+ Return
85
+ ------
86
+ p0 : list
87
+ The initial guesses as [m, b].
88
+ """
89
+ assert self.sufficient_data
90
+
91
+ x = self.observations.used.x
92
+ y = self.observations.used.y
93
+ dy, dx = np.ediff1d(y), np.ediff1d(x)
94
+
95
+ m = dy / dx
96
+ m = np.median(m)
97
+ b = (m * x) - y
98
+ b = np.median(b)
99
+
100
+ x0 = -b / m
101
+ p0 = [m, x0]
102
+
103
+ if not (np.all(np.isfinite(dx)) and (np.all(np.abs(dx) > 0))):
104
+ self.logger.warning(f"Slope estimate failed (dx = {dx}).\nReturning None.")
105
+ p0 = None
106
+
107
+ return p0
108
+
109
+ @property
110
+ def TeX_function(self):
111
+ TeX = r"f(x)=m \cdot (x - x_0)"
112
+ return TeX
113
+
114
+ @property
115
+ def y_intercept(self):
116
+ return -self.popt["x0"] * self.popt["m"]
@@ -0,0 +1,71 @@
1
+ #!/usr/bin/env python
2
+ r""":py:mod:`Gaussian` and related `FitFunction` sublcasses."""
3
+ import pdb # noqa: F401
4
+ import numpy as np
5
+
6
+ from .core import FitFunction
7
+
8
+
9
+ class Moyal(FitFunction):
10
+ def __init__(self, sigma, xobs, yobs, **kwargs):
11
+ super().__init__(xobs, yobs, **kwargs)
12
+
13
+ # self._sigma = float(sigma)
14
+
15
+ @property
16
+ def function(self):
17
+ def moyal(x, mu, sigma, A):
18
+ center = x - mu
19
+ # sigma = self.sigma
20
+ ms_sq = (center / sigma) ** 2
21
+ arg0 = 0.5 * (ms_sq - np.exp(ms_sq))
22
+ arg1 = np.exp(arg0)
23
+ out = A * (np.exp(arg1) - 1)
24
+ return out
25
+
26
+ return moyal
27
+
28
+ @property
29
+ def sigma(self):
30
+ r"""Initial guess for mean value."""
31
+ return self._sigma
32
+
33
+ @property
34
+ def p0(self):
35
+ r"""Calculate the initial guess for the Gaussian parameters.
36
+
37
+ Return
38
+ ------
39
+ p0 : list
40
+ The initial guesses as [mu, sigma, A].
41
+ """
42
+ assert self.sufficient_data
43
+
44
+ x, y = self.observations.used.x, self.observations.used.y
45
+ mean = (x * y).sum() / y.sum()
46
+ std = np.sqrt(((x - mean) ** 2.0 * y).sum() / y.sum())
47
+ # std = self.sigma
48
+
49
+ try:
50
+ peak = y.max()
51
+ except ValueError as e:
52
+ chk = (
53
+ r"zero-size array to reduction operation maximum "
54
+ "which has no identity"
55
+ )
56
+ if e.message.startswith(chk):
57
+ msg = (
58
+ "There is no maximum of a zero-size array. "
59
+ "Please check input data."
60
+ )
61
+ raise ValueError(msg)
62
+
63
+ p0 = [mean, std, peak]
64
+ return p0
65
+
66
+ @property
67
+ def TeX_function(self):
68
+ # TeX = r"f(x)=\frac{1}{\sqrt{2 \pi} \sigma} A\cdot e^{-\frac{1}{2} (\frac{x-\mu}{\sigma})^2}"
69
+ TeX = r"f(x)=A \cdot e^{-\frac{1}{2} (\frac{x-\mu}{\sigma})^2 - e^{\frac{x-\mu}{\sigma}}^2}"
70
+ TeX = "lala"
71
+ return TeX