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,451 @@
|
|
|
1
|
+
Numerical Stability Guide
|
|
2
|
+
=========================
|
|
3
|
+
|
|
4
|
+
SolarWindPy performs complex plasma physics calculations that require careful attention
|
|
5
|
+
to numerical stability and precision. This guide helps users understand potential
|
|
6
|
+
numerical limitations and implement robust analysis procedures.
|
|
7
|
+
|
|
8
|
+
.. important::
|
|
9
|
+
Numerical stability is critical for scientific accuracy. Always validate
|
|
10
|
+
input parameters and verify results are within expected physical ranges.
|
|
11
|
+
|
|
12
|
+
Understanding Numerical Limitations
|
|
13
|
+
====================================
|
|
14
|
+
|
|
15
|
+
Floating-Point Precision
|
|
16
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
17
|
+
|
|
18
|
+
SolarWindPy uses double-precision floating-point arithmetic (64-bit) for all
|
|
19
|
+
physics calculations, providing approximately 15-17 decimal digits of precision.
|
|
20
|
+
|
|
21
|
+
**Precision Considerations:**
|
|
22
|
+
- Calculations maintain accuracy for typical solar wind parameter ranges
|
|
23
|
+
- Extreme values (very large or very small) may experience precision loss
|
|
24
|
+
- Repeated operations can accumulate rounding errors
|
|
25
|
+
|
|
26
|
+
**Recommended Parameter Ranges:**
|
|
27
|
+
|
|
28
|
+
============================== ==================== ========================
|
|
29
|
+
Parameter Reliable Range Precision Notes
|
|
30
|
+
============================== ==================== ========================
|
|
31
|
+
Temperature (K) 1e3 - 1e8 Full precision maintained
|
|
32
|
+
Density (kg/m³) 1e-25 - 1e-15 Below 1e-25 may be unstable
|
|
33
|
+
Magnetic Field (nT) 0.1 - 1000 Near-zero values problematic
|
|
34
|
+
Velocity (m/s) 1e2 - 1e6 Relativistic speeds not supported
|
|
35
|
+
============================== ==================== ========================
|
|
36
|
+
|
|
37
|
+
Common Numerical Issues
|
|
38
|
+
=======================
|
|
39
|
+
|
|
40
|
+
Physics-Breaking Edge Cases
|
|
41
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
42
|
+
|
|
43
|
+
**Zero Density Singularities (CRITICAL)**
|
|
44
|
+
Alfvén speed calculations become infinite when plasma density approaches zero.
|
|
45
|
+
|
|
46
|
+
.. danger::
|
|
47
|
+
Code: ``rho.pow(-0.5)`` produces ``inf`` when ``rho = 0``
|
|
48
|
+
|
|
49
|
+
**Impact**: Infinite Alfvén speeds propagate through all MHD calculations
|
|
50
|
+
|
|
51
|
+
**Solution**: Always validate ``density > minimum_threshold`` before calculation
|
|
52
|
+
|
|
53
|
+
.. code-block:: python
|
|
54
|
+
|
|
55
|
+
# UNSAFE: Can produce infinite results
|
|
56
|
+
alfven_speed = plasma.alfven_speed()
|
|
57
|
+
|
|
58
|
+
# SAFE: With density validation
|
|
59
|
+
min_density = 1e-23 # kg/m³
|
|
60
|
+
valid_density = plasma.density.sum(axis=1) > min_density
|
|
61
|
+
alfven_speed = plasma.alfven_speed()[valid_density]
|
|
62
|
+
|
|
63
|
+
**Negative Thermal Energy (CRITICAL)**
|
|
64
|
+
Thermal speed calculations fail catastrophically with negative temperatures.
|
|
65
|
+
|
|
66
|
+
.. danger::
|
|
67
|
+
Code: ``temperature.pow(0.5)`` produces ``NaN`` when ``temperature < 0``
|
|
68
|
+
|
|
69
|
+
**Impact**: NaN thermal speeds invalidate pressure and temperature analysis
|
|
70
|
+
|
|
71
|
+
**Solution**: Validate ``temperature > 0`` before all thermal calculations
|
|
72
|
+
|
|
73
|
+
.. code-block:: python
|
|
74
|
+
|
|
75
|
+
# UNSAFE: Can produce NaN results
|
|
76
|
+
thermal_speed = plasma.thermal_speed()
|
|
77
|
+
|
|
78
|
+
# SAFE: With temperature validation
|
|
79
|
+
valid_temp = plasma.temperature > 0
|
|
80
|
+
thermal_speed = plasma.thermal_speed()[valid_temp]
|
|
81
|
+
|
|
82
|
+
Precision Loss Patterns
|
|
83
|
+
~~~~~~~~~~~~~~~~~~~~~~~
|
|
84
|
+
|
|
85
|
+
**Catastrophic Cancellation**
|
|
86
|
+
Occurs when subtracting nearly equal large numbers, losing significant digits.
|
|
87
|
+
|
|
88
|
+
.. warning::
|
|
89
|
+
Vector magnitude calculations may lose precision for nearly parallel vectors:
|
|
90
|
+
|
|
91
|
+
``sqrt(x² + y² + z²)`` when components are very different magnitudes
|
|
92
|
+
|
|
93
|
+
.. code-block:: python
|
|
94
|
+
|
|
95
|
+
# Example: Problematic for small perpendicular components
|
|
96
|
+
import numpy as np
|
|
97
|
+
|
|
98
|
+
# Large parallel component with small perpendicular
|
|
99
|
+
x, y, z = 1e6, 1e-3, 1e-3
|
|
100
|
+
magnitude = np.sqrt(x**2 + y**2 + z**2)
|
|
101
|
+
# May lose precision in small components
|
|
102
|
+
|
|
103
|
+
**Scale-Dependent Errors**
|
|
104
|
+
Calculations become unreliable at parameter extremes.
|
|
105
|
+
|
|
106
|
+
.. warning::
|
|
107
|
+
- Very large values: Risk of overflow to infinity
|
|
108
|
+
- Very small values: Risk of underflow to zero
|
|
109
|
+
- Mixed scales: Loss of precision in smaller values
|
|
110
|
+
|
|
111
|
+
Parameter Validation Framework
|
|
112
|
+
==============================
|
|
113
|
+
|
|
114
|
+
Input Validation Procedures
|
|
115
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
116
|
+
|
|
117
|
+
**Step 1: Physical Bounds Checking**
|
|
118
|
+
|
|
119
|
+
.. code-block:: python
|
|
120
|
+
|
|
121
|
+
def validate_physics_parameters(plasma_data):
|
|
122
|
+
"""Validate plasma parameters for physics calculations."""
|
|
123
|
+
|
|
124
|
+
validation_mask = np.ones(len(plasma_data), dtype=bool)
|
|
125
|
+
warnings = []
|
|
126
|
+
|
|
127
|
+
# Temperature validation
|
|
128
|
+
temp_valid = plasma_data.temperature > 0
|
|
129
|
+
if not temp_valid.all():
|
|
130
|
+
invalid_count = (~temp_valid).sum()
|
|
131
|
+
warnings.append(f"{invalid_count} invalid temperatures (≤ 0)")
|
|
132
|
+
validation_mask &= temp_valid
|
|
133
|
+
|
|
134
|
+
# Density validation
|
|
135
|
+
min_density = 1e-23 # kg/m³
|
|
136
|
+
density_total = plasma_data.density.sum(axis=1)
|
|
137
|
+
density_valid = density_total > min_density
|
|
138
|
+
if not density_valid.all():
|
|
139
|
+
invalid_count = (~density_valid).sum()
|
|
140
|
+
warnings.append(f"{invalid_count} invalid densities (≤ {min_density})")
|
|
141
|
+
validation_mask &= density_valid
|
|
142
|
+
|
|
143
|
+
# Magnetic field validation
|
|
144
|
+
min_b_field = 0.1 # nT
|
|
145
|
+
b_magnitude = plasma_data.magnetic_field_magnitude()
|
|
146
|
+
b_field_valid = b_magnitude > min_b_field
|
|
147
|
+
if not b_field_valid.all():
|
|
148
|
+
invalid_count = (~b_field_valid).sum()
|
|
149
|
+
warnings.append(f"{invalid_count} invalid B-fields (≤ {min_b_field})")
|
|
150
|
+
validation_mask &= b_field_valid
|
|
151
|
+
|
|
152
|
+
return {
|
|
153
|
+
'valid_mask': validation_mask,
|
|
154
|
+
'warnings': warnings,
|
|
155
|
+
'valid_fraction': validation_mask.sum() / len(validation_mask)
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
**Step 2: Result Range Validation**
|
|
159
|
+
|
|
160
|
+
.. code-block:: python
|
|
161
|
+
|
|
162
|
+
def validate_calculation_results(results, calculation_type):
|
|
163
|
+
"""Validate physics calculation results are within expected ranges."""
|
|
164
|
+
|
|
165
|
+
expected_ranges = {
|
|
166
|
+
'thermal_speed': (1e3, 1e6), # m/s
|
|
167
|
+
'alfven_speed': (1e4, 1e6), # m/s
|
|
168
|
+
'plasma_frequency': (1e3, 1e5), # Hz
|
|
169
|
+
'plasma_beta': (1e-3, 1e2), # dimensionless
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if calculation_type not in expected_ranges:
|
|
173
|
+
return {'valid': True, 'warnings': []}
|
|
174
|
+
|
|
175
|
+
min_val, max_val = expected_ranges[calculation_type]
|
|
176
|
+
|
|
177
|
+
# Check for NaN/Inf values
|
|
178
|
+
finite_mask = np.isfinite(results)
|
|
179
|
+
if not finite_mask.all():
|
|
180
|
+
non_finite_count = (~finite_mask).sum()
|
|
181
|
+
return {
|
|
182
|
+
'valid': False,
|
|
183
|
+
'warnings': [f"{non_finite_count} non-finite results in {calculation_type}"]
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
# Check physical ranges
|
|
187
|
+
range_mask = (results >= min_val) & (results <= max_val)
|
|
188
|
+
if not range_mask.all():
|
|
189
|
+
out_of_range_count = (~range_mask).sum()
|
|
190
|
+
return {
|
|
191
|
+
'valid': False,
|
|
192
|
+
'warnings': [f"{out_of_range_count} {calculation_type} results outside expected range [{min_val}, {max_val}]"]
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return {'valid': True, 'warnings': []}
|
|
196
|
+
|
|
197
|
+
Error Detection and Recovery
|
|
198
|
+
============================
|
|
199
|
+
|
|
200
|
+
Systematic Error Checking
|
|
201
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
202
|
+
|
|
203
|
+
**NaN Detection and Handling**
|
|
204
|
+
|
|
205
|
+
.. code-block:: python
|
|
206
|
+
|
|
207
|
+
def handle_calculation_errors(results, calculation_name):
|
|
208
|
+
"""Systematic error detection and user guidance."""
|
|
209
|
+
|
|
210
|
+
# Check for NaN values
|
|
211
|
+
nan_mask = np.isnan(results)
|
|
212
|
+
if nan_mask.any():
|
|
213
|
+
nan_count = nan_mask.sum()
|
|
214
|
+
print(f"Warning: {nan_count} NaN values in {calculation_name}")
|
|
215
|
+
print("Possible causes:")
|
|
216
|
+
print("- Negative input values (temperature, energy)")
|
|
217
|
+
print("- Invalid mathematical operations (sqrt of negative)")
|
|
218
|
+
print("- Data corruption or measurement errors")
|
|
219
|
+
return results[~nan_mask] # Return only valid values
|
|
220
|
+
|
|
221
|
+
# Check for infinite values
|
|
222
|
+
inf_mask = np.isinf(results)
|
|
223
|
+
if inf_mask.any():
|
|
224
|
+
inf_count = inf_mask.sum()
|
|
225
|
+
print(f"Warning: {inf_count} infinite values in {calculation_name}")
|
|
226
|
+
print("Possible causes:")
|
|
227
|
+
print("- Division by zero (zero density in Alfvén speed)")
|
|
228
|
+
print("- Overflow in exponential calculations")
|
|
229
|
+
print("- Extreme parameter values")
|
|
230
|
+
return results[~inf_mask] # Return only finite values
|
|
231
|
+
|
|
232
|
+
return results
|
|
233
|
+
|
|
234
|
+
**Automatic Recovery Procedures**
|
|
235
|
+
|
|
236
|
+
.. code-block:: python
|
|
237
|
+
|
|
238
|
+
def robust_thermal_speed(plasma_data, recovery_mode='filter'):
|
|
239
|
+
"""Calculate thermal speeds with automatic error recovery."""
|
|
240
|
+
|
|
241
|
+
# Step 1: Input validation
|
|
242
|
+
valid_temp = plasma_data.temperature > 0
|
|
243
|
+
if not valid_temp.all():
|
|
244
|
+
print(f"Filtering {(~valid_temp).sum()} invalid temperatures")
|
|
245
|
+
if recovery_mode == 'filter':
|
|
246
|
+
plasma_data = plasma_data[valid_temp]
|
|
247
|
+
elif recovery_mode == 'replace':
|
|
248
|
+
# Replace invalid with median
|
|
249
|
+
plasma_data.temperature[~valid_temp] = plasma_data.temperature[valid_temp].median()
|
|
250
|
+
|
|
251
|
+
# Step 2: Calculation with error handling
|
|
252
|
+
try:
|
|
253
|
+
thermal_speeds = plasma_data.thermal_speed()
|
|
254
|
+
except Exception as e:
|
|
255
|
+
print(f"Calculation failed: {e}")
|
|
256
|
+
return None
|
|
257
|
+
|
|
258
|
+
# Step 3: Result validation
|
|
259
|
+
validation = validate_calculation_results(thermal_speeds, 'thermal_speed')
|
|
260
|
+
if not validation['valid']:
|
|
261
|
+
print("Result validation warnings:")
|
|
262
|
+
for warning in validation['warnings']:
|
|
263
|
+
print(f" - {warning}")
|
|
264
|
+
|
|
265
|
+
return thermal_speeds
|
|
266
|
+
|
|
267
|
+
Performance vs. Precision Trade-offs
|
|
268
|
+
=====================================
|
|
269
|
+
|
|
270
|
+
Optimization Considerations
|
|
271
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
272
|
+
|
|
273
|
+
**Memory Usage**
|
|
274
|
+
Large datasets may require precision trade-offs for memory efficiency.
|
|
275
|
+
|
|
276
|
+
.. code-block:: python
|
|
277
|
+
|
|
278
|
+
# Memory-efficient processing for large datasets
|
|
279
|
+
def process_large_dataset(plasma_data, chunk_size=10000):
|
|
280
|
+
"""Process large datasets in chunks to maintain precision."""
|
|
281
|
+
|
|
282
|
+
results = []
|
|
283
|
+
for i in range(0, len(plasma_data), chunk_size):
|
|
284
|
+
chunk = plasma_data[i:i+chunk_size]
|
|
285
|
+
|
|
286
|
+
# Validate chunk
|
|
287
|
+
validation = validate_physics_parameters(chunk)
|
|
288
|
+
if validation['valid_fraction'] < 0.9:
|
|
289
|
+
print(f"Chunk {i//chunk_size}: Low valid fraction ({validation['valid_fraction']:.2f})")
|
|
290
|
+
|
|
291
|
+
# Process valid data only
|
|
292
|
+
valid_chunk = chunk[validation['valid_mask']]
|
|
293
|
+
chunk_results = valid_chunk.thermal_speed()
|
|
294
|
+
results.append(chunk_results)
|
|
295
|
+
|
|
296
|
+
return pd.concat(results)
|
|
297
|
+
|
|
298
|
+
**Precision Preservation**
|
|
299
|
+
Maintain numerical accuracy in complex calculations.
|
|
300
|
+
|
|
301
|
+
.. code-block:: python
|
|
302
|
+
|
|
303
|
+
# Use appropriate algorithms for numerical stability
|
|
304
|
+
from scipy.special import logsumexp
|
|
305
|
+
|
|
306
|
+
# Instead of: exp(a) + exp(b) + exp(c) (overflow risk)
|
|
307
|
+
# Use: exp(logsumexp([a, b, c])) (numerically stable)
|
|
308
|
+
|
|
309
|
+
Best Practices Summary
|
|
310
|
+
======================
|
|
311
|
+
|
|
312
|
+
Input Validation Checklist
|
|
313
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
314
|
+
|
|
315
|
+
Before any physics calculation:
|
|
316
|
+
|
|
317
|
+
1. ✅ **Check for positive physical quantities**
|
|
318
|
+
- Temperature > 0 K
|
|
319
|
+
- Density > minimum_threshold
|
|
320
|
+
- Energy > 0
|
|
321
|
+
|
|
322
|
+
2. ✅ **Validate parameter ranges**
|
|
323
|
+
- Within instrument measurement ranges
|
|
324
|
+
- Consistent with physical expectations
|
|
325
|
+
- No extreme values that could cause overflow
|
|
326
|
+
|
|
327
|
+
3. ✅ **Apply quality filters**
|
|
328
|
+
- Remove flagged data points
|
|
329
|
+
- Filter measurement uncertainties
|
|
330
|
+
- Apply temporal consistency checks
|
|
331
|
+
|
|
332
|
+
Result Validation Checklist
|
|
333
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
334
|
+
|
|
335
|
+
After physics calculations:
|
|
336
|
+
|
|
337
|
+
1. ✅ **Check for mathematical errors**
|
|
338
|
+
- No NaN values in results
|
|
339
|
+
- No infinite values
|
|
340
|
+
- All results are finite numbers
|
|
341
|
+
|
|
342
|
+
2. ✅ **Validate physical ranges**
|
|
343
|
+
- Results within expected bounds
|
|
344
|
+
- Consistent with literature values
|
|
345
|
+
- Reasonable for solar wind conditions
|
|
346
|
+
|
|
347
|
+
3. ✅ **Cross-validate results**
|
|
348
|
+
- Compare with alternative methods
|
|
349
|
+
- Check internal consistency
|
|
350
|
+
- Verify with established benchmarks
|
|
351
|
+
|
|
352
|
+
Long-term Data Quality
|
|
353
|
+
~~~~~~~~~~~~~~~~~~~~~~
|
|
354
|
+
|
|
355
|
+
For ongoing analysis projects:
|
|
356
|
+
|
|
357
|
+
1. **Document validation procedures** used
|
|
358
|
+
2. **Track validation statistics** over time
|
|
359
|
+
3. **Monitor parameter distributions** for anomalies
|
|
360
|
+
4. **Implement automated quality checks** in analysis pipelines
|
|
361
|
+
|
|
362
|
+
Troubleshooting Guide
|
|
363
|
+
=====================
|
|
364
|
+
|
|
365
|
+
Common Error Messages
|
|
366
|
+
~~~~~~~~~~~~~~~~~~~~~
|
|
367
|
+
|
|
368
|
+
**"RuntimeWarning: invalid value encountered in sqrt"**
|
|
369
|
+
- **Cause**: Attempting square root of negative values
|
|
370
|
+
- **Solution**: Validate inputs are positive before calculation
|
|
371
|
+
- **Prevention**: Use temperature/energy validation functions
|
|
372
|
+
|
|
373
|
+
**"RuntimeWarning: divide by zero encountered"**
|
|
374
|
+
- **Cause**: Zero density in Alfvén speed or similar calculations
|
|
375
|
+
- **Solution**: Apply minimum density threshold
|
|
376
|
+
- **Prevention**: Systematic density validation
|
|
377
|
+
|
|
378
|
+
**"Results contain NaN values"**
|
|
379
|
+
- **Cause**: Invalid mathematical operations in calculation chain
|
|
380
|
+
- **Solution**: Trace back to identify source of invalid inputs
|
|
381
|
+
- **Prevention**: Comprehensive input validation framework
|
|
382
|
+
|
|
383
|
+
**"Results outside expected physical range"**
|
|
384
|
+
- **Cause**: Extreme parameter values or measurement errors
|
|
385
|
+
- **Solution**: Apply physical bounds checking and data filtering
|
|
386
|
+
- **Prevention**: Implement systematic data quality procedures
|
|
387
|
+
|
|
388
|
+
Getting Help
|
|
389
|
+
~~~~~~~~~~~~
|
|
390
|
+
|
|
391
|
+
If you encounter numerical stability issues:
|
|
392
|
+
|
|
393
|
+
1. **Check this guide** for common solutions
|
|
394
|
+
2. **Review input data** for measurement anomalies
|
|
395
|
+
3. **Consult physics literature** for expected parameter ranges
|
|
396
|
+
4. **Report persistent issues** to SolarWindPy developers with minimal reproducible examples
|
|
397
|
+
|
|
398
|
+
Advanced Topics
|
|
399
|
+
===============
|
|
400
|
+
|
|
401
|
+
Custom Validation Functions
|
|
402
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
403
|
+
|
|
404
|
+
For specialized analysis needs, implement custom validation:
|
|
405
|
+
|
|
406
|
+
.. code-block:: python
|
|
407
|
+
|
|
408
|
+
def custom_solar_wind_validation(plasma_data):
|
|
409
|
+
"""Custom validation for specific solar wind conditions."""
|
|
410
|
+
|
|
411
|
+
# Example: Validate for high-speed stream analysis
|
|
412
|
+
velocity_threshold = 500e3 # m/s
|
|
413
|
+
high_speed_mask = plasma_data.velocity.magnitude() > velocity_threshold
|
|
414
|
+
|
|
415
|
+
# Apply stricter validation for high-speed conditions
|
|
416
|
+
if high_speed_mask.any():
|
|
417
|
+
# Require higher precision for extreme conditions
|
|
418
|
+
min_density = 1e-22 # kg/m³ (stricter)
|
|
419
|
+
temp_range = (1e5, 1e7) # K (narrower range)
|
|
420
|
+
|
|
421
|
+
# Custom validation logic
|
|
422
|
+
# ...
|
|
423
|
+
|
|
424
|
+
return validation_results
|
|
425
|
+
|
|
426
|
+
Precision Monitoring
|
|
427
|
+
~~~~~~~~~~~~~~~~~~~~
|
|
428
|
+
|
|
429
|
+
Track numerical precision throughout analysis:
|
|
430
|
+
|
|
431
|
+
.. code-block:: python
|
|
432
|
+
|
|
433
|
+
def precision_monitor(calculation_func, *args, **kwargs):
|
|
434
|
+
"""Monitor numerical precision of calculations."""
|
|
435
|
+
|
|
436
|
+
# Perform calculation with monitoring
|
|
437
|
+
start_precision = np.finfo(np.float64).eps
|
|
438
|
+
|
|
439
|
+
result = calculation_func(*args, **kwargs)
|
|
440
|
+
|
|
441
|
+
# Estimate precision loss
|
|
442
|
+
relative_error = np.abs((result - expected_result) / expected_result)
|
|
443
|
+
precision_loss = relative_error / start_precision
|
|
444
|
+
|
|
445
|
+
if precision_loss.max() > 1e6:
|
|
446
|
+
print(f"Warning: Significant precision loss detected (factor of {precision_loss.max():.1e})")
|
|
447
|
+
|
|
448
|
+
return result, precision_loss
|
|
449
|
+
|
|
450
|
+
This guide provides the foundation for numerically robust plasma physics analysis
|
|
451
|
+
with SolarWindPy. Always prioritize validation and verification for scientific accuracy.
|