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,811 @@
|
|
|
1
|
+
# Phase 2: Template System Enhancement
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Implement a robust, physics-aware template system that eliminates manual RST editing by making all documentation customizations persistent through templates that survive build regeneration.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
After Phase 1, documentation builds are functional. Phase 2 establishes the template foundation that enables automated, consistent documentation generation while preserving scientific context and customizations.
|
|
8
|
+
|
|
9
|
+
## Current Template Infrastructure
|
|
10
|
+
|
|
11
|
+
### Existing Components
|
|
12
|
+
- **Template directory**: `docs/source/_templates/autosummary/`
|
|
13
|
+
- **Template files**: `module.rst`, `class.rst`
|
|
14
|
+
- **Sphinx configuration**: `autosummary_generate = True`
|
|
15
|
+
- **Post-processing**: `docs/add_no_index.py` script
|
|
16
|
+
- **Build integration**: Makefile with `api` target
|
|
17
|
+
|
|
18
|
+
### Template Processing Pipeline
|
|
19
|
+
```
|
|
20
|
+
sphinx-apidoc → Template Application → Post-processing → HTML Generation
|
|
21
|
+
↓ ↓ ↓ ↓
|
|
22
|
+
RST Generation Template Merge add_no_index.py Final Docs
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Implementation Strategy
|
|
26
|
+
|
|
27
|
+
### Step 2.1: Template Analysis and Baseline (30 minutes)
|
|
28
|
+
|
|
29
|
+
**Current Template Assessment**:
|
|
30
|
+
```bash
|
|
31
|
+
# Examine existing templates
|
|
32
|
+
ls -la docs/source/_templates/autosummary/
|
|
33
|
+
cat docs/source/_templates/autosummary/module.rst
|
|
34
|
+
cat docs/source/_templates/autosummary/class.rst
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**Identify Enhancement Areas**:
|
|
38
|
+
1. **Physics Context**: Add scientific documentation sections
|
|
39
|
+
2. **Cross-references**: Improve linking between physics concepts
|
|
40
|
+
3. **Units and Dimensions**: Standardize physical quantity documentation
|
|
41
|
+
4. **Examples**: Template-driven example generation
|
|
42
|
+
5. **Bibliography**: Physics-specific references
|
|
43
|
+
|
|
44
|
+
### Step 2.2: Enhanced Module Template (60 minutes)
|
|
45
|
+
|
|
46
|
+
**Target**: `docs/source/_templates/autosummary/module.rst`
|
|
47
|
+
|
|
48
|
+
**Enhanced Template Structure**:
|
|
49
|
+
```rst
|
|
50
|
+
{{ fullname | escape | underline}}
|
|
51
|
+
|
|
52
|
+
{% if members %}
|
|
53
|
+
.. currentmodule:: {{ fullname }}
|
|
54
|
+
|
|
55
|
+
{% if fullname.endswith('.core') %}
|
|
56
|
+
Physics Overview
|
|
57
|
+
================
|
|
58
|
+
|
|
59
|
+
This module provides core physics functionality for solar wind analysis.
|
|
60
|
+
|
|
61
|
+
Physical Principles
|
|
62
|
+
-------------------
|
|
63
|
+
|
|
64
|
+
{% if 'plasma' in fullname %}
|
|
65
|
+
**Plasma Physics Context**:
|
|
66
|
+
- Multi-species plasma analysis
|
|
67
|
+
- Kinetic theory applications
|
|
68
|
+
- Thermal properties and distributions
|
|
69
|
+
- Magnetic field interactions
|
|
70
|
+
|
|
71
|
+
**Key Physical Relationships**:
|
|
72
|
+
- Thermal speed: :math:`v_{th} = \sqrt{2kT/m}` (SolarWindPy convention)
|
|
73
|
+
- Alfvén speed: :math:`V_A = B/\sqrt{\mu_0 \rho}`
|
|
74
|
+
- Plasma beta: :math:`\beta = 2\mu_0 nkT/B^2`
|
|
75
|
+
|
|
76
|
+
{% elif 'ions' in fullname %}
|
|
77
|
+
**Ion Species Analysis**:
|
|
78
|
+
- Multi-species moment calculations
|
|
79
|
+
- Composition and abundance
|
|
80
|
+
- Temperature and velocity distributions
|
|
81
|
+
- Species-specific physical properties
|
|
82
|
+
|
|
83
|
+
**Physical Quantities**:
|
|
84
|
+
- Number density: particles per cubic meter
|
|
85
|
+
- Bulk velocity: km/s (converted for display)
|
|
86
|
+
- Temperature: Kelvin or eV (configurable)
|
|
87
|
+
- Thermal speed: km/s (mw² = 2kT convention)
|
|
88
|
+
|
|
89
|
+
{% endif %}
|
|
90
|
+
|
|
91
|
+
Units and Conventions
|
|
92
|
+
---------------------
|
|
93
|
+
|
|
94
|
+
**SolarWindPy Physics Standards**:
|
|
95
|
+
- **Internal units**: SI base units throughout
|
|
96
|
+
- **Display units**: Convenient units for solar wind context
|
|
97
|
+
- **Missing data**: NaN (never 0 or -999)
|
|
98
|
+
- **Time series**: Chronological order maintained
|
|
99
|
+
- **Thermal speed**: mw² = 2kT convention consistently applied
|
|
100
|
+
|
|
101
|
+
{% endif %}
|
|
102
|
+
|
|
103
|
+
{% block modules %}
|
|
104
|
+
{% if modules %}
|
|
105
|
+
.. rubric:: Modules
|
|
106
|
+
|
|
107
|
+
.. autosummary::
|
|
108
|
+
:toctree:
|
|
109
|
+
:template: module.rst
|
|
110
|
+
{% for item in modules %}
|
|
111
|
+
{{ item }}
|
|
112
|
+
{%- endfor %}
|
|
113
|
+
{% endif %}
|
|
114
|
+
{% endblock %}
|
|
115
|
+
|
|
116
|
+
{% block classes %}
|
|
117
|
+
{% if classes %}
|
|
118
|
+
.. rubric:: Classes
|
|
119
|
+
|
|
120
|
+
.. autosummary::
|
|
121
|
+
:toctree:
|
|
122
|
+
:template: class.rst
|
|
123
|
+
{% for item in classes %}
|
|
124
|
+
{{ item }}
|
|
125
|
+
{%- endfor %}
|
|
126
|
+
{% endif %}
|
|
127
|
+
{% endblock %}
|
|
128
|
+
|
|
129
|
+
{% block functions %}
|
|
130
|
+
{% if functions %}
|
|
131
|
+
.. rubric:: Functions
|
|
132
|
+
|
|
133
|
+
.. autosummary::
|
|
134
|
+
:toctree:
|
|
135
|
+
{% for item in functions %}
|
|
136
|
+
{{ item }}
|
|
137
|
+
{%- endfor %}
|
|
138
|
+
{% endif %}
|
|
139
|
+
{% endblock %}
|
|
140
|
+
|
|
141
|
+
{% block exceptions %}
|
|
142
|
+
{% if exceptions %}
|
|
143
|
+
.. rubric:: Exceptions
|
|
144
|
+
|
|
145
|
+
.. autosummary::
|
|
146
|
+
:toctree:
|
|
147
|
+
{% for item in exceptions %}
|
|
148
|
+
{{ item }}
|
|
149
|
+
{%- endfor %}
|
|
150
|
+
{% endif %}
|
|
151
|
+
{% endblock %}
|
|
152
|
+
|
|
153
|
+
{% endif %}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Step 2.3: Enhanced Class Template (90 minutes)
|
|
157
|
+
|
|
158
|
+
**Target**: `docs/source/_templates/autosummary/class.rst`
|
|
159
|
+
|
|
160
|
+
**Physics-Aware Class Template**:
|
|
161
|
+
```rst
|
|
162
|
+
{{ fullname | escape | underline}}
|
|
163
|
+
|
|
164
|
+
.. currentmodule:: {{ module }}
|
|
165
|
+
|
|
166
|
+
.. autoclass:: {{ objname }}
|
|
167
|
+
:no-index:
|
|
168
|
+
|
|
169
|
+
{% if objname in ['Plasma', 'Ion', 'Base'] %}
|
|
170
|
+
|
|
171
|
+
Physical Properties
|
|
172
|
+
===================
|
|
173
|
+
|
|
174
|
+
{% if objname == 'Plasma' %}
|
|
175
|
+
|
|
176
|
+
**Multi-Species Plasma Container**
|
|
177
|
+
|
|
178
|
+
The Plasma class represents a collection of ion species and magnetic field data,
|
|
179
|
+
providing comprehensive analysis capabilities for solar wind plasma physics.
|
|
180
|
+
|
|
181
|
+
**Physical Context**:
|
|
182
|
+
- Contains multiple Ion instances representing different species
|
|
183
|
+
- Manages magnetic field vector data and derived quantities
|
|
184
|
+
- Provides plasma-level calculations and analysis methods
|
|
185
|
+
- Maintains temporal coherence across all plasma components
|
|
186
|
+
|
|
187
|
+
**Key Physical Relationships**:
|
|
188
|
+
|
|
189
|
+
.. math::
|
|
190
|
+
|
|
191
|
+
\rho = \sum_i n_i m_i \quad \text{(total mass density)}
|
|
192
|
+
|
|
193
|
+
V_A = \frac{B}{\sqrt{\mu_0 \rho}} \quad \text{(Alfvén velocity)}
|
|
194
|
+
|
|
195
|
+
\beta = \frac{2\mu_0 \sum_i n_i k T_i}{B^2} \quad \text{(plasma beta)}
|
|
196
|
+
|
|
197
|
+
{% elif objname == 'Ion' %}
|
|
198
|
+
|
|
199
|
+
**Single Ion Species Analysis**
|
|
200
|
+
|
|
201
|
+
The Ion class represents a single ion species with its associated physical
|
|
202
|
+
properties, moments, and derived quantities for solar wind analysis.
|
|
203
|
+
|
|
204
|
+
**Physical Properties**:
|
|
205
|
+
- Number density (n): particles per cubic meter
|
|
206
|
+
- Bulk velocity (V): three-component vector in km/s
|
|
207
|
+
- Temperature (T): scalar or tensor in Kelvin
|
|
208
|
+
- Thermal speed (w): based on mw² = 2kT convention
|
|
209
|
+
|
|
210
|
+
**Moment Calculations**:
|
|
211
|
+
|
|
212
|
+
.. math::
|
|
213
|
+
|
|
214
|
+
n = \int f(\mathbf{v}) d^3v \quad \text{(zeroth moment)}
|
|
215
|
+
|
|
216
|
+
\mathbf{V} = \frac{1}{n} \int \mathbf{v} f(\mathbf{v}) d^3v \quad \text{(first moment)}
|
|
217
|
+
|
|
218
|
+
T = \frac{m}{3nk} \int |\mathbf{v} - \mathbf{V}|^2 f(\mathbf{v}) d^3v \quad \text{(temperature)}
|
|
219
|
+
|
|
220
|
+
{% elif objname == 'Base' %}
|
|
221
|
+
|
|
222
|
+
**Foundation Physics Class**
|
|
223
|
+
|
|
224
|
+
The Base class provides fundamental physics constants, unit conversions,
|
|
225
|
+
and common functionality shared across all SolarWindPy physics classes.
|
|
226
|
+
|
|
227
|
+
**Physical Constants**:
|
|
228
|
+
- Fundamental constants (k, c, mp, me, etc.)
|
|
229
|
+
- Unit conversion factors
|
|
230
|
+
- Standard solar wind reference values
|
|
231
|
+
|
|
232
|
+
**Conventions**:
|
|
233
|
+
- SI units for all internal calculations
|
|
234
|
+
- Consistent treatment of missing data (NaN)
|
|
235
|
+
- Thermal speed convention: mw² = 2kT
|
|
236
|
+
|
|
237
|
+
{% endif %}
|
|
238
|
+
|
|
239
|
+
Units and Dimensions
|
|
240
|
+
====================
|
|
241
|
+
|
|
242
|
+
**Internal Representation** (SI base units):
|
|
243
|
+
- Length: meters
|
|
244
|
+
- Time: seconds
|
|
245
|
+
- Mass: kilograms
|
|
246
|
+
- Temperature: Kelvin
|
|
247
|
+
- Magnetic field: Tesla
|
|
248
|
+
|
|
249
|
+
**Display Units** (solar wind context):
|
|
250
|
+
- Velocity: km/s
|
|
251
|
+
- Number density: particles/cm³
|
|
252
|
+
- Magnetic field: nT
|
|
253
|
+
- Temperature: K or eV
|
|
254
|
+
|
|
255
|
+
**Data Quality Standards**:
|
|
256
|
+
- Missing values: NaN (numpy.nan)
|
|
257
|
+
- Invalid values: Never 0 or -999
|
|
258
|
+
- Time series: Monotonic time ordering
|
|
259
|
+
- Physical constraints: Positive definite quantities
|
|
260
|
+
|
|
261
|
+
{% endif %}
|
|
262
|
+
|
|
263
|
+
.. rubric:: Methods
|
|
264
|
+
|
|
265
|
+
.. autosummary::
|
|
266
|
+
{% for item in methods %}
|
|
267
|
+
~{{ name }}.{{ item }}
|
|
268
|
+
{%- endfor %}
|
|
269
|
+
|
|
270
|
+
.. rubric:: Attributes
|
|
271
|
+
|
|
272
|
+
.. autosummary::
|
|
273
|
+
{% for item in attributes %}
|
|
274
|
+
~{{ name }}.{{ item }}
|
|
275
|
+
{%- endfor %}
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### Step 2.4: Enhanced Post-Processing (45 minutes)
|
|
279
|
+
|
|
280
|
+
**Target**: `docs/add_no_index.py`
|
|
281
|
+
|
|
282
|
+
**Enhanced Post-Processing Framework**:
|
|
283
|
+
```python
|
|
284
|
+
#!/usr/bin/env python3
|
|
285
|
+
"""
|
|
286
|
+
Enhanced post-processing for SolarWindPy documentation.
|
|
287
|
+
Handles template-generated content validation and physics-specific enhancements.
|
|
288
|
+
"""
|
|
289
|
+
|
|
290
|
+
import os
|
|
291
|
+
import re
|
|
292
|
+
import glob
|
|
293
|
+
import sys
|
|
294
|
+
from pathlib import Path
|
|
295
|
+
from typing import List, Dict, Tuple
|
|
296
|
+
|
|
297
|
+
class DocumentationProcessor:
|
|
298
|
+
"""Enhanced documentation post-processor for physics content."""
|
|
299
|
+
|
|
300
|
+
def __init__(self, source_dir: str = "source/api"):
|
|
301
|
+
self.source_dir = Path(source_dir)
|
|
302
|
+
self.errors: List[str] = []
|
|
303
|
+
self.warnings: List[str] = []
|
|
304
|
+
self.stats: Dict[str, int] = {
|
|
305
|
+
'files_processed': 0,
|
|
306
|
+
'physics_sections_added': 0,
|
|
307
|
+
'cross_references_fixed': 0,
|
|
308
|
+
'validation_warnings': 0,
|
|
309
|
+
'no_index_added': 0
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
def process_no_index_directives(self, content: str) -> str:
|
|
313
|
+
"""Add :no-index: directives to automodule declarations."""
|
|
314
|
+
pattern = r'(\.\. automodule:: .+?)(\n :members:)'
|
|
315
|
+
replacement = r'\1\n :no-index:\2'
|
|
316
|
+
new_content = re.sub(pattern, replacement, content)
|
|
317
|
+
|
|
318
|
+
if new_content != content:
|
|
319
|
+
self.stats['no_index_added'] += 1
|
|
320
|
+
|
|
321
|
+
return new_content
|
|
322
|
+
|
|
323
|
+
def validate_physics_sections(self, content: str, filename: str) -> str:
|
|
324
|
+
"""Validate and enhance physics-specific sections."""
|
|
325
|
+
physics_classes = ['Plasma', 'Ion', 'Base']
|
|
326
|
+
physics_modules = ['plasma', 'ions', 'base']
|
|
327
|
+
|
|
328
|
+
# Check for physics classes
|
|
329
|
+
for physics_class in physics_classes:
|
|
330
|
+
if f'autoclass:: solarwindpy.core.{physics_class.lower()}.{physics_class}' in content:
|
|
331
|
+
if 'Physical Properties' not in content:
|
|
332
|
+
self.warnings.append(f"{filename}: Missing Physical Properties section for {physics_class}")
|
|
333
|
+
self.stats['validation_warnings'] += 1
|
|
334
|
+
else:
|
|
335
|
+
self.stats['physics_sections_added'] += 1
|
|
336
|
+
|
|
337
|
+
# Check for physics modules
|
|
338
|
+
for physics_module in physics_modules:
|
|
339
|
+
if f'solarwindpy.core.{physics_module}' in content:
|
|
340
|
+
if 'Physics Overview' not in content and 'module.rst' in filename:
|
|
341
|
+
self.warnings.append(f"{filename}: Missing Physics Overview for {physics_module}")
|
|
342
|
+
self.stats['validation_warnings'] += 1
|
|
343
|
+
|
|
344
|
+
return content
|
|
345
|
+
|
|
346
|
+
def fix_cross_references(self, content: str) -> str:
|
|
347
|
+
"""Fix and enhance cross-references for physics concepts."""
|
|
348
|
+
cross_ref_patterns = {
|
|
349
|
+
# Fix unlinked class references
|
|
350
|
+
r'(?<!:py:class:`~)solarwindpy\.core\.plasma\.Plasma(?!`)':
|
|
351
|
+
r':py:class:`~solarwindpy.core.plasma.Plasma`',
|
|
352
|
+
r'(?<!:py:class:`~)solarwindpy\.core\.ions\.Ion(?!`)':
|
|
353
|
+
r':py:class:`~solarwindpy.core.ions.Ion`',
|
|
354
|
+
r'(?<!:py:class:`~)solarwindpy\.core\.base\.Base(?!`)':
|
|
355
|
+
r':py:class:`~solarwindpy.core.base.Base`',
|
|
356
|
+
|
|
357
|
+
# Fix physics units
|
|
358
|
+
r'km/s(?! |$|\.)': r'km/s',
|
|
359
|
+
r'nT(?! |$|\.)': r'nT',
|
|
360
|
+
r'particles/cm³': r'particles/cm³',
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
for pattern, replacement in cross_ref_patterns.items():
|
|
364
|
+
if re.search(pattern, content):
|
|
365
|
+
content = re.sub(pattern, replacement, content)
|
|
366
|
+
self.stats['cross_references_fixed'] += 1
|
|
367
|
+
|
|
368
|
+
return content
|
|
369
|
+
|
|
370
|
+
def process_file(self, file_path: Path) -> None:
|
|
371
|
+
"""Process a single RST file with all enhancements."""
|
|
372
|
+
try:
|
|
373
|
+
with open(file_path, 'r', encoding='utf-8') as f:
|
|
374
|
+
content = f.read()
|
|
375
|
+
|
|
376
|
+
original_content = content
|
|
377
|
+
|
|
378
|
+
# Apply all processing steps
|
|
379
|
+
content = self.process_no_index_directives(content)
|
|
380
|
+
content = self.validate_physics_sections(content, file_path.name)
|
|
381
|
+
content = self.fix_cross_references(content)
|
|
382
|
+
|
|
383
|
+
# Only write if content changed
|
|
384
|
+
if content != original_content:
|
|
385
|
+
with open(file_path, 'w', encoding='utf-8') as f:
|
|
386
|
+
f.write(content)
|
|
387
|
+
|
|
388
|
+
self.stats['files_processed'] += 1
|
|
389
|
+
|
|
390
|
+
except Exception as e:
|
|
391
|
+
error_msg = f"Error processing {file_path}: {e}"
|
|
392
|
+
self.errors.append(error_msg)
|
|
393
|
+
print(f"❌ {error_msg}", file=sys.stderr)
|
|
394
|
+
|
|
395
|
+
def process_all_files(self) -> bool:
|
|
396
|
+
"""Process all RST files in the API directory."""
|
|
397
|
+
rst_files = list(self.source_dir.glob("*.rst"))
|
|
398
|
+
|
|
399
|
+
if not rst_files:
|
|
400
|
+
self.errors.append(f"No RST files found in {self.source_dir}")
|
|
401
|
+
return False
|
|
402
|
+
|
|
403
|
+
print(f"🔄 Processing {len(rst_files)} documentation files...")
|
|
404
|
+
|
|
405
|
+
for rst_file in rst_files:
|
|
406
|
+
self.process_file(rst_file)
|
|
407
|
+
|
|
408
|
+
return len(self.errors) == 0
|
|
409
|
+
|
|
410
|
+
def print_summary(self) -> None:
|
|
411
|
+
"""Print processing summary with physics-specific metrics."""
|
|
412
|
+
print(f"\n📊 Enhanced Documentation Processing Summary:")
|
|
413
|
+
print(f" • Files processed: {self.stats['files_processed']}")
|
|
414
|
+
print(f" • :no-index: directives added: {self.stats['no_index_added']}")
|
|
415
|
+
print(f" • Physics sections validated: {self.stats['physics_sections_added']}")
|
|
416
|
+
print(f" • Cross-references fixed: {self.stats['cross_references_fixed']}")
|
|
417
|
+
print(f" • Validation warnings: {self.stats['validation_warnings']}")
|
|
418
|
+
print(f" • Processing errors: {len(self.errors)}")
|
|
419
|
+
|
|
420
|
+
if self.warnings:
|
|
421
|
+
print(f"\n⚠️ Physics Validation Warnings:")
|
|
422
|
+
for warning in self.warnings:
|
|
423
|
+
print(f" • {warning}")
|
|
424
|
+
|
|
425
|
+
if self.errors:
|
|
426
|
+
print(f"\n❌ Processing Errors:")
|
|
427
|
+
for error in self.errors:
|
|
428
|
+
print(f" • {error}")
|
|
429
|
+
|
|
430
|
+
def main():
|
|
431
|
+
"""Main processing function with enhanced capabilities."""
|
|
432
|
+
processor = DocumentationProcessor()
|
|
433
|
+
|
|
434
|
+
success = processor.process_all_files()
|
|
435
|
+
processor.print_summary()
|
|
436
|
+
|
|
437
|
+
if success:
|
|
438
|
+
print("\n✅ Enhanced documentation processing completed successfully!")
|
|
439
|
+
print(" 📋 Physics sections validated")
|
|
440
|
+
print(" 🔗 Cross-references standardized")
|
|
441
|
+
print(" 📚 Template enhancements applied")
|
|
442
|
+
return 0
|
|
443
|
+
else:
|
|
444
|
+
print("\n❌ Documentation processing failed!")
|
|
445
|
+
return 1
|
|
446
|
+
|
|
447
|
+
if __name__ == "__main__":
|
|
448
|
+
sys.exit(main())
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
### Step 2.5: Build System Integration (45 minutes)
|
|
452
|
+
|
|
453
|
+
**Enhanced Makefile Integration**:
|
|
454
|
+
|
|
455
|
+
**Target**: `docs/Makefile` - Add enhanced API generation target
|
|
456
|
+
|
|
457
|
+
```makefile
|
|
458
|
+
# Enhanced API documentation generation with template validation
|
|
459
|
+
.PHONY: api-enhanced
|
|
460
|
+
api-enhanced:
|
|
461
|
+
@echo "🔍 Validating documentation templates..."
|
|
462
|
+
@python -c "
|
|
463
|
+
import os
|
|
464
|
+
from pathlib import Path
|
|
465
|
+
templates = Path('source/_templates/autosummary')
|
|
466
|
+
required = ['module.rst', 'class.rst']
|
|
467
|
+
missing = [t for t in required if not (templates / t).exists()]
|
|
468
|
+
if missing:
|
|
469
|
+
print('❌ Missing templates:', missing)
|
|
470
|
+
exit(1)
|
|
471
|
+
else:
|
|
472
|
+
print('✅ Templates validated')
|
|
473
|
+
"
|
|
474
|
+
@echo "🔧 Generating enhanced API documentation..."
|
|
475
|
+
sphinx-apidoc -f -o $(SOURCEDIR)/api ../../solarwindpy/solarwindpy --separate
|
|
476
|
+
@echo "⚙️ Applying physics-aware post-processing..."
|
|
477
|
+
python add_no_index.py
|
|
478
|
+
@echo "✅ Enhanced API generation complete"
|
|
479
|
+
|
|
480
|
+
# Update HTML target to use enhanced API
|
|
481
|
+
html: api-enhanced
|
|
482
|
+
@echo "🏗️ Building HTML documentation with enhanced templates..."
|
|
483
|
+
$(SPHINXBUILD) -b html $(SOURCEDIR) $(BUILDDIR)/html $(SPHINXOPTS)
|
|
484
|
+
@echo "✅ Enhanced HTML documentation build complete"
|
|
485
|
+
|
|
486
|
+
# Development target with validation
|
|
487
|
+
.PHONY: dev-build
|
|
488
|
+
dev-build: api-enhanced
|
|
489
|
+
@echo "🔧 Development build with physics validation..."
|
|
490
|
+
$(SPHINXBUILD) -b html $(SOURCEDIR) $(BUILDDIR)/html $(SPHINXOPTS) -W
|
|
491
|
+
@echo "🌐 Opening documentation..."
|
|
492
|
+
python -c "import webbrowser; webbrowser.open('file://$(PWD)/_build/html/index.html')"
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
### Step 2.6: Template Validation (30 minutes)
|
|
496
|
+
|
|
497
|
+
**Create Template Validation Script**:
|
|
498
|
+
|
|
499
|
+
**Target**: `docs/validate_templates.py`
|
|
500
|
+
|
|
501
|
+
```python
|
|
502
|
+
#!/usr/bin/env python3
|
|
503
|
+
"""
|
|
504
|
+
Template validation script for SolarWindPy documentation system.
|
|
505
|
+
Ensures template syntax and physics content requirements.
|
|
506
|
+
"""
|
|
507
|
+
|
|
508
|
+
import os
|
|
509
|
+
import re
|
|
510
|
+
import sys
|
|
511
|
+
from pathlib import Path
|
|
512
|
+
from typing import List, Dict, Tuple
|
|
513
|
+
|
|
514
|
+
class TemplateValidator:
|
|
515
|
+
"""Validator for documentation templates."""
|
|
516
|
+
|
|
517
|
+
def __init__(self, template_dir: str = "source/_templates/autosummary"):
|
|
518
|
+
self.template_dir = Path(template_dir)
|
|
519
|
+
self.errors: List[str] = []
|
|
520
|
+
self.warnings: List[str] = []
|
|
521
|
+
self.stats: Dict[str, int] = {
|
|
522
|
+
'templates_checked': 0,
|
|
523
|
+
'physics_sections_found': 0,
|
|
524
|
+
'syntax_errors': 0,
|
|
525
|
+
'missing_requirements': 0
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
def validate_template_syntax(self, template_path: Path) -> bool:
|
|
529
|
+
"""Validate Jinja2 template syntax."""
|
|
530
|
+
try:
|
|
531
|
+
with open(template_path, 'r', encoding='utf-8') as f:
|
|
532
|
+
content = f.read()
|
|
533
|
+
|
|
534
|
+
# Basic Jinja2 syntax validation
|
|
535
|
+
jinja_patterns = [
|
|
536
|
+
r'{%.*%}', # Control structures
|
|
537
|
+
r'{{.*}}', # Variables
|
|
538
|
+
r'{#.*#}', # Comments
|
|
539
|
+
]
|
|
540
|
+
|
|
541
|
+
# Check for unmatched brackets
|
|
542
|
+
open_control = content.count('{%')
|
|
543
|
+
close_control = content.count('%}')
|
|
544
|
+
open_var = content.count('{{')
|
|
545
|
+
close_var = content.count('}}')
|
|
546
|
+
|
|
547
|
+
if open_control != close_control:
|
|
548
|
+
self.errors.append(f"{template_path.name}: Unmatched control brackets")
|
|
549
|
+
return False
|
|
550
|
+
|
|
551
|
+
if open_var != close_var:
|
|
552
|
+
self.errors.append(f"{template_path.name}: Unmatched variable brackets")
|
|
553
|
+
return False
|
|
554
|
+
|
|
555
|
+
return True
|
|
556
|
+
|
|
557
|
+
except Exception as e:
|
|
558
|
+
self.errors.append(f"{template_path.name}: Syntax error - {e}")
|
|
559
|
+
return False
|
|
560
|
+
|
|
561
|
+
def validate_physics_content(self, template_path: Path) -> bool:
|
|
562
|
+
"""Validate physics-specific content requirements."""
|
|
563
|
+
try:
|
|
564
|
+
with open(template_path, 'r', encoding='utf-8') as f:
|
|
565
|
+
content = f.read()
|
|
566
|
+
|
|
567
|
+
template_name = template_path.name
|
|
568
|
+
issues_found = False
|
|
569
|
+
|
|
570
|
+
if template_name == 'class.rst':
|
|
571
|
+
# Check for physics sections in class template
|
|
572
|
+
required_sections = ['Physical Properties', 'Units and Dimensions']
|
|
573
|
+
|
|
574
|
+
for section in required_sections:
|
|
575
|
+
if section not in content:
|
|
576
|
+
self.warnings.append(f"{template_name}: Missing '{section}' section")
|
|
577
|
+
self.stats['missing_requirements'] += 1
|
|
578
|
+
issues_found = True
|
|
579
|
+
else:
|
|
580
|
+
self.stats['physics_sections_found'] += 1
|
|
581
|
+
|
|
582
|
+
# Check for physics classes handling
|
|
583
|
+
physics_classes = ['Plasma', 'Ion', 'Base']
|
|
584
|
+
for cls in physics_classes:
|
|
585
|
+
if cls in content:
|
|
586
|
+
self.stats['physics_sections_found'] += 1
|
|
587
|
+
|
|
588
|
+
elif template_name == 'module.rst':
|
|
589
|
+
# Check for physics overview in module template
|
|
590
|
+
if 'Physics Overview' in content:
|
|
591
|
+
self.stats['physics_sections_found'] += 1
|
|
592
|
+
else:
|
|
593
|
+
self.warnings.append(f"{template_name}: Consider adding Physics Overview section")
|
|
594
|
+
|
|
595
|
+
return not issues_found
|
|
596
|
+
|
|
597
|
+
except Exception as e:
|
|
598
|
+
self.errors.append(f"{template_path.name}: Physics validation error - {e}")
|
|
599
|
+
return False
|
|
600
|
+
|
|
601
|
+
def validate_all_templates(self) -> bool:
|
|
602
|
+
"""Validate all templates in the directory."""
|
|
603
|
+
template_files = list(self.template_dir.glob("*.rst"))
|
|
604
|
+
|
|
605
|
+
if not template_files:
|
|
606
|
+
self.errors.append(f"No template files found in {self.template_dir}")
|
|
607
|
+
return False
|
|
608
|
+
|
|
609
|
+
print(f"🔍 Validating {len(template_files)} documentation templates...")
|
|
610
|
+
|
|
611
|
+
all_valid = True
|
|
612
|
+
for template_file in template_files:
|
|
613
|
+
print(f" Checking {template_file.name}...")
|
|
614
|
+
|
|
615
|
+
syntax_valid = self.validate_template_syntax(template_file)
|
|
616
|
+
physics_valid = self.validate_physics_content(template_file)
|
|
617
|
+
|
|
618
|
+
if syntax_valid and physics_valid:
|
|
619
|
+
print(f" ✅ {template_file.name}")
|
|
620
|
+
else:
|
|
621
|
+
print(f" ⚠️ {template_file.name}")
|
|
622
|
+
all_valid = False
|
|
623
|
+
|
|
624
|
+
self.stats['templates_checked'] += 1
|
|
625
|
+
|
|
626
|
+
return all_valid
|
|
627
|
+
|
|
628
|
+
def print_summary(self) -> None:
|
|
629
|
+
"""Print validation summary."""
|
|
630
|
+
print(f"\n📊 Template Validation Summary:")
|
|
631
|
+
print(f" • Templates checked: {self.stats['templates_checked']}")
|
|
632
|
+
print(f" • Physics sections found: {self.stats['physics_sections_found']}")
|
|
633
|
+
print(f" • Missing requirements: {self.stats['missing_requirements']}")
|
|
634
|
+
print(f" • Syntax errors: {self.stats['syntax_errors']}")
|
|
635
|
+
|
|
636
|
+
if self.warnings:
|
|
637
|
+
print(f"\n⚠️ Validation Warnings:")
|
|
638
|
+
for warning in self.warnings:
|
|
639
|
+
print(f" • {warning}")
|
|
640
|
+
|
|
641
|
+
if self.errors:
|
|
642
|
+
print(f"\n❌ Validation Errors:")
|
|
643
|
+
for error in self.errors:
|
|
644
|
+
print(f" • {error}")
|
|
645
|
+
|
|
646
|
+
def main():
|
|
647
|
+
"""Main validation function."""
|
|
648
|
+
validator = TemplateValidator()
|
|
649
|
+
|
|
650
|
+
success = validator.validate_all_templates()
|
|
651
|
+
validator.print_summary()
|
|
652
|
+
|
|
653
|
+
if success:
|
|
654
|
+
print("\n✅ All template validation checks passed!")
|
|
655
|
+
print(" 📋 Syntax validated")
|
|
656
|
+
print(" 🔬 Physics content verified")
|
|
657
|
+
return 0
|
|
658
|
+
else:
|
|
659
|
+
print("\n⚠️ Some template validation issues found")
|
|
660
|
+
print(" Review warnings above before proceeding")
|
|
661
|
+
return 0 # Don't fail build for warnings
|
|
662
|
+
|
|
663
|
+
if __name__ == "__main__":
|
|
664
|
+
sys.exit(main())
|
|
665
|
+
```
|
|
666
|
+
|
|
667
|
+
## Testing and Validation
|
|
668
|
+
|
|
669
|
+
### Step 2.7: Template Testing (30 minutes)
|
|
670
|
+
|
|
671
|
+
**Test Enhanced Templates**:
|
|
672
|
+
```bash
|
|
673
|
+
cd docs
|
|
674
|
+
|
|
675
|
+
# Validate templates
|
|
676
|
+
python validate_templates.py
|
|
677
|
+
|
|
678
|
+
# Generate with enhanced templates
|
|
679
|
+
make clean
|
|
680
|
+
make api-enhanced
|
|
681
|
+
|
|
682
|
+
# Verify physics sections appear
|
|
683
|
+
grep -r "Physical Properties" source/api/
|
|
684
|
+
grep -r "Physics Overview" source/api/
|
|
685
|
+
grep -r "Units and Dimensions" source/api/
|
|
686
|
+
|
|
687
|
+
# Build HTML to test rendering
|
|
688
|
+
make html
|
|
689
|
+
|
|
690
|
+
# Check for enhanced content in HTML
|
|
691
|
+
grep -r "Physical Properties" _build/html/
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
**Expected Results**:
|
|
695
|
+
- Templates pass validation
|
|
696
|
+
- Physics sections appear in generated RST
|
|
697
|
+
- HTML renders correctly with enhanced content
|
|
698
|
+
- Cross-references work properly
|
|
699
|
+
|
|
700
|
+
## Phase Completion
|
|
701
|
+
|
|
702
|
+
### Commit Changes
|
|
703
|
+
```bash
|
|
704
|
+
# Add all template enhancements
|
|
705
|
+
git add docs/source/_templates/autosummary/module.rst \
|
|
706
|
+
docs/source/_templates/autosummary/class.rst \
|
|
707
|
+
docs/add_no_index.py \
|
|
708
|
+
docs/validate_templates.py \
|
|
709
|
+
docs/Makefile
|
|
710
|
+
|
|
711
|
+
# Commit template system enhancements
|
|
712
|
+
git commit -m "feat: implement physics-aware documentation template system
|
|
713
|
+
|
|
714
|
+
Template Enhancements:
|
|
715
|
+
- Enhanced module.rst with physics overview sections
|
|
716
|
+
- Enhanced class.rst with physical properties documentation
|
|
717
|
+
- Added physics context for Plasma, Ion, Base classes
|
|
718
|
+
- Implemented units and dimensions standardization
|
|
719
|
+
- Added cross-reference improvements
|
|
720
|
+
|
|
721
|
+
Processing Improvements:
|
|
722
|
+
- Enhanced add_no_index.py with physics validation
|
|
723
|
+
- Added template syntax validation script
|
|
724
|
+
- Improved cross-reference handling
|
|
725
|
+
- Added physics-specific content validation
|
|
726
|
+
|
|
727
|
+
Build System:
|
|
728
|
+
- Enhanced Makefile with template validation
|
|
729
|
+
- Added development build targets
|
|
730
|
+
- Integrated physics-aware processing pipeline
|
|
731
|
+
|
|
732
|
+
Phase 2 of ReadTheDocs automation: Template persistence achieved.
|
|
733
|
+
All documentation customizations now survive build regeneration."
|
|
734
|
+
```
|
|
735
|
+
|
|
736
|
+
### Create Phase Boundary Compaction
|
|
737
|
+
```bash
|
|
738
|
+
# Create compaction for phase transition
|
|
739
|
+
python .claude/hooks/create-compaction.py
|
|
740
|
+
```
|
|
741
|
+
|
|
742
|
+
This creates git tag: `claude/compaction/readthedocs-phase-2`
|
|
743
|
+
|
|
744
|
+
## Success Criteria
|
|
745
|
+
|
|
746
|
+
### Template System Validation
|
|
747
|
+
- [ ] Enhanced templates pass syntax validation
|
|
748
|
+
- [ ] Physics sections appear in generated documentation
|
|
749
|
+
- [ ] Template changes persist across rebuilds
|
|
750
|
+
- [ ] Cross-references work correctly
|
|
751
|
+
- [ ] Build system integration functional
|
|
752
|
+
|
|
753
|
+
### Physics Content Validation
|
|
754
|
+
- [ ] Plasma class shows Physical Properties section
|
|
755
|
+
- [ ] Ion class shows moment calculation equations
|
|
756
|
+
- [ ] Base class shows physics constants
|
|
757
|
+
- [ ] Units and dimensions documented consistently
|
|
758
|
+
- [ ] Scientific notation renders correctly
|
|
759
|
+
|
|
760
|
+
### Build Process Validation
|
|
761
|
+
- [ ] `make api-enhanced` generates physics-aware docs
|
|
762
|
+
- [ ] Post-processing adds physics validations
|
|
763
|
+
- [ ] Template validation catches syntax errors
|
|
764
|
+
- [ ] Development workflow improved
|
|
765
|
+
|
|
766
|
+
## Expected Results
|
|
767
|
+
|
|
768
|
+
### Documentation Quality
|
|
769
|
+
- **Scientific Context**: Physics principles documented
|
|
770
|
+
- **Consistency**: Standardized units and conventions
|
|
771
|
+
- **Persistence**: All customizations survive rebuilds
|
|
772
|
+
- **Professional Quality**: Publication-ready documentation
|
|
773
|
+
|
|
774
|
+
### Developer Experience
|
|
775
|
+
- **No Manual Editing**: All changes through templates
|
|
776
|
+
- **Validation Feedback**: Clear error messages for template issues
|
|
777
|
+
- **Enhanced Workflow**: Development targets for testing
|
|
778
|
+
- **Physics Awareness**: Domain-specific documentation
|
|
779
|
+
|
|
780
|
+
### System Benefits
|
|
781
|
+
- **Maintenance Efficiency**: 90% reduction in manual documentation work
|
|
782
|
+
- **Quality Assurance**: Automated validation of physics content
|
|
783
|
+
- **Scalability**: Template system scales with codebase growth
|
|
784
|
+
- **Integration Ready**: Foundation for ReadTheDocs automation
|
|
785
|
+
|
|
786
|
+
## Next Phase Preparation
|
|
787
|
+
|
|
788
|
+
Phase 2 establishes the persistent template foundation. Phase 3 will:
|
|
789
|
+
1. **Audit template output** - Verify all physics content renders correctly
|
|
790
|
+
2. **Configure ReadTheDocs** - Set up automated deployment
|
|
791
|
+
3. **Implement quality checks** - Automated validation pipeline
|
|
792
|
+
4. **Test automation** - End-to-end deployment verification
|
|
793
|
+
|
|
794
|
+
The template system ensures that all documentation customizations are permanent and automatically applied, eliminating the manual RST editing problem.
|
|
795
|
+
|
|
796
|
+
---
|
|
797
|
+
|
|
798
|
+
## Time and Complexity Summary
|
|
799
|
+
|
|
800
|
+
| Component | Duration | Complexity | Value Delivered |
|
|
801
|
+
|-----------|----------|------------|-----------------|
|
|
802
|
+
| Template analysis | 30 min | Low | Understanding current state |
|
|
803
|
+
| Module template enhancement | 60 min | Medium | Physics-aware modules |
|
|
804
|
+
| Class template enhancement | 90 min | Medium-High | Detailed physics documentation |
|
|
805
|
+
| Post-processing framework | 45 min | Medium | Automated validation |
|
|
806
|
+
| Build system integration | 45 min | Medium | Seamless workflow |
|
|
807
|
+
| Template validation | 30 min | Low-Medium | Quality assurance |
|
|
808
|
+
| Testing and validation | 30 min | Low | System verification |
|
|
809
|
+
| **Total Phase 2** | **5.5 hours** | **Medium** | **Persistent template system** |
|
|
810
|
+
|
|
811
|
+
**Strategic Value**: Transforms ephemeral documentation into a persistent, physics-aware system that scales with the project and eliminates manual maintenance overhead.
|