[Debian-med-packaging] Bug#1079439: Bug#1079439: python-biopython: autopkgtest stuck on riscv64

Reinhard Tartler siretart at debian.org
Sat Aug 24 19:42:09 BST 2024


On 2024-08-24 11:28, Étienne Mollier wrote:
> Hi Reinhard,
> 
> Reinhard Tartler, on 2024-08-24:
>> Actually, I've been able to compile pystack on the machine
>> (see https://github.com/bloomberg/pystack, and amazing tool)
>> and was able to get a trace of what the stuck process is doing:
> 
> This is a very handy tool and I need to recall about it when
> I'll next need it, probably too soon for my taste.  :)
> 
> […]
>>     (Python) File 
>> "/home/siretart/python-biopython/.pybuild/cpython3_3.12/build/Bio/Align/analysis.py",
>> line 484, in _yn00
>>         P = expm(Q * t)
>>     (Python) File
>> "/usr/lib/python3/dist-packages/scipy/linalg/_matfuncs.py", line 358, 
>> in
>> expm
>>         eAw = eAw @ eAw
>> 
>> I think that indicates that the problematic / looping test is indeed
>> Align_condonalign.py?
> 
> This is highly plausible.  It was a bold assumption from me to
> believe the standard output would be flushed to let us see
> whether the test started.

You know what, I tried something crazy. On the porterbox that I used to
reproduce it, I pressed Ctrl-C to interrupt the hanging process. This is 
the output:

======================================
(sid_riscv64-dchroot)siretart at ricci:~/python-biopython$ 
test_Align_codonalign ... Traceback (most recent call last):
   File 
"/home/siretart/python-biopython/.pybuild/cpython3_3.12/build/Tests/run_tests.py", 
line 343, in <module>
     errors = main(sys.argv[1:])
              ^^^^^^^^^^^^^^^^^^
   File 
"/home/siretart/python-biopython/.pybuild/cpython3_3.12/build/Tests/run_tests.py", 
line 187, in main
     return runner.run()
            ^^^^^^^^^^^^
   File 
"/home/siretart/python-biopython/.pybuild/cpython3_3.12/build/Tests/run_tests.py", 
line 324, in run
     ok = self.runTest(test)
          ^^^^^^^^^^^^^^^^^^
   File 
"/home/siretart/python-biopython/.pybuild/cpython3_3.12/build/Tests/run_tests.py", 
line 281, in runTest
     suite.run(result)
   File "/usr/lib/python3.12/unittest/suite.py", line 122, in run
     test(result)
   File "/usr/lib/python3.12/unittest/suite.py", line 84, in __call__
     return self.run(*args, **kwds)
            ^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3.12/unittest/suite.py", line 122, in run
     test(result)
   File "/usr/lib/python3.12/unittest/case.py", line 690, in __call__
     return self.run(*args, **kwds)
            ^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3.12/unittest/case.py", line 634, in run
     self._callTestMethod(testMethod)
   File "/usr/lib/python3.12/unittest/case.py", line 589, in 
_callTestMethod
     if method() is not None:
        ^^^^^^^^
   File 
"/home/siretart/python-biopython/.pybuild/cpython3_3.12/build/Tests/test_Align_codonalign.py", 
line 8242, in test_dn_ds
     dN, dS = calculate_dn_ds(pairwise_alignment, method="YN00")
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File 
"/home/siretart/python-biopython/.pybuild/cpython3_3.12/build/Bio/Align/analysis.py", 
line 88, in calculate_dn_ds
     return _yn00(codons1, codons2, codon_table)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File 
"/home/siretart/python-biopython/.pybuild/cpython3_3.12/build/Bio/Align/analysis.py", 
line 484, in _yn00
     P = expm(Q * t)
         ^^^^^^^^^^^
   File "/usr/lib/python3/dist-packages/scipy/linalg/_matfuncs.py", line 
358, in expm
     eAw = eAw @ eAw
     ^^^
KeyboardInterrupt
================================

Note the 'test_Align_codonalign ... ' part at the beginning. That means 
that python's
unittest library indeed wrote that to stdout before running the test, 
but because
of the missing '\n' (newline), it didn't get printed because the buffer 
didn't get
flushed yet. That's probably not something that could be fixed in the 
biopython
package, and would probably affect other python software equally as 
well.

> The stack trace is even pointing to
> something off in scipy/linalg/_matfunc.py, even more so as scipy
> is only suggested by python3-biopython, so it is not available
> in the lightweight variant of the autopkgtest, which does run
> the test_Align_codonalign.py but doesn't hangup.  And indeed,
> here is what I see in test_Align_codonalign.py, starting line
> 8235:
> 
>         try:
>             import scipy
>         except ImportError:
>             # Silently skip the rest of the test
>             return
> 
> My current conclusion is: it seems to me that Biopython's test
> suite revealed something off in SciPy specifically on Risc-V.

I tend to agree. Looking at a previous testrun where this test passes,
https://ci.debian.net/packages/p/python-biopython/testing/riscv64/50850003/
we see this output:

744s test_Align_clustal ... ok
778s test_Align_codonalign ... ok
779s test_Align_emboss ... ok
781s test_Align_exonerate ... ok

Look at the timestamps. There is no way that test_Align_codonalign 
actually
passes in less than 2s, in particular not on riscv64. How did it pass so 
fast?
I believe the code that you showed above could have something to do with 
this.

Maybe we can disable test_Align_codonalign, at least on riscv64, and see 
if
that improves things? -- I'm also skeptical about the "silent skip" 
above.
Maybe that code above could be changed to print on stderr to provide 
better
diagnostics?

best,
-rt



More information about the Debian-med-packaging mailing list