Skip to content

3 tests failed on aarch64 #156

Description

@ggardet

Error log from openSUSE Tumbleweed aarch64:

[  572s] =================================== FAILURES ===================================
[  572s] ___________________________ test_ab08nX.test_ab08nd ____________________________
[  572s] 
[  572s] self = <slycot.tests.test_ab08n.test_ab08nX testMethod=test_ab08nd>
[  572s] 
[  572s]     def test_ab08nd(self):
[  572s]         "Test Construct regular pencil for real matrices"
[  572s] >       self.ab08nX(analysis.ab08nd, self.A, self.B, self.C, self.D)
[  572s] 
[  572s] ../../BUILDROOT/python-slycot-0.4.0.0-4.4.aarch64/usr/lib64/python3.9/site-packages/slycot/tests/test_ab08n.py:73: 
[  572s] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
[  572s] 
[  572s] self = <slycot.tests.test_ab08n.test_ab08nX testMethod=test_ab08nd>
[  572s] ab08fun = <function ab08nd at 0xffffa682c1f0>
[  572s] A = array([[ 1.,  0.,  0.,  0.,  0.,  0.],
[  572s]        [ 0.,  1.,  0.,  0.,  0.,  0.],
[  572s]        [ 0.,  0.,  3.,  0.,  0.,  0.],
[  572s]        [ 0.,  0.,  0., -4.,  0.,  0.],
[  572s]        [ 0.,  0.,  0.,  0., -1.,  0.],
[  572s]        [ 0.,  0.,  0.,  0.,  0.,  3.]])
[  572s] B = array([[ 0., -1.],
[  572s]        [-1.,  0.],
[  572s]        [ 1., -1.],
[  572s]        [ 0.,  0.],
[  572s]        [ 0.,  1.],
[  572s]        [-1., -1.]])
[  572s] C = array([[1., 0., 0., 1., 0., 0.],
[  572s]        [0., 1., 0., 1., 0., 1.],
[  572s]        [0., 0., 1., 0., 0., 1.]])
[  572s] D = array([[0., 0.],
[  572s]        [0., 0.],
[  572s]        [0., 0.]])
[  572s] 
[  572s]     def ab08nX(self, ab08fun, A, B, C, D):
[  572s]         n = 6
[  572s]         m = 2
[  572s]         p = 3
[  572s]         # Check the observability and compute the ordered set of
[  572s]         # the observability indices (call the routine with M = 0).
[  572s]         out = ab08fun(n, 0, p, A, B, C, D)
[  572s]         nu, rank, dinfz, nkror, nkrol, infz, kronr, kronl, Af, Bf = out[:10]
[  572s]     
[  572s]         assert_equal(kronl[:nkrol], np.array([1, 2, 2]))
[  572s]         assert_equal(n-nu, 5)
[  572s]         assert_allclose(Af[:nu, :nu], np.array([[-1.]]))
[  572s]         # Check the controllability and compute the ordered set of
[  572s]         # the controllability indices (call the routine with P = 0)
[  572s]         out = ab08fun(n, m, 0, A, B, C, D)
[  572s]         nu, rank, dinfz, nkror, nkrol, infz, kronr, kronl, Af, Bf = out[:10]
[  572s]         assert_equal(kronr[:nkror], np.array([2, 3]))
[  572s]         assert_equal(n-nu, 5)
[  572s]         assert_allclose(Af[:nu, :nu], np.array([[-4.]]))
[  572s]         # Compute the structural invariants of the given system.
[  572s]         out = ab08fun(n, m, p, A, B, C, D)
[  572s]         nu, rank, dinfz, nkror, nkrol, infz, kronr, kronl, Af, Bf = out[:10]
[  572s]         assert_equal(nu, 2)
[  572s]         # Compute the invariant zeros of the given system.
[  572s]         w = eig(Af[:nu, :nu], Bf[:nu, :nu], left=False, right=False)
[  572s]         w_ref = np.array([-2., 1.])
[  572s] >       assert_allclose(self.normalize(w), self.normalize(w_ref))
[  572s] E       AssertionError: 
[  572s] E       Not equal to tolerance rtol=1e-07, atol=0
[  572s] E       
[  572s] E       x and y nan location mismatch:
[  572s] E        x: array([nan+nanj, nan+nanj])
[  572s] E        y: array([ 1. , -0.5])
[  572s] 
[  572s] ../../BUILDROOT/python-slycot-0.4.0.0-4.4.aarch64/usr/lib64/python3.9/site-packages/slycot/tests/test_ab08n.py:62: AssertionError
[  572s] _________________________ test_example[ab08nd_example] _________________________
[  572s] 
[  572s] examplefun = <function ab08nd_example at 0xffff9c4f8af0>
[  572s] capsys = <_pytest.capture.CaptureFixture object at 0xffff9c494670>
[  572s] recwarn = WarningsRecorder(record=True)
[  572s] 
[  572s]     @pytest.mark.parametrize('examplefun', examplefunctions)
[  572s]     #ignore numpy ABI change warnings https://github.com/numpy/numpy/pull/432
[  572s]     @pytest.mark.filterwarnings("ignore:numpy.dtype size changed")
[  572s]     @pytest.mark.filterwarnings("ignore:numpy.ufunc size changed")
[  572s]     def test_example(examplefun, capsys, recwarn):
[  572s]         """
[  572s]         Test the examples.
[  572s]     
[  572s]         Test that all the examples work, produce some (unchecked) output but no
[  572s]         exceptions or warnings.
[  572s]         """
[  572s]         examplefun()
[  572s]         captured = capsys.readouterr()
[  572s]     
[  572s]         # fail for first in order
[  572s]         failconditions = [
[  572s]             ((not len(captured.out) > 0), "Example {} did not print any results\n"),
[  572s]             (captured.err, "Example {} wrote to stderr\n"),
[  572s]             (check_warn(recwarn, examplefun), "Example {} produced a warning.\n")]
[  572s]         for failed, msgfmt  in failconditions:
[  572s]             if failed:
[  572s] >               pytest.fail(msgfmt.format(examplefun.__name__) +
[  572s]                             "Captured output:\n{}\n"
[  572s]                             "Captured stderr:\n{}\n"
[  572s]                             "Captured warnings:\n{}\n"
[  572s]                             "".format(captured.out,
[  572s]                                       captured.err,
[  572s]                                       [w.message for w in recwarn]))
[  572s] E               Failed: Example ab08nd_example produced a warning.
[  572s] E               Captured output:
[  572s] E               --- Example for ab08nd ---
[  572s] E               The finite invariant zeros are
[  572s] E               [nan+nanj nan+nanj]
[  572s] E               
[  572s] E               Captured stderr:
[  572s] E               
[  572s] E               Captured warnings:
[  572s] E               [RuntimeWarning('invalid value encountered in true_divide')]
[  572s] 
[  572s] ../../BUILDROOT/python-slycot-0.4.0.0-4.4.aarch64/usr/lib64/python3.9/site-packages/slycot/tests/test_examples.py:54: Failed
[  572s] _______________________ test_tb05ad.test_tb05ad_balance ________________________
[  572s] 
[  572s] self = <slycot.tests.test_tb05ad.test_tb05ad testMethod=test_tb05ad_balance>
[  572s] 
[  572s]     def test_tb05ad_balance(self):
[  572s]         """Test balancing in tb05ad.
[  572s]     
[  572s]         Tests for the cause of the problem reported in issue #11
[  572s]         balancing permutations were not correctly applied to the
[  572s]         C and D matrix.
[  572s]         """
[  572s]     
[  572s]         # find a good test case. Some sparsity,
[  572s]         # some zero eigenvalues, some non-zero eigenvalues,
[  572s]         # and proof that the 1st step, with dgebal, does some
[  572s]         # permutation and some scaling
[  572s]         crit = False
[  572s]         n = 8
[  572s]         while not crit:
[  572s]             A = np.random.randn(n, n)
[  572s]             A[np.random.uniform(size=(n, n)) > 0.35] = 0.0
[  572s]     
[  572s] >           Aeig = eig(A)[0]
[  572s] 
[  572s] ../../BUILDROOT/python-slycot-0.4.0.0-4.4.aarch64/usr/lib64/python3.9/site-packages/slycot/tests/test_tb05ad.py:208: 
[  572s] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
[  572s] /usr/lib64/python3.9/site-packages/scipy/linalg/decomp.py:247: in eig
[  572s]     _check_info(info, 'eig algorithm (geev)',
[  572s] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
[  572s] 
[  572s] info = 8, driver = 'eig algorithm (geev)'
[  572s] positive = 'did not converge (only eigenvalues with order >= %d have converged)'
[  572s] 
[  572s]     def _check_info(info, driver, positive='did not converge (LAPACK info=%d)'):
[  572s]         """Check info return value."""
[  572s]         if info < 0:
[  572s]             raise ValueError('illegal value in argument %d of internal %s'
[  572s]                              % (-info, driver))
[  572s]         if info > 0 and positive:
[  572s] >           raise LinAlgError(("%s " + positive) % (driver, info,))
[  572s] E           numpy.linalg.LinAlgError: eig algorithm (geev) did not converge (only eigenvalues with order >= 8 have converged)
[  572s] 
[  572s] /usr/lib64/python3.9/site-packages/scipy/linalg/decomp.py:1356: LinAlgError

Activity

  1. changed the title [-]Test[/-] [+]3 tests failed on aarch64[/+] on Jun 11, 2021
  2. bnavigator commented on Jun 11, 2021

    @bnavigator
    Collaborator

    Hi @ggardet,

    I am the openSUSE maintainer of python-slycot myself, but I tend to ignore the ARM and PowerPC build failures of the rpm package, sorry.

    Unless we are testing with numerically unfit matrices here (haven't checked), I think it is a problem with the BLAS/LAPACK (openBLAS) setup on openSUSE aarch64. The fact that test_tb05ad_balance fails on scipy.linalg.eig without any data from the SLICOT Fortran part, supports this theory. The problem might directly affect other packages in the numpy/scipy ecosystem, too.

  3. bnavigator commented on Oct 28, 2021

    @bnavigator
    Collaborator

    The openSUSE aarch64 tests stopped to fail on July 20 without any change in Slycot. I guess something in the mentioned libraries has changed.

  4. bnavigator commented on Oct 28, 2021

    @bnavigator
    Collaborator

    openBLAS got updated to 0.3.16 on openSUSE on the same day. That must have been the cause.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions