# asking real part of a function crash the kernel

Hi

SageMath 8.8 notebook OS=W10

asking the real part of this function systematically crash the kernel with the message :

The kernel appears to have died. It will restart automatically.

n=var('n')
assume(n>=0)
assume(n,'integer')
a_n=1/20*(1/2*sqrt(5) + 1/2)^n*(11*sqrt(5) + 25) - 1/20*(-1/2*sqrt(5) + 1/2)^n*(11*sqrt(5) - 25) - 1/12*(1/2*I*sqrt(3) + 1/2)^n*(I*sqrt(3) + 3) - 1/12*(-1/2*I*sqrt(3) + 1/2)^n*(-I*sqrt(3) + 3)
show(a_n)
a_n.real_part()
#real_part(a_n)

edit retag close merge delete

this function for n>= 0 has no imaginary part

for i in (0..12) :
show(a_n(i).simplify_full())

( 2019-08-15 02:31:35 -0600 )edit

Have you tried it at the command prompt? In general it's good to isolate a problem from the specific environment in which it occurred, if possible.

( 2019-08-15 07:58:28 -0600 )edit

I tried it too, and I just had time to see segmentation fault and the command window crashed.

( 2019-08-15 10:20:20 -0600 )edit

Sort by ยป oldest newest most voted

I got

sage: n=var('n')
sage: assume(n>=0)
sage: assume(n,'integer')
sage: a_n=1/20*(1/2*sqrt(5) + 1/2)^n*(11*sqrt(5) + 25) - 1/20*(-1/2*sqrt(5) + 1/2)^n*(11*sqrt(5) - 25) - 1/12*
....: (1/2*I*sqrt(3) + 1/2)^n*(I*sqrt(3) + 3) - 1/12*(-1/2*I*sqrt(3) + 1/2)^n*(-I*sqrt(3) + 3)
sage: a_n.real_part()
------------------------------------------------------------------------
Unhandled SIGSEGV: A segmentation fault occurred.
This probably occurred because a *compiled* module has a bug
in it and is not properly wrapped with sig_on(), sig_off().
Python will now terminate.
------------------------------------------------------------------------
Segmentation fault (core dumped)


Will update my answer as I find out more, but obviously a segfault shouldn't happen here.

Confirmed on Linux and Windows. The segfault is coming from pynac. It seems to be specifically the assume(n, 'integer') part that does it. Without that it doesn't crash.

I spent a few minutes trying to narrow this down to a simpler example and got this

sage: n=var('n')
sage: assume(n, 'integer')
sage: (I^n).real_part()
<segfault>


It appears to go into an infinite recursion and eventually overflow the stack in

src/sagemath/sage/local/lib/libpynac.so.18(_ZNK5GiNaC5power9real_partEv+0x51)[0x7f7c45607bf1]


The correct answer for $\mathfrak{Re}[i^n]$ should be $\cos\left(\frac{\pi n}{2}\right)$ but I guess it's not that clever, and it certainly shouldn't crash...

If I don't stipulate that $n \in \mathbb{Z}$ then it does give the correct answer, sort of...

sage: n=var('n')
sage: (I^n).real_part()
cos(1/2*pi*real_part(n))*e^(-1/2*pi*imag_part(n))


This is now tracked at https://trac.sagemath.org/ticket/28357

more