conda-forge / conda-forge/numpy-feedstock
linalg.eigh incorrect results for complex data on osx-arm64
- Dominant language
- Shell
- Stars
- 10
- Forks
- 52
- Avg merge
- 4h 45m
- Merged PRs (30d)
- 5
Description
### Solution to issue cannot be found in the documentation.
- [X] I checked the documentation.
### Issue
On osx-arm64 with numpy==1.24 installed from conda-forge, `np.linalg.eigh` produces incorrect results for complex data types:
```python
import numpy as np
d = 3
A = np.random.randn(d, d) + 1j * np.random.randn(d, d)
A = (A + A.conj().T)
el, ev = np.linalg.eigh(A)
# following should all be close to zero
print(np.linalg.norm(np.identity(d) - (ev @ ev.conj().T)))
# 4.115852147734368
print(np.linalg.norm(np.identity(d) - (ev.conj().T @ ev)))
# 4.115852147734368
print(np.linalg.norm(A - (ev @ np.diag(el) @ ev.conj().T)))
# 11.555496471473255
```
Other linalg such as svd appears to be working (though I haven't checked exhaustively).
I have checked this with:
- `blas=*=acclerate`
- `blas=*=netlib`
(Can't check with `blas=*=openblas` as this doesn't appear to work more generally)
Using `numpy` from pypi the code is working fine. Thus raising the issue here assuming it is something to do with the linked lapack, but apologies if this should be in the main `numpy` repo.
Possibly related to [#21950](https://github.com/numpy/numpy/issues/21950), thought the issue here is not simply normalization of the eigenvectors.
### Installed packages
```shell
# packages in environment at /Users/johnnie/conda/envs/numpy-latest:
#
# Name Version Build Channel
bzip2 1.0.8 h620ffc9_4
ca-certificates 2022.10.11 hca03da5_0
certifi 2022.9.24 py311hca03da5_0
libblas 3.9.0 1_h9886b1c_netlib
libcblas 3.9.0 1_h9886b1c_netlib
libcxx 14.0.6 h848a8c0_0
libffi 3.4.2 hca03da5_6
libgfortran 5.0.0 11_3_0_hca03da5_28
libgfortran5 11.3.0 h009349e_28
liblapack 3.9.0 1_h9886b1c_netlib
libsqlite 3.40.0 h76d750c_0 conda-forge
libzlib 1.2.13 h03a7124_4 conda-forge
llvm-openmp 14.0.6 hc6e5704_0
ncurses 6.3 h1a28f6b_3
numpy 1.24.1 py311ha92fb03_0 conda-forge
openssl 3.0.7 h03a7124_1 conda-forge
pip 22.2.2 py311hca03da5_0
python 3.11.0 h3ba56d0_1_cpython conda-forge
python_abi 3.11 3_cp311 conda-forge
readline 8.2 h1a28f6b_0
setuptools 65.5.0 py311hca03da5_0
tk 8.6.12 hb8d0fd4_0
tzdata 2022g h04d1e81_0
wheel 0.37.1 pyhd3eb1b0_0
xz 5.2.8 h80987f9_0
zlib 1.2.13 h03a7124_4 conda-forge
```
### Environment info
```shell
active environment : numpy-latest
active env location : /Users/johnnie/conda/envs/numpy-latest
shell level : 2
user config file : /Users/johnnie/.condarc
populated config files : /Users/johnnie/.condarc
conda version : 22.11.1
conda-build version : not installed
python version : 3.9.15.final.0
virtual packages : __archspec=1=arm64
__osx=13.1=0
__unix=0=0
base environment : /Users/johnnie/conda (writable)
conda av data dir : /Users/johnnie/conda/etc/conda
conda av metadata url : None
channel URLs : https://repo.anaconda.com/pkgs/main/osx-arm64
https://repo.anaconda.com/pkgs/main/noarch
https://repo.anaconda.com/pkgs/r/osx-arm64
https://repo.anaconda.com/pkgs/r/noarch
https://conda.anaconda.org/conda-forge/osx-arm64
https://conda.anaconda.org/conda-forge/noarch
package cache : /Users/johnnie/conda/pkgs
/Users/johnnie/.conda/pkgs
envs directories : /Users/johnnie/conda/envs
/Users/johnnie/.conda/envs
platform : osx-arm64
user-agent : conda/22.11.1 requests/2.28.1 CPython/3.9.15 Darwin/22.2.0 OSX/13.1
UID:GID : 501:20
netrc file : None
offline mode : False
```
Contributor guide
Research direction
Start by reproducing the np.linalg.eigh example in an osx-arm64 conda-forge environment, then compare the accelerate and netlib BLAS/LAPACK configurations with the working PyPI installation. Investigate the linked LAPACK behavior and verify completion when the eigenvectors are unitary and the reconstruction residuals are near zero.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- numpy, python
- Domain
- build-system
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100