Skip to content

Conversation

@polvalente
Copy link
Contributor

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:

  • Add EXLA custom call for CUDA
  • Add custom grad

- 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).
@polvalente polvalente self-assigned this Nov 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants