OpenBLAS: Eigenvalue errors in 0.3.20 and 0.3.21 on ARM / M1

Hello, I’m noticing some errors in results and nonconvergence in eigenvalue routines on mac M1. I’ve put together some simple test problems using numpy, scipy, and libopenblas builds from conda-forge:

import numpy as np
import numpy.linalg
import scipy.linalg

A = np.array([[0, 1j], [-1j, 0]])

test_unitary = lambda A: np.allclose(np.eye(2), A.T.conj() @ A)

w, v = numpy.linalg.eigh(A)
print("numpy.linalg.eigh:", test_unitary(v))

w, v = scipy.linalg.eigh(A)
print("scipy.linalg.eigh:", test_unitary(v))

w, v = numpy.linalg.eig(A)
print("numpy.linalg.eig:", test_unitary(v))

w, v = scipy.linalg.eig(A)
print("scipy.linalg.eig:", test_unitary(v))

B = np.eye(2)
w, v = scipy.linalg.eig(A, B)
print("scipy.linalg.eig (gen):", test_unitary(v))

With openblas 0.3.18, all of these tests pass on M1. With openblas 0.3.20 or 0.3.21, the numpy Hermitian test returns wrong results, and the scipy generalized non-Hermitian routine fails to converge. I wasn’t sure if I should bring this up on the scipy/numpy or any of the conda-forge repositories, but thought I’d start here. Any thoughts?

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 38 (18 by maintainers)

Most upvoted comments

curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh"
bash Mambaforge-$(uname)-$(uname -m).sh -b -p $HOME/mambaforge
source $HOME/mambaforge/bin/activate