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,408 @@
1
+ """Test module for circular import detection and validation.
2
+
3
+ This module contains comprehensive tests to validate that the SolarWindPy package has no
4
+ circular import dependencies and that all modules can be imported successfully in
5
+ various orders and scenarios.
6
+ """
7
+
8
+ import sys
9
+ import importlib
10
+ import pytest
11
+ import gc
12
+ from pathlib import Path
13
+ from typing import List, Dict, Set
14
+ import time
15
+
16
+ # Add the parent directory to allow importing our analysis tools
17
+ PROJECT_ROOT = Path(__file__).parent.parent.parent
18
+ sys.path.insert(0, str(PROJECT_ROOT))
19
+
20
+ try:
21
+ from scripts.analyze_imports_fixed import DependencyAnalyzer
22
+ from scripts.test_dynamic_imports import DynamicImportTester
23
+ except ImportError as e:
24
+ pytest.skip(f"Could not import analysis tools: {e}", allow_module_level=True)
25
+
26
+
27
+ class TestCircularImports:
28
+ """Test class for circular import validation."""
29
+
30
+ @classmethod
31
+ def setup_class(cls):
32
+ """Set up test class with module discovery."""
33
+ cls.package_root = PROJECT_ROOT / "solarwindpy"
34
+ cls.package_name = "solarwindpy"
35
+
36
+ # Discover all modules
37
+ cls.all_modules = cls._discover_modules()
38
+
39
+ # Key modules that should be tested more thoroughly
40
+ cls.key_modules = [
41
+ "solarwindpy",
42
+ "solarwindpy.core",
43
+ "solarwindpy.core.base",
44
+ "solarwindpy.core.plasma",
45
+ "solarwindpy.plotting",
46
+ "solarwindpy.fitfunctions",
47
+ "solarwindpy.solar_activity",
48
+ ]
49
+
50
+ @classmethod
51
+ def _discover_modules(cls) -> List[str]:
52
+ """Discover all importable modules in the package."""
53
+ modules = []
54
+
55
+ for py_file in cls.package_root.rglob("*.py"):
56
+ if (
57
+ "/tests/" in str(py_file)
58
+ or py_file.name.startswith("test_")
59
+ or "/__pycache__/" in str(py_file)
60
+ ):
61
+ continue
62
+
63
+ rel_path = py_file.relative_to(cls.package_root)
64
+ parts = list(rel_path.with_suffix("").parts)
65
+
66
+ if parts[-1] == "__init__":
67
+ parts = parts[:-1]
68
+
69
+ if parts:
70
+ module_name = f"{cls.package_name}.{'.'.join(parts)}"
71
+ else:
72
+ module_name = cls.package_name
73
+
74
+ modules.append(module_name)
75
+
76
+ return sorted(modules)
77
+
78
+ def _clean_modules(self):
79
+ """Clean imported modules for test isolation."""
80
+ modules_to_remove = [m for m in sys.modules if m.startswith(self.package_name)]
81
+ for module in modules_to_remove:
82
+ if module in sys.modules:
83
+ del sys.modules[module]
84
+ gc.collect()
85
+
86
+ def test_static_dependency_analysis(self):
87
+ """Test that static analysis finds no circular dependencies."""
88
+ analyzer = DependencyAnalyzer(str(self.package_root))
89
+ analyzer.scan_package()
90
+ analyzer.build_dependency_graph()
91
+
92
+ cycles = analyzer.find_circular_dependencies_dfs()
93
+
94
+ assert len(cycles) == 0, (
95
+ f"Static analysis found {len(cycles)} circular dependency cycles: "
96
+ f"{[' -> '.join(cycle + [cycle[0]]) for cycle in cycles]}"
97
+ )
98
+
99
+ def test_individual_module_imports(self):
100
+ """Test that each module can be imported individually."""
101
+ failed_imports = []
102
+
103
+ for module_name in self.all_modules:
104
+ self._clean_modules()
105
+
106
+ try:
107
+ importlib.import_module(module_name)
108
+ except ImportError as e:
109
+ if (
110
+ "circular" in str(e).lower()
111
+ or "cannot import name" in str(e).lower()
112
+ ):
113
+ failed_imports.append(f"{module_name}: {str(e)}")
114
+ else:
115
+ # Other import errors might be acceptable (missing dependencies, etc.)
116
+ pass
117
+ except Exception as e:
118
+ # Unexpected errors should be investigated but not necessarily fail the test
119
+ pass
120
+
121
+ assert len(failed_imports) == 0, (
122
+ f"Found circular import errors in individual module imports: "
123
+ f"{failed_imports}"
124
+ )
125
+
126
+ def test_key_module_imports(self):
127
+ """Test that key modules can be imported without circular import errors."""
128
+ circular_imports = []
129
+
130
+ for module_name in self.key_modules:
131
+ self._clean_modules()
132
+
133
+ try:
134
+ importlib.import_module(module_name)
135
+ except ImportError as e:
136
+ if (
137
+ "circular" in str(e).lower()
138
+ or "cannot import name" in str(e).lower()
139
+ ):
140
+ circular_imports.append(f"{module_name}: {str(e)}")
141
+ except Exception:
142
+ # Other exceptions are not circular import issues
143
+ pass
144
+
145
+ assert (
146
+ len(circular_imports) == 0
147
+ ), f"Circular imports detected in key modules: {circular_imports}"
148
+
149
+ def test_import_order_independence(self):
150
+ """Test that import order doesn't cause circular import issues."""
151
+ import_orders = [
152
+ sorted(self.key_modules), # alphabetical
153
+ sorted(self.key_modules, reverse=True), # reverse alphabetical
154
+ # Base modules first
155
+ [m for m in self.key_modules if "base" in m or "__init__" in m]
156
+ + [m for m in self.key_modules if "base" not in m and "__init__" not in m],
157
+ ]
158
+
159
+ for i, order in enumerate(import_orders):
160
+ self._clean_modules()
161
+
162
+ circular_imports = []
163
+ for module_name in order:
164
+ try:
165
+ importlib.import_module(module_name)
166
+ except ImportError as e:
167
+ if (
168
+ "circular" in str(e).lower()
169
+ or "cannot import name" in str(e).lower()
170
+ ):
171
+ circular_imports.append(f"{module_name}: {str(e)}")
172
+ except Exception:
173
+ # Other errors are not our concern for this test
174
+ pass
175
+
176
+ assert (
177
+ len(circular_imports) == 0
178
+ ), f"Import order {i+1} caused circular import errors: {circular_imports}"
179
+
180
+ def test_cross_module_import_scenarios(self):
181
+ """Test various cross-module import scenarios."""
182
+ # Test pairs of related modules
183
+ module_pairs = [
184
+ ("solarwindpy.core", "solarwindpy.plotting"),
185
+ ("solarwindpy.core.base", "solarwindpy.core.plasma"),
186
+ ("solarwindpy.fitfunctions", "solarwindpy.plotting"),
187
+ ("solarwindpy", "solarwindpy.core"),
188
+ ]
189
+
190
+ for first_module, second_module in module_pairs:
191
+ if (
192
+ first_module not in self.all_modules
193
+ or second_module not in self.all_modules
194
+ ):
195
+ continue
196
+
197
+ # Test importing first, then second
198
+ self._clean_modules()
199
+ circular_imports = []
200
+
201
+ try:
202
+ importlib.import_module(first_module)
203
+ importlib.import_module(second_module)
204
+ except ImportError as e:
205
+ if (
206
+ "circular" in str(e).lower()
207
+ or "cannot import name" in str(e).lower()
208
+ ):
209
+ circular_imports.append(
210
+ f"{first_module} -> {second_module}: {str(e)}"
211
+ )
212
+
213
+ # Test importing second, then first
214
+ self._clean_modules()
215
+
216
+ try:
217
+ importlib.import_module(second_module)
218
+ importlib.import_module(first_module)
219
+ except ImportError as e:
220
+ if (
221
+ "circular" in str(e).lower()
222
+ or "cannot import name" in str(e).lower()
223
+ ):
224
+ circular_imports.append(
225
+ f"{second_module} -> {first_module}: {str(e)}"
226
+ )
227
+
228
+ assert len(circular_imports) == 0, (
229
+ f"Cross-module import scenarios failed for {first_module} and {second_module}: "
230
+ f"{circular_imports}"
231
+ )
232
+
233
+ def test_main_package_import(self):
234
+ """Test that the main package can be imported without circular imports."""
235
+ self._clean_modules()
236
+
237
+ try:
238
+ import solarwindpy # noqa: F401
239
+ except ImportError as e:
240
+ if "circular" in str(e).lower() or "cannot import name" in str(e).lower():
241
+ pytest.fail(f"Main package import has circular import: {e}")
242
+
243
+ def test_public_api_imports(self):
244
+ """Test that public API imports work without circular imports."""
245
+ self._clean_modules()
246
+
247
+ # Test common public API usage patterns
248
+ api_imports = [
249
+ "from solarwindpy import Plasma",
250
+ "from solarwindpy.core import Base",
251
+ "from solarwindpy.plotting import histograms",
252
+ "import solarwindpy.core as swp_core",
253
+ "import solarwindpy.plotting as swp_plotting",
254
+ ]
255
+
256
+ circular_import_errors = []
257
+
258
+ for import_statement in api_imports:
259
+ self._clean_modules()
260
+
261
+ try:
262
+ exec(import_statement)
263
+ except ImportError as e:
264
+ if (
265
+ "circular" in str(e).lower()
266
+ or "cannot import name" in str(e).lower()
267
+ ):
268
+ circular_import_errors.append(f"{import_statement}: {str(e)}")
269
+ except Exception:
270
+ # Other errors are not circular import issues
271
+ pass
272
+
273
+ assert (
274
+ len(circular_import_errors) == 0
275
+ ), f"Public API imports have circular import errors: {circular_import_errors}"
276
+
277
+ def test_dynamic_import_comprehensive(self):
278
+ """Run comprehensive dynamic import test."""
279
+ # Skip if dynamic tester not available
280
+ try:
281
+ tester = DynamicImportTester(str(self.package_root))
282
+ except Exception:
283
+ pytest.skip("Dynamic import tester not available")
284
+
285
+ # Run a subset of dynamic tests for performance
286
+ modules_to_test = (
287
+ self.key_modules
288
+ + [
289
+ m
290
+ for m in self.all_modules
291
+ if any(key in m for key in ["core", "plotting", "fitfunctions"])
292
+ ][:15]
293
+ ) # Limit for test performance
294
+
295
+ circular_imports = []
296
+
297
+ for module_name in modules_to_test:
298
+ result = tester.test_individual_import(module_name)
299
+ if result["circular_import"]:
300
+ circular_imports.append(f"{module_name}: {result['error']}")
301
+
302
+ assert (
303
+ len(circular_imports) == 0
304
+ ), f"Dynamic import testing found circular imports: {circular_imports}"
305
+
306
+ def test_import_time_performance(self):
307
+ """Test that imports complete in reasonable time (may indicate circular
308
+ issues)."""
309
+ import_times = {}
310
+ slow_imports = []
311
+
312
+ for module_name in self.key_modules:
313
+ self._clean_modules()
314
+
315
+ start_time = time.time()
316
+ try:
317
+ importlib.import_module(module_name)
318
+ import_time = time.time() - start_time
319
+ import_times[module_name] = import_time
320
+
321
+ # Flag imports taking longer than 5 seconds as potentially problematic
322
+ if import_time > 5.0:
323
+ slow_imports.append(f"{module_name}: {import_time:.2f}s")
324
+
325
+ except ImportError as e:
326
+ if "circular" in str(e).lower():
327
+ pytest.fail(
328
+ f"Circular import in performance test for {module_name}: {e}"
329
+ )
330
+
331
+ # This is more of a warning than a failure - slow imports might indicate issues
332
+ if slow_imports:
333
+ pytest.warns(UserWarning, match="Slow imports detected")
334
+ import warnings
335
+
336
+ warnings.warn(
337
+ f"Slow imports detected (possible circular import indicators): {slow_imports}"
338
+ )
339
+
340
+
341
+ class TestImportStructure:
342
+ """Test the overall import structure health."""
343
+
344
+ @classmethod
345
+ def setup_class(cls):
346
+ """Set up test class."""
347
+ cls.package_root = PROJECT_ROOT / "solarwindpy"
348
+
349
+ def test_no_wildcard_imports_in_init(self):
350
+ """Test that __init__.py files don't use wildcard imports (which can hide
351
+ circular imports)."""
352
+ init_files = list(self.package_root.rglob("__init__.py"))
353
+ wildcard_imports = []
354
+
355
+ for init_file in init_files:
356
+ with open(init_file, "r", encoding="utf-8") as f:
357
+ content = f.read()
358
+
359
+ # Look for wildcard imports
360
+ if "from * import" in content or "import *" in content:
361
+ wildcard_imports.append(str(init_file.relative_to(self.package_root)))
362
+
363
+ assert len(wildcard_imports) == 0, (
364
+ f"Found wildcard imports in __init__.py files (can mask circular imports): "
365
+ f"{wildcard_imports}"
366
+ )
367
+
368
+ def test_relative_import_consistency(self):
369
+ """Test that relative imports are used consistently within packages."""
370
+ # This is more of a style check, but inconsistent relative imports
371
+ # can sometimes lead to circular import issues
372
+
373
+ python_files = [
374
+ f
375
+ for f in self.package_root.rglob("*.py")
376
+ if "/tests/" not in str(f) and not f.name.startswith("test_")
377
+ ]
378
+
379
+ inconsistent_files = []
380
+
381
+ for py_file in python_files:
382
+ with open(py_file, "r", encoding="utf-8") as f:
383
+ content = f.read()
384
+
385
+ # Look for both relative and absolute imports of the same package
386
+ has_relative = "from ." in content or "from .." in content
387
+ has_absolute = (
388
+ "from solarwindpy" in content or "import solarwindpy" in content
389
+ )
390
+
391
+ if has_relative and has_absolute:
392
+ # This might be intentional, but flag for review
393
+ rel_path = str(py_file.relative_to(self.package_root))
394
+ inconsistent_files.append(rel_path)
395
+
396
+ # This is informational rather than a hard failure
397
+ if inconsistent_files:
398
+ import warnings
399
+
400
+ warnings.warn(
401
+ f"Files with mixed relative/absolute imports (review for potential issues): "
402
+ f"{inconsistent_files[:5]}{'...' if len(inconsistent_files) > 5 else ''}"
403
+ )
404
+
405
+
406
+ if __name__ == "__main__":
407
+ # Run tests directly
408
+ pytest.main([__file__, "-v"])
@@ -0,0 +1,25 @@
1
+ import sys
2
+ import os
3
+
4
+ sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
5
+ from plans.issues_from_plans import infer_issue_title
6
+
7
+
8
+ def test_infer_issue_title_preserves_numbers(tmp_path):
9
+ path = (
10
+ tmp_path
11
+ / "combined_plan_with_checklist_documentation"
12
+ / "1-Overview-and-Goals.md"
13
+ )
14
+ path.parent.mkdir()
15
+ path.touch()
16
+ title = infer_issue_title(path, "")
17
+ assert title == "Combined Plan With Checklist Documentation – 1 Overview and Goals"
18
+
19
+
20
+ def test_infer_issue_title_uses_frontmatter_name(tmp_path):
21
+ path = tmp_path / "combined_plan_with_checklist_documentation" / "2-Another.md"
22
+ path.parent.mkdir(exist_ok=True)
23
+ path.touch()
24
+ title = infer_issue_title(path, "Custom Name")
25
+ assert title == "Combined Plan With Checklist Documentation – 2 Custom Name"