Convert SparseArrays to weak dependency/extension #667
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR converts SparseArrays from a direct dependency to a weak dependency loaded via extensions, reducing load time for users who don't need sparse matrix functionality. Enhanced with comprehensive functionality migration and CI fixes.
Changes Made
1. Main Package Cleanup
2. NonlinearSolveBase Extension System
NAN_CHECKfor efficient sparse matrix NaN checkingsparse_or_structured_prototypefor sparse matrix detectionmake_sparsefor matrix conversion to sparse formatcondition_numberspecialized for sparse matricesmaybe_pinv\!\!_workspacefor sparse pseudo-inverse operationsmaybe_symmetricoptimized for sparse matrices3. Fixed Extension Dependencies
AbstractSparseMatrixMatrix(B)instead of directvcat(B, D)4. CI and Test Fixes
Benefits
✅ Clean Architecture: SparseArrays only declared where actually used (NonlinearSolveBase)
✅ Complete Functionality Migration: All sparse-specific code moved to proper extensions
✅ Fixed Missing Dependencies: PETSc extension now correctly declares SparseArrays dependency
✅ Comprehensive Documentation: Detailed usage examples and integration guide
✅ No Breaking Changes: All existing functionality preserved
✅ CI Fixes: All test failures resolved
Technical Details
Extension Architecture
Functions Moved to Extension
NAN_CHECKsparse_or_structured_prototypemake_sparsecondition_numbermaybe_pinv\!\!_workspacemaybe_symmetricUsage Example
Load Time Analysis
Expected Behavior
Current Results
Test Results
Future Optimization Opportunities
The biggest remaining load time contributor is LinearSolve (~1.5s). Similar extension treatment of LinearSolve would provide the most significant load time improvements.
Related Issues
This addresses load time concerns by:
🤖 Generated with Claude Code