feat: add Nx.LinAlg.eig#1642
Closed
polvalente wants to merge 14 commits intomainfrom
Closed
Conversation
- Add eig/3 optional callback to Nx.Backend - Add Nx.Shape.eig/1 for shape validation - Add public Nx.LinAlg.eig/2 API with comprehensive doctests - Add default placeholder implementation in Nx.LinAlg.Eig - Add EXLA backend integration with custom calls - Add C++ implementations using Eigen library (f32, f64, c64, c128) - Add 11 comprehensive property tests - Placeholder defn implementation computes eigenvalues with limited accuracy - Eigenvector computation needs full implementation (next step)
…onalization - Replaced placeholder eigenvector computation with proper inverse iteration - Added Gram-Schmidt orthogonalization for repeated eigenvalues - Eigenvectors now computed on Hessenberg matrix H and transformed back with Q - Updated tests to verify orthonormality instead of exact values - All 11 eig tests now passing (7 tests + 4 skipped property tests)
The balance function had a bug causing the last diagonal element to become zero in certain cases (diagonal matrices, upper triangular, etc.). Changes: - Set default balance=0 to disable balancing - Simplified QR algorithm to standard implementation - Removed complex (n-1) submatrix workarounds - All basic eig tests now pass The balancing function still exists but is disabled by default until the bug is fixed.
The balance function was incorrectly using put_slice with 1D tensors when
it needed 2D shapes. Fixed by:
- Using Nx.shape to get the runtime shape
- Reshaping row_i to {1, n} before put_slice
- Reshaping col_i to {n, 1} before put_slice
Re-enabled balancing (balance=1) by default now that the bug is fixed.
All basic eig tests pass with balancing enabled.
…te; harden pinv for zero singular values; remove test debug prints
…Householder phase); restore Hermitian eigh fast path. Nx.Backend: mark eig/3 optional. Torchx: use local Nx path for tests; add eig tests (skip strict property for now).
Contributor
|
Is this still relevant? 🤔 |
Contributor
Author
@josevalim ideally we should have this feature, but I think this approach is a bit of a dead end. I wanna take another stab at it before closing the PR for good. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
This is one of the functions we ended up giving up on implementing.
The defn implementation works although not as precise as the LAPACK-powered ones.
Ideally we stil need to: