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_CHECK
for efficient sparse matrix NaN checkingsparse_or_structured_prototype
for sparse matrix detectionmake_sparse
for matrix conversion to sparse formatcondition_number
specialized for sparse matricesmaybe_pinv\!\!_workspace
for sparse pseudo-inverse operationsmaybe_symmetric
optimized for sparse matrices3. Fixed Extension Dependencies
AbstractSparseMatrix
Matrix(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_CHECK
sparse_or_structured_prototype
make_sparse
condition_number
maybe_pinv\!\!_workspace
maybe_symmetric
Usage 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