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

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

Potentially problematic release.


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

Files changed (412) hide show
  1. plans/.velocity/metrics.json +96 -0
  2. plans/0-overview-template.md +268 -0
  3. plans/N-phase-template.md +106 -0
  4. plans/PLAN_AUDIT_SUMMARY.md +173 -0
  5. plans/TEMPLATE-USAGE-GUIDE.md +198 -0
  6. plans/__init__.py +1 -0
  7. plans/abandoned/compaction-agent-system/0-Overview.md +123 -0
  8. plans/abandoned/compaction-agent-system/agents-index-update-plan.md +109 -0
  9. plans/abandoned/compaction-agent-system/compacted_state.md +85 -0
  10. plans/abandoned/compaction-agent-system/implementation-plan.md +107 -0
  11. plans/abandoned/compaction-agent-system/system-validation-report.md +159 -0
  12. plans/abandoned/compaction-agent-system/usage-guide.md +210 -0
  13. plans/abandoned/hook-system-enhancement/0-Overview.md +214 -0
  14. plans/abandoned/hook-system-enhancement/1-Phase1-Core-Infrastructure.md +313 -0
  15. plans/abandoned/hook-system-enhancement/2-Phase2-Intelligent-Testing.md +385 -0
  16. plans/abandoned/hook-system-enhancement/3-Phase3-Physics-Validation.md +444 -0
  17. plans/abandoned/hook-system-enhancement/4-Phase4-Performance-Monitoring.md +458 -0
  18. plans/abandoned/hook-system-enhancement/5-Phase5-Developer-Experience.md +532 -0
  19. plans/abandoned/hook-system-enhancement/6-Implementation-Timeline.md +274 -0
  20. plans/abandoned/hook-system-enhancement/7-Risk-Management.md +376 -0
  21. plans/abandoned/hook-system-enhancement/8-Testing-Strategy.md +579 -0
  22. plans/abandoned/readthedocs-automation/0-Overview.md +247 -0
  23. plans/abandoned/readthedocs-automation/1-Emergency-Documentation-Fixes.md +270 -0
  24. plans/abandoned/readthedocs-automation/2-Template-System-Enhancement.md +811 -0
  25. plans/abandoned/readthedocs-automation/3-Quality-Audit-ReadTheDocs-Integration.md +844 -0
  26. plans/abandoned/readthedocs-automation/4-Plan-Consolidation-Cleanup.md +632 -0
  27. plans/abandoned/readthedocs-automation/9-Closeout.md +207 -0
  28. plans/abandoned/readthedocs-automation/ABANDONMENT_REASON.md +72 -0
  29. plans/cicd-architecture-redesign/0-Overview.md +193 -0
  30. plans/cicd-architecture-redesign/1-Workflow-Creation.md +103 -0
  31. plans/cicd-architecture-redesign/2-Version-Detection.md +123 -0
  32. plans/cicd-architecture-redesign/3-Deployment-Gates.md +169 -0
  33. plans/cicd-architecture-redesign/4-RC-Testing.md +194 -0
  34. plans/cicd-architecture-redesign/5-TestPyPI-Validation.md +264 -0
  35. plans/cicd-architecture-redesign/6-Production-Release.md +263 -0
  36. plans/cicd-architecture-redesign/7-Cleanup.md +243 -0
  37. plans/cicd-architecture-redesign/8-Documentation.md +285 -0
  38. plans/cicd-architecture-redesign/Closeout.md +225 -0
  39. plans/closeout-template.md +259 -0
  40. plans/completed/circular-import-audit/0-Overview.md +152 -0
  41. plans/completed/circular-import-audit/1-Static-Dependency-Analysis.md +62 -0
  42. plans/completed/circular-import-audit/2-Dynamic-Import-Testing.md +56 -0
  43. plans/completed/circular-import-audit/3-Performance-Impact-Assessment.md +56 -0
  44. plans/completed/circular-import-audit/4-Issue-Remediation.md +78 -0
  45. plans/completed/circular-import-audit/5-Preventive-Infrastructure.md +89 -0
  46. plans/completed/claude-settings-ecosystem-alignment/0-Overview.md +162 -0
  47. plans/completed/claude-settings-ecosystem-alignment/1-Security-Foundation.md +148 -0
  48. plans/completed/claude-settings-ecosystem-alignment/2-Hook-Integration.md +158 -0
  49. plans/completed/claude-settings-ecosystem-alignment/3-Agent-System-Integration.md +177 -0
  50. plans/completed/claude-settings-ecosystem-alignment/4-Enhanced-Workflow-Automation.md +159 -0
  51. plans/completed/claude-settings-ecosystem-alignment/5-Validation-Monitoring.md +181 -0
  52. plans/completed/claude-settings-ecosystem-alignment/compacted_session_state.md +290 -0
  53. plans/completed/combined_plan_with_checklist_documentation/1-Overview-and-Goals.md +51 -0
  54. plans/completed/combined_plan_with_checklist_documentation/2-Toolchain-and-Hosting.md +69 -0
  55. plans/completed/combined_plan_with_checklist_documentation/3-Repository-Structure.md +61 -0
  56. plans/completed/combined_plan_with_checklist_documentation/4-Configuration-and-Standards.md +70 -0
  57. plans/completed/combined_plan_with_checklist_documentation/5-Documentation-Content.md +62 -0
  58. plans/completed/combined_plan_with_checklist_documentation/6-CI-CD-and-Validation.md +58 -0
  59. plans/completed/combined_plan_with_checklist_documentation/7-Maintenance.md +55 -0
  60. plans/completed/combined_test_plan_with_checklist_fitfunctions/0-Overview.md +135 -0
  61. plans/completed/combined_test_plan_with_checklist_fitfunctions/1-Common-fixtures.md +59 -0
  62. plans/completed/combined_test_plan_with_checklist_fitfunctions/10-power_laws.md +56 -0
  63. plans/completed/combined_test_plan_with_checklist_fitfunctions/2-core.py-FitFunction.md +118 -0
  64. plans/completed/combined_test_plan_with_checklist_fitfunctions/3-gaussians.py-Gaussian-GaussianNormalized-GaussianLn.md +69 -0
  65. plans/completed/combined_test_plan_with_checklist_fitfunctions/4-trend_fits.py-TrendFit.md +99 -0
  66. plans/completed/combined_test_plan_with_checklist_fitfunctions/5-plots.py-FFPlot.md +98 -0
  67. plans/completed/combined_test_plan_with_checklist_fitfunctions/6-tex_info.py-TeXinfo.md +79 -0
  68. plans/completed/combined_test_plan_with_checklist_fitfunctions/7-Justification.md +49 -0
  69. plans/completed/combined_test_plan_with_checklist_fitfunctions/8-exponentials.md +64 -0
  70. plans/completed/combined_test_plan_with_checklist_fitfunctions/9-lines.md +58 -0
  71. plans/completed/combined_test_plan_with_checklist_plotting/0-Overview.md +142 -0
  72. plans/completed/combined_test_plan_with_checklist_plotting/1-base.py.md +90 -0
  73. plans/completed/combined_test_plan_with_checklist_plotting/10-labels-special.py.md +102 -0
  74. plans/completed/combined_test_plan_with_checklist_plotting/11-labels-chemistry.py.md +212 -0
  75. plans/completed/combined_test_plan_with_checklist_plotting/12-labels-composition.py.md +242 -0
  76. plans/completed/combined_test_plan_with_checklist_plotting/13-labels-datetime.py.md +247 -0
  77. plans/completed/combined_test_plan_with_checklist_plotting/14-labels-elemental_abundance.py.md +274 -0
  78. plans/completed/combined_test_plan_with_checklist_plotting/15-visual-validation.md +256 -0
  79. plans/completed/combined_test_plan_with_checklist_plotting/16-integration-testing.md +266 -0
  80. plans/completed/combined_test_plan_with_checklist_plotting/17-performance-benchmarks.md +267 -0
  81. plans/completed/combined_test_plan_with_checklist_plotting/18-Fixtures-and-Utilities.md +86 -0
  82. plans/completed/combined_test_plan_with_checklist_plotting/2-agg_plot.py.md +90 -0
  83. plans/completed/combined_test_plan_with_checklist_plotting/3-histograms.py.md +201 -0
  84. plans/completed/combined_test_plan_with_checklist_plotting/4-scatter.py.md +167 -0
  85. plans/completed/combined_test_plan_with_checklist_plotting/5-spiral.py.md +216 -0
  86. plans/completed/combined_test_plan_with_checklist_plotting/6-orbits.py.md +108 -0
  87. plans/completed/combined_test_plan_with_checklist_plotting/7-tools.py.md +86 -0
  88. plans/completed/combined_test_plan_with_checklist_plotting/8-select_data_from_figure.py.md +97 -0
  89. plans/completed/combined_test_plan_with_checklist_plotting/9-labels-base.py.md +88 -0
  90. plans/completed/combined_test_plan_with_checklist_solar_activity/.gitkeep +0 -0
  91. plans/completed/combined_test_plan_with_checklist_solar_activity/0-Overview.md +170 -0
  92. plans/completed/combined_test_plan_with_checklist_solar_activity/1-Package-Entry-Point-__init__.py.md +121 -0
  93. plans/completed/combined_test_plan_with_checklist_solar_activity/2-Core-Base-Classes-base.py.md +142 -0
  94. plans/completed/combined_test_plan_with_checklist_solar_activity/3-Plotting-Helpers-plots.py.md +123 -0
  95. plans/completed/combined_test_plan_with_checklist_solar_activity/4-LISIRD-Sub-package.md +119 -0
  96. plans/completed/combined_test_plan_with_checklist_solar_activity/5-Extrema-Calculator.md +103 -0
  97. plans/completed/combined_test_plan_with_checklist_solar_activity/6-Sunspot-Number-Sub-package.md +163 -0
  98. plans/completed/combined_test_plan_with_checklist_solar_activity/7-Sunspot-Number-Init.py.md +217 -0
  99. plans/completed/combined_test_plan_with_checklist_solar_activity/compacted_state.md +52 -0
  100. plans/completed/compaction-agent-modernization/0-Overview.md +156 -0
  101. plans/completed/compaction-agent-modernization/1-Architecture-Audit-Gap-Analysis.md +132 -0
  102. plans/completed/compaction-agent-modernization/2-Token-Baseline-Recalibration.md +153 -0
  103. plans/completed/compaction-agent-modernization/3-Agent-Reference-Updates.md +184 -0
  104. plans/completed/compaction-agent-modernization/4-Compression-Algorithm-Modernization.md +238 -0
  105. plans/completed/compaction-agent-modernization/5-Workflow-Integration-Streamlining.md +252 -0
  106. plans/completed/compaction-agent-modernization/6-Template-Structure-Optimization.md +240 -0
  107. plans/completed/compaction-agent-modernization/7-Integration-Testing-Validation.md +292 -0
  108. plans/completed/compaction-hook-enhancement/0-Overview.md +150 -0
  109. plans/completed/compaction-hook-enhancement/1-Token-Estimation-Enhancement.md +179 -0
  110. plans/completed/compaction-hook-enhancement/2-Compression-Intelligence.md +294 -0
  111. plans/completed/compaction-hook-enhancement/3-Git-Integration-Metadata.md +310 -0
  112. plans/completed/compaction-hook-enhancement/4-Session-Continuity-Features.md +358 -0
  113. plans/completed/compaction-hook-enhancement/5-Testing-Strategy.md +404 -0
  114. plans/completed/compaction-hook-enhancement/6-Integration-Roadmap.md +319 -0
  115. plans/completed/compaction-hook-enhancement/compacted_state.md +142 -0
  116. plans/completed/docstring-audit-enhancement/0-Overview.md +274 -0
  117. plans/completed/docstring-audit-enhancement/1-Infrastructure-Setup-and-Validation-Tools.md +206 -0
  118. plans/completed/docstring-audit-enhancement/2-Core-Physics-Modules-Enhancement.md +237 -0
  119. plans/completed/docstring-audit-enhancement/3-Fitfunctions-Mathematical-Modules-Enhancement.md +188 -0
  120. plans/completed/docstring-audit-enhancement/4-Plotting-Visualization-Modules-Enhancement.md +243 -0
  121. plans/completed/docstring-audit-enhancement/5-Specialized-Modules-Enhancement.md +216 -0
  122. plans/completed/docstring-audit-enhancement/6-Validation-and-Integration.md +216 -0
  123. plans/completed/fitfunctions-testing-implementation/0-Overview.md +130 -0
  124. plans/completed/fitfunctions-testing-implementation/1-Test-Infrastructure-Setup.md +79 -0
  125. plans/completed/fitfunctions-testing-implementation/2-Common-Fixtures-Test-Utilities.md +104 -0
  126. plans/completed/fitfunctions-testing-implementation/3-Core-FitFunction-Testing.md +168 -0
  127. plans/completed/fitfunctions-testing-implementation/4-Specialized-Function-Classes.md +210 -0
  128. plans/completed/fitfunctions-testing-implementation/5-Advanced-Classes-Testing.md +214 -0
  129. plans/completed/fitfunctions-testing-implementation/6-Plotting-Integration-Testing.md +231 -0
  130. plans/completed/fitfunctions-testing-implementation/7-Extended-Coverage-BONUS.md +184 -0
  131. plans/completed/numpy-docstring-conversion-plan/numpy-docstring-conversion-plan.md +118 -0
  132. plans/completed/pr-review-remediation/0-Overview.md +138 -0
  133. plans/completed/pr-review-remediation/1-Critical-Safety-Improvements.md +179 -0
  134. plans/completed/pr-review-remediation/2-Smart-Timeouts-Validation.md +399 -0
  135. plans/completed/pr-review-remediation/3-Enhanced-GitHub-Integration.md +258 -0
  136. plans/completed/pr-review-remediation/compacted_state.md +66 -0
  137. plans/completed/python-310-migration/0-Overview.md +390 -0
  138. plans/completed/python-310-migration/1-Planning-Setup.md +164 -0
  139. plans/completed/python-310-migration/2-Implementation.md +256 -0
  140. plans/completed/python-310-migration/3-Testing-Validation.md +335 -0
  141. plans/completed/python-310-migration/4-Documentation-Release.md +274 -0
  142. plans/completed/python-310-migration/5-Closeout.md +252 -0
  143. plans/completed/requirements-management-consolidation/0-Overview.md +118 -0
  144. plans/completed/requirements-management-consolidation/1-Documentation-Validation-Environment-Setup.md +116 -0
  145. plans/completed/requirements-management-consolidation/2-Requirements-Consolidation.md +161 -0
  146. plans/completed/requirements-management-consolidation/3-Workflow-Automation-Final-Integration.md +196 -0
  147. plans/completed/single-ecosystem-plan-implementation/0-Overview.md +83 -0
  148. plans/completed/single-ecosystem-plan-implementation/1-Plan-Preservation-Session-Management.md +38 -0
  149. plans/completed/single-ecosystem-plan-implementation/2-File-Structure-Optimization.md +43 -0
  150. plans/completed/single-ecosystem-plan-implementation/3-Plan-Migration-Archive-Setup.md +82 -0
  151. plans/completed/single-ecosystem-plan-implementation/4-Agent-System-Transformation.md +108 -0
  152. plans/completed/single-ecosystem-plan-implementation/5-Template-System-Enhancement.md +131 -0
  153. plans/completed/single-ecosystem-plan-implementation/6-Final-Validation-Testing.md +120 -0
  154. plans/completed/test-directory-consolidation/0-Overview.md +51 -0
  155. plans/completed/test-directory-consolidation/1-Structure-Preparation.md +82 -0
  156. plans/completed/test-directory-consolidation/2-File-Migration.md +100 -0
  157. plans/completed/test-directory-consolidation/3-Import-Transformation.md +117 -0
  158. plans/completed/test-directory-consolidation/4-Configuration-Consolidation.md +140 -0
  159. plans/completed/test-directory-consolidation/5-Validation.md +152 -0
  160. plans/completed/test-directory-consolidation/6-Cleanup.md +156 -0
  161. plans/completed/test-planning-agents-architecture/0-Overview.md +79 -0
  162. plans/completed/test-planning-agents-architecture/1-Branch-Isolation-Testing.md +49 -0
  163. plans/completed/test-planning-agents-architecture/2-Cross-Branch-Coordination.md +51 -0
  164. plans/completed/test-planning-agents-architecture/3-Merge-Workflow-Testing.md +48 -0
  165. plans/deployment-semver-pypi-rtd/0-Overview.md +463 -0
  166. plans/deployment-semver-pypi-rtd/1-Semantic-Versioning-Foundation.md +136 -0
  167. plans/deployment-semver-pypi-rtd/2-PyPI-Deployment-Infrastructure.md +168 -0
  168. plans/deployment-semver-pypi-rtd/3-Release-Automation.md +214 -0
  169. plans/deployment-semver-pypi-rtd/4-Plan-Closeout.md +543 -0
  170. plans/deployment-semver-pypi-rtd/compacted_session_state.md +172 -0
  171. plans/deployment-semver-pypi-rtd/compacted_state.md +131 -0
  172. plans/documentation-code-audit/0-Overview.md +393 -0
  173. plans/documentation-code-audit/1-Discovery-Inventory.md +183 -0
  174. plans/documentation-code-audit/2-Execution-Environment-Setup.md +263 -0
  175. plans/documentation-code-audit/3-Systematic-Validation.md +322 -0
  176. plans/documentation-code-audit/4-Code-Example-Remediation.md +358 -0
  177. plans/documentation-code-audit/5-Physics-MultiIndex-Compliance.md +464 -0
  178. plans/documentation-code-audit/6-Doctest-Integration.md +523 -0
  179. plans/documentation-code-audit/7-Reporting-Documentation.md +498 -0
  180. plans/documentation-code-audit/8-Closeout.md +456 -0
  181. plans/documentation-rebuild-session/compacted_state.md +109 -0
  182. plans/documentation-rendering-fixes/0-Overview.md +104 -0
  183. plans/documentation-rendering-fixes/1-Sphinx-Build-Diagnostics-Warning-Audit.md +101 -0
  184. plans/documentation-rendering-fixes/2-Configuration-Infrastructure-Fixes.md +113 -0
  185. plans/documentation-rendering-fixes/3-Docstring-Syntax-Audit-Repair.md +131 -0
  186. plans/documentation-rendering-fixes/4-HTML-Page-Rendering-Verification.md +113 -0
  187. plans/documentation-rendering-fixes/5-Advanced-Documentation-Quality-Assurance.md +119 -0
  188. plans/documentation-rendering-fixes/6-Documentation-Build-Optimization-Testing.md +129 -0
  189. plans/documentation-rendering-fixes/compacted_state.md +132 -0
  190. plans/documentation-template-fix/0-Overview.md +197 -0
  191. plans/documentation-template-fix/1-Template-System-Analysis.md +269 -0
  192. plans/documentation-template-fix/2-Template-Modification.md +609 -0
  193. plans/documentation-template-fix/3-Build-System-Integration.md +766 -0
  194. plans/documentation-template-fix/4-Testing-Validation.md +1399 -0
  195. plans/documentation-template-fix/5-Documentation-Training.md +602 -0
  196. plans/documentation-workflow-fix/0-Overview.md +222 -0
  197. plans/documentation-workflow-fix/1-Immediate-Fixes.md +238 -0
  198. plans/documentation-workflow-fix/2-Configuration-Setup.md +298 -0
  199. plans/documentation-workflow-fix/3-Pre-commit-Integration.md +382 -0
  200. plans/documentation-workflow-fix/4-Workflow-Improvements.md +446 -0
  201. plans/documentation-workflow-fix/5-Documentation-and-Training.md +527 -0
  202. plans/duplicate-object-warnings-fix-plan.md +130 -0
  203. plans/github-issues-migration/0-Overview.md +510 -0
  204. plans/github-issues-migration/1-Foundation-Label-System.md +180 -0
  205. plans/github-issues-migration/2-Migration-Tool-Rewrite.md +235 -0
  206. plans/github-issues-migration/3-CLI-Integration-Automation.md +169 -0
  207. plans/github-issues-migration/4-Validated-Migration.md +252 -0
  208. plans/github-issues-migration/5-Documentation-Training.md +171 -0
  209. plans/github-issues-migration/6-Closeout.md +179 -0
  210. plans/github-workflows-repair/repair-plan.md +299 -0
  211. plans/issues_from_plans.py +342 -0
  212. plans/pr-270-doc-validation-fixes/0-Overview.md +354 -0
  213. plans/pr-270-doc-validation-fixes/1-Critical-PR-Fixes.md +117 -0
  214. plans/pr-270-doc-validation-fixes/2-Framework-Right-Sizing.md +129 -0
  215. plans/pr-270-doc-validation-fixes/3-Sustainable-Documentation.md +126 -0
  216. plans/pr-270-doc-validation-fixes/4-Closeout-Migration.md +143 -0
  217. plans/pr-270-doc-validation-fixes/PLAN_COMPLETED.md +149 -0
  218. plans/python-310-migration/0-Overview.md +390 -0
  219. plans/python-310-migration/1-Planning-Setup.md +164 -0
  220. plans/python-310-migration/2-Implementation.md +256 -0
  221. plans/python-310-migration/3-Testing-Validation.md +335 -0
  222. plans/python-310-migration/4-Documentation-Release.md +274 -0
  223. plans/python-310-migration/5-Closeout.md +252 -0
  224. plans/readthedocs-simplified/0-Overview.md +243 -0
  225. plans/readthedocs-simplified/1-Immediate-Fixes.md +216 -0
  226. plans/readthedocs-simplified/2-Template-Simplification.md +278 -0
  227. plans/readthedocs-simplified/3-ReadTheDocs-Setup.md +298 -0
  228. plans/readthedocs-simplified/4-Testing-Validation.md +328 -0
  229. plans/readthedocs-simplified/5-Closeout.md +231 -0
  230. plans/readthedocs-simplified/compacted_state.md +127 -0
  231. plans/session-compaction-2025-08-12/compacted_state.md +114 -0
  232. plans/session-compaction-2025-08-13/compacted_state.md +145 -0
  233. plans/session-continuity-protocol/0-Overview.md +35 -0
  234. plans/session-continuity-protocol/1-Core-Principles-Framework.md +40 -0
  235. plans/session-continuity-protocol/2-Pre-Session-Validation-System.md +79 -0
  236. plans/session-continuity-protocol/3-Context-Switching-Prevention.md +87 -0
  237. plans/session-continuity-protocol/4-Progress-Tracking-Recovery.md +100 -0
  238. plans/sphinx-warnings-analysis.md +222 -0
  239. plans/systemprompt-optimization/0-Overview.md +447 -0
  240. plans/systemprompt-optimization/1-Deploy-SystemPrompt.md +114 -0
  241. plans/systemprompt-optimization/2-Documentation-Alignment.md +198 -0
  242. plans/systemprompt-optimization/3-Monitoring-Infrastructure.md +396 -0
  243. plans/systemprompt-optimization/4-Implementation-Script.md +450 -0
  244. plans/systemprompt-optimization/9-Closeout.md +165 -0
  245. plans/systemprompt-optimization/compacted_state.md +143 -0
  246. plans/template-value-propositions/0-Overview.md +357 -0
  247. plans/template-value-propositions/1-Value-Proposition-Framework-Design.md +144 -0
  248. plans/template-value-propositions/2-Plan-Template-Enhancement.md +178 -0
  249. plans/template-value-propositions/3-Value-Generator-Hook-Implementation.md +291 -0
  250. plans/template-value-propositions/4-Value-Validator-Hook-Implementation.md +274 -0
  251. plans/template-value-propositions/5-Documentation-Agent-Updates.md +219 -0
  252. plans/template-value-propositions/6-Integration-Testing-Validation.md +247 -0
  253. plans/tests-audit/0-Overview.md +410 -0
  254. plans/tests-audit/1-Discovery-Inventory.md +170 -0
  255. plans/tests-audit/2-Physics-Validation-Audit.md +195 -0
  256. plans/tests-audit/3-Architecture-Compliance.md +195 -0
  257. plans/tests-audit/4-Numerical-Stability-Analysis.md +203 -0
  258. plans/tests-audit/5-Documentation-Enhancement.md +220 -0
  259. plans/tests-audit/6-Audit-Deliverables.md +220 -0
  260. plans/tests-audit/7-Closeout.md +252 -0
  261. plans/tests-audit/artifacts/ARCHITECTURE_COMPLIANCE_REPORT.md +315 -0
  262. plans/tests-audit/artifacts/ARCHITECTURE_RECOMMENDATIONS.md +943 -0
  263. plans/tests-audit/artifacts/COMPREHENSIVE_AUDIT_REPORT.md +356 -0
  264. plans/tests-audit/artifacts/CONTRIBUTING_ENHANCED_TEMPLATE.md +419 -0
  265. plans/tests-audit/artifacts/COVERAGE_GAP_ANALYSIS.md +152 -0
  266. plans/tests-audit/artifacts/DOCUMENTATION_ENHANCEMENT_REPORT.md +502 -0
  267. plans/tests-audit/artifacts/EXECUTIVE_AUDIT_SUMMARY.md +129 -0
  268. plans/tests-audit/artifacts/IMPLEMENTATION_ROADMAP.md +647 -0
  269. plans/tests-audit/artifacts/NUMERICAL_RECOMMENDATIONS.md +739 -0
  270. plans/tests-audit/artifacts/NUMERICAL_STABILITY_GUIDE_TEMPLATE.rst +451 -0
  271. plans/tests-audit/artifacts/NUMERICAL_STABILITY_REPORT.md +301 -0
  272. plans/tests-audit/artifacts/PHASE_3_SUMMARY.md +280 -0
  273. plans/tests-audit/artifacts/PHASE_4_SUMMARY.md +229 -0
  274. plans/tests-audit/artifacts/PHASE_5_SUMMARY.md +292 -0
  275. plans/tests-audit/artifacts/PHASE_6_CLOSEOUT.md +278 -0
  276. plans/tests-audit/artifacts/PHYSICS_GUIDE_TEMPLATE.rst +268 -0
  277. plans/tests-audit/artifacts/PHYSICS_VALIDATION_REPORT.md +235 -0
  278. plans/tests-audit/artifacts/TECHNICAL_DELIVERABLES_PACKAGE.md +2502 -0
  279. plans/tests-audit/artifacts/TEST_INVENTORY.csv +1204 -0
  280. plans/tests-audit/artifacts/TEST_INVENTORY.md +135 -0
  281. plans/tests-audit/artifacts/test_discovery_analysis.py +231 -0
  282. plans/tests-audit/artifacts/test_parser.py +395 -0
  283. solarwindpy/README.md +3 -0
  284. solarwindpy/Untitled.ipynb +54 -0
  285. solarwindpy/__init__.py +74 -0
  286. solarwindpy/core/__init__.py +23 -0
  287. solarwindpy/core/alfvenic_turbulence.py +804 -0
  288. solarwindpy/core/base.py +267 -0
  289. solarwindpy/core/ions.py +309 -0
  290. solarwindpy/core/plasma.py +2133 -0
  291. solarwindpy/core/spacecraft.py +256 -0
  292. solarwindpy/core/tensor.py +90 -0
  293. solarwindpy/core/units_constants.py +199 -0
  294. solarwindpy/core/vector.py +328 -0
  295. solarwindpy/fitfunctions/__init__.py +20 -0
  296. solarwindpy/fitfunctions/core.py +734 -0
  297. solarwindpy/fitfunctions/exponentials.py +188 -0
  298. solarwindpy/fitfunctions/gaussians.py +264 -0
  299. solarwindpy/fitfunctions/lines.py +116 -0
  300. solarwindpy/fitfunctions/moyal.py +71 -0
  301. solarwindpy/fitfunctions/plots.py +751 -0
  302. solarwindpy/fitfunctions/power_laws.py +209 -0
  303. solarwindpy/fitfunctions/tex_info.py +568 -0
  304. solarwindpy/fitfunctions/trend_fits.py +482 -0
  305. solarwindpy/instabilities/__init__.py +16 -0
  306. solarwindpy/instabilities/beta_ani.py +82 -0
  307. solarwindpy/instabilities/verscharen2016.py +631 -0
  308. solarwindpy/plotting/__init__.py +33 -0
  309. solarwindpy/plotting/agg_plot.py +489 -0
  310. solarwindpy/plotting/base.py +465 -0
  311. solarwindpy/plotting/hist1d.py +405 -0
  312. solarwindpy/plotting/hist2d.py +1035 -0
  313. solarwindpy/plotting/histograms.py +1845 -0
  314. solarwindpy/plotting/labels/__init__.py +104 -0
  315. solarwindpy/plotting/labels/base.py +686 -0
  316. solarwindpy/plotting/labels/chemistry.py +19 -0
  317. solarwindpy/plotting/labels/composition.py +100 -0
  318. solarwindpy/plotting/labels/datetime.py +235 -0
  319. solarwindpy/plotting/labels/elemental_abundance.py +73 -0
  320. solarwindpy/plotting/labels/special.py +794 -0
  321. solarwindpy/plotting/orbits.py +515 -0
  322. solarwindpy/plotting/scatter.py +99 -0
  323. solarwindpy/plotting/select_data_from_figure.py +329 -0
  324. solarwindpy/plotting/spiral.py +980 -0
  325. solarwindpy/plotting/tools.py +434 -0
  326. solarwindpy/scripts/__init__.py +1 -0
  327. solarwindpy/scripts/logs/.gitignore +1 -0
  328. solarwindpy/solar_activity/__init__.py +53 -0
  329. solarwindpy/solar_activity/base.py +605 -0
  330. solarwindpy/solar_activity/lisird/__init__.py +3 -0
  331. solarwindpy/solar_activity/lisird/extrema_calculator.py +394 -0
  332. solarwindpy/solar_activity/lisird/lisird.py +319 -0
  333. solarwindpy/solar_activity/plots.py +116 -0
  334. solarwindpy/solar_activity/sunspot_number/.DS_Store +0 -0
  335. solarwindpy/solar_activity/sunspot_number/__init__.py +3 -0
  336. solarwindpy/solar_activity/sunspot_number/sidc.py +556 -0
  337. solarwindpy/solar_activity/sunspot_number/ssn_extrema.csv +72 -0
  338. solarwindpy/solar_activity/sunspot_number/ssn_extrema.csv.silso +72 -0
  339. solarwindpy/tools/__init__.py +162 -0
  340. solarwindpy-0.1.1.dist-info/METADATA +181 -0
  341. solarwindpy-0.1.1.dist-info/RECORD +409 -0
  342. {solarwindpy-0.0.1.dev0.dist-info → solarwindpy-0.1.1.dist-info}/WHEEL +1 -1
  343. solarwindpy-0.1.1.dist-info/licenses/LICENSE.rst +32 -0
  344. solarwindpy-0.1.1.dist-info/top_level.txt +3 -0
  345. tests/__init__.py +1 -0
  346. tests/conftest.py +10 -0
  347. tests/core/__init__.py +1 -0
  348. tests/core/test_alfvenic_turbulence.py +544 -0
  349. tests/core/test_base.py +112 -0
  350. tests/core/test_base_head_tail.py +29 -0
  351. tests/core/test_base_mi_tuples.py +11 -0
  352. tests/core/test_core_verify_datetimeindex.py +32 -0
  353. tests/core/test_ions.py +325 -0
  354. tests/core/test_plasma.py +2581 -0
  355. tests/core/test_plasma_io.py +12 -0
  356. tests/core/test_quantities.py +507 -0
  357. tests/core/test_spacecraft.py +210 -0
  358. tests/core/test_units_constants.py +22 -0
  359. tests/data/epoch.csv +4 -0
  360. tests/data/plasma.csv +4 -0
  361. tests/data/spacecraft.csv +4 -0
  362. tests/fitfunctions/conftest.py +60 -0
  363. tests/fitfunctions/test_core.py +193 -0
  364. tests/fitfunctions/test_exponentials.py +342 -0
  365. tests/fitfunctions/test_gaussians.py +142 -0
  366. tests/fitfunctions/test_lines.py +349 -0
  367. tests/fitfunctions/test_moyal.py +258 -0
  368. tests/fitfunctions/test_plots.py +258 -0
  369. tests/fitfunctions/test_power_laws.py +365 -0
  370. tests/fitfunctions/test_tex_info.py +183 -0
  371. tests/fitfunctions/test_trend_fit_properties.py +31 -0
  372. tests/fitfunctions/test_trend_fits.py +244 -0
  373. tests/plotting/__init__.py +1 -0
  374. tests/plotting/labels/__init__.py +1 -0
  375. tests/plotting/labels/test_chemistry.py +243 -0
  376. tests/plotting/labels/test_composition.py +345 -0
  377. tests/plotting/labels/test_datetime.py +445 -0
  378. tests/plotting/labels/test_elemental_abundance.py +366 -0
  379. tests/plotting/labels/test_init.py +66 -0
  380. tests/plotting/labels/test_labels_base.py +347 -0
  381. tests/plotting/labels/test_special.py +550 -0
  382. tests/plotting/test_agg_plot.py +602 -0
  383. tests/plotting/test_base.py +752 -0
  384. tests/plotting/test_fixtures_utilities.py +775 -0
  385. tests/plotting/test_histograms.py +546 -0
  386. tests/plotting/test_integration.py +675 -0
  387. tests/plotting/test_orbits.py +435 -0
  388. tests/plotting/test_performance.py +708 -0
  389. tests/plotting/test_scatter.py +752 -0
  390. tests/plotting/test_select_data_from_figure.py +1209 -0
  391. tests/plotting/test_spiral.py +573 -0
  392. tests/plotting/test_tools.py +607 -0
  393. tests/plotting/test_visual_validation.py +465 -0
  394. tests/solar_activity/__init__.py +1 -0
  395. tests/solar_activity/lisird/__init__.py +1 -0
  396. tests/solar_activity/lisird/test_extrema_calculator.py +593 -0
  397. tests/solar_activity/lisird/test_lisird_id.py +187 -0
  398. tests/solar_activity/sunspot_number/__init__.py +1 -0
  399. tests/solar_activity/sunspot_number/test_init.py +399 -0
  400. tests/solar_activity/sunspot_number/test_sidc.py +465 -0
  401. tests/solar_activity/sunspot_number/test_sidc_id.py +223 -0
  402. tests/solar_activity/sunspot_number/test_sidc_loader.py +275 -0
  403. tests/solar_activity/sunspot_number/test_ssn_extrema.py +406 -0
  404. tests/solar_activity/test_base.py +656 -0
  405. tests/solar_activity/test_init.py +396 -0
  406. tests/solar_activity/test_plots.py +371 -0
  407. tests/test_circular_imports.py +408 -0
  408. tests/test_issue_titles.py +25 -0
  409. tests/test_statusline.py +298 -0
  410. solarwindpy-0.0.1.dev0.dist-info/METADATA +0 -14
  411. solarwindpy-0.0.1.dev0.dist-info/RECORD +0 -4
  412. solarwindpy-0.0.1.dev0.dist-info/top_level.txt +0 -1
@@ -0,0 +1,465 @@
1
+ #!/usr/bin/env python
2
+ r"""Base classes for plotting utilities.
3
+
4
+ This module defines abstract helpers that manage axis labels, log scaling, and file
5
+ system paths for saving figures. Concrete plot classes derive from these mixins to
6
+ implement specific visualizations.
7
+ """
8
+
9
+ import pdb # noqa: F401
10
+ import logging
11
+ import pandas as pd
12
+
13
+ from pathlib import Path
14
+ from collections import namedtuple
15
+ from abc import ABC, abstractmethod
16
+
17
+ LogAxes = namedtuple("LogAxes", "x,y", defaults=(False,))
18
+ AxesLabels = namedtuple("AxesLabels", "x,y,z", defaults=(None,))
19
+ RangeLimits = namedtuple("RangeLimits", "lower,upper", defaults=(None,))
20
+
21
+
22
+ class Base(ABC):
23
+ r"""ABC for core plot tools.
24
+
25
+ Attributes
26
+ ----------
27
+
28
+ Methods
29
+ -------
30
+ """
31
+
32
+ @abstractmethod
33
+ def __init__(self):
34
+ self._init_logger()
35
+ self._labels = AxesLabels(x="x", y="y")
36
+ self._log = LogAxes(x=False)
37
+ self.set_path("auto")
38
+
39
+ def __str__(self):
40
+ return self.__class__.__name__
41
+
42
+ @property
43
+ def logger(self):
44
+ return self._logger
45
+
46
+ def _init_logger(self):
47
+ # return None
48
+ logger = logging.getLogger("{}.{}".format(__name__, self.__class__.__name__))
49
+ self._logger = logger
50
+
51
+ # # Old version that cuts at percentiles.
52
+ # @staticmethod
53
+ # def clip_data(data, clip):
54
+ # q0 = 0.0001
55
+ # q1 = 0.9999
56
+ # pct = data.quantile([q0, q1])
57
+ # lo = pct.loc[q0]
58
+ # up = pct.loc[q1]
59
+
60
+ # if isinstance(data, pd.Series):
61
+ # ax = 0
62
+ # elif isinstance(data, pd.DataFrame):
63
+ # ax = 1
64
+ # else:
65
+ # raise TypeError("Unexpected object %s" % type(data))
66
+
67
+ # if isinstance(clip, str) and clip.lower()[0] == "l":
68
+ # data = data.clip_lower(lo, axis=ax)
69
+ # elif isinstance(clip, str) and clip.lower()[0] == "u":
70
+ # data = data.clip_upper(up, axis=ax)
71
+ # else:
72
+ # data = data.clip(lo, up, axis=ax)
73
+ # return data
74
+
75
+ # # New version that uses binning to cut.
76
+ # # @staticmethod
77
+ # # def clip_data(data, bins, clip):
78
+ # # q0 = 0.001
79
+ # # q1 = 0.999
80
+ # # pct = data.quantile([q0, q1])
81
+ # # lo = pct.loc[q0]
82
+ # # up = pct.loc[q1]
83
+ # # lo = bins.iloc[0]
84
+ # # up = bins.iloc[-1]
85
+ # # if isinstance(clip, str) and clip.lower()[0] == "l":
86
+ # # data = data.clip_lower(lo)
87
+ # # elif isinstance(clip, str) and clip.lower()[0] == "u":
88
+ # # data = data.clip_upper(up)
89
+ # # else:
90
+ # # data = data.clip(lo, up)
91
+ # # return data
92
+
93
+ @property
94
+ def data(self):
95
+ return self._data
96
+
97
+ @property
98
+ def clip(self):
99
+ return self._clip
100
+
101
+ @property
102
+ def log(self):
103
+ return self._log
104
+
105
+ @property
106
+ def labels(self):
107
+ return self._labels
108
+
109
+ @property
110
+ def path(self):
111
+ r"""Path for saving figure."""
112
+ return self._path
113
+
114
+ def set_log(self, x=None, y=None):
115
+ if x is None:
116
+ x = self.log.x
117
+ if y is None:
118
+ y = self.log.y
119
+
120
+ log = LogAxes(bool(x), bool(y))
121
+ self._log = log
122
+
123
+ def set_labels(self, **kwargs):
124
+ r"""Set or update x, y, or z labels. Any label not specified in kwargs.
125
+
126
+ is propagated from `self.labels.<x, y, or z>`.
127
+ """
128
+ auto_update_path = kwargs.pop("auto_update_path", True)
129
+
130
+ x = kwargs.pop("x", self.labels.x)
131
+ y = kwargs.pop("y", self.labels.y)
132
+ z = kwargs.pop("z", self.labels.z)
133
+
134
+ if len(kwargs.keys()):
135
+ extra = "\n".join(["{}: {}".format(k, v) for k, v in kwargs.items()])
136
+ raise KeyError("Unexpected kwarg\n{}".format(extra))
137
+
138
+ self._labels = AxesLabels(x, y, z)
139
+
140
+ if auto_update_path:
141
+ self.set_path("auto")
142
+
143
+ @abstractmethod
144
+ def set_path(self, new, add_scale=False):
145
+ r"""Build the plot save path.
146
+
147
+ Parameters
148
+ ----------
149
+ new: str or Path
150
+ If str and == "auto", then build path from `self.labels`. Otherwise,
151
+ assume parameter specifies the desired path and use `Path(new)`.
152
+ add_scale: bool
153
+ If True, add information about the axis scales to the end of the path.
154
+ """
155
+ # TODO: move "auto" methods here to iterate through `AxesLabels` named tuple
156
+ # and pull the strings for creating the path. Also check for each
157
+ # label's scale and add that information.
158
+
159
+ if new == "auto":
160
+ try:
161
+ x = self.labels.x.path
162
+ except AttributeError:
163
+ x = self.labels.x
164
+ if not (isinstance(x, str) and x != "None"):
165
+ x = "x"
166
+ elif isinstance(x, str):
167
+ x = x.replace(" ", "-")
168
+
169
+ try:
170
+ y = self.labels.y.path
171
+ except AttributeError:
172
+ y = self.labels.y
173
+ if not (isinstance(y, str) and y != "None"):
174
+ y = "y"
175
+ elif isinstance(y, str):
176
+ y = y.replace(" ", "-")
177
+
178
+ try:
179
+ z = self.labels.z.path
180
+ except AttributeError:
181
+ z = self.labels.z
182
+ if not (isinstance(z, str) and z != "None"):
183
+ z = "z"
184
+ elif isinstance(z, str):
185
+ z = z.replace(" ", "-")
186
+
187
+ path = Path(self.__class__.__name__)
188
+
189
+ elif new is None:
190
+ path = Path("")
191
+ x = y = z = None
192
+
193
+ else:
194
+ path = Path(new)
195
+ x = y = z = None
196
+
197
+ scale_info = None
198
+ if add_scale:
199
+ xscale = "logX" if self.log.x else "linX"
200
+ yscale = "logY" if self.log.y else "linY"
201
+ scale_info = [xscale, yscale]
202
+
203
+ return path, x, y, z, scale_info
204
+
205
+ def _add_axis_labels(self, ax, transpose_axes=False):
206
+ xlbl = self.labels.x
207
+ ylbl = self.labels.y
208
+
209
+ if transpose_axes:
210
+ xlbl, ylbl = ylbl, xlbl
211
+
212
+ if xlbl is not None:
213
+ ax.set_xlabel(xlbl)
214
+
215
+ if ylbl is not None:
216
+ ax.set_ylabel(ylbl)
217
+
218
+ def _set_axis_scale(self, ax, transpose_axes=False):
219
+ logx = self.log.x
220
+ logy = self.log.y
221
+
222
+ if transpose_axes:
223
+ logx, logy = logy, logx
224
+
225
+ if logx:
226
+ ax.set_xscale("log")
227
+ if logy:
228
+ ax.set_yscale("log")
229
+
230
+ def _format_axis(self, ax, transpose_axes=False):
231
+ self._add_axis_labels(ax, transpose_axes=transpose_axes)
232
+ self._set_axis_scale(ax, transpose_axes=transpose_axes)
233
+ ax.grid(True, which="major", axis="both")
234
+ ax.tick_params(axis="both", which="both", direction="inout")
235
+
236
+ # x = self.data.loc[:, "x"]
237
+ # minx, maxx = x.min(), x.max()
238
+ # if self.log.x:
239
+ # minx, maxx = 10.0**np.array([minx, maxx])
240
+
241
+ # y = self.data.loc[:, "y"]
242
+ # miny, maxy = y.min(), y.max()
243
+ # if self.log.y:
244
+ # minx, maxx = 10.0**np.array([miny, maxy])
245
+
246
+ # # `pulled from the end of `ax.pcolormesh`.
247
+ # collection.sticky_edges.x[:] = [minx, maxx]
248
+ # collection.sticky_edges.y[:] = [miny, maxy]
249
+ # corners = (minx, miny), (maxx, maxy)
250
+ # self.update_datalim(corners)
251
+ # self.autoscale_view()
252
+
253
+ @abstractmethod
254
+ def set_data(self):
255
+ pass
256
+
257
+ @abstractmethod
258
+ def make_plot(self):
259
+ pass
260
+
261
+
262
+ class DataLimFormatter(ABC):
263
+ def _format_axis(self, ax, collection, **kwargs):
264
+ super()._format_axis(ax, **kwargs)
265
+
266
+ x = self.data.loc[:, "x"]
267
+ minx, maxx = x.min(), x.max()
268
+
269
+ y = self.data.loc[:, "y"]
270
+ miny, maxy = y.min(), y.max()
271
+
272
+ # `pulled from the end of `ax.pcolormesh`.
273
+ collection.sticky_edges.x[:] = [minx, maxx]
274
+ collection.sticky_edges.y[:] = [miny, maxy]
275
+ corners = (minx, miny), (maxx, maxy)
276
+ ax.update_datalim(corners)
277
+ ax.autoscale_view()
278
+
279
+
280
+ class CbarMaker(ABC):
281
+ def _make_cbar(self, mappable, **kwargs):
282
+ """Make a colorbar on `ax` using `mappable`.
283
+
284
+ Parameters
285
+ ----------
286
+ mappable:
287
+ See `figure.colorbar` kwarg of same name.
288
+ ax: mpl.axis.Axis
289
+ See `figure.colorbar` kwarg of same name.
290
+ norm: mpl.colors.Normalize instance
291
+ The normalization used in the plot. Passed here to determine
292
+ y-ticks.
293
+ kwargs:
294
+ Passed to `fig.colorbar`. If `{self.__class__.__name__}` is
295
+ row or column normalized, `ticks` defaults to
296
+ :py:class:`mpl.ticker.MultipleLocator(0.1)`.
297
+ """
298
+ ax = kwargs.pop("ax", None)
299
+ cax = kwargs.pop("cax", None)
300
+ if ax is not None and cax is not None:
301
+ raise ValueError("Can't pass ax and cax.")
302
+
303
+ if ax is not None:
304
+ try:
305
+ fig = ax.figure
306
+ except AttributeError:
307
+ fig = ax[0].figure
308
+ elif cax is not None:
309
+ try:
310
+ fig = cax.figure
311
+ except AttributeError:
312
+ fig = cax[0].figure
313
+ else:
314
+ raise ValueError(
315
+ "You must pass `ax` or `cax`. We don't want to rely on `plt.gca()`."
316
+ )
317
+
318
+ label = kwargs.pop("label", self.labels.z)
319
+ cbar = fig.colorbar(mappable, label=label, ax=ax, cax=cax, **kwargs)
320
+
321
+ return cbar
322
+
323
+
324
+ class PlotWithZdata(Base):
325
+ def set_data(self, x, y, z=None, clip_data=False):
326
+ data = pd.DataFrame({"x": x, "y": y})
327
+
328
+ if z is None:
329
+ z = pd.Series(1, index=data.index)
330
+
331
+ data.loc[:, "z"] = z
332
+ data = data.dropna()
333
+ if not data.shape[0]:
334
+ raise ValueError(
335
+ "You can't build a %s with data that is exclusively NaNs"
336
+ % self.__class__.__name__
337
+ )
338
+ self._data = data
339
+ self._clip = bool(clip_data)
340
+
341
+ def set_path(self, new, add_scale=True):
342
+ # Bug: path doesn't auto-set log information.
343
+ path, x, y, z, scale_info = super().set_path(new, add_scale)
344
+
345
+ if new == "auto":
346
+ path = path / x / y / z
347
+
348
+ else:
349
+ assert x is None
350
+ assert y is None
351
+ assert z is None
352
+
353
+ if add_scale:
354
+ assert scale_info is not None
355
+
356
+ scale_info = "-".join(scale_info)
357
+
358
+ if bool(len(path.parts)) and path.parts[-1].endswith("norm"):
359
+ # Insert <norm> at end of path so scale order is (x, y, z).
360
+ path = path.parts
361
+ path = path[:-1] + (scale_info + "-" + path[-1],)
362
+ path = Path(*path)
363
+ else:
364
+ path = path / scale_info
365
+
366
+ self._path = path
367
+
368
+ set_path.__doc__ = Base.set_path.__doc__
369
+
370
+ def set_labels(self, **kwargs):
371
+ z = kwargs.pop("z", self.labels.z)
372
+ super().set_labels(z=z, **kwargs)
373
+
374
+
375
+ # class Plot2D(CbarMaker, Base):
376
+ # def set_data(self, x, y, z=None, clip_data=False):
377
+ # data = pd.DataFrame({"x": x, "y": y})
378
+
379
+ # if z is None:
380
+ # z = pd.Series(1, index=data.index)
381
+
382
+ # data.loc[:, "z"] = z
383
+ # data = data.dropna()
384
+ # if not data.shape[0]:
385
+ # raise ValueError(
386
+ # "You can't build a %s with data that is exclusively NaNs"
387
+ # % self.__class__.__name__
388
+ # )
389
+ # self._data = data
390
+ # self._clip = bool(clip_data)
391
+
392
+ # def set_path(self, new, add_scale=True):
393
+ # # Bug: path doesn't auto-set log information.
394
+ # path, x, y, z, scale_info = super().set_path(new, add_scale)
395
+
396
+ # if new == "auto":
397
+ # path = path / x / y / z
398
+
399
+ # else:
400
+ # assert x is None
401
+ # assert y is None
402
+ # assert z is None
403
+
404
+ # if add_scale:
405
+ # assert scale_info is not None
406
+
407
+ # scale_info = "-".join(scale_info)
408
+
409
+ # if bool(len(path.parts)) and path.parts[-1].endswith("norm"):
410
+ # # Insert <norm> at end of path so scale order is (x, y, z).
411
+ # path = path.parts
412
+ # path = path[:-1] + (scale_info + "-" + path[-1],)
413
+ # path = Path(*path)
414
+ # else:
415
+ # path = path / scale_info
416
+
417
+ # self._path = path
418
+
419
+ # set_path.__doc__ = Base.set_path.__doc__
420
+
421
+ # def set_labels(self, **kwargs):
422
+ # z = kwargs.pop("z", self.labels.z)
423
+ # super().set_labels(z=z, **kwargs)
424
+
425
+ # # def _make_cbar(self, mappable, **kwargs):
426
+ # # f"""Make a colorbar on `ax` using `mappable`.
427
+
428
+ # # Parameters
429
+ # # ----------
430
+ # # mappable:
431
+ # # See `figure.colorbar` kwarg of same name.
432
+ # # ax: mpl.axis.Axis
433
+ # # See `figure.colorbar` kwarg of same name.
434
+ # # norm: mpl.colors.Normalize instance
435
+ # # The normalization used in the plot. Passed here to determine
436
+ # # y-ticks.
437
+ # # kwargs:
438
+ # # Passed to `fig.colorbar`. If `{self.__class__.__name__}` is
439
+ # # row or column normalized, `ticks` defaults to
440
+ # # :py:class:`mpl.ticker.MultipleLocator(0.1)`.
441
+ # # """
442
+ # # ax = kwargs.pop("ax", None)
443
+ # # cax = kwargs.pop("cax", None)
444
+ # # if ax is not None and cax is not None:
445
+ # # raise ValueError("Can't pass ax and cax.")
446
+
447
+ # # if ax is not None:
448
+ # # try:
449
+ # # fig = ax.figure
450
+ # # except AttributeError:
451
+ # # fig = ax[0].figure
452
+ # # elif cax is not None:
453
+ # # try:
454
+ # # fig = cax.figure
455
+ # # except AttributeError:
456
+ # # fig = cax[0].figure
457
+ # # else:
458
+ # # raise ValueError(
459
+ # # "You must pass `ax` or `cax`. We don't want to rely on `plt.gca()`."
460
+ # # )
461
+
462
+ # # label = kwargs.pop("label", self.labels.z)
463
+ # # cbar = fig.colorbar(mappable, label=label, ax=ax, cax=cax, **kwargs)
464
+
465
+ # # return cbar