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.
- plans/.velocity/metrics.json +96 -0
- plans/0-overview-template.md +268 -0
- plans/N-phase-template.md +106 -0
- plans/PLAN_AUDIT_SUMMARY.md +173 -0
- plans/TEMPLATE-USAGE-GUIDE.md +198 -0
- plans/__init__.py +1 -0
- plans/abandoned/compaction-agent-system/0-Overview.md +123 -0
- plans/abandoned/compaction-agent-system/agents-index-update-plan.md +109 -0
- plans/abandoned/compaction-agent-system/compacted_state.md +85 -0
- plans/abandoned/compaction-agent-system/implementation-plan.md +107 -0
- plans/abandoned/compaction-agent-system/system-validation-report.md +159 -0
- plans/abandoned/compaction-agent-system/usage-guide.md +210 -0
- plans/abandoned/hook-system-enhancement/0-Overview.md +214 -0
- plans/abandoned/hook-system-enhancement/1-Phase1-Core-Infrastructure.md +313 -0
- plans/abandoned/hook-system-enhancement/2-Phase2-Intelligent-Testing.md +385 -0
- plans/abandoned/hook-system-enhancement/3-Phase3-Physics-Validation.md +444 -0
- plans/abandoned/hook-system-enhancement/4-Phase4-Performance-Monitoring.md +458 -0
- plans/abandoned/hook-system-enhancement/5-Phase5-Developer-Experience.md +532 -0
- plans/abandoned/hook-system-enhancement/6-Implementation-Timeline.md +274 -0
- plans/abandoned/hook-system-enhancement/7-Risk-Management.md +376 -0
- plans/abandoned/hook-system-enhancement/8-Testing-Strategy.md +579 -0
- plans/abandoned/readthedocs-automation/0-Overview.md +247 -0
- plans/abandoned/readthedocs-automation/1-Emergency-Documentation-Fixes.md +270 -0
- plans/abandoned/readthedocs-automation/2-Template-System-Enhancement.md +811 -0
- plans/abandoned/readthedocs-automation/3-Quality-Audit-ReadTheDocs-Integration.md +844 -0
- plans/abandoned/readthedocs-automation/4-Plan-Consolidation-Cleanup.md +632 -0
- plans/abandoned/readthedocs-automation/9-Closeout.md +207 -0
- plans/abandoned/readthedocs-automation/ABANDONMENT_REASON.md +72 -0
- plans/cicd-architecture-redesign/0-Overview.md +193 -0
- plans/cicd-architecture-redesign/1-Workflow-Creation.md +103 -0
- plans/cicd-architecture-redesign/2-Version-Detection.md +123 -0
- plans/cicd-architecture-redesign/3-Deployment-Gates.md +169 -0
- plans/cicd-architecture-redesign/4-RC-Testing.md +194 -0
- plans/cicd-architecture-redesign/5-TestPyPI-Validation.md +264 -0
- plans/cicd-architecture-redesign/6-Production-Release.md +263 -0
- plans/cicd-architecture-redesign/7-Cleanup.md +243 -0
- plans/cicd-architecture-redesign/8-Documentation.md +285 -0
- plans/cicd-architecture-redesign/Closeout.md +225 -0
- plans/closeout-template.md +259 -0
- plans/completed/circular-import-audit/0-Overview.md +152 -0
- plans/completed/circular-import-audit/1-Static-Dependency-Analysis.md +62 -0
- plans/completed/circular-import-audit/2-Dynamic-Import-Testing.md +56 -0
- plans/completed/circular-import-audit/3-Performance-Impact-Assessment.md +56 -0
- plans/completed/circular-import-audit/4-Issue-Remediation.md +78 -0
- plans/completed/circular-import-audit/5-Preventive-Infrastructure.md +89 -0
- plans/completed/claude-settings-ecosystem-alignment/0-Overview.md +162 -0
- plans/completed/claude-settings-ecosystem-alignment/1-Security-Foundation.md +148 -0
- plans/completed/claude-settings-ecosystem-alignment/2-Hook-Integration.md +158 -0
- plans/completed/claude-settings-ecosystem-alignment/3-Agent-System-Integration.md +177 -0
- plans/completed/claude-settings-ecosystem-alignment/4-Enhanced-Workflow-Automation.md +159 -0
- plans/completed/claude-settings-ecosystem-alignment/5-Validation-Monitoring.md +181 -0
- plans/completed/claude-settings-ecosystem-alignment/compacted_session_state.md +290 -0
- plans/completed/combined_plan_with_checklist_documentation/1-Overview-and-Goals.md +51 -0
- plans/completed/combined_plan_with_checklist_documentation/2-Toolchain-and-Hosting.md +69 -0
- plans/completed/combined_plan_with_checklist_documentation/3-Repository-Structure.md +61 -0
- plans/completed/combined_plan_with_checklist_documentation/4-Configuration-and-Standards.md +70 -0
- plans/completed/combined_plan_with_checklist_documentation/5-Documentation-Content.md +62 -0
- plans/completed/combined_plan_with_checklist_documentation/6-CI-CD-and-Validation.md +58 -0
- plans/completed/combined_plan_with_checklist_documentation/7-Maintenance.md +55 -0
- plans/completed/combined_test_plan_with_checklist_fitfunctions/0-Overview.md +135 -0
- plans/completed/combined_test_plan_with_checklist_fitfunctions/1-Common-fixtures.md +59 -0
- plans/completed/combined_test_plan_with_checklist_fitfunctions/10-power_laws.md +56 -0
- plans/completed/combined_test_plan_with_checklist_fitfunctions/2-core.py-FitFunction.md +118 -0
- plans/completed/combined_test_plan_with_checklist_fitfunctions/3-gaussians.py-Gaussian-GaussianNormalized-GaussianLn.md +69 -0
- plans/completed/combined_test_plan_with_checklist_fitfunctions/4-trend_fits.py-TrendFit.md +99 -0
- plans/completed/combined_test_plan_with_checklist_fitfunctions/5-plots.py-FFPlot.md +98 -0
- plans/completed/combined_test_plan_with_checklist_fitfunctions/6-tex_info.py-TeXinfo.md +79 -0
- plans/completed/combined_test_plan_with_checklist_fitfunctions/7-Justification.md +49 -0
- plans/completed/combined_test_plan_with_checklist_fitfunctions/8-exponentials.md +64 -0
- plans/completed/combined_test_plan_with_checklist_fitfunctions/9-lines.md +58 -0
- plans/completed/combined_test_plan_with_checklist_plotting/0-Overview.md +142 -0
- plans/completed/combined_test_plan_with_checklist_plotting/1-base.py.md +90 -0
- plans/completed/combined_test_plan_with_checklist_plotting/10-labels-special.py.md +102 -0
- plans/completed/combined_test_plan_with_checklist_plotting/11-labels-chemistry.py.md +212 -0
- plans/completed/combined_test_plan_with_checklist_plotting/12-labels-composition.py.md +242 -0
- plans/completed/combined_test_plan_with_checklist_plotting/13-labels-datetime.py.md +247 -0
- plans/completed/combined_test_plan_with_checklist_plotting/14-labels-elemental_abundance.py.md +274 -0
- plans/completed/combined_test_plan_with_checklist_plotting/15-visual-validation.md +256 -0
- plans/completed/combined_test_plan_with_checklist_plotting/16-integration-testing.md +266 -0
- plans/completed/combined_test_plan_with_checklist_plotting/17-performance-benchmarks.md +267 -0
- plans/completed/combined_test_plan_with_checklist_plotting/18-Fixtures-and-Utilities.md +86 -0
- plans/completed/combined_test_plan_with_checklist_plotting/2-agg_plot.py.md +90 -0
- plans/completed/combined_test_plan_with_checklist_plotting/3-histograms.py.md +201 -0
- plans/completed/combined_test_plan_with_checklist_plotting/4-scatter.py.md +167 -0
- plans/completed/combined_test_plan_with_checklist_plotting/5-spiral.py.md +216 -0
- plans/completed/combined_test_plan_with_checklist_plotting/6-orbits.py.md +108 -0
- plans/completed/combined_test_plan_with_checklist_plotting/7-tools.py.md +86 -0
- plans/completed/combined_test_plan_with_checklist_plotting/8-select_data_from_figure.py.md +97 -0
- plans/completed/combined_test_plan_with_checklist_plotting/9-labels-base.py.md +88 -0
- plans/completed/combined_test_plan_with_checklist_solar_activity/.gitkeep +0 -0
- plans/completed/combined_test_plan_with_checklist_solar_activity/0-Overview.md +170 -0
- plans/completed/combined_test_plan_with_checklist_solar_activity/1-Package-Entry-Point-__init__.py.md +121 -0
- plans/completed/combined_test_plan_with_checklist_solar_activity/2-Core-Base-Classes-base.py.md +142 -0
- plans/completed/combined_test_plan_with_checklist_solar_activity/3-Plotting-Helpers-plots.py.md +123 -0
- plans/completed/combined_test_plan_with_checklist_solar_activity/4-LISIRD-Sub-package.md +119 -0
- plans/completed/combined_test_plan_with_checklist_solar_activity/5-Extrema-Calculator.md +103 -0
- plans/completed/combined_test_plan_with_checklist_solar_activity/6-Sunspot-Number-Sub-package.md +163 -0
- plans/completed/combined_test_plan_with_checklist_solar_activity/7-Sunspot-Number-Init.py.md +217 -0
- plans/completed/combined_test_plan_with_checklist_solar_activity/compacted_state.md +52 -0
- plans/completed/compaction-agent-modernization/0-Overview.md +156 -0
- plans/completed/compaction-agent-modernization/1-Architecture-Audit-Gap-Analysis.md +132 -0
- plans/completed/compaction-agent-modernization/2-Token-Baseline-Recalibration.md +153 -0
- plans/completed/compaction-agent-modernization/3-Agent-Reference-Updates.md +184 -0
- plans/completed/compaction-agent-modernization/4-Compression-Algorithm-Modernization.md +238 -0
- plans/completed/compaction-agent-modernization/5-Workflow-Integration-Streamlining.md +252 -0
- plans/completed/compaction-agent-modernization/6-Template-Structure-Optimization.md +240 -0
- plans/completed/compaction-agent-modernization/7-Integration-Testing-Validation.md +292 -0
- plans/completed/compaction-hook-enhancement/0-Overview.md +150 -0
- plans/completed/compaction-hook-enhancement/1-Token-Estimation-Enhancement.md +179 -0
- plans/completed/compaction-hook-enhancement/2-Compression-Intelligence.md +294 -0
- plans/completed/compaction-hook-enhancement/3-Git-Integration-Metadata.md +310 -0
- plans/completed/compaction-hook-enhancement/4-Session-Continuity-Features.md +358 -0
- plans/completed/compaction-hook-enhancement/5-Testing-Strategy.md +404 -0
- plans/completed/compaction-hook-enhancement/6-Integration-Roadmap.md +319 -0
- plans/completed/compaction-hook-enhancement/compacted_state.md +142 -0
- plans/completed/docstring-audit-enhancement/0-Overview.md +274 -0
- plans/completed/docstring-audit-enhancement/1-Infrastructure-Setup-and-Validation-Tools.md +206 -0
- plans/completed/docstring-audit-enhancement/2-Core-Physics-Modules-Enhancement.md +237 -0
- plans/completed/docstring-audit-enhancement/3-Fitfunctions-Mathematical-Modules-Enhancement.md +188 -0
- plans/completed/docstring-audit-enhancement/4-Plotting-Visualization-Modules-Enhancement.md +243 -0
- plans/completed/docstring-audit-enhancement/5-Specialized-Modules-Enhancement.md +216 -0
- plans/completed/docstring-audit-enhancement/6-Validation-and-Integration.md +216 -0
- plans/completed/fitfunctions-testing-implementation/0-Overview.md +130 -0
- plans/completed/fitfunctions-testing-implementation/1-Test-Infrastructure-Setup.md +79 -0
- plans/completed/fitfunctions-testing-implementation/2-Common-Fixtures-Test-Utilities.md +104 -0
- plans/completed/fitfunctions-testing-implementation/3-Core-FitFunction-Testing.md +168 -0
- plans/completed/fitfunctions-testing-implementation/4-Specialized-Function-Classes.md +210 -0
- plans/completed/fitfunctions-testing-implementation/5-Advanced-Classes-Testing.md +214 -0
- plans/completed/fitfunctions-testing-implementation/6-Plotting-Integration-Testing.md +231 -0
- plans/completed/fitfunctions-testing-implementation/7-Extended-Coverage-BONUS.md +184 -0
- plans/completed/numpy-docstring-conversion-plan/numpy-docstring-conversion-plan.md +118 -0
- plans/completed/pr-review-remediation/0-Overview.md +138 -0
- plans/completed/pr-review-remediation/1-Critical-Safety-Improvements.md +179 -0
- plans/completed/pr-review-remediation/2-Smart-Timeouts-Validation.md +399 -0
- plans/completed/pr-review-remediation/3-Enhanced-GitHub-Integration.md +258 -0
- plans/completed/pr-review-remediation/compacted_state.md +66 -0
- plans/completed/python-310-migration/0-Overview.md +390 -0
- plans/completed/python-310-migration/1-Planning-Setup.md +164 -0
- plans/completed/python-310-migration/2-Implementation.md +256 -0
- plans/completed/python-310-migration/3-Testing-Validation.md +335 -0
- plans/completed/python-310-migration/4-Documentation-Release.md +274 -0
- plans/completed/python-310-migration/5-Closeout.md +252 -0
- plans/completed/requirements-management-consolidation/0-Overview.md +118 -0
- plans/completed/requirements-management-consolidation/1-Documentation-Validation-Environment-Setup.md +116 -0
- plans/completed/requirements-management-consolidation/2-Requirements-Consolidation.md +161 -0
- plans/completed/requirements-management-consolidation/3-Workflow-Automation-Final-Integration.md +196 -0
- plans/completed/single-ecosystem-plan-implementation/0-Overview.md +83 -0
- plans/completed/single-ecosystem-plan-implementation/1-Plan-Preservation-Session-Management.md +38 -0
- plans/completed/single-ecosystem-plan-implementation/2-File-Structure-Optimization.md +43 -0
- plans/completed/single-ecosystem-plan-implementation/3-Plan-Migration-Archive-Setup.md +82 -0
- plans/completed/single-ecosystem-plan-implementation/4-Agent-System-Transformation.md +108 -0
- plans/completed/single-ecosystem-plan-implementation/5-Template-System-Enhancement.md +131 -0
- plans/completed/single-ecosystem-plan-implementation/6-Final-Validation-Testing.md +120 -0
- plans/completed/test-directory-consolidation/0-Overview.md +51 -0
- plans/completed/test-directory-consolidation/1-Structure-Preparation.md +82 -0
- plans/completed/test-directory-consolidation/2-File-Migration.md +100 -0
- plans/completed/test-directory-consolidation/3-Import-Transformation.md +117 -0
- plans/completed/test-directory-consolidation/4-Configuration-Consolidation.md +140 -0
- plans/completed/test-directory-consolidation/5-Validation.md +152 -0
- plans/completed/test-directory-consolidation/6-Cleanup.md +156 -0
- plans/completed/test-planning-agents-architecture/0-Overview.md +79 -0
- plans/completed/test-planning-agents-architecture/1-Branch-Isolation-Testing.md +49 -0
- plans/completed/test-planning-agents-architecture/2-Cross-Branch-Coordination.md +51 -0
- plans/completed/test-planning-agents-architecture/3-Merge-Workflow-Testing.md +48 -0
- plans/deployment-semver-pypi-rtd/0-Overview.md +463 -0
- plans/deployment-semver-pypi-rtd/1-Semantic-Versioning-Foundation.md +136 -0
- plans/deployment-semver-pypi-rtd/2-PyPI-Deployment-Infrastructure.md +168 -0
- plans/deployment-semver-pypi-rtd/3-Release-Automation.md +214 -0
- plans/deployment-semver-pypi-rtd/4-Plan-Closeout.md +543 -0
- plans/deployment-semver-pypi-rtd/compacted_session_state.md +172 -0
- plans/deployment-semver-pypi-rtd/compacted_state.md +131 -0
- plans/documentation-code-audit/0-Overview.md +393 -0
- plans/documentation-code-audit/1-Discovery-Inventory.md +183 -0
- plans/documentation-code-audit/2-Execution-Environment-Setup.md +263 -0
- plans/documentation-code-audit/3-Systematic-Validation.md +322 -0
- plans/documentation-code-audit/4-Code-Example-Remediation.md +358 -0
- plans/documentation-code-audit/5-Physics-MultiIndex-Compliance.md +464 -0
- plans/documentation-code-audit/6-Doctest-Integration.md +523 -0
- plans/documentation-code-audit/7-Reporting-Documentation.md +498 -0
- plans/documentation-code-audit/8-Closeout.md +456 -0
- plans/documentation-rebuild-session/compacted_state.md +109 -0
- plans/documentation-rendering-fixes/0-Overview.md +104 -0
- plans/documentation-rendering-fixes/1-Sphinx-Build-Diagnostics-Warning-Audit.md +101 -0
- plans/documentation-rendering-fixes/2-Configuration-Infrastructure-Fixes.md +113 -0
- plans/documentation-rendering-fixes/3-Docstring-Syntax-Audit-Repair.md +131 -0
- plans/documentation-rendering-fixes/4-HTML-Page-Rendering-Verification.md +113 -0
- plans/documentation-rendering-fixes/5-Advanced-Documentation-Quality-Assurance.md +119 -0
- plans/documentation-rendering-fixes/6-Documentation-Build-Optimization-Testing.md +129 -0
- plans/documentation-rendering-fixes/compacted_state.md +132 -0
- plans/documentation-template-fix/0-Overview.md +197 -0
- plans/documentation-template-fix/1-Template-System-Analysis.md +269 -0
- plans/documentation-template-fix/2-Template-Modification.md +609 -0
- plans/documentation-template-fix/3-Build-System-Integration.md +766 -0
- plans/documentation-template-fix/4-Testing-Validation.md +1399 -0
- plans/documentation-template-fix/5-Documentation-Training.md +602 -0
- plans/documentation-workflow-fix/0-Overview.md +222 -0
- plans/documentation-workflow-fix/1-Immediate-Fixes.md +238 -0
- plans/documentation-workflow-fix/2-Configuration-Setup.md +298 -0
- plans/documentation-workflow-fix/3-Pre-commit-Integration.md +382 -0
- plans/documentation-workflow-fix/4-Workflow-Improvements.md +446 -0
- plans/documentation-workflow-fix/5-Documentation-and-Training.md +527 -0
- plans/duplicate-object-warnings-fix-plan.md +130 -0
- plans/github-issues-migration/0-Overview.md +510 -0
- plans/github-issues-migration/1-Foundation-Label-System.md +180 -0
- plans/github-issues-migration/2-Migration-Tool-Rewrite.md +235 -0
- plans/github-issues-migration/3-CLI-Integration-Automation.md +169 -0
- plans/github-issues-migration/4-Validated-Migration.md +252 -0
- plans/github-issues-migration/5-Documentation-Training.md +171 -0
- plans/github-issues-migration/6-Closeout.md +179 -0
- plans/github-workflows-repair/repair-plan.md +299 -0
- plans/issues_from_plans.py +342 -0
- plans/pr-270-doc-validation-fixes/0-Overview.md +354 -0
- plans/pr-270-doc-validation-fixes/1-Critical-PR-Fixes.md +117 -0
- plans/pr-270-doc-validation-fixes/2-Framework-Right-Sizing.md +129 -0
- plans/pr-270-doc-validation-fixes/3-Sustainable-Documentation.md +126 -0
- plans/pr-270-doc-validation-fixes/4-Closeout-Migration.md +143 -0
- plans/pr-270-doc-validation-fixes/PLAN_COMPLETED.md +149 -0
- plans/python-310-migration/0-Overview.md +390 -0
- plans/python-310-migration/1-Planning-Setup.md +164 -0
- plans/python-310-migration/2-Implementation.md +256 -0
- plans/python-310-migration/3-Testing-Validation.md +335 -0
- plans/python-310-migration/4-Documentation-Release.md +274 -0
- plans/python-310-migration/5-Closeout.md +252 -0
- plans/readthedocs-simplified/0-Overview.md +243 -0
- plans/readthedocs-simplified/1-Immediate-Fixes.md +216 -0
- plans/readthedocs-simplified/2-Template-Simplification.md +278 -0
- plans/readthedocs-simplified/3-ReadTheDocs-Setup.md +298 -0
- plans/readthedocs-simplified/4-Testing-Validation.md +328 -0
- plans/readthedocs-simplified/5-Closeout.md +231 -0
- plans/readthedocs-simplified/compacted_state.md +127 -0
- plans/session-compaction-2025-08-12/compacted_state.md +114 -0
- plans/session-compaction-2025-08-13/compacted_state.md +145 -0
- plans/session-continuity-protocol/0-Overview.md +35 -0
- plans/session-continuity-protocol/1-Core-Principles-Framework.md +40 -0
- plans/session-continuity-protocol/2-Pre-Session-Validation-System.md +79 -0
- plans/session-continuity-protocol/3-Context-Switching-Prevention.md +87 -0
- plans/session-continuity-protocol/4-Progress-Tracking-Recovery.md +100 -0
- plans/sphinx-warnings-analysis.md +222 -0
- plans/systemprompt-optimization/0-Overview.md +447 -0
- plans/systemprompt-optimization/1-Deploy-SystemPrompt.md +114 -0
- plans/systemprompt-optimization/2-Documentation-Alignment.md +198 -0
- plans/systemprompt-optimization/3-Monitoring-Infrastructure.md +396 -0
- plans/systemprompt-optimization/4-Implementation-Script.md +450 -0
- plans/systemprompt-optimization/9-Closeout.md +165 -0
- plans/systemprompt-optimization/compacted_state.md +143 -0
- plans/template-value-propositions/0-Overview.md +357 -0
- plans/template-value-propositions/1-Value-Proposition-Framework-Design.md +144 -0
- plans/template-value-propositions/2-Plan-Template-Enhancement.md +178 -0
- plans/template-value-propositions/3-Value-Generator-Hook-Implementation.md +291 -0
- plans/template-value-propositions/4-Value-Validator-Hook-Implementation.md +274 -0
- plans/template-value-propositions/5-Documentation-Agent-Updates.md +219 -0
- plans/template-value-propositions/6-Integration-Testing-Validation.md +247 -0
- plans/tests-audit/0-Overview.md +410 -0
- plans/tests-audit/1-Discovery-Inventory.md +170 -0
- plans/tests-audit/2-Physics-Validation-Audit.md +195 -0
- plans/tests-audit/3-Architecture-Compliance.md +195 -0
- plans/tests-audit/4-Numerical-Stability-Analysis.md +203 -0
- plans/tests-audit/5-Documentation-Enhancement.md +220 -0
- plans/tests-audit/6-Audit-Deliverables.md +220 -0
- plans/tests-audit/7-Closeout.md +252 -0
- plans/tests-audit/artifacts/ARCHITECTURE_COMPLIANCE_REPORT.md +315 -0
- plans/tests-audit/artifacts/ARCHITECTURE_RECOMMENDATIONS.md +943 -0
- plans/tests-audit/artifacts/COMPREHENSIVE_AUDIT_REPORT.md +356 -0
- plans/tests-audit/artifacts/CONTRIBUTING_ENHANCED_TEMPLATE.md +419 -0
- plans/tests-audit/artifacts/COVERAGE_GAP_ANALYSIS.md +152 -0
- plans/tests-audit/artifacts/DOCUMENTATION_ENHANCEMENT_REPORT.md +502 -0
- plans/tests-audit/artifacts/EXECUTIVE_AUDIT_SUMMARY.md +129 -0
- plans/tests-audit/artifacts/IMPLEMENTATION_ROADMAP.md +647 -0
- plans/tests-audit/artifacts/NUMERICAL_RECOMMENDATIONS.md +739 -0
- plans/tests-audit/artifacts/NUMERICAL_STABILITY_GUIDE_TEMPLATE.rst +451 -0
- plans/tests-audit/artifacts/NUMERICAL_STABILITY_REPORT.md +301 -0
- plans/tests-audit/artifacts/PHASE_3_SUMMARY.md +280 -0
- plans/tests-audit/artifacts/PHASE_4_SUMMARY.md +229 -0
- plans/tests-audit/artifacts/PHASE_5_SUMMARY.md +292 -0
- plans/tests-audit/artifacts/PHASE_6_CLOSEOUT.md +278 -0
- plans/tests-audit/artifacts/PHYSICS_GUIDE_TEMPLATE.rst +268 -0
- plans/tests-audit/artifacts/PHYSICS_VALIDATION_REPORT.md +235 -0
- plans/tests-audit/artifacts/TECHNICAL_DELIVERABLES_PACKAGE.md +2502 -0
- plans/tests-audit/artifacts/TEST_INVENTORY.csv +1204 -0
- plans/tests-audit/artifacts/TEST_INVENTORY.md +135 -0
- plans/tests-audit/artifacts/test_discovery_analysis.py +231 -0
- plans/tests-audit/artifacts/test_parser.py +395 -0
- solarwindpy/README.md +3 -0
- solarwindpy/Untitled.ipynb +54 -0
- solarwindpy/__init__.py +74 -0
- solarwindpy/core/__init__.py +23 -0
- solarwindpy/core/alfvenic_turbulence.py +804 -0
- solarwindpy/core/base.py +267 -0
- solarwindpy/core/ions.py +309 -0
- solarwindpy/core/plasma.py +2133 -0
- solarwindpy/core/spacecraft.py +256 -0
- solarwindpy/core/tensor.py +90 -0
- solarwindpy/core/units_constants.py +199 -0
- solarwindpy/core/vector.py +328 -0
- solarwindpy/fitfunctions/__init__.py +20 -0
- solarwindpy/fitfunctions/core.py +734 -0
- solarwindpy/fitfunctions/exponentials.py +188 -0
- solarwindpy/fitfunctions/gaussians.py +264 -0
- solarwindpy/fitfunctions/lines.py +116 -0
- solarwindpy/fitfunctions/moyal.py +71 -0
- solarwindpy/fitfunctions/plots.py +751 -0
- solarwindpy/fitfunctions/power_laws.py +209 -0
- solarwindpy/fitfunctions/tex_info.py +568 -0
- solarwindpy/fitfunctions/trend_fits.py +482 -0
- solarwindpy/instabilities/__init__.py +16 -0
- solarwindpy/instabilities/beta_ani.py +82 -0
- solarwindpy/instabilities/verscharen2016.py +631 -0
- solarwindpy/plotting/__init__.py +33 -0
- solarwindpy/plotting/agg_plot.py +489 -0
- solarwindpy/plotting/base.py +465 -0
- solarwindpy/plotting/hist1d.py +405 -0
- solarwindpy/plotting/hist2d.py +1035 -0
- solarwindpy/plotting/histograms.py +1845 -0
- solarwindpy/plotting/labels/__init__.py +104 -0
- solarwindpy/plotting/labels/base.py +686 -0
- solarwindpy/plotting/labels/chemistry.py +19 -0
- solarwindpy/plotting/labels/composition.py +100 -0
- solarwindpy/plotting/labels/datetime.py +235 -0
- solarwindpy/plotting/labels/elemental_abundance.py +73 -0
- solarwindpy/plotting/labels/special.py +794 -0
- solarwindpy/plotting/orbits.py +515 -0
- solarwindpy/plotting/scatter.py +99 -0
- solarwindpy/plotting/select_data_from_figure.py +329 -0
- solarwindpy/plotting/spiral.py +980 -0
- solarwindpy/plotting/tools.py +434 -0
- solarwindpy/scripts/__init__.py +1 -0
- solarwindpy/scripts/logs/.gitignore +1 -0
- solarwindpy/solar_activity/__init__.py +53 -0
- solarwindpy/solar_activity/base.py +605 -0
- solarwindpy/solar_activity/lisird/__init__.py +3 -0
- solarwindpy/solar_activity/lisird/extrema_calculator.py +394 -0
- solarwindpy/solar_activity/lisird/lisird.py +319 -0
- solarwindpy/solar_activity/plots.py +116 -0
- solarwindpy/solar_activity/sunspot_number/.DS_Store +0 -0
- solarwindpy/solar_activity/sunspot_number/__init__.py +3 -0
- solarwindpy/solar_activity/sunspot_number/sidc.py +556 -0
- solarwindpy/solar_activity/sunspot_number/ssn_extrema.csv +72 -0
- solarwindpy/solar_activity/sunspot_number/ssn_extrema.csv.silso +72 -0
- solarwindpy/tools/__init__.py +162 -0
- solarwindpy-0.1.1.dist-info/METADATA +181 -0
- solarwindpy-0.1.1.dist-info/RECORD +409 -0
- {solarwindpy-0.0.1.dev0.dist-info → solarwindpy-0.1.1.dist-info}/WHEEL +1 -1
- solarwindpy-0.1.1.dist-info/licenses/LICENSE.rst +32 -0
- solarwindpy-0.1.1.dist-info/top_level.txt +3 -0
- tests/__init__.py +1 -0
- tests/conftest.py +10 -0
- tests/core/__init__.py +1 -0
- tests/core/test_alfvenic_turbulence.py +544 -0
- tests/core/test_base.py +112 -0
- tests/core/test_base_head_tail.py +29 -0
- tests/core/test_base_mi_tuples.py +11 -0
- tests/core/test_core_verify_datetimeindex.py +32 -0
- tests/core/test_ions.py +325 -0
- tests/core/test_plasma.py +2581 -0
- tests/core/test_plasma_io.py +12 -0
- tests/core/test_quantities.py +507 -0
- tests/core/test_spacecraft.py +210 -0
- tests/core/test_units_constants.py +22 -0
- tests/data/epoch.csv +4 -0
- tests/data/plasma.csv +4 -0
- tests/data/spacecraft.csv +4 -0
- tests/fitfunctions/conftest.py +60 -0
- tests/fitfunctions/test_core.py +193 -0
- tests/fitfunctions/test_exponentials.py +342 -0
- tests/fitfunctions/test_gaussians.py +142 -0
- tests/fitfunctions/test_lines.py +349 -0
- tests/fitfunctions/test_moyal.py +258 -0
- tests/fitfunctions/test_plots.py +258 -0
- tests/fitfunctions/test_power_laws.py +365 -0
- tests/fitfunctions/test_tex_info.py +183 -0
- tests/fitfunctions/test_trend_fit_properties.py +31 -0
- tests/fitfunctions/test_trend_fits.py +244 -0
- tests/plotting/__init__.py +1 -0
- tests/plotting/labels/__init__.py +1 -0
- tests/plotting/labels/test_chemistry.py +243 -0
- tests/plotting/labels/test_composition.py +345 -0
- tests/plotting/labels/test_datetime.py +445 -0
- tests/plotting/labels/test_elemental_abundance.py +366 -0
- tests/plotting/labels/test_init.py +66 -0
- tests/plotting/labels/test_labels_base.py +347 -0
- tests/plotting/labels/test_special.py +550 -0
- tests/plotting/test_agg_plot.py +602 -0
- tests/plotting/test_base.py +752 -0
- tests/plotting/test_fixtures_utilities.py +775 -0
- tests/plotting/test_histograms.py +546 -0
- tests/plotting/test_integration.py +675 -0
- tests/plotting/test_orbits.py +435 -0
- tests/plotting/test_performance.py +708 -0
- tests/plotting/test_scatter.py +752 -0
- tests/plotting/test_select_data_from_figure.py +1209 -0
- tests/plotting/test_spiral.py +573 -0
- tests/plotting/test_tools.py +607 -0
- tests/plotting/test_visual_validation.py +465 -0
- tests/solar_activity/__init__.py +1 -0
- tests/solar_activity/lisird/__init__.py +1 -0
- tests/solar_activity/lisird/test_extrema_calculator.py +593 -0
- tests/solar_activity/lisird/test_lisird_id.py +187 -0
- tests/solar_activity/sunspot_number/__init__.py +1 -0
- tests/solar_activity/sunspot_number/test_init.py +399 -0
- tests/solar_activity/sunspot_number/test_sidc.py +465 -0
- tests/solar_activity/sunspot_number/test_sidc_id.py +223 -0
- tests/solar_activity/sunspot_number/test_sidc_loader.py +275 -0
- tests/solar_activity/sunspot_number/test_ssn_extrema.py +406 -0
- tests/solar_activity/test_base.py +656 -0
- tests/solar_activity/test_init.py +396 -0
- tests/solar_activity/test_plots.py +371 -0
- tests/test_circular_imports.py +408 -0
- tests/test_issue_titles.py +25 -0
- tests/test_statusline.py +298 -0
- solarwindpy-0.0.1.dev0.dist-info/METADATA +0 -14
- solarwindpy-0.0.1.dev0.dist-info/RECORD +0 -4
- solarwindpy-0.0.1.dev0.dist-info/top_level.txt +0 -1
|
@@ -0,0 +1,766 @@
|
|
|
1
|
+
# Phase 3: Build System Integration
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Optimize and enhance the documentation build system to seamlessly integrate with the enhanced templates, ensuring robust automated processing and CI/CD compatibility.
|
|
5
|
+
|
|
6
|
+
## Current Build System Analysis
|
|
7
|
+
|
|
8
|
+
### Build Pipeline Overview
|
|
9
|
+
```
|
|
10
|
+
sphinx-apidoc → add_no_index.py → Sphinx HTML Build → Deployment
|
|
11
|
+
↓ ↓ ↓ ↓
|
|
12
|
+
RST Generation Post-processing HTML Generation Publishing
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Current Components
|
|
16
|
+
|
|
17
|
+
#### 3.1 Makefile Integration (`docs/Makefile`)
|
|
18
|
+
|
|
19
|
+
**Current Build Targets**:
|
|
20
|
+
```makefile
|
|
21
|
+
# Line 15: HTML build depends on API generation
|
|
22
|
+
html: api
|
|
23
|
+
|
|
24
|
+
# Lines 18-22: API generation with post-processing
|
|
25
|
+
api:
|
|
26
|
+
@echo "Generating API documentation..."
|
|
27
|
+
sphinx-apidoc -f -o $(SOURCEDIR)/api ../../solarwindpy/solarwindpy --separate
|
|
28
|
+
@echo "Post-processing API files..."
|
|
29
|
+
python add_no_index.py
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Analysis**:
|
|
33
|
+
- ✅ **Dependency management**: HTML build properly depends on API generation
|
|
34
|
+
- ✅ **Post-processing integration**: Automated post-processing step
|
|
35
|
+
- ✅ **Clean separation**: API generation separate from HTML build
|
|
36
|
+
- ❌ **No template validation**: No verification that templates are working
|
|
37
|
+
- ❌ **No physics content validation**: No checking of enhanced content
|
|
38
|
+
|
|
39
|
+
#### 3.2 Post-Processing Script (`docs/add_no_index.py`)
|
|
40
|
+
|
|
41
|
+
**Current Functionality**:
|
|
42
|
+
```python
|
|
43
|
+
# Lines 30-43: Add :no-index: to automodule directives
|
|
44
|
+
pattern = r'(\.\. automodule:: .+?)(\n :members:)'
|
|
45
|
+
replacement = r'\1\n :no-index:\2'
|
|
46
|
+
|
|
47
|
+
for file_path in glob.glob('source/api/*.rst'):
|
|
48
|
+
# Process each generated RST file
|
|
49
|
+
content = re.sub(pattern, replacement, content)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Analysis**:
|
|
53
|
+
- ✅ **Functional**: Successfully adds :no-index: directives
|
|
54
|
+
- ✅ **Comprehensive**: Processes all API files
|
|
55
|
+
- ✅ **Reliable**: Handles edge cases correctly
|
|
56
|
+
- ❌ **Limited scope**: Only handles :no-index: addition
|
|
57
|
+
- ❌ **No template-specific processing**: Doesn't handle enhanced template content
|
|
58
|
+
|
|
59
|
+
#### 3.3 CI/CD Integration (`.github/workflows/docs.yml`)
|
|
60
|
+
|
|
61
|
+
**Current Workflow**:
|
|
62
|
+
```yaml
|
|
63
|
+
# Lines 54-55: Full clean build
|
|
64
|
+
- name: Build documentation
|
|
65
|
+
run: |
|
|
66
|
+
cd docs
|
|
67
|
+
make clean
|
|
68
|
+
make html
|
|
69
|
+
|
|
70
|
+
# Lines 105-106: Deployment build
|
|
71
|
+
- name: Deploy documentation
|
|
72
|
+
run: |
|
|
73
|
+
cd docs
|
|
74
|
+
make clean && make html
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Analysis**:
|
|
78
|
+
- ✅ **Clean builds**: Ensures fresh documentation generation
|
|
79
|
+
- ✅ **Dependency installation**: Proper Python environment setup
|
|
80
|
+
- ✅ **Artifact management**: Handles build outputs correctly
|
|
81
|
+
- ❌ **No validation steps**: Missing template and content validation
|
|
82
|
+
- ❌ **No performance monitoring**: No build time or size tracking
|
|
83
|
+
|
|
84
|
+
## Enhanced Build System Design
|
|
85
|
+
|
|
86
|
+
### 3.1 Enhanced Post-Processing Framework
|
|
87
|
+
|
|
88
|
+
#### Enhanced `add_no_index.py` Script
|
|
89
|
+
|
|
90
|
+
**Current Limitations**:
|
|
91
|
+
- Only processes :no-index: directives
|
|
92
|
+
- No validation of template-generated content
|
|
93
|
+
- No physics-specific content enhancement
|
|
94
|
+
- No error reporting for template issues
|
|
95
|
+
|
|
96
|
+
**Enhanced Script Design**:
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
#!/usr/bin/env python3
|
|
100
|
+
"""
|
|
101
|
+
Enhanced post-processing script for SolarWindPy documentation.
|
|
102
|
+
Handles template-generated content validation and physics-specific enhancements.
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
import os
|
|
106
|
+
import re
|
|
107
|
+
import glob
|
|
108
|
+
import sys
|
|
109
|
+
from pathlib import Path
|
|
110
|
+
from typing import List, Dict, Tuple
|
|
111
|
+
|
|
112
|
+
class DocumentationProcessor:
|
|
113
|
+
"""Enhanced documentation post-processor."""
|
|
114
|
+
|
|
115
|
+
def __init__(self, source_dir: str = "source/api"):
|
|
116
|
+
self.source_dir = Path(source_dir)
|
|
117
|
+
self.errors: List[str] = []
|
|
118
|
+
self.warnings: List[str] = []
|
|
119
|
+
self.stats: Dict[str, int] = {
|
|
120
|
+
'files_processed': 0,
|
|
121
|
+
'physics_sections_added': 0,
|
|
122
|
+
'cross_references_fixed': 0,
|
|
123
|
+
'validation_warnings': 0
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
def process_no_index_directives(self, content: str) -> str:
|
|
127
|
+
"""Add :no-index: directives to automodule declarations."""
|
|
128
|
+
pattern = r'(\.\. automodule:: .+?)(\n :members:)'
|
|
129
|
+
replacement = r'\1\n :no-index:\2'
|
|
130
|
+
return re.sub(pattern, replacement, content)
|
|
131
|
+
|
|
132
|
+
def validate_physics_sections(self, content: str, filename: str) -> str:
|
|
133
|
+
"""Validate and enhance physics-specific sections."""
|
|
134
|
+
# Check for physics classes that should have enhanced sections
|
|
135
|
+
physics_classes = ['Plasma', 'Ion', 'Base']
|
|
136
|
+
|
|
137
|
+
for physics_class in physics_classes:
|
|
138
|
+
if f'autoclass:: solarwindpy.core.{physics_class.lower()}' in content:
|
|
139
|
+
if 'Physical Properties' not in content:
|
|
140
|
+
self.warnings.append(f"{filename}: Missing Physical Properties section for {physics_class}")
|
|
141
|
+
self.stats['validation_warnings'] += 1
|
|
142
|
+
else:
|
|
143
|
+
self.stats['physics_sections_added'] += 1
|
|
144
|
+
|
|
145
|
+
return content
|
|
146
|
+
|
|
147
|
+
def fix_cross_references(self, content: str) -> str:
|
|
148
|
+
"""Fix and enhance cross-references for physics concepts."""
|
|
149
|
+
# Fix common cross-reference patterns
|
|
150
|
+
cross_ref_fixes = {
|
|
151
|
+
r'solarwindpy\.core\.plasma\.Plasma': r':py:class:`~solarwindpy.core.plasma.Plasma`',
|
|
152
|
+
r'solarwindpy\.core\.ions\.Ion': r':py:class:`~solarwindpy.core.ions.Ion`',
|
|
153
|
+
r'solarwindpy\.core\.base\.Base': r':py:class:`~solarwindpy.core.base.Base`',
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
for pattern, replacement in cross_ref_fixes.items():
|
|
157
|
+
if re.search(pattern, content) and not re.search(replacement.replace('\\', ''), content):
|
|
158
|
+
content = re.sub(pattern, replacement, content)
|
|
159
|
+
self.stats['cross_references_fixed'] += 1
|
|
160
|
+
|
|
161
|
+
return content
|
|
162
|
+
|
|
163
|
+
def process_file(self, file_path: Path) -> None:
|
|
164
|
+
"""Process a single RST file."""
|
|
165
|
+
try:
|
|
166
|
+
with open(file_path, 'r', encoding='utf-8') as f:
|
|
167
|
+
content = f.read()
|
|
168
|
+
|
|
169
|
+
# Apply all processing steps
|
|
170
|
+
content = self.process_no_index_directives(content)
|
|
171
|
+
content = self.validate_physics_sections(content, file_path.name)
|
|
172
|
+
content = self.fix_cross_references(content)
|
|
173
|
+
|
|
174
|
+
with open(file_path, 'w', encoding='utf-8') as f:
|
|
175
|
+
f.write(content)
|
|
176
|
+
|
|
177
|
+
self.stats['files_processed'] += 1
|
|
178
|
+
|
|
179
|
+
except Exception as e:
|
|
180
|
+
error_msg = f"Error processing {file_path}: {e}"
|
|
181
|
+
self.errors.append(error_msg)
|
|
182
|
+
print(f"❌ {error_msg}", file=sys.stderr)
|
|
183
|
+
|
|
184
|
+
def process_all_files(self) -> bool:
|
|
185
|
+
"""Process all RST files in the API directory."""
|
|
186
|
+
rst_files = list(self.source_dir.glob("*.rst"))
|
|
187
|
+
|
|
188
|
+
if not rst_files:
|
|
189
|
+
self.errors.append(f"No RST files found in {self.source_dir}")
|
|
190
|
+
return False
|
|
191
|
+
|
|
192
|
+
print(f"🔄 Processing {len(rst_files)} documentation files...")
|
|
193
|
+
|
|
194
|
+
for rst_file in rst_files:
|
|
195
|
+
self.process_file(rst_file)
|
|
196
|
+
|
|
197
|
+
return len(self.errors) == 0
|
|
198
|
+
|
|
199
|
+
def print_summary(self) -> None:
|
|
200
|
+
"""Print processing summary."""
|
|
201
|
+
print(f"\n📊 Documentation Processing Summary:")
|
|
202
|
+
print(f" • Files processed: {self.stats['files_processed']}")
|
|
203
|
+
print(f" • Physics sections validated: {self.stats['physics_sections_added']}")
|
|
204
|
+
print(f" • Cross-references fixed: {self.stats['cross_references_fixed']}")
|
|
205
|
+
print(f" • Warnings: {self.stats['validation_warnings']}")
|
|
206
|
+
print(f" • Errors: {len(self.errors)}")
|
|
207
|
+
|
|
208
|
+
if self.warnings:
|
|
209
|
+
print(f"\n⚠️ Warnings:")
|
|
210
|
+
for warning in self.warnings:
|
|
211
|
+
print(f" • {warning}")
|
|
212
|
+
|
|
213
|
+
if self.errors:
|
|
214
|
+
print(f"\n❌ Errors:")
|
|
215
|
+
for error in self.errors:
|
|
216
|
+
print(f" • {error}")
|
|
217
|
+
|
|
218
|
+
def main():
|
|
219
|
+
"""Main processing function."""
|
|
220
|
+
processor = DocumentationProcessor()
|
|
221
|
+
|
|
222
|
+
success = processor.process_all_files()
|
|
223
|
+
processor.print_summary()
|
|
224
|
+
|
|
225
|
+
if success:
|
|
226
|
+
print("\n✅ Documentation processing completed successfully!")
|
|
227
|
+
return 0
|
|
228
|
+
else:
|
|
229
|
+
print("\n❌ Documentation processing failed!")
|
|
230
|
+
return 1
|
|
231
|
+
|
|
232
|
+
if __name__ == "__main__":
|
|
233
|
+
sys.exit(main())
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
**Enhancement Benefits**:
|
|
237
|
+
1. **Comprehensive Processing**: Handles multiple post-processing tasks
|
|
238
|
+
2. **Physics Validation**: Validates template-generated physics content
|
|
239
|
+
3. **Cross-reference Fixing**: Automatically fixes broken references
|
|
240
|
+
4. **Error Reporting**: Detailed error and warning reporting
|
|
241
|
+
5. **Statistics Tracking**: Provides build metrics and insights
|
|
242
|
+
|
|
243
|
+
### 3.2 Build System Validation Framework
|
|
244
|
+
|
|
245
|
+
#### Template Validation Integration
|
|
246
|
+
|
|
247
|
+
**Build Target Enhancement**:
|
|
248
|
+
|
|
249
|
+
```makefile
|
|
250
|
+
# Enhanced Makefile with validation
|
|
251
|
+
.PHONY: validate-templates
|
|
252
|
+
validate-templates:
|
|
253
|
+
@echo "🔍 Validating documentation templates..."
|
|
254
|
+
python validate_templates.py
|
|
255
|
+
@echo "✅ Template validation complete"
|
|
256
|
+
|
|
257
|
+
.PHONY: api-enhanced
|
|
258
|
+
api-enhanced: validate-templates
|
|
259
|
+
@echo "🔧 Generating enhanced API documentation..."
|
|
260
|
+
sphinx-apidoc -f -o $(SOURCEDIR)/api ../../solarwindpy/solarwindpy --separate
|
|
261
|
+
@echo "⚙️ Post-processing with enhanced framework..."
|
|
262
|
+
python add_no_index.py
|
|
263
|
+
@echo "🔍 Validating generated documentation..."
|
|
264
|
+
python validate_generated_docs.py
|
|
265
|
+
@echo "✅ Enhanced API generation complete"
|
|
266
|
+
|
|
267
|
+
# Update HTML target to use enhanced API
|
|
268
|
+
html: api-enhanced
|
|
269
|
+
@echo "🏗️ Building HTML documentation..."
|
|
270
|
+
$(SPHINXBUILD) -b html $(SOURCEDIR) $(BUILDDIR)/html $(SPHINXOPTS)
|
|
271
|
+
@echo "✅ HTML documentation build complete"
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
#### Generated Documentation Validator
|
|
275
|
+
|
|
276
|
+
**`docs/validate_generated_docs.py`**:
|
|
277
|
+
|
|
278
|
+
```python
|
|
279
|
+
#!/usr/bin/env python3
|
|
280
|
+
"""
|
|
281
|
+
Validation script for generated documentation content.
|
|
282
|
+
Ensures template enhancements are properly applied.
|
|
283
|
+
"""
|
|
284
|
+
|
|
285
|
+
import os
|
|
286
|
+
import re
|
|
287
|
+
import sys
|
|
288
|
+
from pathlib import Path
|
|
289
|
+
from typing import List, Dict
|
|
290
|
+
|
|
291
|
+
class GeneratedDocValidator:
|
|
292
|
+
"""Validator for template-generated documentation."""
|
|
293
|
+
|
|
294
|
+
def __init__(self, api_dir: str = "source/api"):
|
|
295
|
+
self.api_dir = Path(api_dir)
|
|
296
|
+
self.validation_results: Dict[str, List[str]] = {
|
|
297
|
+
'passed': [],
|
|
298
|
+
'warnings': [],
|
|
299
|
+
'failed': []
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
def validate_physics_sections(self, file_path: Path) -> bool:
|
|
303
|
+
"""Validate physics-specific sections in class documentation."""
|
|
304
|
+
with open(file_path, 'r') as f:
|
|
305
|
+
content = f.read()
|
|
306
|
+
|
|
307
|
+
# Check for core physics classes
|
|
308
|
+
physics_classes = ['plasma.rst', 'ions.rst', 'base.rst']
|
|
309
|
+
|
|
310
|
+
if any(cls in file_path.name for cls in physics_classes):
|
|
311
|
+
required_sections = ['Physical Properties', 'Units and Dimensions']
|
|
312
|
+
missing_sections = []
|
|
313
|
+
|
|
314
|
+
for section in required_sections:
|
|
315
|
+
if section not in content:
|
|
316
|
+
missing_sections.append(section)
|
|
317
|
+
|
|
318
|
+
if missing_sections:
|
|
319
|
+
self.validation_results['warnings'].append(
|
|
320
|
+
f"{file_path.name}: Missing sections: {', '.join(missing_sections)}"
|
|
321
|
+
)
|
|
322
|
+
return False
|
|
323
|
+
else:
|
|
324
|
+
self.validation_results['passed'].append(
|
|
325
|
+
f"{file_path.name}: All physics sections present"
|
|
326
|
+
)
|
|
327
|
+
return True
|
|
328
|
+
|
|
329
|
+
return True
|
|
330
|
+
|
|
331
|
+
def validate_cross_references(self, file_path: Path) -> bool:
|
|
332
|
+
"""Validate cross-references are properly formatted."""
|
|
333
|
+
with open(file_path, 'r') as f:
|
|
334
|
+
content = f.read()
|
|
335
|
+
|
|
336
|
+
# Look for broken reference patterns
|
|
337
|
+
broken_patterns = [
|
|
338
|
+
r'solarwindpy\.[a-zA-Z.]+[A-Z][a-zA-Z]+', # Unformatted class references
|
|
339
|
+
r'\.\. autoclass:: [^\n]*\n(?!\s*:)', # Missing options
|
|
340
|
+
]
|
|
341
|
+
|
|
342
|
+
issues = []
|
|
343
|
+
for i, pattern in enumerate(broken_patterns):
|
|
344
|
+
matches = re.findall(pattern, content)
|
|
345
|
+
if matches:
|
|
346
|
+
issues.extend(matches)
|
|
347
|
+
|
|
348
|
+
if issues:
|
|
349
|
+
self.validation_results['warnings'].append(
|
|
350
|
+
f"{file_path.name}: Potential reference issues: {len(issues)}"
|
|
351
|
+
)
|
|
352
|
+
return False
|
|
353
|
+
|
|
354
|
+
return True
|
|
355
|
+
|
|
356
|
+
def validate_template_application(self, file_path: Path) -> bool:
|
|
357
|
+
"""Validate that templates were properly applied."""
|
|
358
|
+
with open(file_path, 'r') as f:
|
|
359
|
+
content = f.read()
|
|
360
|
+
|
|
361
|
+
# Check for template artifacts that indicate proper processing
|
|
362
|
+
template_indicators = [':no-index:', 'rubric::']
|
|
363
|
+
|
|
364
|
+
has_indicators = any(indicator in content for indicator in template_indicators)
|
|
365
|
+
|
|
366
|
+
if not has_indicators:
|
|
367
|
+
self.validation_results['failed'].append(
|
|
368
|
+
f"{file_path.name}: No template processing indicators found"
|
|
369
|
+
)
|
|
370
|
+
return False
|
|
371
|
+
|
|
372
|
+
return True
|
|
373
|
+
|
|
374
|
+
def validate_all_files(self) -> bool:
|
|
375
|
+
"""Validate all generated documentation files."""
|
|
376
|
+
rst_files = list(self.api_dir.glob("*.rst"))
|
|
377
|
+
|
|
378
|
+
if not rst_files:
|
|
379
|
+
self.validation_results['failed'].append("No RST files found for validation")
|
|
380
|
+
return False
|
|
381
|
+
|
|
382
|
+
print(f"🔍 Validating {len(rst_files)} generated documentation files...")
|
|
383
|
+
|
|
384
|
+
all_valid = True
|
|
385
|
+
for rst_file in rst_files:
|
|
386
|
+
file_valid = True
|
|
387
|
+
file_valid &= self.validate_physics_sections(rst_file)
|
|
388
|
+
file_valid &= self.validate_cross_references(rst_file)
|
|
389
|
+
file_valid &= self.validate_template_application(rst_file)
|
|
390
|
+
|
|
391
|
+
if not file_valid:
|
|
392
|
+
all_valid = False
|
|
393
|
+
|
|
394
|
+
return all_valid
|
|
395
|
+
|
|
396
|
+
def print_results(self) -> None:
|
|
397
|
+
"""Print validation results."""
|
|
398
|
+
print(f"\n📊 Documentation Validation Results:")
|
|
399
|
+
print(f" ✅ Passed: {len(self.validation_results['passed'])}")
|
|
400
|
+
print(f" ⚠️ Warnings: {len(self.validation_results['warnings'])}")
|
|
401
|
+
print(f" ❌ Failed: {len(self.validation_results['failed'])}")
|
|
402
|
+
|
|
403
|
+
for category, messages in self.validation_results.items():
|
|
404
|
+
if messages and category != 'passed':
|
|
405
|
+
print(f"\n{category.title()}:")
|
|
406
|
+
for message in messages:
|
|
407
|
+
print(f" • {message}")
|
|
408
|
+
|
|
409
|
+
def main():
|
|
410
|
+
"""Main validation function."""
|
|
411
|
+
validator = GeneratedDocValidator()
|
|
412
|
+
|
|
413
|
+
success = validator.validate_all_files()
|
|
414
|
+
validator.print_results()
|
|
415
|
+
|
|
416
|
+
if success:
|
|
417
|
+
print("\n✅ All documentation validation checks passed!")
|
|
418
|
+
return 0
|
|
419
|
+
else:
|
|
420
|
+
print("\n⚠️ Some validation issues found (see details above)")
|
|
421
|
+
return 0 # Don't fail build for warnings, only for critical errors
|
|
422
|
+
|
|
423
|
+
if __name__ == "__main__":
|
|
424
|
+
sys.exit(main())
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
### 3.3 Performance Optimization
|
|
428
|
+
|
|
429
|
+
#### Build Time Monitoring
|
|
430
|
+
|
|
431
|
+
**Build Performance Script** (`docs/monitor_build.py`):
|
|
432
|
+
|
|
433
|
+
```python
|
|
434
|
+
#!/usr/bin/env python3
|
|
435
|
+
"""
|
|
436
|
+
Build performance monitoring for documentation system.
|
|
437
|
+
Tracks build times and identifies bottlenecks.
|
|
438
|
+
"""
|
|
439
|
+
|
|
440
|
+
import time
|
|
441
|
+
import subprocess
|
|
442
|
+
import sys
|
|
443
|
+
from pathlib import Path
|
|
444
|
+
|
|
445
|
+
class BuildMonitor:
|
|
446
|
+
"""Monitor documentation build performance."""
|
|
447
|
+
|
|
448
|
+
def __init__(self):
|
|
449
|
+
self.timings = {}
|
|
450
|
+
self.start_time = None
|
|
451
|
+
|
|
452
|
+
def start_timer(self, operation: str):
|
|
453
|
+
"""Start timing an operation."""
|
|
454
|
+
self.start_time = time.time()
|
|
455
|
+
print(f"⏱️ Starting {operation}...")
|
|
456
|
+
|
|
457
|
+
def end_timer(self, operation: str):
|
|
458
|
+
"""End timing and record result."""
|
|
459
|
+
if self.start_time:
|
|
460
|
+
duration = time.time() - self.start_time
|
|
461
|
+
self.timings[operation] = duration
|
|
462
|
+
print(f"✅ {operation} completed in {duration:.2f}s")
|
|
463
|
+
self.start_time = None
|
|
464
|
+
|
|
465
|
+
def run_timed_command(self, command: list, operation: str):
|
|
466
|
+
"""Run a command with timing."""
|
|
467
|
+
self.start_timer(operation)
|
|
468
|
+
try:
|
|
469
|
+
result = subprocess.run(command, check=True, capture_output=True, text=True)
|
|
470
|
+
self.end_timer(operation)
|
|
471
|
+
return result
|
|
472
|
+
except subprocess.CalledProcessError as e:
|
|
473
|
+
print(f"❌ {operation} failed: {e}")
|
|
474
|
+
return None
|
|
475
|
+
|
|
476
|
+
def print_summary(self):
|
|
477
|
+
"""Print build performance summary."""
|
|
478
|
+
if not self.timings:
|
|
479
|
+
print("No timing data collected")
|
|
480
|
+
return
|
|
481
|
+
|
|
482
|
+
total_time = sum(self.timings.values())
|
|
483
|
+
|
|
484
|
+
print(f"\n📊 Build Performance Summary:")
|
|
485
|
+
print(f" Total build time: {total_time:.2f}s")
|
|
486
|
+
print(f" Individual operations:")
|
|
487
|
+
|
|
488
|
+
for operation, duration in sorted(self.timings.items(), key=lambda x: x[1], reverse=True):
|
|
489
|
+
percentage = (duration / total_time) * 100
|
|
490
|
+
print(f" • {operation}: {duration:.2f}s ({percentage:.1f}%)")
|
|
491
|
+
|
|
492
|
+
def main():
|
|
493
|
+
"""Monitor a full documentation build."""
|
|
494
|
+
monitor = BuildMonitor()
|
|
495
|
+
|
|
496
|
+
# Change to docs directory
|
|
497
|
+
os.chdir('docs')
|
|
498
|
+
|
|
499
|
+
# Clean build
|
|
500
|
+
monitor.run_timed_command(['make', 'clean'], 'Clean build directory')
|
|
501
|
+
|
|
502
|
+
# Template validation
|
|
503
|
+
monitor.run_timed_command(['python', 'validate_templates.py'], 'Template validation')
|
|
504
|
+
|
|
505
|
+
# API generation
|
|
506
|
+
monitor.run_timed_command(['make', 'api-enhanced'], 'Enhanced API generation')
|
|
507
|
+
|
|
508
|
+
# HTML build
|
|
509
|
+
monitor.run_timed_command(['make', 'html'], 'HTML generation')
|
|
510
|
+
|
|
511
|
+
# Print results
|
|
512
|
+
monitor.print_summary()
|
|
513
|
+
|
|
514
|
+
return 0
|
|
515
|
+
|
|
516
|
+
if __name__ == "__main__":
|
|
517
|
+
sys.exit(main())
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
### 3.4 CI/CD Integration Enhancement
|
|
521
|
+
|
|
522
|
+
#### Enhanced GitHub Actions Workflow
|
|
523
|
+
|
|
524
|
+
**Updated `.github/workflows/docs.yml`**:
|
|
525
|
+
|
|
526
|
+
```yaml
|
|
527
|
+
name: Documentation Build and Deploy
|
|
528
|
+
|
|
529
|
+
on:
|
|
530
|
+
push:
|
|
531
|
+
branches: [main, master]
|
|
532
|
+
pull_request:
|
|
533
|
+
branches: [main, master]
|
|
534
|
+
|
|
535
|
+
jobs:
|
|
536
|
+
build-docs:
|
|
537
|
+
runs-on: ubuntu-latest
|
|
538
|
+
steps:
|
|
539
|
+
- uses: actions/checkout@v4
|
|
540
|
+
with:
|
|
541
|
+
fetch-depth: 0
|
|
542
|
+
|
|
543
|
+
- uses: actions/setup-python@v5
|
|
544
|
+
with:
|
|
545
|
+
python-version: '3.11'
|
|
546
|
+
|
|
547
|
+
- name: Install dependencies
|
|
548
|
+
run: |
|
|
549
|
+
python -m pip install --upgrade pip
|
|
550
|
+
pip install -r requirements-dev.txt
|
|
551
|
+
pip install -r docs/requirements.txt
|
|
552
|
+
pip install -e .
|
|
553
|
+
|
|
554
|
+
# Template validation step
|
|
555
|
+
- name: Validate documentation templates
|
|
556
|
+
run: |
|
|
557
|
+
cd docs
|
|
558
|
+
python validate_templates.py
|
|
559
|
+
|
|
560
|
+
# Enhanced build with monitoring
|
|
561
|
+
- name: Build documentation with monitoring
|
|
562
|
+
run: |
|
|
563
|
+
cd docs
|
|
564
|
+
python monitor_build.py
|
|
565
|
+
|
|
566
|
+
# Validation of generated docs
|
|
567
|
+
- name: Validate generated documentation
|
|
568
|
+
run: |
|
|
569
|
+
cd docs
|
|
570
|
+
python validate_generated_docs.py
|
|
571
|
+
|
|
572
|
+
# Check for build warnings
|
|
573
|
+
- name: Check for Sphinx warnings
|
|
574
|
+
run: |
|
|
575
|
+
cd docs
|
|
576
|
+
make html 2>&1 | tee build.log
|
|
577
|
+
if grep -q "WARNING" build.log; then
|
|
578
|
+
echo "⚠️ Sphinx warnings found:"
|
|
579
|
+
grep "WARNING" build.log
|
|
580
|
+
else
|
|
581
|
+
echo "✅ No Sphinx warnings"
|
|
582
|
+
fi
|
|
583
|
+
|
|
584
|
+
- name: Upload documentation artifacts
|
|
585
|
+
uses: actions/upload-artifact@v4
|
|
586
|
+
with:
|
|
587
|
+
name: documentation
|
|
588
|
+
path: docs/_build/html/
|
|
589
|
+
retention-days: 30
|
|
590
|
+
|
|
591
|
+
- name: Upload build logs
|
|
592
|
+
if: always()
|
|
593
|
+
uses: actions/upload-artifact@v4
|
|
594
|
+
with:
|
|
595
|
+
name: build-logs
|
|
596
|
+
path: docs/build.log
|
|
597
|
+
retention-days: 7
|
|
598
|
+
```
|
|
599
|
+
|
|
600
|
+
**Enhancement Benefits**:
|
|
601
|
+
1. **Template Validation**: Catches template issues before build
|
|
602
|
+
2. **Performance Monitoring**: Tracks build performance over time
|
|
603
|
+
3. **Generated Content Validation**: Ensures template enhancements work
|
|
604
|
+
4. **Warning Detection**: Identifies Sphinx warnings automatically
|
|
605
|
+
5. **Comprehensive Artifacts**: Saves both docs and build logs
|
|
606
|
+
|
|
607
|
+
### 3.5 Local Development Integration
|
|
608
|
+
|
|
609
|
+
#### Enhanced Development Makefile Targets
|
|
610
|
+
|
|
611
|
+
**Additional Makefile Targets**:
|
|
612
|
+
|
|
613
|
+
```makefile
|
|
614
|
+
# Development-specific targets for enhanced build system
|
|
615
|
+
|
|
616
|
+
.PHONY: dev-build
|
|
617
|
+
dev-build: validate-templates api-enhanced
|
|
618
|
+
@echo "🔧 Development build with full validation..."
|
|
619
|
+
$(SPHINXBUILD) -b html $(SOURCEDIR) $(BUILDDIR)/html $(SPHINXOPTS) -W
|
|
620
|
+
@echo "🌐 Opening documentation in browser..."
|
|
621
|
+
python -c "import webbrowser; webbrowser.open('file://$(PWD)/_build/html/index.html')"
|
|
622
|
+
|
|
623
|
+
.PHONY: fast-build
|
|
624
|
+
fast-build:
|
|
625
|
+
@echo "⚡ Fast build (skip validation)..."
|
|
626
|
+
sphinx-apidoc -f -o $(SOURCEDIR)/api ../../solarwindpy/solarwindpy --separate
|
|
627
|
+
python add_no_index.py
|
|
628
|
+
$(SPHINXBUILD) -b html $(SOURCEDIR) $(BUILDDIR)/html $(SPHINXOPTS)
|
|
629
|
+
|
|
630
|
+
.PHONY: monitor-build
|
|
631
|
+
monitor-build:
|
|
632
|
+
@echo "📊 Building with performance monitoring..."
|
|
633
|
+
python monitor_build.py
|
|
634
|
+
|
|
635
|
+
.PHONY: validate-all
|
|
636
|
+
validate-all: validate-templates
|
|
637
|
+
@echo "🔍 Comprehensive validation..."
|
|
638
|
+
make api-enhanced
|
|
639
|
+
python validate_generated_docs.py
|
|
640
|
+
@echo "✅ All validation checks complete"
|
|
641
|
+
|
|
642
|
+
# Watch for template changes and rebuild
|
|
643
|
+
.PHONY: watch-templates
|
|
644
|
+
watch-templates:
|
|
645
|
+
@echo "👀 Watching templates for changes..."
|
|
646
|
+
@echo "Run 'make dev-build' in another terminal when templates change"
|
|
647
|
+
python -c "
|
|
648
|
+
import time
|
|
649
|
+
from pathlib import Path
|
|
650
|
+
from watchdog.observers import Observer
|
|
651
|
+
from watchdog.events import FileSystemEventHandler
|
|
652
|
+
|
|
653
|
+
class TemplateHandler(FileSystemEventHandler):
|
|
654
|
+
def on_modified(self, event):
|
|
655
|
+
if event.src_path.endswith('.rst'):
|
|
656
|
+
print(f'🔄 Template changed: {event.src_path}')
|
|
657
|
+
print(' Run: make dev-build')
|
|
658
|
+
|
|
659
|
+
observer = Observer()
|
|
660
|
+
observer.schedule(TemplateHandler(), 'source/_templates', recursive=True)
|
|
661
|
+
observer.start()
|
|
662
|
+
|
|
663
|
+
try:
|
|
664
|
+
while True:
|
|
665
|
+
time.sleep(1)
|
|
666
|
+
except KeyboardInterrupt:
|
|
667
|
+
observer.stop()
|
|
668
|
+
observer.join()
|
|
669
|
+
"
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
## Success Criteria
|
|
673
|
+
|
|
674
|
+
### Build System Integration Validation
|
|
675
|
+
|
|
676
|
+
- [ ] **Enhanced post-processing** handles template-generated content correctly
|
|
677
|
+
- [ ] **Template validation** catches syntax errors before build
|
|
678
|
+
- [ ] **Generated content validation** ensures physics sections are present
|
|
679
|
+
- [ ] **Performance monitoring** provides build time insights
|
|
680
|
+
- [ ] **CI/CD integration** works seamlessly with enhancements
|
|
681
|
+
- [ ] **Local development** workflow is improved and streamlined
|
|
682
|
+
|
|
683
|
+
### Quality Assurance
|
|
684
|
+
|
|
685
|
+
- [ ] **No build failures** introduced by integration changes
|
|
686
|
+
- [ ] **No regression** in existing documentation quality
|
|
687
|
+
- [ ] **Enhanced physics content** appears in generated documentation
|
|
688
|
+
- [ ] **Cross-references work** correctly after processing
|
|
689
|
+
- [ ] **Warning-free builds** for all documentation
|
|
690
|
+
- [ ] **Fast build times** maintained despite enhancements
|
|
691
|
+
|
|
692
|
+
### Developer Experience
|
|
693
|
+
|
|
694
|
+
- [ ] **Clear error messages** when template issues occur
|
|
695
|
+
- [ ] **Automated validation** prevents common mistakes
|
|
696
|
+
- [ ] **Performance feedback** helps optimize build process
|
|
697
|
+
- [ ] **Development targets** streamline local workflow
|
|
698
|
+
- [ ] **Comprehensive logging** aids in debugging issues
|
|
699
|
+
|
|
700
|
+
## Implementation Timeline
|
|
701
|
+
|
|
702
|
+
| Task | Duration | Dependencies | Validation |
|
|
703
|
+
|------|----------|--------------|------------|
|
|
704
|
+
| **Enhanced post-processing script** | 60 min | Phase 2 templates | Script testing |
|
|
705
|
+
| **Validation framework creation** | 45 min | Enhanced script | Framework testing |
|
|
706
|
+
| **Makefile target enhancements** | 30 min | Validation framework | Build testing |
|
|
707
|
+
| **Performance monitoring setup** | 30 min | Makefile changes | Performance validation |
|
|
708
|
+
| **CI/CD workflow updates** | 30 min | All components | Workflow testing |
|
|
709
|
+
| **Local development integration** | 30 min | CI/CD changes | Developer testing |
|
|
710
|
+
|
|
711
|
+
**Total Phase 3 Time**: 3.5 hours
|
|
712
|
+
|
|
713
|
+
## Commit Tracking
|
|
714
|
+
|
|
715
|
+
- Enhanced post-processing: `<checksum_enhanced_processing>`
|
|
716
|
+
- Validation framework: `<checksum_validation_framework>`
|
|
717
|
+
- Makefile enhancements: `<checksum_makefile_enhanced>`
|
|
718
|
+
- Performance monitoring: `<checksum_performance_monitoring>`
|
|
719
|
+
- CI/CD integration: `<checksum_cicd_integration>`
|
|
720
|
+
- Local development tools: `<checksum_local_dev_tools>`
|
|
721
|
+
- Phase 3 completion: `<checksum_phase3_complete>`
|
|
722
|
+
|
|
723
|
+
## Risk Mitigation
|
|
724
|
+
|
|
725
|
+
### Integration Risks
|
|
726
|
+
|
|
727
|
+
| Risk | Probability | Impact | Mitigation |
|
|
728
|
+
|------|-------------|--------|------------|
|
|
729
|
+
| **Build system breakage** | Low | High | Incremental testing + rollback plan |
|
|
730
|
+
| **Performance degradation** | Medium | Medium | Performance monitoring + optimization |
|
|
731
|
+
| **CI/CD pipeline failures** | Low | High | Staged deployment + validation |
|
|
732
|
+
| **Developer workflow disruption** | Medium | Low | Clear documentation + training |
|
|
733
|
+
|
|
734
|
+
### Rollback Strategy
|
|
735
|
+
|
|
736
|
+
```bash
|
|
737
|
+
# Emergency rollback for build system issues
|
|
738
|
+
|
|
739
|
+
# 1. Restore original post-processing
|
|
740
|
+
git checkout HEAD~1 -- docs/add_no_index.py
|
|
741
|
+
|
|
742
|
+
# 2. Restore original Makefile
|
|
743
|
+
git checkout HEAD~1 -- docs/Makefile
|
|
744
|
+
|
|
745
|
+
# 3. Restore original CI/CD workflow
|
|
746
|
+
git checkout HEAD~1 -- .github/workflows/docs.yml
|
|
747
|
+
|
|
748
|
+
# 4. Test basic build
|
|
749
|
+
cd docs
|
|
750
|
+
make clean
|
|
751
|
+
make html
|
|
752
|
+
|
|
753
|
+
# 5. If successful, commit rollback
|
|
754
|
+
git add . && git commit -m "Emergency rollback of build system changes"
|
|
755
|
+
```
|
|
756
|
+
|
|
757
|
+
## Next Phase Preparation
|
|
758
|
+
|
|
759
|
+
Phase 4 (Testing & Validation) should focus on:
|
|
760
|
+
1. **Comprehensive build testing** across different environments
|
|
761
|
+
2. **Template content validation** for scientific accuracy
|
|
762
|
+
3. **Performance regression testing** to ensure efficiency
|
|
763
|
+
4. **CI/CD integration testing** with multiple scenarios
|
|
764
|
+
5. **User acceptance testing** with physics documentation users
|
|
765
|
+
|
|
766
|
+
The enhanced build system provides robust infrastructure for persistent, high-quality physics documentation with comprehensive validation and monitoring capabilities.
|